xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/commute-fcmp.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 -O3 -mtriple=x86_64-unknown -mcpu=x86-64 -mattr=+sse2 < %s | FileCheck %s --check-prefix=SSE
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -O3 -mtriple=x86_64-unknown -mcpu=x86-64 -mattr=+avx2 < %s | FileCheck %s --check-prefix=AVX
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker;
6*9880d681SAndroid Build Coastguard Worker; Float Comparisons
7*9880d681SAndroid Build Coastguard Worker; Only equal/not-equal/ordered/unordered can be safely commuted
8*9880d681SAndroid Build Coastguard Worker;
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_eq(<4 x float>* %a0, <4 x float> %a1) {
11*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_eq:
12*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
13*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqps (%rdi), %xmm0
14*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
15*9880d681SAndroid Build Coastguard Worker;
16*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_eq:
17*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
18*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqps (%rdi), %xmm0, %xmm0
19*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
20*9880d681SAndroid Build Coastguard Worker;
21*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
22*9880d681SAndroid Build Coastguard Worker  %2 = fcmp oeq <4 x float> %1, %a1
23*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
24*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_ne(<4 x float>* %a0, <4 x float> %a1) {
28*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ne:
29*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
30*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqps (%rdi), %xmm0
31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
32*9880d681SAndroid Build Coastguard Worker;
33*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ne:
34*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
35*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqps (%rdi), %xmm0, %xmm0
36*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
37*9880d681SAndroid Build Coastguard Worker;
38*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
39*9880d681SAndroid Build Coastguard Worker  %2 = fcmp une <4 x float> %1, %a1
40*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
41*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_ord(<4 x float>* %a0, <4 x float> %a1) {
45*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ord:
46*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
47*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordps (%rdi), %xmm0
48*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
49*9880d681SAndroid Build Coastguard Worker;
50*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ord:
51*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
52*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordps (%rdi), %xmm0, %xmm0
53*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
54*9880d681SAndroid Build Coastguard Worker;
55*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
56*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ord <4 x float> %1, %a1
57*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
58*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_uno(<4 x float>* %a0, <4 x float> %a1) {
62*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_uno:
63*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
64*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordps (%rdi), %xmm0
65*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
66*9880d681SAndroid Build Coastguard Worker;
67*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_uno:
68*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
69*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordps (%rdi), %xmm0, %xmm0
70*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
71*9880d681SAndroid Build Coastguard Worker;
72*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
73*9880d681SAndroid Build Coastguard Worker  %2 = fcmp uno <4 x float> %1, %a1
74*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
75*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_ueq(<4 x float>* %a0, <4 x float> %a1) {
79*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ueq:
80*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
81*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm1
82*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, %xmm2
83*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqps %xmm0, %xmm2
84*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordps %xmm1, %xmm0
85*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orps %xmm2, %xmm0
86*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
87*9880d681SAndroid Build Coastguard Worker;
88*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ueq:
89*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
90*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %xmm1
91*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqps %xmm0, %xmm1, %xmm2
92*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordps %xmm0, %xmm1, %xmm0
93*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vorps %xmm2, %xmm0, %xmm0
94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
95*9880d681SAndroid Build Coastguard Worker;
96*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
97*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ueq <4 x float> %1, %a1
98*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
99*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_one(<4 x float>* %a0, <4 x float> %a1) {
103*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_one:
104*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
105*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm1
106*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, %xmm2
107*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqps %xmm0, %xmm2
108*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordps %xmm1, %xmm0
109*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andps %xmm2, %xmm0
110*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
111*9880d681SAndroid Build Coastguard Worker;
112*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_one:
113*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
114*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %xmm1
115*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqps %xmm0, %xmm1, %xmm2
116*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordps %xmm0, %xmm1, %xmm0
117*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vandps %xmm2, %xmm0, %xmm0
118*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
119*9880d681SAndroid Build Coastguard Worker;
120*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
121*9880d681SAndroid Build Coastguard Worker  %2 = fcmp one <4 x float> %1, %a1
122*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
123*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_lt(<4 x float>* %a0, <4 x float> %a1) {
127*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_lt:
128*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm1
130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpltps %xmm0, %xmm1
131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, %xmm0
132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
133*9880d681SAndroid Build Coastguard Worker;
134*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_lt:
135*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
136*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %xmm1
137*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpltps %xmm0, %xmm1, %xmm0
138*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
139*9880d681SAndroid Build Coastguard Worker;
140*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
141*9880d681SAndroid Build Coastguard Worker  %2 = fcmp olt <4 x float> %1, %a1
142*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
143*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_le(<4 x float>* %a0, <4 x float> %a1) {
147*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_le:
148*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm1
150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpleps %xmm0, %xmm1
151*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, %xmm0
152*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
153*9880d681SAndroid Build Coastguard Worker;
154*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_le:
155*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
156*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %xmm1
157*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpleps %xmm0, %xmm1, %xmm0
158*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
159*9880d681SAndroid Build Coastguard Worker;
160*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x float>, <4 x float>* %a0
161*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ole <4 x float> %1, %a1
162*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i32>
163*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_eq_ymm(<8 x float>* %a0, <8 x float> %a1) {
167*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_eq_ymm:
168*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
169*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqps (%rdi), %xmm0
170*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqps 16(%rdi), %xmm1
171*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
172*9880d681SAndroid Build Coastguard Worker;
173*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_eq_ymm:
174*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqps (%rdi), %ymm0, %ymm0
176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
177*9880d681SAndroid Build Coastguard Worker;
178*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
179*9880d681SAndroid Build Coastguard Worker  %2 = fcmp oeq <8 x float> %1, %a1
180*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
181*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_ne_ymm(<8 x float>* %a0, <8 x float> %a1) {
185*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ne_ymm:
186*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
187*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqps (%rdi), %xmm0
188*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqps 16(%rdi), %xmm1
189*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
190*9880d681SAndroid Build Coastguard Worker;
191*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ne_ymm:
192*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
193*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqps (%rdi), %ymm0, %ymm0
194*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
195*9880d681SAndroid Build Coastguard Worker;
196*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
197*9880d681SAndroid Build Coastguard Worker  %2 = fcmp une <8 x float> %1, %a1
198*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
199*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_ord_ymm(<8 x float>* %a0, <8 x float> %a1) {
203*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ord_ymm:
204*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordps (%rdi), %xmm0
206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordps 16(%rdi), %xmm1
207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
208*9880d681SAndroid Build Coastguard Worker;
209*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ord_ymm:
210*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
211*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordps (%rdi), %ymm0, %ymm0
212*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
213*9880d681SAndroid Build Coastguard Worker;
214*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
215*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ord <8 x float> %1, %a1
216*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
217*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_uno_ymm(<8 x float>* %a0, <8 x float> %a1) {
221*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_uno_ymm:
222*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
223*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordps (%rdi), %xmm0
224*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordps 16(%rdi), %xmm1
225*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
226*9880d681SAndroid Build Coastguard Worker;
227*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_uno_ymm:
228*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
229*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordps (%rdi), %ymm0, %ymm0
230*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
231*9880d681SAndroid Build Coastguard Worker;
232*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
233*9880d681SAndroid Build Coastguard Worker  %2 = fcmp uno <8 x float> %1, %a1
234*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
235*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_ueq_ymm(<8 x float>* %a0, <8 x float> %a1) {
239*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ueq_ymm:
240*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm2
242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps 16(%rdi), %xmm3
243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm4
244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqps %xmm0, %xmm4
245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordps %xmm2, %xmm0
246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orps %xmm4, %xmm0
247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm3, %xmm2
248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqps %xmm1, %xmm2
249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordps %xmm3, %xmm1
250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orps %xmm2, %xmm1
251*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
252*9880d681SAndroid Build Coastguard Worker;
253*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ueq_ymm:
254*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
255*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %ymm1
256*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqps %ymm0, %ymm1, %ymm2
257*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordps %ymm0, %ymm1, %ymm0
258*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vorps %ymm2, %ymm0, %ymm0
259*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
260*9880d681SAndroid Build Coastguard Worker;
261*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
262*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ueq <8 x float> %1, %a1
263*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
264*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_one_ymm(<8 x float>* %a0, <8 x float> %a1) {
268*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_one_ymm:
269*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
270*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm2
271*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps 16(%rdi), %xmm3
272*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm4
273*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqps %xmm0, %xmm4
274*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordps %xmm2, %xmm0
275*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andps %xmm4, %xmm0
276*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm3, %xmm2
277*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqps %xmm1, %xmm2
278*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordps %xmm3, %xmm1
279*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andps %xmm2, %xmm1
280*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
281*9880d681SAndroid Build Coastguard Worker;
282*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_one_ymm:
283*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
284*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %ymm1
285*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqps %ymm0, %ymm1, %ymm2
286*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordps %ymm0, %ymm1, %ymm0
287*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0
288*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
289*9880d681SAndroid Build Coastguard Worker;
290*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
291*9880d681SAndroid Build Coastguard Worker  %2 = fcmp one <8 x float> %1, %a1
292*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
293*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
294*9880d681SAndroid Build Coastguard Worker}
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_lt_ymm(<8 x float>* %a0, <8 x float> %a1) {
297*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_lt_ymm:
298*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
299*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm2
300*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps 16(%rdi), %xmm3
301*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpltps %xmm0, %xmm2
302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpltps %xmm1, %xmm3
303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm0
304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm3, %xmm1
305*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
306*9880d681SAndroid Build Coastguard Worker;
307*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_lt_ymm:
308*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
309*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %ymm1
310*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpltps %ymm0, %ymm1, %ymm0
311*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
312*9880d681SAndroid Build Coastguard Worker;
313*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
314*9880d681SAndroid Build Coastguard Worker  %2 = fcmp olt <8 x float> %1, %a1
315*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
316*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
317*9880d681SAndroid Build Coastguard Worker}
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_le_ymm(<8 x float>* %a0, <8 x float> %a1) {
320*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_le_ymm:
321*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
322*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps (%rdi), %xmm2
323*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps 16(%rdi), %xmm3
324*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpleps %xmm0, %xmm2
325*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpleps %xmm1, %xmm3
326*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm0
327*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm3, %xmm1
328*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
329*9880d681SAndroid Build Coastguard Worker;
330*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_le_ymm:
331*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
332*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps (%rdi), %ymm1
333*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpleps %ymm0, %ymm1, %ymm0
334*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
335*9880d681SAndroid Build Coastguard Worker;
336*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x float>, <8 x float>* %a0
337*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ole <8 x float> %1, %a1
338*9880d681SAndroid Build Coastguard Worker  %3 = sext <8 x i1> %2 to <8 x i32>
339*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %3
340*9880d681SAndroid Build Coastguard Worker}
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Worker;
343*9880d681SAndroid Build Coastguard Worker; Double Comparisons
344*9880d681SAndroid Build Coastguard Worker; Only equal/not-equal/ordered/unordered can be safely commuted
345*9880d681SAndroid Build Coastguard Worker;
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_eq(<2 x double>* %a0, <2 x double> %a1) {
348*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_eq:
349*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqpd (%rdi), %xmm0
351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
352*9880d681SAndroid Build Coastguard Worker;
353*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_eq:
354*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
355*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0
356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
357*9880d681SAndroid Build Coastguard Worker;
358*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
359*9880d681SAndroid Build Coastguard Worker  %2 = fcmp oeq <2 x double> %1, %a1
360*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
361*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_ne(<2 x double>* %a0, <2 x double> %a1) {
365*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ne:
366*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
367*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqpd (%rdi), %xmm0
368*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
369*9880d681SAndroid Build Coastguard Worker;
370*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ne:
371*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
372*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqpd (%rdi), %xmm0, %xmm0
373*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
374*9880d681SAndroid Build Coastguard Worker;
375*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
376*9880d681SAndroid Build Coastguard Worker  %2 = fcmp une <2 x double> %1, %a1
377*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
378*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_ord(<2 x double>* %a0, <2 x double> %a1) {
382*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ord:
383*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
384*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordpd (%rdi), %xmm0
385*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
386*9880d681SAndroid Build Coastguard Worker;
387*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ord:
388*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
389*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordpd (%rdi), %xmm0, %xmm0
390*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
391*9880d681SAndroid Build Coastguard Worker;
392*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
393*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ord <2 x double> %1, %a1
394*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
395*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
396*9880d681SAndroid Build Coastguard Worker}
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_ueq(<2 x double>* %a0, <2 x double> %a1) {
399*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ueq:
400*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm1
402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm2
403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqpd %xmm0, %xmm2
404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordpd %xmm1, %xmm0
405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orpd %xmm2, %xmm0
406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
407*9880d681SAndroid Build Coastguard Worker;
408*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ueq:
409*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
410*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %xmm1
411*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqpd %xmm0, %xmm1, %xmm2
412*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordpd %xmm0, %xmm1, %xmm0
413*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vorpd %xmm2, %xmm0, %xmm0
414*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
415*9880d681SAndroid Build Coastguard Worker;
416*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
417*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ueq <2 x double> %1, %a1
418*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
419*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_one(<2 x double>* %a0, <2 x double> %a1) {
423*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_one:
424*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
425*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm1
426*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm2
427*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqpd %xmm0, %xmm2
428*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordpd %xmm1, %xmm0
429*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andpd %xmm2, %xmm0
430*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
431*9880d681SAndroid Build Coastguard Worker;
432*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_one:
433*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
434*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %xmm1
435*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqpd %xmm0, %xmm1, %xmm2
436*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordpd %xmm0, %xmm1, %xmm0
437*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vandpd %xmm2, %xmm0, %xmm0
438*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
439*9880d681SAndroid Build Coastguard Worker;
440*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
441*9880d681SAndroid Build Coastguard Worker  %2 = fcmp one <2 x double> %1, %a1
442*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
443*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
444*9880d681SAndroid Build Coastguard Worker}
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_uno(<2 x double>* %a0, <2 x double> %a1) {
447*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_uno:
448*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
449*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordpd (%rdi), %xmm0
450*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
451*9880d681SAndroid Build Coastguard Worker;
452*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_uno:
453*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
454*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordpd (%rdi), %xmm0, %xmm0
455*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
456*9880d681SAndroid Build Coastguard Worker;
457*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
458*9880d681SAndroid Build Coastguard Worker  %2 = fcmp uno <2 x double> %1, %a1
459*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
460*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
461*9880d681SAndroid Build Coastguard Worker}
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_lt(<2 x double>* %a0, <2 x double> %a1) {
464*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_lt:
465*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm1
467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpltpd %xmm0, %xmm1
468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm0
469*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
470*9880d681SAndroid Build Coastguard Worker;
471*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_lt:
472*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %xmm1
474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0
475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
476*9880d681SAndroid Build Coastguard Worker;
477*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
478*9880d681SAndroid Build Coastguard Worker  %2 = fcmp olt <2 x double> %1, %a1
479*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
480*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
481*9880d681SAndroid Build Coastguard Worker}
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_le(<2 x double>* %a0, <2 x double> %a1) {
484*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_le:
485*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
486*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm1
487*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmplepd %xmm0, %xmm1
488*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm0
489*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
490*9880d681SAndroid Build Coastguard Worker;
491*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_le:
492*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
493*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %xmm1
494*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmplepd %xmm0, %xmm1, %xmm0
495*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
496*9880d681SAndroid Build Coastguard Worker;
497*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x double>, <2 x double>* %a0
498*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ole <2 x double> %1, %a1
499*9880d681SAndroid Build Coastguard Worker  %3 = sext <2 x i1> %2 to <2 x i64>
500*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %3
501*9880d681SAndroid Build Coastguard Worker}
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_eq_ymmm(<4 x double>* %a0, <4 x double> %a1) {
504*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_eq_ymmm:
505*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqpd (%rdi), %xmm0
507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqpd 16(%rdi), %xmm1
508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
509*9880d681SAndroid Build Coastguard Worker;
510*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_eq_ymmm:
511*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
512*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqpd (%rdi), %ymm0, %ymm0
513*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
514*9880d681SAndroid Build Coastguard Worker;
515*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
516*9880d681SAndroid Build Coastguard Worker  %2 = fcmp oeq <4 x double> %1, %a1
517*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
518*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
519*9880d681SAndroid Build Coastguard Worker}
520*9880d681SAndroid Build Coastguard Worker
521*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_ne_ymmm(<4 x double>* %a0, <4 x double> %a1) {
522*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ne_ymmm:
523*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqpd (%rdi), %xmm0
525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqpd 16(%rdi), %xmm1
526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
527*9880d681SAndroid Build Coastguard Worker;
528*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ne_ymmm:
529*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
530*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqpd (%rdi), %ymm0, %ymm0
531*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
532*9880d681SAndroid Build Coastguard Worker;
533*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
534*9880d681SAndroid Build Coastguard Worker  %2 = fcmp une <4 x double> %1, %a1
535*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
536*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
537*9880d681SAndroid Build Coastguard Worker}
538*9880d681SAndroid Build Coastguard Worker
539*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_ord_ymmm(<4 x double>* %a0, <4 x double> %a1) {
540*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ord_ymmm:
541*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
542*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordpd (%rdi), %xmm0
543*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordpd 16(%rdi), %xmm1
544*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
545*9880d681SAndroid Build Coastguard Worker;
546*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ord_ymmm:
547*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
548*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordpd (%rdi), %ymm0, %ymm0
549*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
550*9880d681SAndroid Build Coastguard Worker;
551*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
552*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ord <4 x double> %1, %a1
553*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
554*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
555*9880d681SAndroid Build Coastguard Worker}
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_uno_ymmm(<4 x double>* %a0, <4 x double> %a1) {
558*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_uno_ymmm:
559*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
560*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordpd (%rdi), %xmm0
561*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordpd 16(%rdi), %xmm1
562*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
563*9880d681SAndroid Build Coastguard Worker;
564*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_uno_ymmm:
565*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
566*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordpd (%rdi), %ymm0, %ymm0
567*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
568*9880d681SAndroid Build Coastguard Worker;
569*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
570*9880d681SAndroid Build Coastguard Worker  %2 = fcmp uno <4 x double> %1, %a1
571*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
572*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
573*9880d681SAndroid Build Coastguard Worker}
574*9880d681SAndroid Build Coastguard Worker
575*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_ueq_ymmm(<4 x double>* %a0, <4 x double> %a1) {
576*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ueq_ymmm:
577*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm2
579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd 16(%rdi), %xmm3
580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm2, %xmm4
581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqpd %xmm0, %xmm4
582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordpd %xmm2, %xmm0
583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orpd %xmm4, %xmm0
584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm3, %xmm2
585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpeqpd %xmm1, %xmm2
586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpunordpd %xmm3, %xmm1
587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orpd %xmm2, %xmm1
588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
589*9880d681SAndroid Build Coastguard Worker;
590*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ueq_ymmm:
591*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
592*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %ymm1
593*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpeqpd %ymm0, %ymm1, %ymm2
594*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpunordpd %ymm0, %ymm1, %ymm0
595*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vorpd %ymm2, %ymm0, %ymm0
596*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
597*9880d681SAndroid Build Coastguard Worker;
598*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
599*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ueq <4 x double> %1, %a1
600*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
601*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
602*9880d681SAndroid Build Coastguard Worker}
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_one_ymmm(<4 x double>* %a0, <4 x double> %a1) {
605*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_one_ymmm:
606*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm2
608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd 16(%rdi), %xmm3
609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm2, %xmm4
610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqpd %xmm0, %xmm4
611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordpd %xmm2, %xmm0
612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andpd %xmm4, %xmm0
613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm3, %xmm2
614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpneqpd %xmm1, %xmm2
615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpordpd %xmm3, %xmm1
616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andpd %xmm2, %xmm1
617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
618*9880d681SAndroid Build Coastguard Worker;
619*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_one_ymmm:
620*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
621*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %ymm1
622*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpneqpd %ymm0, %ymm1, %ymm2
623*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpordpd %ymm0, %ymm1, %ymm0
624*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vandpd %ymm2, %ymm0, %ymm0
625*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
626*9880d681SAndroid Build Coastguard Worker;
627*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
628*9880d681SAndroid Build Coastguard Worker  %2 = fcmp one <4 x double> %1, %a1
629*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
630*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
631*9880d681SAndroid Build Coastguard Worker}
632*9880d681SAndroid Build Coastguard Worker
633*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_lt_ymmm(<4 x double>* %a0, <4 x double> %a1) {
634*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_lt_ymmm:
635*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
636*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm2
637*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd 16(%rdi), %xmm3
638*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpltpd %xmm0, %xmm2
639*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmpltpd %xmm1, %xmm3
640*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm2, %xmm0
641*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm3, %xmm1
642*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
643*9880d681SAndroid Build Coastguard Worker;
644*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_lt_ymmm:
645*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
646*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %ymm1
647*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm0
648*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
649*9880d681SAndroid Build Coastguard Worker;
650*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
651*9880d681SAndroid Build Coastguard Worker  %2 = fcmp olt <4 x double> %1, %a1
652*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
653*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
654*9880d681SAndroid Build Coastguard Worker}
655*9880d681SAndroid Build Coastguard Worker
656*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_le_ymmm(<4 x double>* %a0, <4 x double> %a1) {
657*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_le_ymmm:
658*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
659*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm2
660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd 16(%rdi), %xmm3
661*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmplepd %xmm0, %xmm2
662*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    cmplepd %xmm1, %xmm3
663*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm2, %xmm0
664*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm3, %xmm1
665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
666*9880d681SAndroid Build Coastguard Worker;
667*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_le_ymmm:
668*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
669*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovapd (%rdi), %ymm1
670*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vcmplepd %ymm0, %ymm1, %ymm0
671*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
672*9880d681SAndroid Build Coastguard Worker;
673*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x double>, <4 x double>* %a0
674*9880d681SAndroid Build Coastguard Worker  %2 = fcmp ole <4 x double> %1, %a1
675*9880d681SAndroid Build Coastguard Worker  %3 = sext <4 x i1> %2 to <4 x i64>
676*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %3
677*9880d681SAndroid Build Coastguard Worker}
678