xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-pcmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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