1; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=generic < %s | FileCheck %s 2 3define i32 @test_eq_1(<4 x i32> %A, <4 x i32> %B) { 4; CHECK-LABEL: test_eq_1: 5; CHECK: pcmpgtd %xmm0, %xmm1 6; CHECK-NEXT: pxor {{.*}}(%rip), %xmm1 7; CHECK: retq 8entry: 9 %cmp = icmp slt <4 x i32> %A, %B 10 %sext = sext <4 x i1> %cmp to <4 x i32> 11 %cmp1 = icmp eq <4 x i32> %sext, zeroinitializer 12 %0 = extractelement <4 x i1> %cmp1, i32 1 13 %1 = sext i1 %0 to i32 14 ret i32 %1 15} 16 17define i32 @test_ne_1(<4 x i32> %A, <4 x i32> %B) { 18; CHECK-LABEL: test_ne_1: 19; CHECK: pcmpgtd %xmm0, %xmm1 20; CHECK-NOT: pxor 21; CHECK: retq 22entry: 23 %cmp = icmp slt <4 x i32> %A, %B 24 %sext = sext <4 x i1> %cmp to <4 x i32> 25 %cmp1 = icmp ne <4 x i32> %sext, zeroinitializer 26 %0 = extractelement <4 x i1> %cmp1, i32 1 27 %1 = sext i1 %0 to i32 28 ret i32 %1 29} 30 31define i32 @test_le_1(<4 x i32> %A, <4 x i32> %B) { 32; CHECK-LABEL: test_le_1: 33; CHECK: movl $-1, %eax 34; CHECK-NEXT: retq 35entry: 36 %cmp = icmp slt <4 x i32> %A, %B 37 %sext = sext <4 x i1> %cmp to <4 x i32> 38 %cmp1 = icmp sle <4 x i32> %sext, zeroinitializer 39 %0 = extractelement <4 x i1> %cmp1, i32 1 40 %1 = sext i1 %0 to i32 41 ret i32 %1 42} 43 44define i32 @test_ge_1(<4 x i32> %A, <4 x i32> %B) { 45; CHECK-LABEL: test_ge_1: 46; CHECK: pcmpgtd %xmm0, %xmm1 47; CHECK: pxor {{.*}}(%rip), %xmm1 48; CHECK: retq 49entry: 50 %cmp = icmp slt <4 x i32> %A, %B 51 %sext = sext <4 x i1> %cmp to <4 x i32> 52 %cmp1 = icmp sge <4 x i32> %sext, zeroinitializer 53 %0 = extractelement <4 x i1> %cmp1, i32 1 54 %1 = sext i1 %0 to i32 55 ret i32 %1 56} 57 58define i32 @test_lt_1(<4 x i32> %A, <4 x i32> %B) { 59; CHECK-LABEL: test_lt_1: 60; CHECK: pcmpgtd %xmm0, %xmm1 61; CHECK-NOT: pxor 62; CHECK: retq 63entry: 64 %cmp = icmp slt <4 x i32> %A, %B 65 %sext = sext <4 x i1> %cmp to <4 x i32> 66 %cmp1 = icmp slt <4 x i32> %sext, zeroinitializer 67 %0 = extractelement <4 x i1> %cmp, i32 1 68 %1 = sext i1 %0 to i32 69 ret i32 %1 70} 71 72define i32 @test_gt_1(<4 x i32> %A, <4 x i32> %B) { 73; CHECK-LABEL: test_gt_1: 74; CHECK: xorl %eax, %eax 75; CHECK: retq 76entry: 77 %cmp = icmp slt <4 x i32> %A, %B 78 %sext = sext <4 x i1> %cmp to <4 x i32> 79 %cmp1 = icmp sgt <4 x i32> %sext, zeroinitializer 80 %0 = extractelement <4 x i1> %cmp1, i32 1 81 %1 = sext i1 %0 to i32 82 ret i32 %1 83} 84 85define i32 @test_eq_2(<4 x i32> %A, <4 x i32> %B) { 86; CHECK-LABEL: test_eq_2: 87; CHECK: pcmpgtd %xmm1, %xmm0 88; CHECK-NEXT: pxor {{.*}}(%rip), %xmm0 89; CHECK: retq 90entry: 91 %cmp = icmp slt <4 x i32> %B, %A 92 %sext = sext <4 x i1> %cmp to <4 x i32> 93 %cmp1 = icmp eq <4 x i32> %sext, zeroinitializer 94 %0 = extractelement <4 x i1> %cmp1, i32 1 95 %1 = sext i1 %0 to i32 96 ret i32 %1 97} 98 99define i32 @test_ne_2(<4 x i32> %A, <4 x i32> %B) { 100; CHECK-LABEL: test_ne_2: 101; CHECK: pcmpgtd %xmm1, %xmm0 102; CHECK-NOT: pxor 103; CHECK: retq 104entry: 105 %cmp = icmp slt <4 x i32> %B, %A 106 %sext = sext <4 x i1> %cmp to <4 x i32> 107 %cmp1 = icmp ne <4 x i32> %sext, zeroinitializer 108 %0 = extractelement <4 x i1> %cmp1, i32 1 109 %1 = sext i1 %0 to i32 110 ret i32 %1 111} 112 113define i32 @test_le_2(<4 x i32> %A, <4 x i32> %B) { 114; CHECK-LABEL: test_le_2: 115; CHECK: pcmpgtd %xmm1, %xmm0 116; CHECK: pxor {{.*}}(%rip), %xmm0 117; CHECK: retq 118entry: 119 %cmp = icmp slt <4 x i32> %B, %A 120 %sext = sext <4 x i1> %cmp to <4 x i32> 121 %cmp1 = icmp sle <4 x i32> zeroinitializer, %sext 122 %0 = extractelement <4 x i1> %cmp1, i32 1 123 %1 = sext i1 %0 to i32 124 ret i32 %1 125} 126 127define i32 @test_ge_2(<4 x i32> %A, <4 x i32> %B) { 128; CHECK-LABEL: test_ge_2: 129; CHECK: movl $-1, %eax 130; CHECK: retq 131entry: 132 %cmp = icmp slt <4 x i32> %B, %A 133 %sext = sext <4 x i1> %cmp to <4 x i32> 134 %cmp1 = icmp sge <4 x i32> zeroinitializer, %sext 135 %0 = extractelement <4 x i1> %cmp1, i32 1 136 %1 = sext i1 %0 to i32 137 ret i32 %1 138} 139 140define i32 @test_lt_2(<4 x i32> %A, <4 x i32> %B) { 141; CHECK-LABEL: test_lt_2: 142; CHECK: pcmpgtd %xmm1, %xmm0 143; CHECK-NOT: pxor 144; CHECK: retq 145entry: 146 %cmp = icmp slt <4 x i32> %B, %A 147 %sext = sext <4 x i1> %cmp to <4 x i32> 148 %cmp1 = icmp slt <4 x i32> zeroinitializer, %sext 149 %0 = extractelement <4 x i1> %cmp, i32 1 150 %1 = sext i1 %0 to i32 151 ret i32 %1 152} 153 154define i32 @test_gt_2(<4 x i32> %A, <4 x i32> %B) { 155; CHECK-LABEL: test_gt_2: 156; CHECK: pcmpgtd %xmm1, %xmm0 157; CHECK-NOT: pxor 158; CHECK: retq 159entry: 160 %cmp = icmp slt <4 x i32> %B, %A 161 %sext = sext <4 x i1> %cmp to <4 x i32> 162 %cmp1 = icmp sgt <4 x i32> zeroinitializer, %sext 163 %0 = extractelement <4 x i1> %cmp1, i32 1 164 %1 = sext i1 %0 to i32 165 ret i32 %1 166} 167