xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-arith.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f | FileCheck --check-prefix=CHECK --check-prefix=AVX512F %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512vl | FileCheck --check-prefix=CHECK --check-prefix=AVX512VL %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512bw | FileCheck --check-prefix=CHECK --check-prefix=AVX512BW %s
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512dq | FileCheck --check-prefix=CHECK --check-prefix=AVX512DQ %s
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512dq -mattr=+avx512bw -mattr=+avx512vl| FileCheck --check-prefix=CHECK --check-prefix=SKX %s
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @addpd512(<8 x double> %y, <8 x double> %x) {
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addpd512:
10*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm0, %zmm1, %zmm0
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <8 x double> %x, %y
15*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %add.i
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @addpd512fold(<8 x double> %y) {
19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addpd512fold:
20*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd {{.*}}(%rip), %zmm0, %zmm0
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
23*9880d681SAndroid Build Coastguard Workerentry:
24*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <8 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00, double 4.500000e+00, double 3.800000e+00, double 2.300000e+00, double 1.200000e+00>
25*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %add.i
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @addps512(<16 x float> %y, <16 x float> %x) {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addps512:
30*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm0, %zmm1, %zmm0
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
33*9880d681SAndroid Build Coastguard Workerentry:
34*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <16 x float> %x, %y
35*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %add.i
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @addps512fold(<16 x float> %y) {
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addps512fold:
40*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps {{.*}}(%rip), %zmm0, %zmm0
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
43*9880d681SAndroid Build Coastguard Workerentry:
44*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <16 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 4.500000e+00, float 4.500000e+00, float 0x400B333340000000,  float 0x4002666660000000, float 0x3FF3333340000000>
45*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %add.i
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @subpd512(<8 x double> %y, <8 x double> %x) {
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subpd512:
50*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsubpd %zmm0, %zmm1, %zmm0
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
53*9880d681SAndroid Build Coastguard Workerentry:
54*9880d681SAndroid Build Coastguard Worker  %sub.i = fsub <8 x double> %x, %y
55*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %sub.i
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @subpd512fold(<8 x double> %y, <8 x double>* %x) {
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subpd512fold:
60*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsubpd (%rdi), %zmm0, %zmm0
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
63*9880d681SAndroid Build Coastguard Workerentry:
64*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x double>, <8 x double>* %x, align 8
65*9880d681SAndroid Build Coastguard Worker  %sub.i = fsub <8 x double> %y, %tmp2
66*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %sub.i
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @subps512(<16 x float> %y, <16 x float> %x) {
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subps512:
71*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsubps %zmm0, %zmm1, %zmm0
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker  %sub.i = fsub <16 x float> %x, %y
76*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %sub.i
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @subps512fold(<16 x float> %y, <16 x float>* %x) {
80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: subps512fold:
81*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsubps (%rdi), %zmm0, %zmm0
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
84*9880d681SAndroid Build Coastguard Workerentry:
85*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <16 x float>, <16 x float>* %x, align 4
86*9880d681SAndroid Build Coastguard Worker  %sub.i = fsub <16 x float> %y, %tmp2
87*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %sub.i
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @imulq512(<8 x i64> %y, <8 x i64> %x) {
91*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: imulq512:
92*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
93*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %zmm0, %zmm1, %zmm2
94*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $32, %zmm0, %zmm3
95*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %zmm3, %zmm1, %zmm3
96*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $32, %zmm3, %zmm3
97*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddq %zmm3, %zmm2, %zmm2
98*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $32, %zmm1, %zmm1
99*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %zmm0, %zmm1, %zmm0
100*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $32, %zmm0, %zmm0
101*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddq %zmm0, %zmm2, %zmm0
102*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker;
104*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: imulq512:
105*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
106*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %zmm0, %zmm1, %zmm2
107*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $32, %zmm0, %zmm3
108*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %zmm3, %zmm1, %zmm3
109*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $32, %zmm3, %zmm3
110*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddq %zmm3, %zmm2, %zmm2
111*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $32, %zmm1, %zmm1
112*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %zmm0, %zmm1, %zmm0
113*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $32, %zmm0, %zmm0
114*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddq %zmm0, %zmm2, %zmm0
115*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
116*9880d681SAndroid Build Coastguard Worker;
117*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: imulq512:
118*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
119*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %zmm0, %zmm1, %zmm2
120*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlq $32, %zmm0, %zmm3
121*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %zmm3, %zmm1, %zmm3
122*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllq $32, %zmm3, %zmm3
123*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddq %zmm3, %zmm2, %zmm2
124*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlq $32, %zmm1, %zmm1
125*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %zmm0, %zmm1, %zmm0
126*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllq $32, %zmm0, %zmm0
127*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddq %zmm0, %zmm2, %zmm0
128*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
129*9880d681SAndroid Build Coastguard Worker;
130*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: imulq512:
131*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
132*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmullq %zmm0, %zmm1, %zmm0
133*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
134*9880d681SAndroid Build Coastguard Worker;
135*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: imulq512:
136*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
137*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmullq %zmm0, %zmm1, %zmm0
138*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
139*9880d681SAndroid Build Coastguard Worker  %z = mul <8 x i64>%x, %y
140*9880d681SAndroid Build Coastguard Worker  ret <8 x i64>%z
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @imulq256(<4 x i64> %y, <4 x i64> %x) {
144*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: imulq256:
145*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
146*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %ymm0, %ymm1, %ymm2
147*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $32, %ymm0, %ymm3
148*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %ymm3, %ymm1, %ymm3
149*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $32, %ymm3, %ymm3
150*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
151*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $32, %ymm1, %ymm1
152*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %ymm0, %ymm1, %ymm0
153*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $32, %ymm0, %ymm0
154*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
155*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
156*9880d681SAndroid Build Coastguard Worker;
157*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: imulq256:
158*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
159*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %ymm0, %ymm1, %ymm2
160*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $32, %ymm0, %ymm3
161*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %ymm3, %ymm1, %ymm3
162*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $32, %ymm3, %ymm3
163*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
164*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $32, %ymm1, %ymm1
165*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %ymm0, %ymm1, %ymm0
166*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $32, %ymm0, %ymm0
167*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
168*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
169*9880d681SAndroid Build Coastguard Worker;
170*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: imulq256:
171*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
172*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %ymm0, %ymm1, %ymm2
173*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlq $32, %ymm0, %ymm3
174*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %ymm3, %ymm1, %ymm3
175*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllq $32, %ymm3, %ymm3
176*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
177*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlq $32, %ymm1, %ymm1
178*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %ymm0, %ymm1, %ymm0
179*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllq $32, %ymm0, %ymm0
180*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
181*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
182*9880d681SAndroid Build Coastguard Worker;
183*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: imulq256:
184*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
185*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmuludq %ymm0, %ymm1, %ymm2
186*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsrlq $32, %ymm0, %ymm3
187*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmuludq %ymm3, %ymm1, %ymm3
188*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsllq $32, %ymm3, %ymm3
189*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
190*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsrlq $32, %ymm1, %ymm1
191*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmuludq %ymm0, %ymm1, %ymm0
192*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsllq $32, %ymm0, %ymm0
193*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
194*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
195*9880d681SAndroid Build Coastguard Worker;
196*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: imulq256:
197*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
198*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmullq %ymm0, %ymm1, %ymm0
199*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
200*9880d681SAndroid Build Coastguard Worker  %z = mul <4 x i64>%x, %y
201*9880d681SAndroid Build Coastguard Worker  ret <4 x i64>%z
202*9880d681SAndroid Build Coastguard Worker}
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @imulq128(<2 x i64> %y, <2 x i64> %x) {
205*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: imulq128:
206*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
207*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %xmm0, %xmm1, %xmm2
208*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $32, %xmm0, %xmm3
209*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %xmm3, %xmm1, %xmm3
210*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $32, %xmm3, %xmm3
211*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
212*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $32, %xmm1, %xmm1
213*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmuludq %xmm0, %xmm1, %xmm0
214*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $32, %xmm0, %xmm0
215*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddq %xmm0, %xmm2, %xmm0
216*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
217*9880d681SAndroid Build Coastguard Worker;
218*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: imulq128:
219*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
220*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %xmm0, %xmm1, %xmm2
221*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $32, %xmm0, %xmm3
222*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %xmm3, %xmm1, %xmm3
223*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $32, %xmm3, %xmm3
224*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
225*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $32, %xmm1, %xmm1
226*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %xmm0, %xmm1, %xmm0
227*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $32, %xmm0, %xmm0
228*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddq %xmm0, %xmm2, %xmm0
229*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
230*9880d681SAndroid Build Coastguard Worker;
231*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: imulq128:
232*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
233*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %xmm0, %xmm1, %xmm2
234*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlq $32, %xmm0, %xmm3
235*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %xmm3, %xmm1, %xmm3
236*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllq $32, %xmm3, %xmm3
237*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
238*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlq $32, %xmm1, %xmm1
239*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmuludq %xmm0, %xmm1, %xmm0
240*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsllq $32, %xmm0, %xmm0
241*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddq %xmm0, %xmm2, %xmm0
242*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: imulq128:
245*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
246*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmuludq %xmm0, %xmm1, %xmm2
247*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsrlq $32, %xmm0, %xmm3
248*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmuludq %xmm3, %xmm1, %xmm3
249*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsllq $32, %xmm3, %xmm3
250*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
251*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsrlq $32, %xmm1, %xmm1
252*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpmuludq %xmm0, %xmm1, %xmm0
253*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpsllq $32, %xmm0, %xmm0
254*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpaddq %xmm0, %xmm2, %xmm0
255*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
256*9880d681SAndroid Build Coastguard Worker;
257*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: imulq128:
258*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
259*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmullq %xmm0, %xmm1, %xmm0
260*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
261*9880d681SAndroid Build Coastguard Worker  %z = mul <2 x i64>%x, %y
262*9880d681SAndroid Build Coastguard Worker  ret <2 x i64>%z
263*9880d681SAndroid Build Coastguard Worker}
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @mulpd512(<8 x double> %y, <8 x double> %x) {
266*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulpd512:
267*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulpd %zmm0, %zmm1, %zmm0
269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
270*9880d681SAndroid Build Coastguard Workerentry:
271*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <8 x double> %x, %y
272*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %mul.i
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @mulpd512fold(<8 x double> %y) {
276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulpd512fold:
277*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulpd {{.*}}(%rip), %zmm0, %zmm0
279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
280*9880d681SAndroid Build Coastguard Workerentry:
281*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <8 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00, double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00>
282*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %mul.i
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @mulps512(<16 x float> %y, <16 x float> %x) {
286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulps512:
287*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulps %zmm0, %zmm1, %zmm0
289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
290*9880d681SAndroid Build Coastguard Workerentry:
291*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <16 x float> %x, %y
292*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %mul.i
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @mulps512fold(<16 x float> %y) {
296*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mulps512fold:
297*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulps {{.*}}(%rip), %zmm0, %zmm0
299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
300*9880d681SAndroid Build Coastguard Workerentry:
301*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <16 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000>
302*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %mul.i
303*9880d681SAndroid Build Coastguard Worker}
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @divpd512(<8 x double> %y, <8 x double> %x) {
306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divpd512:
307*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vdivpd %zmm0, %zmm1, %zmm0
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
310*9880d681SAndroid Build Coastguard Workerentry:
311*9880d681SAndroid Build Coastguard Worker  %div.i = fdiv <8 x double> %x, %y
312*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %div.i
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @divpd512fold(<8 x double> %y) {
316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divpd512fold:
317*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vdivpd {{.*}}(%rip), %zmm0, %zmm0
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
320*9880d681SAndroid Build Coastguard Workerentry:
321*9880d681SAndroid Build Coastguard Worker  %div.i = fdiv <8 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00, double 4.500000e+00, double 3.400000e+00, double 2.300000e+00, double 1.200000e+00>
322*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %div.i
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @divps512(<16 x float> %y, <16 x float> %x) {
326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divps512:
327*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vdivps %zmm0, %zmm1, %zmm0
329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
330*9880d681SAndroid Build Coastguard Workerentry:
331*9880d681SAndroid Build Coastguard Worker  %div.i = fdiv <16 x float> %x, %y
332*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %div.i
333*9880d681SAndroid Build Coastguard Worker}
334*9880d681SAndroid Build Coastguard Worker
335*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @divps512fold(<16 x float> %y) {
336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: divps512fold:
337*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vdivps {{.*}}(%rip), %zmm0, %zmm0
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
340*9880d681SAndroid Build Coastguard Workerentry:
341*9880d681SAndroid Build Coastguard Worker  %div.i = fdiv <16 x float> %y, <float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 4.500000e+00, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 0x400B333340000000, float 0x4002666660000000, float 0x3FF3333340000000, float 4.500000e+00, float 4.500000e+00, float 0x4002666660000000, float 0x3FF3333340000000>
342*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %div.i
343*9880d681SAndroid Build Coastguard Worker}
344*9880d681SAndroid Build Coastguard Worker
345*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_test(<8 x i64> %i, <8 x i64> %j) nounwind readnone {
346*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_test:
347*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
350*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i64> %i, %j
351*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_fold_test(<8 x i64> %i, <8 x i64>* %j) nounwind {
355*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_fold_test:
356*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq (%rdi), %zmm0, %zmm0
358*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
359*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i64>, <8 x i64>* %j, align 4
360*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i64> %i, %tmp
361*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_broadcast_test(<8 x i64> %i) nounwind {
365*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_broadcast_test:
366*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
367*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
368*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
369*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i64> %i, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
370*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
371*9880d681SAndroid Build Coastguard Worker}
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpaddq_broadcast2_test(<8 x i64> %i, i64* %j) nounwind {
374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq_broadcast2_test:
375*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
376*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq (%rdi){1to8}, %zmm0, %zmm0
377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
378*9880d681SAndroid Build Coastguard Worker  %tmp = load i64, i64* %j
379*9880d681SAndroid Build Coastguard Worker  %j.0 = insertelement <8 x i64> undef, i64 %tmp, i32 0
380*9880d681SAndroid Build Coastguard Worker  %j.1 = insertelement <8 x i64> %j.0, i64 %tmp, i32 1
381*9880d681SAndroid Build Coastguard Worker  %j.2 = insertelement <8 x i64> %j.1, i64 %tmp, i32 2
382*9880d681SAndroid Build Coastguard Worker  %j.3 = insertelement <8 x i64> %j.2, i64 %tmp, i32 3
383*9880d681SAndroid Build Coastguard Worker  %j.4 = insertelement <8 x i64> %j.3, i64 %tmp, i32 4
384*9880d681SAndroid Build Coastguard Worker  %j.5 = insertelement <8 x i64> %j.4, i64 %tmp, i32 5
385*9880d681SAndroid Build Coastguard Worker  %j.6 = insertelement <8 x i64> %j.5, i64 %tmp, i32 6
386*9880d681SAndroid Build Coastguard Worker  %j.7 = insertelement <8 x i64> %j.6, i64 %tmp, i32 7
387*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i64> %i, %j.7
388*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
389*9880d681SAndroid Build Coastguard Worker}
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_test(<16 x i32> %i, <16 x i32> %j) nounwind readnone {
392*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_test:
393*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
396*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, %j
397*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
398*9880d681SAndroid Build Coastguard Worker}
399*9880d681SAndroid Build Coastguard Worker
400*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_fold_test(<16 x i32> %i, <16 x i32>* %j) nounwind {
401*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_fold_test:
402*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
403*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd (%rdi), %zmm0, %zmm0
404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
405*9880d681SAndroid Build Coastguard Worker  %tmp = load <16 x i32>, <16 x i32>* %j, align 4
406*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, %tmp
407*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_broadcast_test(<16 x i32> %i) nounwind {
411*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_broadcast_test:
412*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
415*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
416*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
417*9880d681SAndroid Build Coastguard Worker}
418*9880d681SAndroid Build Coastguard Worker
419*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_mask_test(<16 x i32> %i, <16 x i32> %j, <16 x i32> %mask1) nounwind readnone {
420*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_mask_test:
421*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
422*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm3, %zmm3, %zmm3
423*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm3, %zmm2, %k1
424*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm1, %zmm0, %zmm0 {%k1}
425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
426*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
427*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, %j
428*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %i
429*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
430*9880d681SAndroid Build Coastguard Worker}
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_maskz_test(<16 x i32> %i, <16 x i32> %j, <16 x i32> %mask1) nounwind readnone {
433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_maskz_test:
434*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm3, %zmm3, %zmm3
436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm3, %zmm2, %k1
437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm1, %zmm0, %zmm0 {%k1} {z}
438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
439*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
440*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, %j
441*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
442*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
443*9880d681SAndroid Build Coastguard Worker}
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_mask_fold_test(<16 x i32> %i, <16 x i32>* %j.ptr, <16 x i32> %mask1) nounwind readnone {
446*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_mask_fold_test:
447*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
448*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm2, %zmm2, %zmm2
449*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm2, %zmm1, %k1
450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd (%rdi), %zmm0, %zmm0 {%k1}
451*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
452*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
453*9880d681SAndroid Build Coastguard Worker  %j = load <16 x i32>, <16 x i32>* %j.ptr
454*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, %j
455*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %i
456*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_mask_broadcast_test(<16 x i32> %i, <16 x i32> %mask1) nounwind readnone {
460*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_mask_broadcast_test:
461*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
462*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm2, %zmm2, %zmm2
463*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm2, %zmm1, %k1
464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 {%k1}
465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
466*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
467*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
468*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %i
469*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_maskz_fold_test(<16 x i32> %i, <16 x i32>* %j.ptr, <16 x i32> %mask1) nounwind readnone {
473*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_maskz_fold_test:
474*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
475*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm2, %zmm2, %zmm2
476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm2, %zmm1, %k1
477*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd (%rdi), %zmm0, %zmm0 {%k1} {z}
478*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
479*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
480*9880d681SAndroid Build Coastguard Worker  %j = load <16 x i32>, <16 x i32>* %j.ptr
481*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, %j
482*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
483*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
484*9880d681SAndroid Build Coastguard Worker}
485*9880d681SAndroid Build Coastguard Worker
486*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpaddd_maskz_broadcast_test(<16 x i32> %i, <16 x i32> %mask1) nounwind readnone {
487*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd_maskz_broadcast_test:
488*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
489*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm2, %zmm2, %zmm2
490*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm2, %zmm1, %k1
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 {%k1} {z}
492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
493*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
494*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
495*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
496*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
497*9880d681SAndroid Build Coastguard Worker}
498*9880d681SAndroid Build Coastguard Worker
499*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpsubq_test(<8 x i64> %i, <8 x i64> %j) nounwind readnone {
500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubq_test:
501*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
502*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsubq %zmm1, %zmm0, %zmm0
503*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
504*9880d681SAndroid Build Coastguard Worker  %x = sub <8 x i64> %i, %j
505*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
506*9880d681SAndroid Build Coastguard Worker}
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpsubd_test(<16 x i32> %i, <16 x i32> %j) nounwind readnone {
509*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubd_test:
510*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsubd %zmm1, %zmm0, %zmm0
512*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
513*9880d681SAndroid Build Coastguard Worker  %x = sub <16 x i32> %i, %j
514*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
515*9880d681SAndroid Build Coastguard Worker}
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpmulld_test(<16 x i32> %i, <16 x i32> %j) {
518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmulld_test:
519*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
520*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmulld %zmm1, %zmm0, %zmm0
521*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
522*9880d681SAndroid Build Coastguard Worker  %x = mul <16 x i32> %i, %j
523*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
524*9880d681SAndroid Build Coastguard Worker}
525*9880d681SAndroid Build Coastguard Worker
526*9880d681SAndroid Build Coastguard Workerdeclare float @sqrtf(float) readnone
527*9880d681SAndroid Build Coastguard Workerdefine float @sqrtA(float %a) nounwind uwtable readnone ssp {
528*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtA:
529*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
530*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0
531*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
532*9880d681SAndroid Build Coastguard Workerentry:
533*9880d681SAndroid Build Coastguard Worker  %conv1 = tail call float @sqrtf(float %a) nounwind readnone
534*9880d681SAndroid Build Coastguard Worker  ret float %conv1
535*9880d681SAndroid Build Coastguard Worker}
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Workerdeclare double @sqrt(double) readnone
538*9880d681SAndroid Build Coastguard Workerdefine double @sqrtB(double %a) nounwind uwtable readnone ssp {
539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtB:
540*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
541*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0
542*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
543*9880d681SAndroid Build Coastguard Workerentry:
544*9880d681SAndroid Build Coastguard Worker  %call = tail call double @sqrt(double %a) nounwind readnone
545*9880d681SAndroid Build Coastguard Worker  ret double %call
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.sqrt.f32(float)
549*9880d681SAndroid Build Coastguard Workerdefine float @sqrtC(float %a) nounwind {
550*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtC:
551*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
552*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0
553*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
554*9880d681SAndroid Build Coastguard Worker  %b = call float @llvm.sqrt.f32(float %a)
555*9880d681SAndroid Build Coastguard Worker  ret float %b
556*9880d681SAndroid Build Coastguard Worker}
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.sqrt.v16f32(<16 x float>)
559*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @sqrtD(<16 x float> %a) nounwind {
560*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtD:
561*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
562*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsqrtps %zmm0, %zmm0
563*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
564*9880d681SAndroid Build Coastguard Worker  %b = call <16 x float> @llvm.sqrt.v16f32(<16 x float> %a)
565*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %b
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.sqrt.v8f64(<8 x double>)
569*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sqrtE(<8 x double> %a) nounwind {
570*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sqrtE:
571*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
572*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsqrtpd %zmm0, %zmm0
573*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
574*9880d681SAndroid Build Coastguard Worker  %b = call <8 x double> @llvm.sqrt.v8f64(<8 x double> %a)
575*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %b
576*9880d681SAndroid Build Coastguard Worker}
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @fadd_broadcast(<16 x float> %a) nounwind {
579*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fadd_broadcast:
580*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
581*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps {{.*}}(%rip){1to16}, %zmm0, %zmm0
582*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
583*9880d681SAndroid Build Coastguard Worker  %b = fadd <16 x float> %a, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>
584*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %b
585*9880d681SAndroid Build Coastguard Worker}
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @addq_broadcast(<8 x i64> %a) nounwind {
588*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: addq_broadcast:
589*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
591*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
592*9880d681SAndroid Build Coastguard Worker  %b = add <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
593*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %b
594*9880d681SAndroid Build Coastguard Worker}
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @orq_broadcast(<8 x i64> %a) nounwind {
597*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orq_broadcast:
598*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
599*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vporq {{.*}}(%rip){1to8}, %zmm0, %zmm0
600*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
601*9880d681SAndroid Build Coastguard Worker  %b = or <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
602*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %b
603*9880d681SAndroid Build Coastguard Worker}
604*9880d681SAndroid Build Coastguard Worker
605*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @andd512fold(<16 x i32> %y, <16 x i32>* %x) {
606*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andd512fold:
607*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandd (%rdi), %zmm0, %zmm0
609*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
610*9880d681SAndroid Build Coastguard Workerentry:
611*9880d681SAndroid Build Coastguard Worker  %a = load <16 x i32>, <16 x i32>* %x, align 4
612*9880d681SAndroid Build Coastguard Worker  %b = and <16 x i32> %y, %a
613*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %b
614*9880d681SAndroid Build Coastguard Worker}
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @andqbrst(<8 x i64> %p1, i64* %ap) {
617*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andqbrst:
618*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %entry
619*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandq (%rdi){1to8}, %zmm0, %zmm0
620*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
621*9880d681SAndroid Build Coastguard Workerentry:
622*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ap, align 8
623*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x i64> undef, i64 %a, i32 0
624*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer
625*9880d681SAndroid Build Coastguard Worker  %d = and <8 x i64> %p1, %c
626*9880d681SAndroid Build Coastguard Worker  ret <8 x i64>%d
627*9880d681SAndroid Build Coastguard Worker}
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vaddps(<16 x float> %dst, <16 x float> %i,
630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddps:
631*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
632*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
634*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm2, %zmm1, %zmm0 {%k1}
635*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
636*9880d681SAndroid Build Coastguard Worker                                     <16 x float> %j, <16 x i32> %mask1)
637*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
638*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
639*9880d681SAndroid Build Coastguard Worker  %x = fadd <16 x float> %i, %j
640*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst
641*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
642*9880d681SAndroid Build Coastguard Worker}
643*9880d681SAndroid Build Coastguard Worker
644*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vmulps(<16 x float> %dst, <16 x float> %i,
645*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulps:
646*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
647*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
648*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
649*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmulps %zmm2, %zmm1, %zmm0 {%k1}
650*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
651*9880d681SAndroid Build Coastguard Worker                                     <16 x float> %j, <16 x i32> %mask1)
652*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
653*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
654*9880d681SAndroid Build Coastguard Worker  %x = fmul <16 x float> %i, %j
655*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst
656*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
657*9880d681SAndroid Build Coastguard Worker}
658*9880d681SAndroid Build Coastguard Worker
659*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vminps(<16 x float> %dst, <16 x float> %i,
660*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminps:
661*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
662*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
663*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
664*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vminps %zmm2, %zmm1, %zmm0 {%k1}
665*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
666*9880d681SAndroid Build Coastguard Worker                                     <16 x float> %j, <16 x i32> %mask1)
667*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
668*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
669*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp olt <16 x float> %i, %j
670*9880d681SAndroid Build Coastguard Worker  %min = select <16 x i1> %cmp_res, <16 x float> %i, <16 x float> %j
671*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x float> %min, <16 x float> %dst
672*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
673*9880d681SAndroid Build Coastguard Worker}
674*9880d681SAndroid Build Coastguard Worker
675*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_vminpd(<8 x double> %dst, <8 x double> %i,
676*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_mask_vminpd:
677*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
678*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def>
679*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpxor %ymm4, %ymm4, %ymm4
680*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
681*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vminpd %zmm2, %zmm1, %zmm0 {%k1}
682*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
683*9880d681SAndroid Build Coastguard Worker;
684*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_mask_vminpd:
685*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
686*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %ymm4, %ymm4, %ymm4
687*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpcmpneqd %ymm4, %ymm3, %k1
688*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vminpd %zmm2, %zmm1, %zmm0 {%k1}
689*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
690*9880d681SAndroid Build Coastguard Worker;
691*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_mask_vminpd:
692*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
693*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def>
694*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpxor %ymm4, %ymm4, %ymm4
695*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
696*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vminpd %zmm2, %zmm1, %zmm0 {%k1}
697*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
698*9880d681SAndroid Build Coastguard Worker;
699*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: test_mask_vminpd:
700*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
701*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def>
702*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpxor %ymm4, %ymm4, %ymm4
703*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
704*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vminpd %zmm2, %zmm1, %zmm0 {%k1}
705*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
706*9880d681SAndroid Build Coastguard Worker;
707*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_mask_vminpd:
708*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
709*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpxord %ymm4, %ymm4, %ymm4
710*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpneqd %ymm4, %ymm3, %k1
711*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vminpd %zmm2, %zmm1, %zmm0 {%k1}
712*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
713*9880d681SAndroid Build Coastguard Worker                                     <8 x double> %j, <8 x i32> %mask1)
714*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
715*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
716*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp olt <8 x double> %i, %j
717*9880d681SAndroid Build Coastguard Worker  %min = select <8 x i1> %cmp_res, <8 x double> %i, <8 x double> %j
718*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %min, <8 x double> %dst
719*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
720*9880d681SAndroid Build Coastguard Worker}
721*9880d681SAndroid Build Coastguard Worker
722*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vmaxps(<16 x float> %dst, <16 x float> %i,
723*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxps:
724*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
725*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
726*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
727*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmaxps %zmm2, %zmm1, %zmm0 {%k1}
728*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
729*9880d681SAndroid Build Coastguard Worker                                     <16 x float> %j, <16 x i32> %mask1)
730*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
731*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
732*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp ogt <16 x float> %i, %j
733*9880d681SAndroid Build Coastguard Worker  %max = select <16 x i1> %cmp_res, <16 x float> %i, <16 x float> %j
734*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x float> %max, <16 x float> %dst
735*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
736*9880d681SAndroid Build Coastguard Worker}
737*9880d681SAndroid Build Coastguard Worker
738*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_vmaxpd(<8 x double> %dst, <8 x double> %i,
739*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_mask_vmaxpd:
740*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
741*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def>
742*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpxor %ymm4, %ymm4, %ymm4
743*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
744*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmaxpd %zmm2, %zmm1, %zmm0 {%k1}
745*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
746*9880d681SAndroid Build Coastguard Worker;
747*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_mask_vmaxpd:
748*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
749*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %ymm4, %ymm4, %ymm4
750*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpcmpneqd %ymm4, %ymm3, %k1
751*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmaxpd %zmm2, %zmm1, %zmm0 {%k1}
752*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
753*9880d681SAndroid Build Coastguard Worker;
754*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_mask_vmaxpd:
755*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
756*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def>
757*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpxor %ymm4, %ymm4, %ymm4
758*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
759*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmaxpd %zmm2, %zmm1, %zmm0 {%k1}
760*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
761*9880d681SAndroid Build Coastguard Worker;
762*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: test_mask_vmaxpd:
763*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
764*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    ## kill: %YMM3<def> %YMM3<kill> %ZMM3<def>
765*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpxor %ymm4, %ymm4, %ymm4
766*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
767*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vmaxpd %zmm2, %zmm1, %zmm0 {%k1}
768*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
769*9880d681SAndroid Build Coastguard Worker;
770*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_mask_vmaxpd:
771*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
772*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpxord %ymm4, %ymm4, %ymm4
773*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpneqd %ymm4, %ymm3, %k1
774*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmaxpd %zmm2, %zmm1, %zmm0 {%k1}
775*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
776*9880d681SAndroid Build Coastguard Worker                                     <8 x double> %j, <8 x i32> %mask1)
777*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
778*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
779*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp ogt <8 x double> %i, %j
780*9880d681SAndroid Build Coastguard Worker  %max = select <8 x i1> %cmp_res, <8 x double> %i, <8 x double> %j
781*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %max, <8 x double> %dst
782*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
783*9880d681SAndroid Build Coastguard Worker}
784*9880d681SAndroid Build Coastguard Worker
785*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vsubps(<16 x float> %dst, <16 x float> %i,
786*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubps:
787*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
788*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
790*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vsubps %zmm2, %zmm1, %zmm0 {%k1}
791*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
792*9880d681SAndroid Build Coastguard Worker                                     <16 x float> %j, <16 x i32> %mask1)
793*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
794*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
795*9880d681SAndroid Build Coastguard Worker  %x = fsub <16 x float> %i, %j
796*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst
797*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
798*9880d681SAndroid Build Coastguard Worker}
799*9880d681SAndroid Build Coastguard Worker
800*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_vdivps(<16 x float> %dst, <16 x float> %i,
801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivps:
802*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
803*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
804*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqd %zmm4, %zmm3, %k1
805*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vdivps %zmm2, %zmm1, %zmm0 {%k1}
806*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
807*9880d681SAndroid Build Coastguard Worker                                     <16 x float> %j, <16 x i32> %mask1)
808*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
809*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
810*9880d681SAndroid Build Coastguard Worker  %x = fdiv <16 x float> %i, %j
811*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x float> %x, <16 x float> %dst
812*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
813*9880d681SAndroid Build Coastguard Worker}
814*9880d681SAndroid Build Coastguard Worker
815*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_vaddpd(<8 x double> %dst, <8 x double> %i,
816*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddpd:
817*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
818*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm4, %zmm4, %zmm4
819*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqq %zmm4, %zmm3, %k1
820*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm2, %zmm1, %zmm0 {%k1}
821*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
822*9880d681SAndroid Build Coastguard Worker                                     <8 x double> %j, <8 x i64> %mask1)
823*9880d681SAndroid Build Coastguard Worker                                     nounwind readnone {
824*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i64> %mask1, zeroinitializer
825*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %i, %j
826*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> %dst
827*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
828*9880d681SAndroid Build Coastguard Worker}
829*9880d681SAndroid Build Coastguard Worker
830*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_maskz_vaddpd(<8 x double> %i, <8 x double> %j,
831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_vaddpd:
832*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
833*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm3, %zmm3, %zmm3
834*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqq %zmm3, %zmm2, %k1
835*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm0 {%k1} {z}
836*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
837*9880d681SAndroid Build Coastguard Worker                                      <8 x i64> %mask1) nounwind readnone {
838*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i64> %mask1, zeroinitializer
839*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %i, %j
840*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> zeroinitializer
841*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
842*9880d681SAndroid Build Coastguard Worker}
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_fold_vaddpd(<8 x double> %dst, <8 x double> %i,
845*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_fold_vaddpd:
846*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
847*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm3, %zmm3, %zmm3
848*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqq %zmm3, %zmm2, %k1
849*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd (%rdi), %zmm1, %zmm0 {%k1}
850*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
851*9880d681SAndroid Build Coastguard Worker                                     <8 x double>* %j,  <8 x i64> %mask1)
852*9880d681SAndroid Build Coastguard Worker                                     nounwind {
853*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i64> %mask1, zeroinitializer
854*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x double>, <8 x double>* %j, align 8
855*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %i, %tmp
856*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> %dst
857*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
858*9880d681SAndroid Build Coastguard Worker}
859*9880d681SAndroid Build Coastguard Worker
860*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_maskz_fold_vaddpd(<8 x double> %i, <8 x double>* %j,
861*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_fold_vaddpd:
862*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
863*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm2, %zmm2, %zmm2
864*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqq %zmm2, %zmm1, %k1
865*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd (%rdi), %zmm0, %zmm0 {%k1} {z}
866*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
867*9880d681SAndroid Build Coastguard Worker                                      <8 x i64> %mask1) nounwind {
868*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i64> %mask1, zeroinitializer
869*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x double>, <8 x double>* %j, align 8
870*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %i, %tmp
871*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> zeroinitializer
872*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
873*9880d681SAndroid Build Coastguard Worker}
874*9880d681SAndroid Build Coastguard Worker
875*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_broadcast_vaddpd(<8 x double> %i, double* %j) nounwind {
876*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast_vaddpd:
877*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
878*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd (%rdi){1to8}, %zmm0, %zmm0
879*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
880*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
881*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x double> undef, double %tmp, i32 0
882*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x double> %b, <8 x double> undef,
883*9880d681SAndroid Build Coastguard Worker                     <8 x i32> zeroinitializer
884*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %c, %i
885*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %x
886*9880d681SAndroid Build Coastguard Worker}
887*9880d681SAndroid Build Coastguard Worker
888*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_broadcast_vaddpd(<8 x double> %dst, <8 x double> %i,
889*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_broadcast_vaddpd:
890*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
891*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm0, %zmm0, %zmm0
892*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqq %zmm0, %zmm2, %k1
893*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd (%rdi){1to8}, %zmm1, %zmm1 {%k1}
894*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
895*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
896*9880d681SAndroid Build Coastguard Worker                                      double* %j, <8 x i64> %mask1) nounwind {
897*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i64> %mask1, zeroinitializer
898*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
899*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x double> undef, double %tmp, i32 0
900*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x double> %b, <8 x double> undef,
901*9880d681SAndroid Build Coastguard Worker                     <8 x i32> zeroinitializer
902*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %c, %i
903*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> %i
904*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
905*9880d681SAndroid Build Coastguard Worker}
906*9880d681SAndroid Build Coastguard Worker
907*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_maskz_broadcast_vaddpd(<8 x double> %i, double* %j,
908*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_broadcast_vaddpd:
909*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
910*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm2, %zmm2, %zmm2
911*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpneqq %zmm2, %zmm1, %k1
912*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd (%rdi){1to8}, %zmm0, %zmm0 {%k1} {z}
913*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
914*9880d681SAndroid Build Coastguard Worker                                       <8 x i64> %mask1) nounwind {
915*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i64> %mask1, zeroinitializer
916*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
917*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x double> undef, double %tmp, i32 0
918*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x double> %b, <8 x double> undef,
919*9880d681SAndroid Build Coastguard Worker                     <8 x i32> zeroinitializer
920*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x double> %c, %i
921*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x double> %x, <8 x double> zeroinitializer
922*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
923*9880d681SAndroid Build Coastguard Worker}
924*9880d681SAndroid Build Coastguard Worker
925*9880d681SAndroid Build Coastguard Workerdefine <16 x float>  @test_fxor(<16 x float> %a) {
926*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_fxor:
927*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
928*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpxord {{.*}}(%rip), %zmm0, %zmm0
929*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
930*9880d681SAndroid Build Coastguard Worker;
931*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_fxor:
932*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
933*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord {{.*}}(%rip), %zmm0, %zmm0
934*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
935*9880d681SAndroid Build Coastguard Worker;
936*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_fxor:
937*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
938*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpxord {{.*}}(%rip), %zmm0, %zmm0
939*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
940*9880d681SAndroid Build Coastguard Worker;
941*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: test_fxor:
942*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
943*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vxorps {{.*}}(%rip), %zmm0, %zmm0
944*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
945*9880d681SAndroid Build Coastguard Worker;
946*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_fxor:
947*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
948*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vxorps {{.*}}(%rip), %zmm0, %zmm0
949*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
950*9880d681SAndroid Build Coastguard Worker
951*9880d681SAndroid Build Coastguard Worker  %res = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a
952*9880d681SAndroid Build Coastguard Worker  ret <16 x float>%res
953*9880d681SAndroid Build Coastguard Worker}
954*9880d681SAndroid Build Coastguard Worker
955*9880d681SAndroid Build Coastguard Workerdefine <8 x float>  @test_fxor_8f32(<8 x float> %a) {
956*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fxor_8f32:
957*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
958*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
959*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
960*9880d681SAndroid Build Coastguard Worker  %res = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a
961*9880d681SAndroid Build Coastguard Worker  ret <8 x float>%res
962*9880d681SAndroid Build Coastguard Worker}
963*9880d681SAndroid Build Coastguard Worker
964*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @fabs_v8f64(<8 x double> %p)
965*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: fabs_v8f64:
966*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
967*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip), %zmm0, %zmm0
968*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
969*9880d681SAndroid Build Coastguard Worker;
970*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: fabs_v8f64:
971*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
972*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpandq {{.*}}(%rip), %zmm0, %zmm0
973*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
974*9880d681SAndroid Build Coastguard Worker;
975*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: fabs_v8f64:
976*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
977*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq {{.*}}(%rip), %zmm0, %zmm0
978*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
979*9880d681SAndroid Build Coastguard Worker;
980*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: fabs_v8f64:
981*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
982*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vandpd {{.*}}(%rip), %zmm0, %zmm0
983*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
984*9880d681SAndroid Build Coastguard Worker;
985*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fabs_v8f64:
986*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
987*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vandpd {{.*}}(%rip), %zmm0, %zmm0
988*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
989*9880d681SAndroid Build Coastguard Worker{
990*9880d681SAndroid Build Coastguard Worker  %t = call <8 x double> @llvm.fabs.v8f64(<8 x double> %p)
991*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %t
992*9880d681SAndroid Build Coastguard Worker}
993*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.fabs.v8f64(<8 x double> %p)
994*9880d681SAndroid Build Coastguard Worker
995*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @fabs_v16f32(<16 x float> %p)
996*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: fabs_v16f32:
997*9880d681SAndroid Build Coastguard Worker; AVX512F:       ## BB#0:
998*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip), %zmm0, %zmm0
999*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
1000*9880d681SAndroid Build Coastguard Worker;
1001*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: fabs_v16f32:
1002*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1003*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpandd {{.*}}(%rip), %zmm0, %zmm0
1004*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1005*9880d681SAndroid Build Coastguard Worker;
1006*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: fabs_v16f32:
1007*9880d681SAndroid Build Coastguard Worker; AVX512BW:       ## BB#0:
1008*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandd {{.*}}(%rip), %zmm0, %zmm0
1009*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
1010*9880d681SAndroid Build Coastguard Worker;
1011*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: fabs_v16f32:
1012*9880d681SAndroid Build Coastguard Worker; AVX512DQ:       ## BB#0:
1013*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    vandps {{.*}}(%rip), %zmm0, %zmm0
1014*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT:    retq
1015*9880d681SAndroid Build Coastguard Worker;
1016*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fabs_v16f32:
1017*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1018*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vandps {{.*}}(%rip), %zmm0, %zmm0
1019*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1020*9880d681SAndroid Build Coastguard Worker{
1021*9880d681SAndroid Build Coastguard Worker  %t = call <16 x float> @llvm.fabs.v16f32(<16 x float> %p)
1022*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %t
1023*9880d681SAndroid Build Coastguard Worker}
1024*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.fabs.v16f32(<16 x float> %p)
1025