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