[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / avx512-shuffles / broadcast-vector-int.ll
blob9c9df48c03c09e96ac2744ed9344ddd2f69d64bd
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512vl,+avx512dq,+fast-variable-shuffle %s -o - | FileCheck %s
4 ; FIXME: fixing PR34394 should fix the i32x2 memory cases resulting in a simple vbroadcasti32x2 instruction.
6 define <4 x i32> @test_2xi32_to_4xi32(<4 x i32> %vec) {
7 ; CHECK-LABEL: test_2xi32_to_4xi32:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
10 ; CHECK-NEXT:    retq
11   %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
12   ret <4 x i32> %res
14 define <4 x i32> @test_masked_2xi32_to_4xi32_mask0(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {
15 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask0:
16 ; CHECK:       # %bb.0:
17 ; CHECK-NEXT:    vptestnmd %xmm2, %xmm2, %k1
18 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]
19 ; CHECK-NEXT:    vmovdqa %xmm1, %xmm0
20 ; CHECK-NEXT:    retq
21   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
22   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
23   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
24   ret <4 x i32> %res
27 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask0(<4 x i32> %vec, <4 x i32> %mask) {
28 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask0:
29 ; CHECK:       # %bb.0:
30 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
31 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]
32 ; CHECK-NEXT:    retq
33   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
34   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
35   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
36   ret <4 x i32> %res
38 define <4 x i32> @test_masked_2xi32_to_4xi32_mask1(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {
39 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask1:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    vptestnmd %xmm2, %xmm2, %k1
42 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]
43 ; CHECK-NEXT:    vmovdqa %xmm1, %xmm0
44 ; CHECK-NEXT:    retq
45   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
46   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
47   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
48   ret <4 x i32> %res
51 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask1(<4 x i32> %vec, <4 x i32> %mask) {
52 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask1:
53 ; CHECK:       # %bb.0:
54 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
55 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]
56 ; CHECK-NEXT:    retq
57   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
58   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
59   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
60   ret <4 x i32> %res
62 define <4 x i32> @test_masked_2xi32_to_4xi32_mask2(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {
63 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask2:
64 ; CHECK:       # %bb.0:
65 ; CHECK-NEXT:    vptestnmd %xmm2, %xmm2, %k1
66 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]
67 ; CHECK-NEXT:    vmovdqa %xmm1, %xmm0
68 ; CHECK-NEXT:    retq
69   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
70   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
71   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
72   ret <4 x i32> %res
75 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask2(<4 x i32> %vec, <4 x i32> %mask) {
76 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask2:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
79 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]
80 ; CHECK-NEXT:    retq
81   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
82   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
83   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
84   ret <4 x i32> %res
86 define <4 x i32> @test_masked_2xi32_to_4xi32_mask3(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {
87 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask3:
88 ; CHECK:       # %bb.0:
89 ; CHECK-NEXT:    vptestnmd %xmm2, %xmm2, %k1
90 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]
91 ; CHECK-NEXT:    vmovdqa %xmm1, %xmm0
92 ; CHECK-NEXT:    retq
93   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
94   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
95   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
96   ret <4 x i32> %res
99 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask3(<4 x i32> %vec, <4 x i32> %mask) {
100 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask3:
101 ; CHECK:       # %bb.0:
102 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
103 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]
104 ; CHECK-NEXT:    retq
105   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
106   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
107   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
108   ret <4 x i32> %res
110 define <8 x i32> @test_2xi32_to_8xi32(<8 x i32> %vec) {
111 ; CHECK-LABEL: test_2xi32_to_8xi32:
112 ; CHECK:       # %bb.0:
113 ; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm0
114 ; CHECK-NEXT:    retq
115   %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
116   ret <8 x i32> %res
118 define <8 x i32> @test_masked_2xi32_to_8xi32_mask0(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {
119 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask0:
120 ; CHECK:       # %bb.0:
121 ; CHECK-NEXT:    vptestnmd %ymm2, %ymm2, %k1
122 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]
123 ; CHECK-NEXT:    vmovdqa %ymm1, %ymm0
124 ; CHECK-NEXT:    retq
125   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
126   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
127   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
128   ret <8 x i32> %res
131 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask0(<8 x i32> %vec, <8 x i32> %mask) {
132 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask0:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
135 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]
136 ; CHECK-NEXT:    retq
137   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
138   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
139   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
140   ret <8 x i32> %res
142 define <8 x i32> @test_masked_2xi32_to_8xi32_mask1(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {
143 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask1:
144 ; CHECK:       # %bb.0:
145 ; CHECK-NEXT:    vptestnmd %ymm2, %ymm2, %k1
146 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]
147 ; CHECK-NEXT:    vmovdqa %ymm1, %ymm0
148 ; CHECK-NEXT:    retq
149   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
150   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
151   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
152   ret <8 x i32> %res
155 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask1(<8 x i32> %vec, <8 x i32> %mask) {
156 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask1:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
159 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]
160 ; CHECK-NEXT:    retq
161   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
162   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
163   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
164   ret <8 x i32> %res
166 define <8 x i32> @test_masked_2xi32_to_8xi32_mask2(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {
167 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask2:
168 ; CHECK:       # %bb.0:
169 ; CHECK-NEXT:    vptestnmd %ymm2, %ymm2, %k1
170 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]
171 ; CHECK-NEXT:    vmovdqa %ymm1, %ymm0
172 ; CHECK-NEXT:    retq
173   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
174   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
175   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
176   ret <8 x i32> %res
179 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask2(<8 x i32> %vec, <8 x i32> %mask) {
180 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask2:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
183 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]
184 ; CHECK-NEXT:    retq
185   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
186   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
187   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
188   ret <8 x i32> %res
190 define <8 x i32> @test_masked_2xi32_to_8xi32_mask3(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {
191 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask3:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    vptestnmd %ymm2, %ymm2, %k1
194 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]
195 ; CHECK-NEXT:    vmovdqa %ymm1, %ymm0
196 ; CHECK-NEXT:    retq
197   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
198   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
199   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
200   ret <8 x i32> %res
203 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask3(<8 x i32> %vec, <8 x i32> %mask) {
204 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask3:
205 ; CHECK:       # %bb.0:
206 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
207 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]
208 ; CHECK-NEXT:    retq
209   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
210   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
211   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
212   ret <8 x i32> %res
214 define <16 x i32> @test_2xi32_to_16xi32(<16 x i32> %vec) {
215 ; CHECK-LABEL: test_2xi32_to_16xi32:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0
218 ; CHECK-NEXT:    retq
219   %res = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
220   ret <16 x i32> %res
222 define <16 x i32> @test_masked_2xi32_to_16xi32_mask0(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {
223 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask0:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    vptestnmd %zmm2, %zmm2, %k1
226 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
227 ; CHECK-NEXT:    vmovdqa64 %zmm1, %zmm0
228 ; CHECK-NEXT:    retq
229   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
230   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
231   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
232   ret <16 x i32> %res
235 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask0(<16 x i32> %vec, <16 x i32> %mask) {
236 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask0:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
239 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
240 ; CHECK-NEXT:    retq
241   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
242   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
243   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
244   ret <16 x i32> %res
246 define <16 x i32> @test_masked_2xi32_to_16xi32_mask1(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {
247 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask1:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vptestnmd %zmm2, %zmm2, %k1
250 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
251 ; CHECK-NEXT:    vmovdqa64 %zmm1, %zmm0
252 ; CHECK-NEXT:    retq
253   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
254   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
255   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
256   ret <16 x i32> %res
259 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask1(<16 x i32> %vec, <16 x i32> %mask) {
260 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask1:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
263 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
264 ; CHECK-NEXT:    retq
265   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
266   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
267   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
268   ret <16 x i32> %res
270 define <16 x i32> @test_masked_2xi32_to_16xi32_mask2(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {
271 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask2:
272 ; CHECK:       # %bb.0:
273 ; CHECK-NEXT:    vptestnmd %zmm2, %zmm2, %k1
274 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
275 ; CHECK-NEXT:    vmovdqa64 %zmm1, %zmm0
276 ; CHECK-NEXT:    retq
277   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
278   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
279   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
280   ret <16 x i32> %res
283 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask2(<16 x i32> %vec, <16 x i32> %mask) {
284 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask2:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
287 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
288 ; CHECK-NEXT:    retq
289   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
290   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
291   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
292   ret <16 x i32> %res
294 define <16 x i32> @test_masked_2xi32_to_16xi32_mask3(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {
295 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask3:
296 ; CHECK:       # %bb.0:
297 ; CHECK-NEXT:    vptestnmd %zmm2, %zmm2, %k1
298 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
299 ; CHECK-NEXT:    vmovdqa64 %zmm1, %zmm0
300 ; CHECK-NEXT:    retq
301   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
302   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
303   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
304   ret <16 x i32> %res
307 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask3(<16 x i32> %vec, <16 x i32> %mask) {
308 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask3:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
311 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
312 ; CHECK-NEXT:    retq
313   %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
314   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
315   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
316   ret <16 x i32> %res
318 define <4 x i32> @test_2xi32_to_4xi32_mem(<2 x i32>* %vp) {
319 ; CHECK-LABEL: test_2xi32_to_4xi32_mem:
320 ; CHECK:       # %bb.0:
321 ; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
322 ; CHECK-NEXT:    retq
323   %vec = load <2 x i32>, <2 x i32>* %vp
324   %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
325   ret <4 x i32> %res
327 define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask0(<2 x i32>* %vp, <4 x i32> %default, <4 x i32> %mask) {
328 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask0:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
331 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]
332 ; CHECK-NEXT:    retq
333   %vec = load <2 x i32>, <2 x i32>* %vp
334   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
335   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
336   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
337   ret <4 x i32> %res
340 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask0(<2 x i32>* %vp, <4 x i32> %mask) {
341 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask0:
342 ; CHECK:       # %bb.0:
343 ; CHECK-NEXT:    vptestnmd %xmm0, %xmm0, %k1
344 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]
345 ; CHECK-NEXT:    retq
346   %vec = load <2 x i32>, <2 x i32>* %vp
347   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
348   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
349   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
350   ret <4 x i32> %res
352 define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask1(<2 x i32>* %vp, <4 x i32> %default, <4 x i32> %mask) {
353 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask1:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
356 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]
357 ; CHECK-NEXT:    retq
358   %vec = load <2 x i32>, <2 x i32>* %vp
359   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
360   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
361   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
362   ret <4 x i32> %res
365 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask1(<2 x i32>* %vp, <4 x i32> %mask) {
366 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask1:
367 ; CHECK:       # %bb.0:
368 ; CHECK-NEXT:    vptestnmd %xmm0, %xmm0, %k1
369 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]
370 ; CHECK-NEXT:    retq
371   %vec = load <2 x i32>, <2 x i32>* %vp
372   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
373   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
374   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
375   ret <4 x i32> %res
377 define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask2(<2 x i32>* %vp, <4 x i32> %default, <4 x i32> %mask) {
378 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask2:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
381 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]
382 ; CHECK-NEXT:    retq
383   %vec = load <2 x i32>, <2 x i32>* %vp
384   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
385   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
386   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
387   ret <4 x i32> %res
390 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask2(<2 x i32>* %vp, <4 x i32> %mask) {
391 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask2:
392 ; CHECK:       # %bb.0:
393 ; CHECK-NEXT:    vptestnmd %xmm0, %xmm0, %k1
394 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]
395 ; CHECK-NEXT:    retq
396   %vec = load <2 x i32>, <2 x i32>* %vp
397   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
398   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
399   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
400   ret <4 x i32> %res
402 define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask3(<2 x i32>* %vp, <4 x i32> %default, <4 x i32> %mask) {
403 ; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask3:
404 ; CHECK:       # %bb.0:
405 ; CHECK-NEXT:    vptestnmd %xmm1, %xmm1, %k1
406 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]
407 ; CHECK-NEXT:    retq
408   %vec = load <2 x i32>, <2 x i32>* %vp
409   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
410   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
411   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default
412   ret <4 x i32> %res
415 define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask3(<2 x i32>* %vp, <4 x i32> %mask) {
416 ; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask3:
417 ; CHECK:       # %bb.0:
418 ; CHECK-NEXT:    vptestnmd %xmm0, %xmm0, %k1
419 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]
420 ; CHECK-NEXT:    retq
421   %vec = load <2 x i32>, <2 x i32>* %vp
422   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
423   %cmp = icmp eq <4 x i32> %mask, zeroinitializer
424   %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer
425   ret <4 x i32> %res
427 define <8 x i32> @test_2xi32_to_8xi32_mem(<2 x i32>* %vp) {
428 ; CHECK-LABEL: test_2xi32_to_8xi32_mem:
429 ; CHECK:       # %bb.0:
430 ; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0
431 ; CHECK-NEXT:    retq
432   %vec = load <2 x i32>, <2 x i32>* %vp
433   %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
434   ret <8 x i32> %res
436 define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask0(<2 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
437 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask0:
438 ; CHECK:       # %bb.0:
439 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
440 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]
441 ; CHECK-NEXT:    retq
442   %vec = load <2 x i32>, <2 x i32>* %vp
443   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
444   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
445   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
446   ret <8 x i32> %res
449 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask0(<2 x i32>* %vp, <8 x i32> %mask) {
450 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask0:
451 ; CHECK:       # %bb.0:
452 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
453 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
454 ; CHECK-NEXT:    retq
455   %vec = load <2 x i32>, <2 x i32>* %vp
456   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
457   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
458   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
459   ret <8 x i32> %res
461 define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask1(<2 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
462 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask1:
463 ; CHECK:       # %bb.0:
464 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
465 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]
466 ; CHECK-NEXT:    retq
467   %vec = load <2 x i32>, <2 x i32>* %vp
468   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
469   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
470   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
471   ret <8 x i32> %res
474 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask1(<2 x i32>* %vp, <8 x i32> %mask) {
475 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask1:
476 ; CHECK:       # %bb.0:
477 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
478 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
479 ; CHECK-NEXT:    retq
480   %vec = load <2 x i32>, <2 x i32>* %vp
481   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
482   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
483   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
484   ret <8 x i32> %res
486 define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask2(<2 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
487 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask2:
488 ; CHECK:       # %bb.0:
489 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
490 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]
491 ; CHECK-NEXT:    retq
492   %vec = load <2 x i32>, <2 x i32>* %vp
493   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
494   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
495   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
496   ret <8 x i32> %res
499 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask2(<2 x i32>* %vp, <8 x i32> %mask) {
500 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask2:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
503 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
504 ; CHECK-NEXT:    retq
505   %vec = load <2 x i32>, <2 x i32>* %vp
506   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
507   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
508   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
509   ret <8 x i32> %res
511 define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask3(<2 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
512 ; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask3:
513 ; CHECK:       # %bb.0:
514 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
515 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]
516 ; CHECK-NEXT:    retq
517   %vec = load <2 x i32>, <2 x i32>* %vp
518   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
519   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
520   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
521   ret <8 x i32> %res
524 define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask3(<2 x i32>* %vp, <8 x i32> %mask) {
525 ; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask3:
526 ; CHECK:       # %bb.0:
527 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
528 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
529 ; CHECK-NEXT:    retq
530   %vec = load <2 x i32>, <2 x i32>* %vp
531   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
532   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
533   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
534   ret <8 x i32> %res
536 define <16 x i32> @test_2xi32_to_16xi32_mem(<2 x i32>* %vp) {
537 ; CHECK-LABEL: test_2xi32_to_16xi32_mem:
538 ; CHECK:       # %bb.0:
539 ; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0
540 ; CHECK-NEXT:    retq
541   %vec = load <2 x i32>, <2 x i32>* %vp
542   %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
543   ret <16 x i32> %res
545 define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask0(<2 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
546 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask0:
547 ; CHECK:       # %bb.0:
548 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
549 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
550 ; CHECK-NEXT:    retq
551   %vec = load <2 x i32>, <2 x i32>* %vp
552   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
553   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
554   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
555   ret <16 x i32> %res
558 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask0(<2 x i32>* %vp, <16 x i32> %mask) {
559 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask0:
560 ; CHECK:       # %bb.0:
561 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
562 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
563 ; CHECK-NEXT:    retq
564   %vec = load <2 x i32>, <2 x i32>* %vp
565   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
566   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
567   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
568   ret <16 x i32> %res
570 define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask1(<2 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
571 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask1:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
574 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
575 ; CHECK-NEXT:    retq
576   %vec = load <2 x i32>, <2 x i32>* %vp
577   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
578   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
579   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
580   ret <16 x i32> %res
583 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask1(<2 x i32>* %vp, <16 x i32> %mask) {
584 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask1:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
587 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
588 ; CHECK-NEXT:    retq
589   %vec = load <2 x i32>, <2 x i32>* %vp
590   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
591   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
592   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
593   ret <16 x i32> %res
595 define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask2(<2 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
596 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask2:
597 ; CHECK:       # %bb.0:
598 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
599 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
600 ; CHECK-NEXT:    retq
601   %vec = load <2 x i32>, <2 x i32>* %vp
602   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
603   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
604   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
605   ret <16 x i32> %res
608 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask2(<2 x i32>* %vp, <16 x i32> %mask) {
609 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask2:
610 ; CHECK:       # %bb.0:
611 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
612 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
613 ; CHECK-NEXT:    retq
614   %vec = load <2 x i32>, <2 x i32>* %vp
615   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
616   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
617   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
618   ret <16 x i32> %res
620 define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask3(<2 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
621 ; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask3:
622 ; CHECK:       # %bb.0:
623 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
624 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
625 ; CHECK-NEXT:    retq
626   %vec = load <2 x i32>, <2 x i32>* %vp
627   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
628   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
629   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
630   ret <16 x i32> %res
633 define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask3(<2 x i32>* %vp, <16 x i32> %mask) {
634 ; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask3:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
637 ; CHECK-NEXT:    vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
638 ; CHECK-NEXT:    retq
639   %vec = load <2 x i32>, <2 x i32>* %vp
640   %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
641   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
642   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
643   ret <16 x i32> %res
645 define <8 x i32> @test_4xi32_to_8xi32_mem(<4 x i32>* %vp) {
646 ; CHECK-LABEL: test_4xi32_to_8xi32_mem:
647 ; CHECK:       # %bb.0:
648 ; CHECK-NEXT:    vbroadcasti128 {{.*#+}} ymm0 = mem[0,1,0,1]
649 ; CHECK-NEXT:    retq
650   %vec = load <4 x i32>, <4 x i32>* %vp
651   %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
652   ret <8 x i32> %res
654 define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask0(<4 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
655 ; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask0:
656 ; CHECK:       # %bb.0:
657 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
658 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]
659 ; CHECK-NEXT:    retq
660   %vec = load <4 x i32>, <4 x i32>* %vp
661   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
662   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
663   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
664   ret <8 x i32> %res
667 define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask0(<4 x i32>* %vp, <8 x i32> %mask) {
668 ; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask0:
669 ; CHECK:       # %bb.0:
670 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
671 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
672 ; CHECK-NEXT:    retq
673   %vec = load <4 x i32>, <4 x i32>* %vp
674   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
675   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
676   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
677   ret <8 x i32> %res
679 define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask1(<4 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
680 ; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask1:
681 ; CHECK:       # %bb.0:
682 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
683 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]
684 ; CHECK-NEXT:    retq
685   %vec = load <4 x i32>, <4 x i32>* %vp
686   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
687   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
688   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
689   ret <8 x i32> %res
692 define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask1(<4 x i32>* %vp, <8 x i32> %mask) {
693 ; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask1:
694 ; CHECK:       # %bb.0:
695 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
696 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
697 ; CHECK-NEXT:    retq
698   %vec = load <4 x i32>, <4 x i32>* %vp
699   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
700   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
701   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
702   ret <8 x i32> %res
704 define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask2(<4 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
705 ; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask2:
706 ; CHECK:       # %bb.0:
707 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
708 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]
709 ; CHECK-NEXT:    retq
710   %vec = load <4 x i32>, <4 x i32>* %vp
711   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
712   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
713   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
714   ret <8 x i32> %res
717 define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask2(<4 x i32>* %vp, <8 x i32> %mask) {
718 ; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask2:
719 ; CHECK:       # %bb.0:
720 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
721 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
722 ; CHECK-NEXT:    retq
723   %vec = load <4 x i32>, <4 x i32>* %vp
724   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
725   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
726   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
727   ret <8 x i32> %res
729 define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask3(<4 x i32>* %vp, <8 x i32> %default, <8 x i32> %mask) {
730 ; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask3:
731 ; CHECK:       # %bb.0:
732 ; CHECK-NEXT:    vptestnmd %ymm1, %ymm1, %k1
733 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]
734 ; CHECK-NEXT:    retq
735   %vec = load <4 x i32>, <4 x i32>* %vp
736   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
737   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
738   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default
739   ret <8 x i32> %res
742 define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask3(<4 x i32>* %vp, <8 x i32> %mask) {
743 ; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask3:
744 ; CHECK:       # %bb.0:
745 ; CHECK-NEXT:    vptestnmd %ymm0, %ymm0, %k1
746 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
747 ; CHECK-NEXT:    retq
748   %vec = load <4 x i32>, <4 x i32>* %vp
749   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
750   %cmp = icmp eq <8 x i32> %mask, zeroinitializer
751   %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer
752   ret <8 x i32> %res
754 define <16 x i32> @test_4xi32_to_16xi32_mem(<4 x i32>* %vp) {
755 ; CHECK-LABEL: test_4xi32_to_16xi32_mem:
756 ; CHECK:       # %bb.0:
757 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
758 ; CHECK-NEXT:    retq
759   %vec = load <4 x i32>, <4 x i32>* %vp
760   %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
761   ret <16 x i32> %res
763 define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask0(<4 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
764 ; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask0:
765 ; CHECK:       # %bb.0:
766 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
767 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
768 ; CHECK-NEXT:    retq
769   %vec = load <4 x i32>, <4 x i32>* %vp
770   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
771   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
772   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
773   ret <16 x i32> %res
776 define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask0(<4 x i32>* %vp, <16 x i32> %mask) {
777 ; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask0:
778 ; CHECK:       # %bb.0:
779 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
780 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
781 ; CHECK-NEXT:    retq
782   %vec = load <4 x i32>, <4 x i32>* %vp
783   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
784   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
785   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
786   ret <16 x i32> %res
788 define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask1(<4 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
789 ; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask1:
790 ; CHECK:       # %bb.0:
791 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
792 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
793 ; CHECK-NEXT:    retq
794   %vec = load <4 x i32>, <4 x i32>* %vp
795   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
796   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
797   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
798   ret <16 x i32> %res
801 define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask1(<4 x i32>* %vp, <16 x i32> %mask) {
802 ; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask1:
803 ; CHECK:       # %bb.0:
804 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
805 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
806 ; CHECK-NEXT:    retq
807   %vec = load <4 x i32>, <4 x i32>* %vp
808   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
809   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
810   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
811   ret <16 x i32> %res
813 define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask2(<4 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
814 ; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask2:
815 ; CHECK:       # %bb.0:
816 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
817 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
818 ; CHECK-NEXT:    retq
819   %vec = load <4 x i32>, <4 x i32>* %vp
820   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
821   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
822   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
823   ret <16 x i32> %res
826 define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask2(<4 x i32>* %vp, <16 x i32> %mask) {
827 ; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask2:
828 ; CHECK:       # %bb.0:
829 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
830 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
831 ; CHECK-NEXT:    retq
832   %vec = load <4 x i32>, <4 x i32>* %vp
833   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
834   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
835   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
836   ret <16 x i32> %res
838 define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask3(<4 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
839 ; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask3:
840 ; CHECK:       # %bb.0:
841 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
842 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
843 ; CHECK-NEXT:    retq
844   %vec = load <4 x i32>, <4 x i32>* %vp
845   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
846   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
847   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
848   ret <16 x i32> %res
851 define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask3(<4 x i32>* %vp, <16 x i32> %mask) {
852 ; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask3:
853 ; CHECK:       # %bb.0:
854 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
855 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
856 ; CHECK-NEXT:    retq
857   %vec = load <4 x i32>, <4 x i32>* %vp
858   %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
859   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
860   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
861   ret <16 x i32> %res
863 define <4 x i64> @test_2xi64_to_4xi64_mem(<2 x i64>* %vp) {
864 ; CHECK-LABEL: test_2xi64_to_4xi64_mem:
865 ; CHECK:       # %bb.0:
866 ; CHECK-NEXT:    vbroadcasti128 {{.*#+}} ymm0 = mem[0,1,0,1]
867 ; CHECK-NEXT:    retq
868   %vec = load <2 x i64>, <2 x i64>* %vp
869   %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
870   ret <4 x i64> %res
872 define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask0(<2 x i64>* %vp, <4 x i64> %default, <4 x i64> %mask) {
873 ; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask0:
874 ; CHECK:       # %bb.0:
875 ; CHECK-NEXT:    vptestnmq %ymm1, %ymm1, %k1
876 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]
877 ; CHECK-NEXT:    retq
878   %vec = load <2 x i64>, <2 x i64>* %vp
879   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
880   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
881   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default
882   ret <4 x i64> %res
885 define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask0(<2 x i64>* %vp, <4 x i64> %mask) {
886 ; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask0:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vptestnmq %ymm0, %ymm0, %k1
889 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]
890 ; CHECK-NEXT:    retq
891   %vec = load <2 x i64>, <2 x i64>* %vp
892   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
893   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
894   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer
895   ret <4 x i64> %res
897 define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask1(<2 x i64>* %vp, <4 x i64> %default, <4 x i64> %mask) {
898 ; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask1:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vptestnmq %ymm1, %ymm1, %k1
901 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]
902 ; CHECK-NEXT:    retq
903   %vec = load <2 x i64>, <2 x i64>* %vp
904   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
905   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
906   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default
907   ret <4 x i64> %res
910 define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask1(<2 x i64>* %vp, <4 x i64> %mask) {
911 ; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask1:
912 ; CHECK:       # %bb.0:
913 ; CHECK-NEXT:    vptestnmq %ymm0, %ymm0, %k1
914 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]
915 ; CHECK-NEXT:    retq
916   %vec = load <2 x i64>, <2 x i64>* %vp
917   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
918   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
919   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer
920   ret <4 x i64> %res
922 define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask2(<2 x i64>* %vp, <4 x i64> %default, <4 x i64> %mask) {
923 ; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask2:
924 ; CHECK:       # %bb.0:
925 ; CHECK-NEXT:    vptestnmq %ymm1, %ymm1, %k1
926 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]
927 ; CHECK-NEXT:    retq
928   %vec = load <2 x i64>, <2 x i64>* %vp
929   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
930   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
931   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default
932   ret <4 x i64> %res
935 define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask2(<2 x i64>* %vp, <4 x i64> %mask) {
936 ; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask2:
937 ; CHECK:       # %bb.0:
938 ; CHECK-NEXT:    vptestnmq %ymm0, %ymm0, %k1
939 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]
940 ; CHECK-NEXT:    retq
941   %vec = load <2 x i64>, <2 x i64>* %vp
942   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
943   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
944   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer
945   ret <4 x i64> %res
947 define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask3(<2 x i64>* %vp, <4 x i64> %default, <4 x i64> %mask) {
948 ; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask3:
949 ; CHECK:       # %bb.0:
950 ; CHECK-NEXT:    vptestnmq %ymm1, %ymm1, %k1
951 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]
952 ; CHECK-NEXT:    retq
953   %vec = load <2 x i64>, <2 x i64>* %vp
954   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
955   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
956   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default
957   ret <4 x i64> %res
960 define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask3(<2 x i64>* %vp, <4 x i64> %mask) {
961 ; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask3:
962 ; CHECK:       # %bb.0:
963 ; CHECK-NEXT:    vptestnmq %ymm0, %ymm0, %k1
964 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]
965 ; CHECK-NEXT:    retq
966   %vec = load <2 x i64>, <2 x i64>* %vp
967   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
968   %cmp = icmp eq <4 x i64> %mask, zeroinitializer
969   %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer
970   ret <4 x i64> %res
972 define <8 x i64> @test_2xi64_to_8xi64_mem(<2 x i64>* %vp) {
973 ; CHECK-LABEL: test_2xi64_to_8xi64_mem:
974 ; CHECK:       # %bb.0:
975 ; CHECK-NEXT:    vbroadcasti32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
976 ; CHECK-NEXT:    retq
977   %vec = load <2 x i64>, <2 x i64>* %vp
978   %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
979   ret <8 x i64> %res
981 define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask0(<2 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
982 ; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask0:
983 ; CHECK:       # %bb.0:
984 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
985 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]
986 ; CHECK-NEXT:    retq
987   %vec = load <2 x i64>, <2 x i64>* %vp
988   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
989   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
990   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
991   ret <8 x i64> %res
994 define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask0(<2 x i64>* %vp, <8 x i64> %mask) {
995 ; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask0:
996 ; CHECK:       # %bb.0:
997 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
998 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
999 ; CHECK-NEXT:    retq
1000   %vec = load <2 x i64>, <2 x i64>* %vp
1001   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1002   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1003   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1004   ret <8 x i64> %res
1006 define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask1(<2 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1007 ; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask1:
1008 ; CHECK:       # %bb.0:
1009 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1010 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]
1011 ; CHECK-NEXT:    retq
1012   %vec = load <2 x i64>, <2 x i64>* %vp
1013   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1014   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1015   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1016   ret <8 x i64> %res
1019 define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask1(<2 x i64>* %vp, <8 x i64> %mask) {
1020 ; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask1:
1021 ; CHECK:       # %bb.0:
1022 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1023 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
1024 ; CHECK-NEXT:    retq
1025   %vec = load <2 x i64>, <2 x i64>* %vp
1026   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1027   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1028   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1029   ret <8 x i64> %res
1031 define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask2(<2 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1032 ; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask2:
1033 ; CHECK:       # %bb.0:
1034 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1035 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]
1036 ; CHECK-NEXT:    retq
1037   %vec = load <2 x i64>, <2 x i64>* %vp
1038   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1039   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1040   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1041   ret <8 x i64> %res
1044 define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask2(<2 x i64>* %vp, <8 x i64> %mask) {
1045 ; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask2:
1046 ; CHECK:       # %bb.0:
1047 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1048 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
1049 ; CHECK-NEXT:    retq
1050   %vec = load <2 x i64>, <2 x i64>* %vp
1051   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1052   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1053   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1054   ret <8 x i64> %res
1056 define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask3(<2 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1057 ; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask3:
1058 ; CHECK:       # %bb.0:
1059 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1060 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]
1061 ; CHECK-NEXT:    retq
1062   %vec = load <2 x i64>, <2 x i64>* %vp
1063   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1064   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1065   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1066   ret <8 x i64> %res
1069 define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask3(<2 x i64>* %vp, <8 x i64> %mask) {
1070 ; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask3:
1071 ; CHECK:       # %bb.0:
1072 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1073 ; CHECK-NEXT:    vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]
1074 ; CHECK-NEXT:    retq
1075   %vec = load <2 x i64>, <2 x i64>* %vp
1076   %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1077   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1078   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1079   ret <8 x i64> %res
1081 define <16 x i32> @test_8xi32_to_16xi32_mem(<8 x i32>* %vp) {
1082 ; CHECK-LABEL: test_8xi32_to_16xi32_mem:
1083 ; CHECK:       # %bb.0:
1084 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3]
1085 ; CHECK-NEXT:    retq
1086   %vec = load <8 x i32>, <8 x i32>* %vp
1087   %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1088   ret <16 x i32> %res
1090 define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask0(<8 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
1091 ; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask0:
1092 ; CHECK:       # %bb.0:
1093 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
1094 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1095 ; CHECK-NEXT:    retq
1096   %vec = load <8 x i32>, <8 x i32>* %vp
1097   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1098   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1099   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
1100   ret <16 x i32> %res
1103 define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask0(<8 x i32>* %vp, <16 x i32> %mask) {
1104 ; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask0:
1105 ; CHECK:       # %bb.0:
1106 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
1107 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1108 ; CHECK-NEXT:    retq
1109   %vec = load <8 x i32>, <8 x i32>* %vp
1110   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1111   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1112   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
1113   ret <16 x i32> %res
1115 define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask1(<8 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
1116 ; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask1:
1117 ; CHECK:       # %bb.0:
1118 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
1119 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1120 ; CHECK-NEXT:    retq
1121   %vec = load <8 x i32>, <8 x i32>* %vp
1122   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1123   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1124   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
1125   ret <16 x i32> %res
1128 define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask1(<8 x i32>* %vp, <16 x i32> %mask) {
1129 ; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask1:
1130 ; CHECK:       # %bb.0:
1131 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
1132 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1133 ; CHECK-NEXT:    retq
1134   %vec = load <8 x i32>, <8 x i32>* %vp
1135   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1136   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1137   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
1138   ret <16 x i32> %res
1140 define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask2(<8 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
1141 ; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask2:
1142 ; CHECK:       # %bb.0:
1143 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
1144 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1145 ; CHECK-NEXT:    retq
1146   %vec = load <8 x i32>, <8 x i32>* %vp
1147   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1148   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1149   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
1150   ret <16 x i32> %res
1153 define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask2(<8 x i32>* %vp, <16 x i32> %mask) {
1154 ; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask2:
1155 ; CHECK:       # %bb.0:
1156 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
1157 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1158 ; CHECK-NEXT:    retq
1159   %vec = load <8 x i32>, <8 x i32>* %vp
1160   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1161   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1162   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
1163   ret <16 x i32> %res
1165 define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask3(<8 x i32>* %vp, <16 x i32> %default, <16 x i32> %mask) {
1166 ; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask3:
1167 ; CHECK:       # %bb.0:
1168 ; CHECK-NEXT:    vptestnmd %zmm1, %zmm1, %k1
1169 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1170 ; CHECK-NEXT:    retq
1171   %vec = load <8 x i32>, <8 x i32>* %vp
1172   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1173   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1174   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default
1175   ret <16 x i32> %res
1178 define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask3(<8 x i32>* %vp, <16 x i32> %mask) {
1179 ; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask3:
1180 ; CHECK:       # %bb.0:
1181 ; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k1
1182 ; CHECK-NEXT:    vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]
1183 ; CHECK-NEXT:    retq
1184   %vec = load <8 x i32>, <8 x i32>* %vp
1185   %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1186   %cmp = icmp eq <16 x i32> %mask, zeroinitializer
1187   %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer
1188   ret <16 x i32> %res
1190 define <8 x i64> @test_4xi64_to_8xi64_mem(<4 x i64>* %vp) {
1191 ; CHECK-LABEL: test_4xi64_to_8xi64_mem:
1192 ; CHECK:       # %bb.0:
1193 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3]
1194 ; CHECK-NEXT:    retq
1195   %vec = load <4 x i64>, <4 x i64>* %vp
1196   %res = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1197   ret <8 x i64> %res
1199 define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask0(<4 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1200 ; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask0:
1201 ; CHECK:       # %bb.0:
1202 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1203 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]
1204 ; CHECK-NEXT:    retq
1205   %vec = load <4 x i64>, <4 x i64>* %vp
1206   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1207   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1208   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1209   ret <8 x i64> %res
1212 define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask0(<4 x i64>* %vp, <8 x i64> %mask) {
1213 ; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask0:
1214 ; CHECK:       # %bb.0:
1215 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1216 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
1217 ; CHECK-NEXT:    retq
1218   %vec = load <4 x i64>, <4 x i64>* %vp
1219   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1220   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1221   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1222   ret <8 x i64> %res
1224 define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask1(<4 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1225 ; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask1:
1226 ; CHECK:       # %bb.0:
1227 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1228 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]
1229 ; CHECK-NEXT:    retq
1230   %vec = load <4 x i64>, <4 x i64>* %vp
1231   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1232   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1233   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1234   ret <8 x i64> %res
1237 define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask1(<4 x i64>* %vp, <8 x i64> %mask) {
1238 ; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask1:
1239 ; CHECK:       # %bb.0:
1240 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1241 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
1242 ; CHECK-NEXT:    retq
1243   %vec = load <4 x i64>, <4 x i64>* %vp
1244   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1245   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1246   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1247   ret <8 x i64> %res
1249 define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask2(<4 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1250 ; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask2:
1251 ; CHECK:       # %bb.0:
1252 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1253 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]
1254 ; CHECK-NEXT:    retq
1255   %vec = load <4 x i64>, <4 x i64>* %vp
1256   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1257   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1258   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1259   ret <8 x i64> %res
1262 define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask2(<4 x i64>* %vp, <8 x i64> %mask) {
1263 ; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask2:
1264 ; CHECK:       # %bb.0:
1265 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1266 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
1267 ; CHECK-NEXT:    retq
1268   %vec = load <4 x i64>, <4 x i64>* %vp
1269   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1270   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1271   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1272   ret <8 x i64> %res
1274 define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask3(<4 x i64>* %vp, <8 x i64> %default, <8 x i64> %mask) {
1275 ; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask3:
1276 ; CHECK:       # %bb.0:
1277 ; CHECK-NEXT:    vptestnmq %zmm1, %zmm1, %k1
1278 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]
1279 ; CHECK-NEXT:    retq
1280   %vec = load <4 x i64>, <4 x i64>* %vp
1281   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1282   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1283   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default
1284   ret <8 x i64> %res
1287 define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask3(<4 x i64>* %vp, <8 x i64> %mask) {
1288 ; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask3:
1289 ; CHECK:       # %bb.0:
1290 ; CHECK-NEXT:    vptestnmq %zmm0, %zmm0, %k1
1291 ; CHECK-NEXT:    vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]
1292 ; CHECK-NEXT:    retq
1293   %vec = load <4 x i64>, <4 x i64>* %vp
1294   %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1295   %cmp = icmp eq <8 x i64> %mask, zeroinitializer
1296   %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer
1297   ret <8 x i64> %res