1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512vl| FileCheck %s
5 ; CHECK-LABEL: vpaddq256_test
6 ; CHECK: vpaddq %ymm{{.*}}
8 define <4 x i64> @vpaddq256_test(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
9 %x = add <4 x i64> %i, %j
13 ; CHECK-LABEL: vpaddq256_fold_test
14 ; CHECK: vpaddq (%rdi), %ymm{{.*}}
16 define <4 x i64> @vpaddq256_fold_test(<4 x i64> %i, <4 x i64>* %j) nounwind {
17 %tmp = load <4 x i64>* %j, align 4
18 %x = add <4 x i64> %i, %tmp
22 ; CHECK-LABEL: vpaddq256_broadcast_test
23 ; CHECK: vpaddq LCP{{.*}}(%rip){1to4}, %ymm{{.*}}
25 define <4 x i64> @vpaddq256_broadcast_test(<4 x i64> %i) nounwind {
26 %x = add <4 x i64> %i, <i64 1, i64 1, i64 1, i64 1>
30 ; CHECK-LABEL: vpaddq256_broadcast2_test
31 ; CHECK: vpaddq (%rdi){1to4}, %ymm{{.*}}
33 define <4 x i64> @vpaddq256_broadcast2_test(<4 x i64> %i, i64* %j.ptr) nounwind {
35 %j.0 = insertelement <4 x i64> undef, i64 %j, i32 0
36 %j.v = shufflevector <4 x i64> %j.0, <4 x i64> undef, <4 x i32> zeroinitializer
37 %x = add <4 x i64> %i, %j.v
41 ; CHECK-LABEL: vpaddd256_test
42 ; CHECK: vpaddd %ymm{{.*}}
44 define <8 x i32> @vpaddd256_test(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
45 %x = add <8 x i32> %i, %j
49 ; CHECK-LABEL: vpaddd256_fold_test
50 ; CHECK: vpaddd (%rdi), %ymm{{.*}}
52 define <8 x i32> @vpaddd256_fold_test(<8 x i32> %i, <8 x i32>* %j) nounwind {
53 %tmp = load <8 x i32>* %j, align 4
54 %x = add <8 x i32> %i, %tmp
58 ; CHECK-LABEL: vpaddd256_broadcast_test
59 ; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*}}
61 define <8 x i32> @vpaddd256_broadcast_test(<8 x i32> %i) nounwind {
62 %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
66 ; CHECK-LABEL: vpaddd256_mask_test
67 ; CHECK: vpaddd %ymm{{.*%k[1-7].*}}
69 define <8 x i32> @vpaddd256_mask_test(<8 x i32> %i, <8 x i32> %j, <8 x i32> %mask1) nounwind readnone {
70 %mask = icmp ne <8 x i32> %mask1, zeroinitializer
71 %x = add <8 x i32> %i, %j
72 %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i
76 ; CHECK-LABEL: vpaddd256_maskz_test
77 ; CHECK: vpaddd %ymm{{.*{%k[1-7]} {z}.*}}
79 define <8 x i32> @vpaddd256_maskz_test(<8 x i32> %i, <8 x i32> %j, <8 x i32> %mask1) nounwind readnone {
80 %mask = icmp ne <8 x i32> %mask1, zeroinitializer
81 %x = add <8 x i32> %i, %j
82 %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
86 ; CHECK-LABEL: vpaddd256_mask_fold_test
87 ; CHECK: vpaddd (%rdi), %ymm{{.*%k[1-7]}}
89 define <8 x i32> @vpaddd256_mask_fold_test(<8 x i32> %i, <8 x i32>* %j.ptr, <8 x i32> %mask1) nounwind readnone {
90 %mask = icmp ne <8 x i32> %mask1, zeroinitializer
91 %j = load <8 x i32>* %j.ptr
92 %x = add <8 x i32> %i, %j
93 %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i
97 ; CHECK-LABEL: vpaddd256_mask_broadcast_test
98 ; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*{%k[1-7]}}}
100 define <8 x i32> @vpaddd256_mask_broadcast_test(<8 x i32> %i, <8 x i32> %mask1) nounwind readnone {
101 %mask = icmp ne <8 x i32> %mask1, zeroinitializer
102 %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
103 %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %i
107 ; CHECK-LABEL: vpaddd256_maskz_fold_test
108 ; CHECK: vpaddd (%rdi), %ymm{{.*{%k[1-7]} {z}}}
110 define <8 x i32> @vpaddd256_maskz_fold_test(<8 x i32> %i, <8 x i32>* %j.ptr, <8 x i32> %mask1) nounwind readnone {
111 %mask = icmp ne <8 x i32> %mask1, zeroinitializer
112 %j = load <8 x i32>* %j.ptr
113 %x = add <8 x i32> %i, %j
114 %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
118 ; CHECK-LABEL: vpaddd256_maskz_broadcast_test
119 ; CHECK: vpaddd LCP{{.*}}(%rip){1to8}, %ymm{{.*{%k[1-7]} {z}}}
121 define <8 x i32> @vpaddd256_maskz_broadcast_test(<8 x i32> %i, <8 x i32> %mask1) nounwind readnone {
122 %mask = icmp ne <8 x i32> %mask1, zeroinitializer
123 %x = add <8 x i32> %i, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
124 %r = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
128 ; CHECK-LABEL: vpsubq256_test
129 ; CHECK: vpsubq %ymm{{.*}}
131 define <4 x i64> @vpsubq256_test(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
132 %x = sub <4 x i64> %i, %j
136 ; CHECK-LABEL: vpsubd256_test
137 ; CHECK: vpsubd %ymm{{.*}}
139 define <8 x i32> @vpsubd256_test(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
140 %x = sub <8 x i32> %i, %j
144 ; CHECK-LABEL: vpmulld256_test
145 ; CHECK: vpmulld %ymm{{.*}}
147 define <8 x i32> @vpmulld256_test(<8 x i32> %i, <8 x i32> %j) {
148 %x = mul <8 x i32> %i, %j
154 ; CHECK-LABEL: vpaddq128_test
155 ; CHECK: vpaddq %xmm{{.*}}
157 define <2 x i64> @vpaddq128_test(<2 x i64> %i, <2 x i64> %j) nounwind readnone {
158 %x = add <2 x i64> %i, %j
162 ; CHECK-LABEL: vpaddq128_fold_test
163 ; CHECK: vpaddq (%rdi), %xmm{{.*}}
165 define <2 x i64> @vpaddq128_fold_test(<2 x i64> %i, <2 x i64>* %j) nounwind {
166 %tmp = load <2 x i64>* %j, align 4
167 %x = add <2 x i64> %i, %tmp
171 ; CHECK-LABEL: vpaddq128_broadcast2_test
172 ; CHECK: vpaddq (%rdi){1to2}, %xmm{{.*}}
174 define <2 x i64> @vpaddq128_broadcast2_test(<2 x i64> %i, i64* %j) nounwind {
176 %j.0 = insertelement <2 x i64> undef, i64 %tmp, i32 0
177 %j.1 = insertelement <2 x i64> %j.0, i64 %tmp, i32 1
178 %x = add <2 x i64> %i, %j.1
182 ; CHECK-LABEL: vpaddd128_test
183 ; CHECK: vpaddd %xmm{{.*}}
185 define <4 x i32> @vpaddd128_test(<4 x i32> %i, <4 x i32> %j) nounwind readnone {
186 %x = add <4 x i32> %i, %j
190 ; CHECK-LABEL: vpaddd128_fold_test
191 ; CHECK: vpaddd (%rdi), %xmm{{.*}}
193 define <4 x i32> @vpaddd128_fold_test(<4 x i32> %i, <4 x i32>* %j) nounwind {
194 %tmp = load <4 x i32>* %j, align 4
195 %x = add <4 x i32> %i, %tmp
199 ; CHECK-LABEL: vpaddd128_broadcast_test
200 ; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*}}
202 define <4 x i32> @vpaddd128_broadcast_test(<4 x i32> %i) nounwind {
203 %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1>
207 ; CHECK-LABEL: vpaddd128_mask_test
208 ; CHECK: vpaddd %xmm{{.*%k[1-7].*}}
210 define <4 x i32> @vpaddd128_mask_test(<4 x i32> %i, <4 x i32> %j, <4 x i32> %mask1) nounwind readnone {
211 %mask = icmp ne <4 x i32> %mask1, zeroinitializer
212 %x = add <4 x i32> %i, %j
213 %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i
217 ; CHECK-LABEL: vpaddd128_maskz_test
218 ; CHECK: vpaddd %xmm{{.*{%k[1-7]} {z}.*}}
220 define <4 x i32> @vpaddd128_maskz_test(<4 x i32> %i, <4 x i32> %j, <4 x i32> %mask1) nounwind readnone {
221 %mask = icmp ne <4 x i32> %mask1, zeroinitializer
222 %x = add <4 x i32> %i, %j
223 %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
227 ; CHECK-LABEL: vpaddd128_mask_fold_test
228 ; CHECK: vpaddd (%rdi), %xmm{{.*%k[1-7]}}
230 define <4 x i32> @vpaddd128_mask_fold_test(<4 x i32> %i, <4 x i32>* %j.ptr, <4 x i32> %mask1) nounwind readnone {
231 %mask = icmp ne <4 x i32> %mask1, zeroinitializer
232 %j = load <4 x i32>* %j.ptr
233 %x = add <4 x i32> %i, %j
234 %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i
238 ; CHECK-LABEL: vpaddd128_mask_broadcast_test
239 ; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*{%k[1-7]}}}
241 define <4 x i32> @vpaddd128_mask_broadcast_test(<4 x i32> %i, <4 x i32> %mask1) nounwind readnone {
242 %mask = icmp ne <4 x i32> %mask1, zeroinitializer
243 %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1>
244 %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %i
248 ; CHECK-LABEL: vpaddd128_maskz_fold_test
249 ; CHECK: vpaddd (%rdi), %xmm{{.*{%k[1-7]} {z}}}
251 define <4 x i32> @vpaddd128_maskz_fold_test(<4 x i32> %i, <4 x i32>* %j.ptr, <4 x i32> %mask1) nounwind readnone {
252 %mask = icmp ne <4 x i32> %mask1, zeroinitializer
253 %j = load <4 x i32>* %j.ptr
254 %x = add <4 x i32> %i, %j
255 %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
259 ; CHECK-LABEL: vpaddd128_maskz_broadcast_test
260 ; CHECK: vpaddd LCP{{.*}}(%rip){1to4}, %xmm{{.*{%k[1-7]} {z}}}
262 define <4 x i32> @vpaddd128_maskz_broadcast_test(<4 x i32> %i, <4 x i32> %mask1) nounwind readnone {
263 %mask = icmp ne <4 x i32> %mask1, zeroinitializer
264 %x = add <4 x i32> %i, <i32 1, i32 1, i32 1, i32 1>
265 %r = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
269 ; CHECK-LABEL: vpsubq128_test
270 ; CHECK: vpsubq %xmm{{.*}}
272 define <2 x i64> @vpsubq128_test(<2 x i64> %i, <2 x i64> %j) nounwind readnone {
273 %x = sub <2 x i64> %i, %j
277 ; CHECK-LABEL: vpsubd128_test
278 ; CHECK: vpsubd %xmm{{.*}}
280 define <4 x i32> @vpsubd128_test(<4 x i32> %i, <4 x i32> %j) nounwind readnone {
281 %x = sub <4 x i32> %i, %j
285 ; CHECK-LABEL: vpmulld128_test
286 ; CHECK: vpmulld %xmm{{.*}}
288 define <4 x i32> @vpmulld128_test(<4 x i32> %i, <4 x i32> %j) {
289 %x = mul <4 x i32> %i, %j