1 ; RUN: llc -mcpu=generic -mtriple=i686-unknown-unknown < %s | FileCheck %s 2 define i64 @test1(i32 %xx, i32 %test) nounwind { 3 %conv = zext i32 %xx to i64 4 %and = and i32 %test, 7 5 %sh_prom = zext i32 %and to i64 6 %shl = shl i64 %conv, %sh_prom 7 ret i64 %shl 8 ; CHECK-LABEL: test1: 9 ; CHECK: shll %cl, %eax 10 ; CHECK: shrl %edx 11 ; CHECK: xorb $31 12 ; CHECK: shrl %cl, %edx 13 } 14 15 define i64 @test2(i64 %xx, i32 %test) nounwind { 16 %and = and i32 %test, 7 17 %sh_prom = zext i32 %and to i64 18 %shl = shl i64 %xx, %sh_prom 19 ret i64 %shl 20 ; CHECK-LABEL: test2: 21 ; CHECK: shll %cl, %esi 22 ; CHECK: shrl %edx 23 ; CHECK: xorb $31 24 ; CHECK: shrl %cl, %edx 25 ; CHECK: orl %esi, %edx 26 ; CHECK: shll %cl, %eax 27 } 28 29 define i64 @test3(i64 %xx, i32 %test) nounwind { 30 %and = and i32 %test, 7 31 %sh_prom = zext i32 %and to i64 32 %shr = lshr i64 %xx, %sh_prom 33 ret i64 %shr 34 ; CHECK-LABEL: test3: 35 ; CHECK: shrl %cl, %esi 36 ; CHECK: leal (%edx,%edx), %eax 37 ; CHECK: xorb $31, %cl 38 ; CHECK: shll %cl, %eax 39 ; CHECK: orl %esi, %eax 40 ; CHECK: shrl %cl, %edx 41 } 42 43 define i64 @test4(i64 %xx, i32 %test) nounwind { 44 %and = and i32 %test, 7 45 %sh_prom = zext i32 %and to i64 46 %shr = ashr i64 %xx, %sh_prom 47 ret i64 %shr 48 ; CHECK-LABEL: test4: 49 ; CHECK: shrl %cl, %esi 50 ; CHECK: leal (%edx,%edx), %eax 51 ; CHECK: xorb $31, %cl 52 ; CHECK: shll %cl, %eax 53 ; CHECK: orl %esi, %eax 54 ; CHECK: sarl %cl, %edx 55 } 56 57 ; PR14668 58 define <2 x i64> @test5(<2 x i64> %A, <2 x i64> %B) { 59 %shl = shl <2 x i64> %A, %B 60 ret <2 x i64> %shl 61 ; CHECK: test5 62 ; CHECK: shl 63 ; CHECK: shldl 64 ; CHECK: shl 65 ; CHECK: shldl 66 } 67 68 ; PR16108 69 define i32 @test6() { 70 %x = alloca i32, align 4 71 %t = alloca i64, align 8 72 store i32 1, i32* %x, align 4 73 store i64 1, i64* %t, align 8 ;; DEAD 74 %load = load i32, i32* %x, align 4 75 %shl = shl i32 %load, 8 76 %add = add i32 %shl, -224 77 %sh_prom = zext i32 %add to i64 78 %shl1 = shl i64 1, %sh_prom 79 %cmp = icmp ne i64 %shl1, 4294967296 80 br i1 %cmp, label %if.then, label %if.end 81 82 if.then: ; preds = %entry 83 ret i32 1 84 85 if.end: ; preds = %entry 86 ret i32 0 87 88 ; CHECK-LABEL: test6: 89 ; CHECK-NOT: andb $31 90 ; CHECK: sete 91 ; CHECK: movzbl 92 ; CHECK: xorl $1 93 ; CHECK: orl 94 } 95