1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE42 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; Lower common integer comparisons such as 'isPositive' efficiently: 8*9880d681SAndroid Build Coastguard Worker; https://llvm.org/bugs/show_bug.cgi?id=26701 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_pcmpgtb(<16 x i8> %x) { 11*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_pcmpgtb: 12*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 13*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm1, %xmm1 14*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtb %xmm1, %xmm0 15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 16*9880d681SAndroid Build Coastguard Worker; 17*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_pcmpgtb: 18*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 19*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 20*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 21*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 22*9880d681SAndroid Build Coastguard Worker; 23*9880d681SAndroid Build Coastguard Worker %sign = ashr <16 x i8> %x, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7> 24*9880d681SAndroid Build Coastguard Worker %not = xor <16 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 25*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %not 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_pcmpgtw(<8 x i16> %x) { 29*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_pcmpgtw: 30*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm1, %xmm1 32*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtw %xmm1, %xmm0 33*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 34*9880d681SAndroid Build Coastguard Worker; 35*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_pcmpgtw: 36*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 37*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 38*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 39*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 40*9880d681SAndroid Build Coastguard Worker; 41*9880d681SAndroid Build Coastguard Worker %sign = ashr <8 x i16> %x, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 42*9880d681SAndroid Build Coastguard Worker %not = xor <8 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 43*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %not 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_pcmpgtd(<4 x i32> %x) { 47*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_pcmpgtd: 48*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 49*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm1, %xmm1 50*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtd %xmm1, %xmm0 51*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 52*9880d681SAndroid Build Coastguard Worker; 53*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_pcmpgtd: 54*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 55*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 56*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 57*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 58*9880d681SAndroid Build Coastguard Worker; 59*9880d681SAndroid Build Coastguard Worker %sign = ashr <4 x i32> %x, <i32 31, i32 31, i32 31, i32 31> 60*9880d681SAndroid Build Coastguard Worker %not = xor <4 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1> 61*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %not 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_pcmpgtq(<2 x i64> %x) { 65*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_pcmpgtq: 66*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 67*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm0 68*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3] 69*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 70*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm1, %xmm0 71*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 72*9880d681SAndroid Build Coastguard Worker; 73*9880d681SAndroid Build Coastguard Worker; SSE42-LABEL: test_pcmpgtq: 74*9880d681SAndroid Build Coastguard Worker; SSE42: # BB#0: 75*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpeqd %xmm1, %xmm1 76*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 77*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: retq 78*9880d681SAndroid Build Coastguard Worker; 79*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_pcmpgtq: 80*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 81*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 82*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 83*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 84*9880d681SAndroid Build Coastguard Worker; 85*9880d681SAndroid Build Coastguard Worker %sign = ashr <2 x i64> %x, <i64 63, i64 63> 86*9880d681SAndroid Build Coastguard Worker %not = xor <2 x i64> %sign, <i64 -1, i64 -1> 87*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %not 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Workerdefine <1 x i128> @test_strange_type(<1 x i128> %x) { 91*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_strange_type: 92*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 93*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: sarq $63, %rsi 94*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %rsi, %xmm0 95*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: notq %rsi 96*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 97*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 98*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm0, %xmm1 99*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm1, %rax 100*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rsi, %rdx 101*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 102*9880d681SAndroid Build Coastguard Worker; 103*9880d681SAndroid Build Coastguard Worker; SSE42-LABEL: test_strange_type: 104*9880d681SAndroid Build Coastguard Worker; SSE42: # BB#0: 105*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: sarq $63, %rsi 106*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: movd %rsi, %xmm0 107*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 108*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpeqd %xmm1, %xmm1 109*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pxor %xmm0, %xmm1 110*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: movd %xmm1, %rax 111*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pextrq $1, %xmm1, %rdx 112*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: retq 113*9880d681SAndroid Build Coastguard Worker; 114*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_strange_type: 115*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: sarq $63, %rsi 117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rsi, %xmm0 118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 119*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 120*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0 121*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm0, %rax 122*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrq $1, %xmm0, %rdx 123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 124*9880d681SAndroid Build Coastguard Worker; 125*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_strange_type: 126*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 127*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: sarq $63, %rsi 128*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %rsi, %xmm0 129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq %xmm0, %xmm0 130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0 132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm0, %rax 133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrq $1, %xmm0, %rdx 134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker; 136*9880d681SAndroid Build Coastguard Worker %sign = ashr <1 x i128> %x, <i128 127> 137*9880d681SAndroid Build Coastguard Worker %not = xor <1 x i128> %sign, <i128 -1> 138*9880d681SAndroid Build Coastguard Worker ret <1 x i128> %not 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_pcmpgtb_256(<32 x i8> %x) { 142*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_pcmpgtb_256: 143*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm2, %xmm2 145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtb %xmm2, %xmm0 146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtb %xmm2, %xmm1 147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 148*9880d681SAndroid Build Coastguard Worker; 149*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_pcmpgtb_256: 150*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1 154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpgtb %xmm0, %xmm2, %xmm0 155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 160*9880d681SAndroid Build Coastguard Worker; 161*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_pcmpgtb_256: 162*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0 165*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 166*9880d681SAndroid Build Coastguard Worker; 167*9880d681SAndroid Build Coastguard Worker %sign = ashr <32 x i8> %x, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7> 168*9880d681SAndroid Build Coastguard Worker %not = xor <32 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 169*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %not 170*9880d681SAndroid Build Coastguard Worker} 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_pcmpgtw_256(<16 x i16> %x) { 173*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_pcmpgtw_256: 174*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 175*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm2, %xmm2 176*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtw %xmm2, %xmm0 177*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtw %xmm2, %xmm1 178*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 179*9880d681SAndroid Build Coastguard Worker; 180*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_pcmpgtw_256: 181*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $15, %xmm0, %xmm1 183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $15, %xmm0, %xmm0 185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 190*9880d681SAndroid Build Coastguard Worker; 191*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_pcmpgtw_256: 192*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 193*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0 195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 196*9880d681SAndroid Build Coastguard Worker; 197*9880d681SAndroid Build Coastguard Worker %sign = ashr <16 x i16> %x, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 198*9880d681SAndroid Build Coastguard Worker %not = xor <16 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 199*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %not 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_pcmpgtd_256(<8 x i32> %x) { 203*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_pcmpgtd_256: 204*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm2, %xmm2 206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtd %xmm2, %xmm0 207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtd %xmm2, %xmm1 208*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 209*9880d681SAndroid Build Coastguard Worker; 210*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_pcmpgtd_256: 211*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $31, %xmm0, %xmm1 213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 218*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 219*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 220*9880d681SAndroid Build Coastguard Worker; 221*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_pcmpgtd_256: 222*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 226*9880d681SAndroid Build Coastguard Worker; 227*9880d681SAndroid Build Coastguard Worker %sign = ashr <8 x i32> %x, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> 228*9880d681SAndroid Build Coastguard Worker %not = xor <8 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 229*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %not 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_pcmpgtq_256(<4 x i64> %x) { 233*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_pcmpgtq_256: 234*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm1 236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm0 238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm0 241*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm1 242*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 243*9880d681SAndroid Build Coastguard Worker; 244*9880d681SAndroid Build Coastguard Worker; SSE42-LABEL: test_pcmpgtq_256: 245*9880d681SAndroid Build Coastguard Worker; SSE42: # BB#0: 246*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpeqd %xmm2, %xmm2 247*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpgtq %xmm2, %xmm0 248*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpgtq %xmm2, %xmm1 249*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: retq 250*9880d681SAndroid Build Coastguard Worker; 251*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_pcmpgtq_256: 252*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $31, %xmm0, %xmm1 254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 263*9880d681SAndroid Build Coastguard Worker; 264*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_pcmpgtq_256: 265*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 269*9880d681SAndroid Build Coastguard Worker; 270*9880d681SAndroid Build Coastguard Worker %sign = ashr <4 x i64> %x, <i64 63, i64 63, i64 63, i64 63> 271*9880d681SAndroid Build Coastguard Worker %not = xor <4 x i64> %sign, <i64 -1, i64 -1, i64 -1, i64 -1> 272*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %not 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @cmpeq_zext_v16i8(<16 x i8> %a, <16 x i8> %b) { 276*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: cmpeq_zext_v16i8: 277*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 278*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqb %xmm1, %xmm0 279*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm0 280*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 281*9880d681SAndroid Build Coastguard Worker; 282*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: cmpeq_zext_v16i8: 283*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 284*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 285*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 286*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 287*9880d681SAndroid Build Coastguard Worker; 288*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <16 x i8> %a, %b 289*9880d681SAndroid Build Coastguard Worker %zext = zext <16 x i1> %cmp to <16 x i8> 290*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %zext 291*9880d681SAndroid Build Coastguard Worker} 292*9880d681SAndroid Build Coastguard Worker 293*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @cmpeq_zext_v16i16(<16 x i16> %a, <16 x i16> %b) { 294*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: cmpeq_zext_v16i16: 295*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 296*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqw %xmm2, %xmm0 297*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlw $15, %xmm0 298*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqw %xmm3, %xmm1 299*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlw $15, %xmm1 300*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 301*9880d681SAndroid Build Coastguard Worker; 302*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cmpeq_zext_v16i16: 303*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqw %xmm2, %xmm3, %xmm2 307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0 308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 311*9880d681SAndroid Build Coastguard Worker; 312*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cmpeq_zext_v16i16: 313*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $15, %ymm0, %ymm0 316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 317*9880d681SAndroid Build Coastguard Worker; 318*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <16 x i16> %a, %b 319*9880d681SAndroid Build Coastguard Worker %zext = zext <16 x i1> %cmp to <16 x i16> 320*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %zext 321*9880d681SAndroid Build Coastguard Worker} 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @cmpeq_zext_v4i32(<4 x i32> %a, <4 x i32> %b) { 324*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: cmpeq_zext_v4i32: 325*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 326*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpeqd %xmm1, %xmm0 327*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrld $31, %xmm0 328*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 329*9880d681SAndroid Build Coastguard Worker; 330*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: cmpeq_zext_v4i32: 331*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 332*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 333*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrld $31, %xmm0, %xmm0 334*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 335*9880d681SAndroid Build Coastguard Worker; 336*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <4 x i32> %a, %b 337*9880d681SAndroid Build Coastguard Worker %zext = zext <4 x i1> %cmp to <4 x i32> 338*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %zext 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @cmpeq_zext_v4i64(<4 x i64> %a, <4 x i64> %b) { 342*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: cmpeq_zext_v4i64: 343*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 344*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpeqd %xmm2, %xmm0 345*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,0,3,2] 346*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [1,1] 347*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm2 348*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 349*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpeqd %xmm3, %xmm1 350*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2] 351*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm2 352*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm1 353*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 354*9880d681SAndroid Build Coastguard Worker; 355*9880d681SAndroid Build Coastguard Worker; SSE42-LABEL: cmpeq_zext_v4i64: 356*9880d681SAndroid Build Coastguard Worker; SSE42: # BB#0: 357*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpeqq %xmm2, %xmm0 358*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: psrlq $63, %xmm0 359*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpeqq %xmm3, %xmm1 360*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: psrlq $63, %xmm1 361*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: retq 362*9880d681SAndroid Build Coastguard Worker; 363*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cmpeq_zext_v4i64: 364*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 365*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 366*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqq %xmm2, %xmm3, %xmm2 368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0 369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 372*9880d681SAndroid Build Coastguard Worker; 373*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cmpeq_zext_v4i64: 374*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0 376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $63, %ymm0, %ymm0 377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 378*9880d681SAndroid Build Coastguard Worker; 379*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <4 x i64> %a, %b 380*9880d681SAndroid Build Coastguard Worker %zext = zext <4 x i1> %cmp to <4 x i64> 381*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %zext 382*9880d681SAndroid Build Coastguard Worker} 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @cmpgt_zext_v32i8(<32 x i8> %a, <32 x i8> %b) { 385*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: cmpgt_zext_v32i8: 386*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 387*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtb %xmm2, %xmm0 388*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 389*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 390*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtb %xmm3, %xmm1 391*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 392*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 393*9880d681SAndroid Build Coastguard Worker; 394*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cmpgt_zext_v32i8: 395*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpgtb %xmm2, %xmm3, %xmm2 399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 403*9880d681SAndroid Build Coastguard Worker; 404*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cmpgt_zext_v32i8: 405*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 406*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0 407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 409*9880d681SAndroid Build Coastguard Worker; 410*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <32 x i8> %a, %b 411*9880d681SAndroid Build Coastguard Worker %zext = zext <32 x i1> %cmp to <32 x i8> 412*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %zext 413*9880d681SAndroid Build Coastguard Worker} 414*9880d681SAndroid Build Coastguard Worker 415*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cmpgt_zext_v8i16(<8 x i16> %a, <8 x i16> %b) { 416*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: cmpgt_zext_v8i16: 417*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 418*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtw %xmm1, %xmm0 419*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlw $15, %xmm0 420*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 421*9880d681SAndroid Build Coastguard Worker; 422*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: cmpgt_zext_v8i16: 423*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 424*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 425*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $15, %xmm0, %xmm0 426*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 427*9880d681SAndroid Build Coastguard Worker; 428*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <8 x i16> %a, %b 429*9880d681SAndroid Build Coastguard Worker %zext = zext <8 x i1> %cmp to <8 x i16> 430*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %zext 431*9880d681SAndroid Build Coastguard Worker} 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @cmpgt_zext_v8i32(<8 x i32> %a, <8 x i32> %b) { 434*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: cmpgt_zext_v8i32: 435*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 436*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtd %xmm2, %xmm0 437*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrld $31, %xmm0 438*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pcmpgtd %xmm3, %xmm1 439*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrld $31, %xmm1 440*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 441*9880d681SAndroid Build Coastguard Worker; 442*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cmpgt_zext_v8i32: 443*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 444*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 445*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 446*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2 447*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 449*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 450*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 451*9880d681SAndroid Build Coastguard Worker; 452*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cmpgt_zext_v8i32: 453*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 454*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 455*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $31, %ymm0, %ymm0 456*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 457*9880d681SAndroid Build Coastguard Worker; 458*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <8 x i32> %a, %b 459*9880d681SAndroid Build Coastguard Worker %zext = zext <8 x i1> %cmp to <8 x i32> 460*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %zext 461*9880d681SAndroid Build Coastguard Worker} 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @cmpgt_zext_v2i64(<2 x i64> %a, <2 x i64> %b) { 464*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: cmpgt_zext_v2i64: 465*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 466*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 467*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm1 468*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm0 469*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm2 470*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 471*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 472*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpeqd %xmm1, %xmm0 473*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3] 474*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm3, %xmm1 475*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 476*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm1, %xmm0 477*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand {{.*}}(%rip), %xmm0 478*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 479*9880d681SAndroid Build Coastguard Worker; 480*9880d681SAndroid Build Coastguard Worker; SSE42-LABEL: cmpgt_zext_v2i64: 481*9880d681SAndroid Build Coastguard Worker; SSE42: # BB#0: 482*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 483*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: psrlq $63, %xmm0 484*9880d681SAndroid Build Coastguard Worker; SSE42-NEXT: retq 485*9880d681SAndroid Build Coastguard Worker; 486*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: cmpgt_zext_v2i64: 487*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 488*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 489*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlq $63, %xmm0, %xmm0 490*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 491*9880d681SAndroid Build Coastguard Worker; 492*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <2 x i64> %a, %b 493*9880d681SAndroid Build Coastguard Worker %zext = zext <2 x i1> %cmp to <2 x i64> 494*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %zext 495*9880d681SAndroid Build Coastguard Worker} 496