1; RUN: llc < %s -march=x86 -mcpu=yonah -mtriple=i386-apple-darwin | FileCheck %s 2 3 4define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) nounwind { 5; CHECK-LABEL: test1: 6; CHECK: pcmpgtd 7; CHECK: ret 8 9 %C = icmp sgt <4 x i32> %A, %B 10 %D = sext <4 x i1> %C to <4 x i32> 11 ret <4 x i32> %D 12} 13 14define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) nounwind { 15; CHECK-LABEL: test2: 16; CHECK: pcmp 17; CHECK: pcmp 18; CHECK: pxor 19; CHECK: ret 20 %C = icmp sge <4 x i32> %A, %B 21 %D = sext <4 x i1> %C to <4 x i32> 22 ret <4 x i32> %D 23} 24 25define <4 x i32> @test3(<4 x i32> %A, <4 x i32> %B) nounwind { 26; CHECK-LABEL: test3: 27; CHECK: pcmpgtd 28; CHECK: movdqa 29; CHECK: ret 30 %C = icmp slt <4 x i32> %A, %B 31 %D = sext <4 x i1> %C to <4 x i32> 32 ret <4 x i32> %D 33} 34 35define <4 x i32> @test4(<4 x i32> %A, <4 x i32> %B) nounwind { 36; CHECK-LABEL: test4: 37; CHECK: movdqa 38; CHECK: pcmpgtd 39; CHECK: ret 40 %C = icmp ugt <4 x i32> %A, %B 41 %D = sext <4 x i1> %C to <4 x i32> 42 ret <4 x i32> %D 43} 44 45define <2 x i64> @test5(<2 x i64> %A, <2 x i64> %B) nounwind { 46; CHECK-LABEL: test5: 47; CHECK: pcmpeqd 48; CHECK: pshufd $177 49; CHECK: pand 50; CHECK: ret 51 %C = icmp eq <2 x i64> %A, %B 52 %D = sext <2 x i1> %C to <2 x i64> 53 ret <2 x i64> %D 54} 55 56define <2 x i64> @test6(<2 x i64> %A, <2 x i64> %B) nounwind { 57; CHECK-LABEL: test6: 58; CHECK: pcmpeqd 59; CHECK: pshufd $177 60; CHECK: pand 61; CHECK: pcmpeqd 62; CHECK: pxor 63; CHECK: ret 64 %C = icmp ne <2 x i64> %A, %B 65 %D = sext <2 x i1> %C to <2 x i64> 66 ret <2 x i64> %D 67} 68 69define <2 x i64> @test7(<2 x i64> %A, <2 x i64> %B) nounwind { 70; CHECK: [[CONSTSEG:[A-Z0-9_]*]]: 71; CHECK: .long 2147483648 72; CHECK-NEXT: .long 0 73; CHECK-NEXT: .long 2147483648 74; CHECK-NEXT: .long 0 75; CHECK-LABEL: test7: 76; CHECK: movdqa [[CONSTSEG]], [[CONSTREG:%xmm[0-9]*]] 77; CHECK: pxor [[CONSTREG]] 78; CHECK: pxor [[CONSTREG]] 79; CHECK: pcmpgtd %xmm1 80; CHECK: pshufd $160 81; CHECK: pcmpeqd 82; CHECK: pshufd $245 83; CHECK: pand 84; CHECK: pshufd $245 85; CHECK: por 86; CHECK: ret 87 %C = icmp sgt <2 x i64> %A, %B 88 %D = sext <2 x i1> %C to <2 x i64> 89 ret <2 x i64> %D 90} 91 92define <2 x i64> @test8(<2 x i64> %A, <2 x i64> %B) nounwind { 93; CHECK-LABEL: test8: 94; CHECK: pxor 95; CHECK: pxor 96; CHECK: pcmpgtd %xmm0 97; CHECK: pshufd $160 98; CHECK: pcmpeqd 99; CHECK: pshufd $245 100; CHECK: pand 101; CHECK: pshufd $245 102; CHECK: por 103; CHECK: ret 104 %C = icmp slt <2 x i64> %A, %B 105 %D = sext <2 x i1> %C to <2 x i64> 106 ret <2 x i64> %D 107} 108 109define <2 x i64> @test9(<2 x i64> %A, <2 x i64> %B) nounwind { 110; CHECK-LABEL: test9: 111; CHECK: pxor 112; CHECK: pxor 113; CHECK: pcmpgtd %xmm0 114; CHECK: pshufd $160 115; CHECK: pcmpeqd 116; CHECK: pshufd $245 117; CHECK: pand 118; CHECK: pshufd $245 119; CHECK: por 120; CHECK: pcmpeqd 121; CHECK: pxor 122; CHECK: ret 123 %C = icmp sge <2 x i64> %A, %B 124 %D = sext <2 x i1> %C to <2 x i64> 125 ret <2 x i64> %D 126} 127 128define <2 x i64> @test10(<2 x i64> %A, <2 x i64> %B) nounwind { 129; CHECK-LABEL: test10: 130; CHECK: pxor 131; CHECK: pxor 132; CHECK: pcmpgtd %xmm1 133; CHECK: pshufd $160 134; CHECK: pcmpeqd 135; CHECK: pshufd $245 136; CHECK: pand 137; CHECK: pshufd $245 138; CHECK: por 139; CHECK: pcmpeqd 140; CHECK: pxor 141; CHECK: ret 142 %C = icmp sle <2 x i64> %A, %B 143 %D = sext <2 x i1> %C to <2 x i64> 144 ret <2 x i64> %D 145} 146 147define <2 x i64> @test11(<2 x i64> %A, <2 x i64> %B) nounwind { 148; CHECK: [[CONSTSEG:[A-Z0-9_]*]]: 149; CHECK: .long 2147483648 150; CHECK-NEXT: .long 2147483648 151; CHECK-NEXT: .long 2147483648 152; CHECK-NEXT: .long 2147483648 153; CHECK-LABEL: test11: 154; CHECK: movdqa [[CONSTSEG]], [[CONSTREG:%xmm[0-9]*]] 155; CHECK: pxor [[CONSTREG]] 156; CHECK: pxor [[CONSTREG]] 157; CHECK: pcmpgtd %xmm1 158; CHECK: pshufd $160 159; CHECK: pcmpeqd 160; CHECK: pshufd $245 161; CHECK: pand 162; CHECK: pshufd $245 163; CHECK: por 164; CHECK: ret 165 %C = icmp ugt <2 x i64> %A, %B 166 %D = sext <2 x i1> %C to <2 x i64> 167 ret <2 x i64> %D 168} 169 170define <2 x i64> @test12(<2 x i64> %A, <2 x i64> %B) nounwind { 171; CHECK-LABEL: test12: 172; CHECK: pxor 173; CHECK: pxor 174; CHECK: pcmpgtd %xmm0 175; CHECK: pshufd $160 176; CHECK: pcmpeqd 177; CHECK: pshufd $245 178; CHECK: pand 179; CHECK: pshufd $245 180; CHECK: por 181; CHECK: ret 182 %C = icmp ult <2 x i64> %A, %B 183 %D = sext <2 x i1> %C to <2 x i64> 184 ret <2 x i64> %D 185} 186 187define <2 x i64> @test13(<2 x i64> %A, <2 x i64> %B) nounwind { 188; CHECK-LABEL: test13: 189; CHECK: pxor 190; CHECK: pxor 191; CHECK: pcmpgtd %xmm0 192; CHECK: pshufd $160 193; CHECK: pcmpeqd 194; CHECK: pshufd $245 195; CHECK: pand 196; CHECK: pshufd $245 197; CHECK: por 198; CHECK: pcmpeqd 199; CHECK: pxor 200; CHECK: ret 201 %C = icmp uge <2 x i64> %A, %B 202 %D = sext <2 x i1> %C to <2 x i64> 203 ret <2 x i64> %D 204} 205 206define <2 x i64> @test14(<2 x i64> %A, <2 x i64> %B) nounwind { 207; CHECK-LABEL: test14: 208; CHECK: pxor 209; CHECK: pxor 210; CHECK: pcmpgtd %xmm1 211; CHECK: pshufd $160 212; CHECK: pcmpeqd 213; CHECK: pshufd $245 214; CHECK: pand 215; CHECK: pshufd $245 216; CHECK: por 217; CHECK: pcmpeqd 218; CHECK: pxor 219; CHECK: ret 220 %C = icmp ule <2 x i64> %A, %B 221 %D = sext <2 x i1> %C to <2 x i64> 222 ret <2 x i64> %D 223} 224