; RUN: llc < %s -mtriple=i686-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s declare i32 @test1a(i32) define i32 @test1(i32 %x) nounwind { ; CHECK-LABEL: test1: ; CHECK: andb $1, % %y = add i32 %x, -3 %t = call i32 @test1a(i32 %y) %s = mul i32 %t, 77 %z = trunc i32 %s to i1 br label %next next: ; preds = %0 %u = zext i1 %z to i32 %v = add i32 %u, 1999 br label %exit exit: ; preds = %next ret i32 %v } define void @test2(ptr %a) nounwind { entry: ; clang uses i8 constants for booleans, so we test with an i8 1. ; CHECK-LABEL: test2: ; CHECK: movzbl {{.*}} %eax ; CHECK-NEXT: xorb $1, %al ; CHECK-NEXT: testb $1 %tmp = load i8, ptr %a, align 1 %xor = xor i8 %tmp, 1 %tobool = trunc i8 %xor to i1 br i1 %tobool, label %if.then, label %if.end if.then: call void @test2(ptr null) br label %if.end if.end: ret void }