1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare i32 @test1a(i32) 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i32 %x) nounwind { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: andb $1, % 9*9880d681SAndroid Build Coastguard Worker %y = add i32 %x, -3 10*9880d681SAndroid Build Coastguard Worker %t = call i32 @test1a(i32 %y) 11*9880d681SAndroid Build Coastguard Worker %s = mul i32 %t, 77 12*9880d681SAndroid Build Coastguard Worker %z = trunc i32 %s to i1 13*9880d681SAndroid Build Coastguard Worker br label %next 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workernext: ; preds = %0 16*9880d681SAndroid Build Coastguard Worker %u = zext i1 %z to i32 17*9880d681SAndroid Build Coastguard Worker %v = add i32 %u, 1999 18*9880d681SAndroid Build Coastguard Worker br label %exit 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerexit: ; preds = %next 21*9880d681SAndroid Build Coastguard Worker ret i32 %v 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine void @test2(i8* %a) nounwind { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker; clang uses i8 constants for booleans, so we test with an i8 1. 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 28*9880d681SAndroid Build Coastguard Worker; CHECK: movb {{.*}} %al 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorb $1, %al 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: testb $1 31*9880d681SAndroid Build Coastguard Worker %tmp = load i8, i8* %a, align 1 32*9880d681SAndroid Build Coastguard Worker %xor = xor i8 %tmp, 1 33*9880d681SAndroid Build Coastguard Worker %tobool = trunc i8 %xor to i1 34*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %if.then, label %if.end 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerif.then: 37*9880d681SAndroid Build Coastguard Worker call void @test2(i8* null) 38*9880d681SAndroid Build Coastguard Worker br label %if.end 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerif.end: 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43