xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512vl-arith.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512vl| FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; 256-bit
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_test
6*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq %ymm{{.*}}
7*9880d681SAndroid Build Coastguard Worker; CHECK: ret
8*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_test(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
9*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i64> %i, %j
10*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_fold_test
14*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi), %ymm{{.*}}
15*9880d681SAndroid Build Coastguard Worker; CHECK: ret
16*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_fold_test(<4 x i64> %i, <4 x i64>* %j) nounwind {
17*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i64>, <4 x i64>* %j, align 4
18*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i64> %i, %tmp
19*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_broadcast_test
23*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq LCP{{.*}}(%rip){1to4}, %ymm{{.*}}
24*9880d681SAndroid Build Coastguard Worker; CHECK: ret
25*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_broadcast_test(<4 x i64> %i) nounwind {
26*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i64> %i, <i64 1, i64 1, i64 1, i64 1>
27*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq256_broadcast2_test
31*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi){1to4}, %ymm{{.*}}
32*9880d681SAndroid Build Coastguard Worker; CHECK: ret
33*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpaddq256_broadcast2_test(<4 x i64> %i, i64* %j.ptr) nounwind {
34*9880d681SAndroid Build Coastguard Worker  %j = load i64, i64* %j.ptr
35*9880d681SAndroid Build Coastguard Worker  %j.0 = insertelement <4 x i64> undef, i64 %j, i32 0
36*9880d681SAndroid Build Coastguard Worker  %j.v = shufflevector <4 x i64> %j.0, <4 x i64> undef, <4 x i32> zeroinitializer
37*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i64> %i, %j.v
38*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_test
42*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %ymm{{.*}}
43*9880d681SAndroid Build Coastguard Worker; CHECK: ret
44*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_test(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
45*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %j
46*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_fold_test
50*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %ymm{{.*}}
51*9880d681SAndroid Build Coastguard Worker; CHECK: ret
52*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_fold_test(<8 x i32> %i, <8 x i32>* %j) nounwind {
53*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i32>, <8 x i32>* %j, align 4
54*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %tmp
55*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_broadcast_test
59*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*}}
60*9880d681SAndroid Build Coastguard Worker; CHECK: ret
61*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_broadcast_test(<8 x i32> %i) nounwind {
62*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
63*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_mask_test
67*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %ymm{{.*%k[1-7].*}}
68*9880d681SAndroid Build Coastguard Worker; CHECK: ret
69*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_mask_test(<8 x i32> %i, <8 x i32> %j, <8 x i32> %mask1) nounwind readnone {
70*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
71*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %j
72*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i
73*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_maskz_test
77*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %ymm{{.*{%k[1-7]} {z}.*}}
78*9880d681SAndroid Build Coastguard Worker; CHECK: ret
79*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_maskz_test(<8 x i32> %i, <8 x i32> %j, <8 x i32> %mask1) nounwind readnone {
80*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
81*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %j
82*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
83*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_mask_fold_test
87*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %ymm{{.*%k[1-7]}}
88*9880d681SAndroid Build Coastguard Worker; CHECK: ret
89*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_mask_fold_test(<8 x i32> %i, <8 x i32>* %j.ptr, <8 x i32> %mask1) nounwind readnone {
90*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
91*9880d681SAndroid Build Coastguard Worker  %j = load <8 x i32>, <8 x i32>* %j.ptr
92*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %j
93*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i
94*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_mask_broadcast_test
98*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*{%k[1-7]}}}
99*9880d681SAndroid Build Coastguard Worker; CHECK: ret
100*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_mask_broadcast_test(<8 x i32> %i, <8 x i32> %mask1) nounwind readnone {
101*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
102*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
103*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i
104*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
105*9880d681SAndroid Build Coastguard Worker}
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_maskz_fold_test
108*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %ymm{{.*{%k[1-7]} {z}}}
109*9880d681SAndroid Build Coastguard Worker; CHECK: ret
110*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_maskz_fold_test(<8 x i32> %i, <8 x i32>* %j.ptr, <8 x i32> %mask1) nounwind readnone {
111*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
112*9880d681SAndroid Build Coastguard Worker  %j = load <8 x i32>, <8 x i32>* %j.ptr
113*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %j
114*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
115*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd256_maskz_broadcast_test
119*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*{%k[1-7]} {z}}}
120*9880d681SAndroid Build Coastguard Worker; CHECK: ret
121*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpaddd256_maskz_broadcast_test(<8 x i32> %i, <8 x i32> %mask1) nounwind readnone {
122*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
123*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
124*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
125*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubq256_test
129*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubq %ymm{{.*}}
130*9880d681SAndroid Build Coastguard Worker; CHECK: ret
131*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpsubq256_test(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
132*9880d681SAndroid Build Coastguard Worker  %x = sub <4 x i64> %i, %j
133*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubd256_test
137*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubd %ymm{{.*}}
138*9880d681SAndroid Build Coastguard Worker; CHECK: ret
139*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpsubd256_test(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
140*9880d681SAndroid Build Coastguard Worker  %x = sub <8 x i32> %i, %j
141*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
142*9880d681SAndroid Build Coastguard Worker}
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmulld256_test
145*9880d681SAndroid Build Coastguard Worker; CHECK: vpmulld %ymm{{.*}}
146*9880d681SAndroid Build Coastguard Worker; CHECK: ret
147*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vpmulld256_test(<8 x i32> %i, <8 x i32> %j) {
148*9880d681SAndroid Build Coastguard Worker  %x = mul <8 x i32> %i, %j
149*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaddpd_256
153*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd{{.*}}
154*9880d681SAndroid Build Coastguard Worker; CHECK: ret
155*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_vaddpd_256(<4 x double> %y, <4 x double> %x) {
156*9880d681SAndroid Build Coastguard Workerentry:
157*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <4 x double> %x, %y
158*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %add.i
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fold_vaddpd_256
162*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd LCP{{.*}}(%rip){{.*}}
163*9880d681SAndroid Build Coastguard Worker; CHECK: ret
164*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_fold_vaddpd_256(<4 x double> %y) {
165*9880d681SAndroid Build Coastguard Workerentry:
166*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <4 x double> %y, <double 4.500000e+00, double 3.400000e+00, double 4.500000e+00, double 5.600000e+00>
167*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %add.i
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast_vaddpd_256
171*9880d681SAndroid Build Coastguard Worker; CHECK: LCP{{.*}}(%rip){1to8}, %ymm0, %ymm0
172*9880d681SAndroid Build Coastguard Worker; CHECK: ret
173*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_broadcast_vaddpd_256(<8 x float> %a) nounwind {
174*9880d681SAndroid Build Coastguard Worker  %b = fadd <8 x float> %a, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>
175*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %b
176*9880d681SAndroid Build Coastguard Worker}
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddps_256
179*9880d681SAndroid Build Coastguard Worker; CHECK: vaddps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
180*9880d681SAndroid Build Coastguard Worker; CHECK: ret
181*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vaddps_256(<8 x float> %dst, <8 x float> %i,
182*9880d681SAndroid Build Coastguard Worker                                        <8 x float> %j, <8 x i32> %mask1)
183*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
184*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
185*9880d681SAndroid Build Coastguard Worker  %x = fadd <8 x float> %i, %j
186*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst
187*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %r
188*9880d681SAndroid Build Coastguard Worker}
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulps_256
191*9880d681SAndroid Build Coastguard Worker; CHECK: vmulps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
192*9880d681SAndroid Build Coastguard Worker; CHECK: ret
193*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vmulps_256(<8 x float> %dst, <8 x float> %i,
194*9880d681SAndroid Build Coastguard Worker                                        <8 x float> %j, <8 x i32> %mask1)
195*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
196*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
197*9880d681SAndroid Build Coastguard Worker  %x = fmul <8 x float> %i, %j
198*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst
199*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %r
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminps_256
203*9880d681SAndroid Build Coastguard Worker; CHECK: vminps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
204*9880d681SAndroid Build Coastguard Worker; CHECK: ret
205*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vminps_256(<8 x float> %dst, <8 x float> %i,
206*9880d681SAndroid Build Coastguard Worker                                        <8 x float> %j, <8 x i32> %mask1)
207*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
208*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
209*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp olt <8 x float> %i, %j
210*9880d681SAndroid Build Coastguard Worker  %min = select <8 x i1> %cmp_res, <8 x float> %i, <8 x float> %j
211*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x float> %min, <8 x float> %dst
212*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %r
213*9880d681SAndroid Build Coastguard Worker}
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxps_256
216*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
217*9880d681SAndroid Build Coastguard Worker; CHECK: ret
218*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vmaxps_256(<8 x float> %dst, <8 x float> %i,
219*9880d681SAndroid Build Coastguard Worker                                        <8 x float> %j, <8 x i32> %mask1)
220*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
221*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
222*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp ogt <8 x float> %i, %j
223*9880d681SAndroid Build Coastguard Worker  %max = select <8 x i1> %cmp_res, <8 x float> %i, <8 x float> %j
224*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x float> %max, <8 x float> %dst
225*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %r
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubps_256
229*9880d681SAndroid Build Coastguard Worker; CHECK: vsubps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
230*9880d681SAndroid Build Coastguard Worker; CHECK: ret
231*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vsubps_256(<8 x float> %dst, <8 x float> %i,
232*9880d681SAndroid Build Coastguard Worker                                        <8 x float> %j, <8 x i32> %mask1)
233*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
234*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
235*9880d681SAndroid Build Coastguard Worker  %x = fsub <8 x float> %i, %j
236*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst
237*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %r
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivps_256
241*9880d681SAndroid Build Coastguard Worker; CHECK: vdivps {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
242*9880d681SAndroid Build Coastguard Worker; CHECK: ret
243*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mask_vdivps_256(<8 x float> %dst, <8 x float> %i,
244*9880d681SAndroid Build Coastguard Worker                                        <8 x float> %j, <8 x i32> %mask1)
245*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
246*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i32> %mask1, zeroinitializer
247*9880d681SAndroid Build Coastguard Worker  %x = fdiv <8 x float> %i, %j
248*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x float> %x, <8 x float> %dst
249*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %r
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulpd_256
253*9880d681SAndroid Build Coastguard Worker; CHECK: vmulpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
254*9880d681SAndroid Build Coastguard Worker; CHECK: ret
255*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vmulpd_256(<4 x double> %dst, <4 x double> %i,
256*9880d681SAndroid Build Coastguard Worker                                        <4 x double> %j, <4 x i64> %mask1)
257*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
258*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
259*9880d681SAndroid Build Coastguard Worker  %x = fmul <4 x double> %i, %j
260*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst
261*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
262*9880d681SAndroid Build Coastguard Worker}
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminpd_256
265*9880d681SAndroid Build Coastguard Worker; CHECK: vminpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
266*9880d681SAndroid Build Coastguard Worker; CHECK: ret
267*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vminpd_256(<4 x double> %dst, <4 x double> %i,
268*9880d681SAndroid Build Coastguard Worker                                        <4 x double> %j, <4 x i64> %mask1)
269*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
270*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
271*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp olt <4 x double> %i, %j
272*9880d681SAndroid Build Coastguard Worker  %min = select <4 x i1> %cmp_res, <4 x double> %i, <4 x double> %j
273*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %min, <4 x double> %dst
274*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxpd_256
278*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
279*9880d681SAndroid Build Coastguard Worker; CHECK: ret
280*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vmaxpd_256(<4 x double> %dst, <4 x double> %i,
281*9880d681SAndroid Build Coastguard Worker                                        <4 x double> %j, <4 x i64> %mask1)
282*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
283*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
284*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp ogt <4 x double> %i, %j
285*9880d681SAndroid Build Coastguard Worker  %max = select <4 x i1> %cmp_res, <4 x double> %i, <4 x double> %j
286*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %max, <4 x double> %dst
287*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubpd_256
291*9880d681SAndroid Build Coastguard Worker; CHECK: vsubpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
292*9880d681SAndroid Build Coastguard Worker; CHECK: ret
293*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vsubpd_256(<4 x double> %dst, <4 x double> %i,
294*9880d681SAndroid Build Coastguard Worker                                        <4 x double> %j, <4 x i64> %mask1)
295*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
296*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
297*9880d681SAndroid Build Coastguard Worker  %x = fsub <4 x double> %i, %j
298*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst
299*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
300*9880d681SAndroid Build Coastguard Worker}
301*9880d681SAndroid Build Coastguard Worker
302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivpd_256
303*9880d681SAndroid Build Coastguard Worker; CHECK: vdivpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
304*9880d681SAndroid Build Coastguard Worker; CHECK: ret
305*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vdivpd_256(<4 x double> %dst, <4 x double> %i,
306*9880d681SAndroid Build Coastguard Worker                                        <4 x double> %j, <4 x i64> %mask1)
307*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
308*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
309*9880d681SAndroid Build Coastguard Worker  %x = fdiv <4 x double> %i, %j
310*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst
311*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddpd_256
315*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}}}
316*9880d681SAndroid Build Coastguard Worker; CHECK: ret
317*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_vaddpd_256(<4 x double> %dst, <4 x double> %i,
318*9880d681SAndroid Build Coastguard Worker                                         <4 x double> %j, <4 x i64> %mask1)
319*9880d681SAndroid Build Coastguard Worker                                         nounwind readnone {
320*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
321*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %i, %j
322*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst
323*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
324*9880d681SAndroid Build Coastguard Worker}
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_vaddpd_256
327*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%ymm[0-9]{1,2}, %ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]} {z}}}
328*9880d681SAndroid Build Coastguard Worker; CHECK: ret
329*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_maskz_vaddpd_256(<4 x double> %i, <4 x double> %j,
330*9880d681SAndroid Build Coastguard Worker                                          <4 x i64> %mask1) nounwind readnone {
331*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
332*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %i, %j
333*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> zeroinitializer
334*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_fold_vaddpd_256
338*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]}.*}}
339*9880d681SAndroid Build Coastguard Worker; CHECK: ret
340*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_fold_vaddpd_256(<4 x double> %dst, <4 x double> %i,
341*9880d681SAndroid Build Coastguard Worker                                         <4 x double>* %j,  <4 x i64> %mask1)
342*9880d681SAndroid Build Coastguard Worker                                         nounwind {
343*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
344*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x double>, <4 x double>* %j
345*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %i, %tmp
346*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %dst
347*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
348*9880d681SAndroid Build Coastguard Worker}
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_fold_vaddpd_256
351*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%ymm[0-9]{1,2}, %ymm[0-9]{1,2} {%k[1-7]} {z}.*}}
352*9880d681SAndroid Build Coastguard Worker; CHECK: ret
353*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_maskz_fold_vaddpd_256(<4 x double> %i, <4 x double>* %j,
354*9880d681SAndroid Build Coastguard Worker                                          <4 x i64> %mask1) nounwind {
355*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
356*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x double>, <4 x double>* %j
357*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %i, %tmp
358*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> zeroinitializer
359*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
360*9880d681SAndroid Build Coastguard Worker}
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast2_vaddpd_256
363*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to4}, %ymm{{.*}}
364*9880d681SAndroid Build Coastguard Worker; CHECK: ret
365*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_broadcast2_vaddpd_256(<4 x double> %i, double* %j) nounwind {
366*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
367*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x double> undef, double %tmp, i32 0
368*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x double> %b, <4 x double> undef,
369*9880d681SAndroid Build Coastguard Worker                     <4 x i32> zeroinitializer
370*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %c, %i
371*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %x
372*9880d681SAndroid Build Coastguard Worker}
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_broadcast_vaddpd_256
375*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to4}, %ymm{{.*{%k[1-7]}.*}}
376*9880d681SAndroid Build Coastguard Worker; CHECK: ret
377*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mask_broadcast_vaddpd_256(<4 x double> %dst, <4 x double> %i,
378*9880d681SAndroid Build Coastguard Worker                                          double* %j, <4 x i64> %mask1) nounwind {
379*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
380*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
381*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x double> undef, double %tmp, i32 0
382*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x double> %b, <4 x double> undef,
383*9880d681SAndroid Build Coastguard Worker                     <4 x i32> zeroinitializer
384*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %c, %i
385*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> %i
386*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
387*9880d681SAndroid Build Coastguard Worker}
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_broadcast_vaddpd_256
390*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to4}, %ymm{{.*{%k[1-7]} {z}.*}}
391*9880d681SAndroid Build Coastguard Worker; CHECK: ret
392*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_maskz_broadcast_vaddpd_256(<4 x double> %i, double* %j,
393*9880d681SAndroid Build Coastguard Worker                                           <4 x i64> %mask1) nounwind {
394*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i64> %mask1, zeroinitializer
395*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
396*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x double> undef, double %tmp, i32 0
397*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x double> %b, <4 x double> undef,
398*9880d681SAndroid Build Coastguard Worker                     <4 x i32> zeroinitializer
399*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x double> %c, %i
400*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x double> %x, <4 x double> zeroinitializer
401*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
402*9880d681SAndroid Build Coastguard Worker}
403*9880d681SAndroid Build Coastguard Worker
404*9880d681SAndroid Build Coastguard Worker; 128-bit
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq128_test
407*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq %xmm{{.*}}
408*9880d681SAndroid Build Coastguard Worker; CHECK: ret
409*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpaddq128_test(<2 x i64> %i, <2 x i64> %j) nounwind readnone {
410*9880d681SAndroid Build Coastguard Worker  %x = add <2 x i64> %i, %j
411*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
412*9880d681SAndroid Build Coastguard Worker}
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq128_fold_test
415*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi), %xmm{{.*}}
416*9880d681SAndroid Build Coastguard Worker; CHECK: ret
417*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpaddq128_fold_test(<2 x i64> %i, <2 x i64>* %j) nounwind {
418*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x i64>, <2 x i64>* %j, align 4
419*9880d681SAndroid Build Coastguard Worker  %x = add <2 x i64> %i, %tmp
420*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
421*9880d681SAndroid Build Coastguard Worker}
422*9880d681SAndroid Build Coastguard Worker
423*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddq128_broadcast2_test
424*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddq (%rdi){1to2}, %xmm{{.*}}
425*9880d681SAndroid Build Coastguard Worker; CHECK: ret
426*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpaddq128_broadcast2_test(<2 x i64> %i, i64* %j) nounwind {
427*9880d681SAndroid Build Coastguard Worker  %tmp = load i64, i64* %j
428*9880d681SAndroid Build Coastguard Worker  %j.0 = insertelement <2 x i64> undef, i64 %tmp, i32 0
429*9880d681SAndroid Build Coastguard Worker  %j.1 = insertelement <2 x i64> %j.0, i64 %tmp, i32 1
430*9880d681SAndroid Build Coastguard Worker  %x = add <2 x i64> %i, %j.1
431*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
432*9880d681SAndroid Build Coastguard Worker}
433*9880d681SAndroid Build Coastguard Worker
434*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_test
435*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %xmm{{.*}}
436*9880d681SAndroid Build Coastguard Worker; CHECK: ret
437*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_test(<4 x i32> %i, <4 x i32> %j) nounwind readnone {
438*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %j
439*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
440*9880d681SAndroid Build Coastguard Worker}
441*9880d681SAndroid Build Coastguard Worker
442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_fold_test
443*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %xmm{{.*}}
444*9880d681SAndroid Build Coastguard Worker; CHECK: ret
445*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_fold_test(<4 x i32> %i, <4 x i32>* %j) nounwind {
446*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i32>, <4 x i32>* %j, align 4
447*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %tmp
448*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
449*9880d681SAndroid Build Coastguard Worker}
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_broadcast_test
452*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*}}
453*9880d681SAndroid Build Coastguard Worker; CHECK: ret
454*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_broadcast_test(<4 x i32> %i) nounwind {
455*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1>
456*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_mask_test
460*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %xmm{{.*%k[1-7].*}}
461*9880d681SAndroid Build Coastguard Worker; CHECK: ret
462*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_mask_test(<4 x i32> %i, <4 x i32> %j, <4 x i32> %mask1) nounwind readnone {
463*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
464*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %j
465*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i
466*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
467*9880d681SAndroid Build Coastguard Worker}
468*9880d681SAndroid Build Coastguard Worker
469*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_maskz_test
470*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd %xmm{{.*{%k[1-7]} {z}.*}}
471*9880d681SAndroid Build Coastguard Worker; CHECK: ret
472*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_maskz_test(<4 x i32> %i, <4 x i32> %j, <4 x i32> %mask1) nounwind readnone {
473*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
474*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %j
475*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
476*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
477*9880d681SAndroid Build Coastguard Worker}
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_mask_fold_test
480*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %xmm{{.*%k[1-7]}}
481*9880d681SAndroid Build Coastguard Worker; CHECK: ret
482*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_mask_fold_test(<4 x i32> %i, <4 x i32>* %j.ptr, <4 x i32> %mask1) nounwind readnone {
483*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
484*9880d681SAndroid Build Coastguard Worker  %j = load <4 x i32>, <4 x i32>* %j.ptr
485*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %j
486*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i
487*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
488*9880d681SAndroid Build Coastguard Worker}
489*9880d681SAndroid Build Coastguard Worker
490*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_mask_broadcast_test
491*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*{%k[1-7]}}}
492*9880d681SAndroid Build Coastguard Worker; CHECK: ret
493*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_mask_broadcast_test(<4 x i32> %i, <4 x i32> %mask1) nounwind readnone {
494*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
495*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1>
496*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i
497*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
498*9880d681SAndroid Build Coastguard Worker}
499*9880d681SAndroid Build Coastguard Worker
500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_maskz_fold_test
501*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd (%rdi), %xmm{{.*{%k[1-7]} {z}}}
502*9880d681SAndroid Build Coastguard Worker; CHECK: ret
503*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_maskz_fold_test(<4 x i32> %i, <4 x i32>* %j.ptr, <4 x i32> %mask1) nounwind readnone {
504*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
505*9880d681SAndroid Build Coastguard Worker  %j = load <4 x i32>, <4 x i32>* %j.ptr
506*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %j
507*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
508*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
509*9880d681SAndroid Build Coastguard Worker}
510*9880d681SAndroid Build Coastguard Worker
511*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddd128_maskz_broadcast_test
512*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*{%k[1-7]} {z}}}
513*9880d681SAndroid Build Coastguard Worker; CHECK: ret
514*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpaddd128_maskz_broadcast_test(<4 x i32> %i, <4 x i32> %mask1) nounwind readnone {
515*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
516*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1>
517*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
518*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
519*9880d681SAndroid Build Coastguard Worker}
520*9880d681SAndroid Build Coastguard Worker
521*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubq128_test
522*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubq %xmm{{.*}}
523*9880d681SAndroid Build Coastguard Worker; CHECK: ret
524*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpsubq128_test(<2 x i64> %i, <2 x i64> %j) nounwind readnone {
525*9880d681SAndroid Build Coastguard Worker  %x = sub <2 x i64> %i, %j
526*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubd128_test
530*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubd %xmm{{.*}}
531*9880d681SAndroid Build Coastguard Worker; CHECK: ret
532*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpsubd128_test(<4 x i32> %i, <4 x i32> %j) nounwind readnone {
533*9880d681SAndroid Build Coastguard Worker  %x = sub <4 x i32> %i, %j
534*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
535*9880d681SAndroid Build Coastguard Worker}
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmulld128_test
538*9880d681SAndroid Build Coastguard Worker; CHECK: vpmulld %xmm{{.*}}
539*9880d681SAndroid Build Coastguard Worker; CHECK: ret
540*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vpmulld128_test(<4 x i32> %i, <4 x i32> %j) {
541*9880d681SAndroid Build Coastguard Worker  %x = mul <4 x i32> %i, %j
542*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
543*9880d681SAndroid Build Coastguard Worker}
544*9880d681SAndroid Build Coastguard Worker
545*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaddpd_128
546*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd{{.*}}
547*9880d681SAndroid Build Coastguard Worker; CHECK: ret
548*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vaddpd_128(<2 x double> %y, <2 x double> %x) {
549*9880d681SAndroid Build Coastguard Workerentry:
550*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <2 x double> %x, %y
551*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %add.i
552*9880d681SAndroid Build Coastguard Worker}
553*9880d681SAndroid Build Coastguard Worker
554*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fold_vaddpd_128
555*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd LCP{{.*}}(%rip){{.*}}
556*9880d681SAndroid Build Coastguard Worker; CHECK: ret
557*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_fold_vaddpd_128(<2 x double> %y) {
558*9880d681SAndroid Build Coastguard Workerentry:
559*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <2 x double> %y, <double 4.500000e+00, double 3.400000e+00>
560*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %add.i
561*9880d681SAndroid Build Coastguard Worker}
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast_vaddpd_128
564*9880d681SAndroid Build Coastguard Worker; CHECK: LCP{{.*}}(%rip){1to4}, %xmm0, %xmm0
565*9880d681SAndroid Build Coastguard Worker; CHECK: ret
566*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_broadcast_vaddpd_128(<4 x float> %a) nounwind {
567*9880d681SAndroid Build Coastguard Worker  %b = fadd <4 x float> %a, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>
568*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %b
569*9880d681SAndroid Build Coastguard Worker}
570*9880d681SAndroid Build Coastguard Worker
571*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddps_128
572*9880d681SAndroid Build Coastguard Worker; CHECK: vaddps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
573*9880d681SAndroid Build Coastguard Worker; CHECK: ret
574*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vaddps_128(<4 x float> %dst, <4 x float> %i,
575*9880d681SAndroid Build Coastguard Worker                                        <4 x float> %j, <4 x i32> %mask1)
576*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
577*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
578*9880d681SAndroid Build Coastguard Worker  %x = fadd <4 x float> %i, %j
579*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst
580*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
581*9880d681SAndroid Build Coastguard Worker}
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulps_128
584*9880d681SAndroid Build Coastguard Worker; CHECK: vmulps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
585*9880d681SAndroid Build Coastguard Worker; CHECK: ret
586*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vmulps_128(<4 x float> %dst, <4 x float> %i,
587*9880d681SAndroid Build Coastguard Worker                                        <4 x float> %j, <4 x i32> %mask1)
588*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
589*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
590*9880d681SAndroid Build Coastguard Worker  %x = fmul <4 x float> %i, %j
591*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst
592*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
593*9880d681SAndroid Build Coastguard Worker}
594*9880d681SAndroid Build Coastguard Worker
595*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminps_128
596*9880d681SAndroid Build Coastguard Worker; CHECK: vminps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
597*9880d681SAndroid Build Coastguard Worker; CHECK: ret
598*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vminps_128(<4 x float> %dst, <4 x float> %i,
599*9880d681SAndroid Build Coastguard Worker                                        <4 x float> %j, <4 x i32> %mask1)
600*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
601*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
602*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp olt <4 x float> %i, %j
603*9880d681SAndroid Build Coastguard Worker  %min = select <4 x i1> %cmp_res, <4 x float> %i, <4 x float> %j
604*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x float> %min, <4 x float> %dst
605*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
606*9880d681SAndroid Build Coastguard Worker}
607*9880d681SAndroid Build Coastguard Worker
608*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxps_128
609*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
610*9880d681SAndroid Build Coastguard Worker; CHECK: ret
611*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vmaxps_128(<4 x float> %dst, <4 x float> %i,
612*9880d681SAndroid Build Coastguard Worker                                        <4 x float> %j, <4 x i32> %mask1)
613*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
614*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
615*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp ogt <4 x float> %i, %j
616*9880d681SAndroid Build Coastguard Worker  %max = select <4 x i1> %cmp_res, <4 x float> %i, <4 x float> %j
617*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x float> %max, <4 x float> %dst
618*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
619*9880d681SAndroid Build Coastguard Worker}
620*9880d681SAndroid Build Coastguard Worker
621*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubps_128
622*9880d681SAndroid Build Coastguard Worker; CHECK: vsubps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
623*9880d681SAndroid Build Coastguard Worker; CHECK: ret
624*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vsubps_128(<4 x float> %dst, <4 x float> %i,
625*9880d681SAndroid Build Coastguard Worker                                        <4 x float> %j, <4 x i32> %mask1)
626*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
627*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
628*9880d681SAndroid Build Coastguard Worker  %x = fsub <4 x float> %i, %j
629*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst
630*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
631*9880d681SAndroid Build Coastguard Worker}
632*9880d681SAndroid Build Coastguard Worker
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivps_128
635*9880d681SAndroid Build Coastguard Worker; CHECK: vdivps {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
636*9880d681SAndroid Build Coastguard Worker; CHECK: ret
637*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mask_vdivps_128(<4 x float> %dst, <4 x float> %i,
638*9880d681SAndroid Build Coastguard Worker                                        <4 x float> %j, <4 x i32> %mask1)
639*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
640*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <4 x i32> %mask1, zeroinitializer
641*9880d681SAndroid Build Coastguard Worker  %x = fdiv <4 x float> %i, %j
642*9880d681SAndroid Build Coastguard Worker  %r = select <4 x i1> %mask, <4 x float> %x, <4 x float> %dst
643*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmulpd_128
647*9880d681SAndroid Build Coastguard Worker; CHECK: vmulpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
648*9880d681SAndroid Build Coastguard Worker; CHECK: ret
649*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vmulpd_128(<2 x double> %dst, <2 x double> %i,
650*9880d681SAndroid Build Coastguard Worker                                        <2 x double> %j, <2 x i64> %mask1)
651*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
652*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
653*9880d681SAndroid Build Coastguard Worker  %x = fmul <2 x double> %i, %j
654*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst
655*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
656*9880d681SAndroid Build Coastguard Worker}
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vminpd_128
659*9880d681SAndroid Build Coastguard Worker; CHECK: vminpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
660*9880d681SAndroid Build Coastguard Worker; CHECK: ret
661*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vminpd_128(<2 x double> %dst, <2 x double> %i,
662*9880d681SAndroid Build Coastguard Worker                                        <2 x double> %j, <2 x i64> %mask1)
663*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
664*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
665*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp olt <2 x double> %i, %j
666*9880d681SAndroid Build Coastguard Worker  %min = select <2 x i1> %cmp_res, <2 x double> %i, <2 x double> %j
667*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %min, <2 x double> %dst
668*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
669*9880d681SAndroid Build Coastguard Worker}
670*9880d681SAndroid Build Coastguard Worker
671*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vmaxpd_128
672*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
673*9880d681SAndroid Build Coastguard Worker; CHECK: ret
674*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vmaxpd_128(<2 x double> %dst, <2 x double> %i,
675*9880d681SAndroid Build Coastguard Worker                                        <2 x double> %j, <2 x i64> %mask1)
676*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
677*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
678*9880d681SAndroid Build Coastguard Worker  %cmp_res = fcmp ogt <2 x double> %i, %j
679*9880d681SAndroid Build Coastguard Worker  %max = select <2 x i1> %cmp_res, <2 x double> %i, <2 x double> %j
680*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %max, <2 x double> %dst
681*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
682*9880d681SAndroid Build Coastguard Worker}
683*9880d681SAndroid Build Coastguard Worker
684*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vsubpd_128
685*9880d681SAndroid Build Coastguard Worker; CHECK: vsubpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
686*9880d681SAndroid Build Coastguard Worker; CHECK: ret
687*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vsubpd_128(<2 x double> %dst, <2 x double> %i,
688*9880d681SAndroid Build Coastguard Worker                                        <2 x double> %j, <2 x i64> %mask1)
689*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
690*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
691*9880d681SAndroid Build Coastguard Worker  %x = fsub <2 x double> %i, %j
692*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst
693*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
694*9880d681SAndroid Build Coastguard Worker}
695*9880d681SAndroid Build Coastguard Worker
696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vdivpd_128
697*9880d681SAndroid Build Coastguard Worker; CHECK: vdivpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
698*9880d681SAndroid Build Coastguard Worker; CHECK: ret
699*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vdivpd_128(<2 x double> %dst, <2 x double> %i,
700*9880d681SAndroid Build Coastguard Worker                                        <2 x double> %j, <2 x i64> %mask1)
701*9880d681SAndroid Build Coastguard Worker                                        nounwind readnone {
702*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
703*9880d681SAndroid Build Coastguard Worker  %x = fdiv <2 x double> %i, %j
704*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst
705*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
706*9880d681SAndroid Build Coastguard Worker}
707*9880d681SAndroid Build Coastguard Worker
708*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_vaddpd_128
709*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}}}
710*9880d681SAndroid Build Coastguard Worker; CHECK: ret
711*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_vaddpd_128(<2 x double> %dst, <2 x double> %i,
712*9880d681SAndroid Build Coastguard Worker                                         <2 x double> %j, <2 x i64> %mask1)
713*9880d681SAndroid Build Coastguard Worker                                         nounwind readnone {
714*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
715*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %i, %j
716*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst
717*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
718*9880d681SAndroid Build Coastguard Worker}
719*9880d681SAndroid Build Coastguard Worker
720*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_vaddpd_128
721*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd {{%xmm[0-9]{1,2}, %xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]} {z}}}
722*9880d681SAndroid Build Coastguard Worker; CHECK: ret
723*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maskz_vaddpd_128(<2 x double> %i, <2 x double> %j,
724*9880d681SAndroid Build Coastguard Worker                                          <2 x i64> %mask1) nounwind readnone {
725*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
726*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %i, %j
727*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> zeroinitializer
728*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
729*9880d681SAndroid Build Coastguard Worker}
730*9880d681SAndroid Build Coastguard Worker
731*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_fold_vaddpd_128
732*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]}.*}}
733*9880d681SAndroid Build Coastguard Worker; CHECK: ret
734*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_fold_vaddpd_128(<2 x double> %dst, <2 x double> %i,
735*9880d681SAndroid Build Coastguard Worker                                         <2 x double>* %j,  <2 x i64> %mask1)
736*9880d681SAndroid Build Coastguard Worker                                         nounwind {
737*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
738*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x double>, <2 x double>* %j
739*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %i, %tmp
740*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %dst
741*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
742*9880d681SAndroid Build Coastguard Worker}
743*9880d681SAndroid Build Coastguard Worker
744*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_fold_vaddpd_128
745*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi), {{.*%xmm[0-9]{1,2}, %xmm[0-9]{1,2} {%k[1-7]} {z}.*}}
746*9880d681SAndroid Build Coastguard Worker; CHECK: ret
747*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maskz_fold_vaddpd_128(<2 x double> %i, <2 x double>* %j,
748*9880d681SAndroid Build Coastguard Worker                                          <2 x i64> %mask1) nounwind {
749*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
750*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x double>, <2 x double>* %j
751*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %i, %tmp
752*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> zeroinitializer
753*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
754*9880d681SAndroid Build Coastguard Worker}
755*9880d681SAndroid Build Coastguard Worker
756*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_broadcast2_vaddpd_128
757*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to2}, %xmm{{.*}}
758*9880d681SAndroid Build Coastguard Worker; CHECK: ret
759*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_broadcast2_vaddpd_128(<2 x double> %i, double* %j) nounwind {
760*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
761*9880d681SAndroid Build Coastguard Worker  %j.0 = insertelement <2 x double> undef, double %tmp, i64 0
762*9880d681SAndroid Build Coastguard Worker  %j.1 = insertelement <2 x double> %j.0, double %tmp, i64 1
763*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %j.1, %i
764*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %x
765*9880d681SAndroid Build Coastguard Worker}
766*9880d681SAndroid Build Coastguard Worker
767*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_broadcast_vaddpd_128
768*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to2}, %xmm{{.*{%k[1-7]}.*}}
769*9880d681SAndroid Build Coastguard Worker; CHECK: ret
770*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mask_broadcast_vaddpd_128(<2 x double> %dst, <2 x double> %i,
771*9880d681SAndroid Build Coastguard Worker                                          double* %j, <2 x i64> %mask1)
772*9880d681SAndroid Build Coastguard Worker                                          nounwind {
773*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
774*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
775*9880d681SAndroid Build Coastguard Worker  %j.0 = insertelement <2 x double> undef, double %tmp, i64 0
776*9880d681SAndroid Build Coastguard Worker  %j.1 = insertelement <2 x double> %j.0, double %tmp, i64 1
777*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %j.1, %i
778*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> %i
779*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
780*9880d681SAndroid Build Coastguard Worker}
781*9880d681SAndroid Build Coastguard Worker
782*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_maskz_broadcast_vaddpd_128
783*9880d681SAndroid Build Coastguard Worker; CHECK: vaddpd (%rdi){1to2}, %xmm{{.*{%k[1-7]} {z}.*}}
784*9880d681SAndroid Build Coastguard Worker; CHECK: ret
785*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maskz_broadcast_vaddpd_128(<2 x double> %i, double* %j,
786*9880d681SAndroid Build Coastguard Worker                                           <2 x i64> %mask1) nounwind {
787*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <2 x i64> %mask1, zeroinitializer
788*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* %j
789*9880d681SAndroid Build Coastguard Worker  %j.0 = insertelement <2 x double> undef, double %tmp, i64 0
790*9880d681SAndroid Build Coastguard Worker  %j.1 = insertelement <2 x double> %j.0, double %tmp, i64 1
791*9880d681SAndroid Build Coastguard Worker  %x = fadd <2 x double> %j.1, %i
792*9880d681SAndroid Build Coastguard Worker  %r = select <2 x i1> %mask, <2 x double> %x, <2 x double> zeroinitializer
793*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r
794*9880d681SAndroid Build Coastguard Worker}
795