1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -fast-isel-abort=1 -verify-machineinstrs -march=x86 -mattr=sse2 -no-integrated-as 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -fast-isel-abort=1 -verify-machineinstrs -mtriple=x86_64-apple-darwin10 -no-integrated-as 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; This tests very minimal fast-isel functionality. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32* @foo(i32* %p, i32* %q, i32** %z) nounwind { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker %r = load i32, i32* %p 9*9880d681SAndroid Build Coastguard Worker %s = load i32, i32* %q 10*9880d681SAndroid Build Coastguard Worker %y = load i32*, i32** %z 11*9880d681SAndroid Build Coastguard Worker br label %fast 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerfast: 14*9880d681SAndroid Build Coastguard Worker %t0 = add i32 %r, %s 15*9880d681SAndroid Build Coastguard Worker %t1 = mul i32 %t0, %s 16*9880d681SAndroid Build Coastguard Worker %t2 = sub i32 %t1, %s 17*9880d681SAndroid Build Coastguard Worker %t3 = and i32 %t2, %s 18*9880d681SAndroid Build Coastguard Worker %t4 = xor i32 %t3, 3 19*9880d681SAndroid Build Coastguard Worker %t5 = xor i32 %t4, %s 20*9880d681SAndroid Build Coastguard Worker %t6 = add i32 %t5, 2 21*9880d681SAndroid Build Coastguard Worker %t7 = getelementptr i32, i32* %y, i32 1 22*9880d681SAndroid Build Coastguard Worker %t8 = getelementptr i32, i32* %t7, i32 %t6 23*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "hello world", ""() 24*9880d681SAndroid Build Coastguard Worker br label %exit 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerexit: 27*9880d681SAndroid Build Coastguard Worker ret i32* %t8 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine void @bar(double* %p, double* %q) nounwind { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker %r = load double, double* %p 33*9880d681SAndroid Build Coastguard Worker %s = load double, double* %q 34*9880d681SAndroid Build Coastguard Worker br label %fast 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerfast: 37*9880d681SAndroid Build Coastguard Worker %t0 = fadd double %r, %s 38*9880d681SAndroid Build Coastguard Worker %t1 = fmul double %t0, %s 39*9880d681SAndroid Build Coastguard Worker %t2 = fsub double %t1, %s 40*9880d681SAndroid Build Coastguard Worker %t3 = fadd double %t2, 707.0 41*9880d681SAndroid Build Coastguard Worker br label %exit 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerexit: 44*9880d681SAndroid Build Coastguard Worker store double %t3, double* %q 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine i32 @cast() nounwind { 49*9880d681SAndroid Build Coastguard Workerentry: 50*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast i32 0 to i32 51*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine void @ptrtoint_i1(i8* %p, i1* %q) nounwind { 55*9880d681SAndroid Build Coastguard Worker %t = ptrtoint i8* %p to i1 56*9880d681SAndroid Build Coastguard Worker store i1 %t, i1* %q 57*9880d681SAndroid Build Coastguard Worker ret void 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Workerdefine i8* @inttoptr_i1(i1 %p) nounwind { 60*9880d681SAndroid Build Coastguard Worker %t = inttoptr i1 %p to i8* 61*9880d681SAndroid Build Coastguard Worker ret i8* %t 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Workerdefine i32 @ptrtoint_i32(i8* %p) nounwind { 64*9880d681SAndroid Build Coastguard Worker %t = ptrtoint i8* %p to i32 65*9880d681SAndroid Build Coastguard Worker ret i32 %t 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Workerdefine i8* @inttoptr_i32(i32 %p) nounwind { 68*9880d681SAndroid Build Coastguard Worker %t = inttoptr i32 %p to i8* 69*9880d681SAndroid Build Coastguard Worker ret i8* %t 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine void @trunc_i32_i8(i32 %x, i8* %p) nounwind { 73*9880d681SAndroid Build Coastguard Worker %tmp1 = trunc i32 %x to i8 74*9880d681SAndroid Build Coastguard Worker store i8 %tmp1, i8* %p 75*9880d681SAndroid Build Coastguard Worker ret void 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerdefine void @trunc_i16_i8(i16 signext %x, i8* %p) nounwind { 79*9880d681SAndroid Build Coastguard Worker %tmp1 = trunc i16 %x to i8 80*9880d681SAndroid Build Coastguard Worker store i8 %tmp1, i8* %p 81*9880d681SAndroid Build Coastguard Worker ret void 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine void @shl_i8(i8 %a, i8 %c, i8* %p) nounwind { 85*9880d681SAndroid Build Coastguard Worker %tmp = shl i8 %a, %c 86*9880d681SAndroid Build Coastguard Worker store i8 %tmp, i8* %p 87*9880d681SAndroid Build Coastguard Worker ret void 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Workerdefine void @mul_i8(i8 %a, i8* %p) nounwind { 91*9880d681SAndroid Build Coastguard Worker %tmp = mul i8 %a, 17 92*9880d681SAndroid Build Coastguard Worker store i8 %tmp, i8* %p 93*9880d681SAndroid Build Coastguard Worker ret void 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine void @load_store_i1(i1* %p, i1* %q) nounwind { 97*9880d681SAndroid Build Coastguard Worker %t = load i1, i1* %p 98*9880d681SAndroid Build Coastguard Worker store i1 %t, i1* %q 99*9880d681SAndroid Build Coastguard Worker ret void 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker@crash_test1x = external global <2 x i32>, align 8 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine void @crash_test1() nounwind ssp { 105*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x i32>, <2 x i32>* @crash_test1x, align 8 106*9880d681SAndroid Build Coastguard Worker %neg = xor <2 x i32> %tmp, <i32 -1, i32 -1> 107*9880d681SAndroid Build Coastguard Worker ret void 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.lifetime.start(i64, i8* nocapture) nounwind 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine i64* @life() nounwind { 113*9880d681SAndroid Build Coastguard Worker %a1 = alloca i64*, align 8 114*9880d681SAndroid Build Coastguard Worker %a2 = bitcast i64** %a1 to i8* 115*9880d681SAndroid Build Coastguard Worker call void @llvm.lifetime.start(i64 -1, i8* %a2) nounwind 116*9880d681SAndroid Build Coastguard Worker %a3 = load i64*, i64** %a1, align 8 117*9880d681SAndroid Build Coastguard Worker ret i64* %a3 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.donothing() readnone 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; CHECK: donada 123*9880d681SAndroid Build Coastguard Workerdefine void @donada() nounwind { 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker call void @llvm.donothing() 126*9880d681SAndroid Build Coastguard Worker ret void 127*9880d681SAndroid Build Coastguard Worker} 128