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