xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-intrinsics-fast-isel.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=X64
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512f-builtins.c
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_broadcastd_epi32(<2 x i64> %a0) {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_broadcastd_epi32:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpbroadcastd %xmm0, %zmm0
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
12*9880d681SAndroid Build Coastguard Worker;
13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_broadcastd_epi32:
14*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpbroadcastd %xmm0, %zmm0
16*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
18*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <4 x i32> %arg0, <4 x i32> undef, <16 x i32> zeroinitializer
19*9880d681SAndroid Build Coastguard Worker  %res1 = bitcast <16 x i32> %res0 to <8 x i64>
20*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_broadcastd_epi32(<8 x i64> %a0, i16 %a1, <2 x i64> %a2) {
24*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_broadcastd_epi32:
25*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
26*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
27*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
28*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpbroadcastd %xmm1, %zmm0 {%k1}
29*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
30*9880d681SAndroid Build Coastguard Worker;
31*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_broadcastd_epi32:
32*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
33*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
34*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpbroadcastd %xmm1, %zmm0 {%k1}
35*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
36*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
37*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
38*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
39*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <4 x i32> %arg2, <4 x i32> undef, <16 x i32> zeroinitializer
40*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x i32> %res0, <16 x i32> %arg0
41*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
42*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_broadcastd_epi32(i16 %a0, <2 x i64> %a1) {
46*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_broadcastd_epi32:
47*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
48*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
49*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
50*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpbroadcastd %xmm0, %zmm0 {%k1} {z}
51*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
52*9880d681SAndroid Build Coastguard Worker;
53*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_broadcastd_epi32:
54*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
55*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
56*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpbroadcastd %xmm0, %zmm0 {%k1} {z}
57*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
58*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
59*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
60*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <4 x i32> %arg1, <4 x i32> undef, <16 x i32> zeroinitializer
61*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x i32> %res0, <16 x i32> zeroinitializer
62*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
63*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_broadcastq_epi64(<2 x i64> %a0) {
67*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_broadcastq_epi64:
68*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
69*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpbroadcastq %xmm0, %zmm0
70*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
71*9880d681SAndroid Build Coastguard Worker;
72*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_broadcastq_epi64:
73*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
74*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpbroadcastq %xmm0, %zmm0
75*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
76*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x i64> %a0, <2 x i64> undef, <8 x i32> zeroinitializer
77*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_broadcastq_epi64(<8 x i64> %a0, i8 %a1, <2 x i64> %a2) {
81*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_broadcastq_epi64:
82*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
83*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
84*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
85*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpbroadcastq %xmm1, %zmm0 {%k1}
86*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
87*9880d681SAndroid Build Coastguard Worker;
88*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_broadcastq_epi64:
89*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
90*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
91*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpbroadcastq %xmm1, %zmm0 {%k1}
92*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
93*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
94*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <2 x i64> %a2, <2 x i64> undef, <8 x i32> zeroinitializer
95*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x i64> %res0, <8 x i64> %a0
96*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_broadcastq_epi64(i8 %a0, <2 x i64> %a1) {
100*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_broadcastq_epi64:
101*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
102*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
103*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
104*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpbroadcastq %xmm0, %zmm0 {%k1} {z}
105*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
106*9880d681SAndroid Build Coastguard Worker;
107*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_broadcastq_epi64:
108*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
109*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
110*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpbroadcastq %xmm0, %zmm0 {%k1} {z}
111*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
112*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
113*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <2 x i64> %a1, <2 x i64> undef, <8 x i32> zeroinitializer
114*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x i64> %res0, <8 x i64> zeroinitializer
115*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_broadcastsd_pd(<2 x double> %a0) {
119*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_broadcastsd_pd:
120*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
121*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vbroadcastsd %xmm0, %zmm0
122*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
123*9880d681SAndroid Build Coastguard Worker;
124*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_broadcastsd_pd:
125*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
126*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vbroadcastsd %xmm0, %zmm0
127*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
128*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x double> %a0, <2 x double> undef, <8 x i32> zeroinitializer
129*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_broadcastsd_pd(<8 x double> %a0, i8 %a1, <2 x double> %a2) {
133*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_broadcastsd_pd:
134*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
135*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
136*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
137*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vbroadcastsd %xmm1, %zmm0 {%k1}
138*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
139*9880d681SAndroid Build Coastguard Worker;
140*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_broadcastsd_pd:
141*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
142*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
143*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vbroadcastsd %xmm1, %zmm0 {%k1}
144*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
145*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
146*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <2 x double> %a2, <2 x double> undef, <8 x i32> zeroinitializer
147*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
148*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_broadcastsd_pd(i8 %a0, <2 x double> %a1) {
152*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_broadcastsd_pd:
153*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
154*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
155*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
156*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}
157*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
158*9880d681SAndroid Build Coastguard Worker;
159*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_broadcastsd_pd:
160*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
161*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
162*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}
163*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
164*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
165*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <2 x double> %a1, <2 x double> undef, <8 x i32> zeroinitializer
166*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
167*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_broadcastss_ps(<4 x float> %a0) {
171*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_broadcastss_ps:
172*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
173*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vbroadcastss %xmm0, %zmm0
174*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
175*9880d681SAndroid Build Coastguard Worker;
176*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_broadcastss_ps:
177*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
178*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vbroadcastss %xmm0, %zmm0
179*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
180*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> undef, <16 x i32> zeroinitializer
181*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_mask_broadcastss_ps(<16 x float> %a0, i16 %a1, <4 x float> %a2) {
185*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_broadcastss_ps:
186*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
187*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
188*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
189*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vbroadcastss %xmm1, %zmm0 {%k1}
190*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
191*9880d681SAndroid Build Coastguard Worker;
192*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_broadcastss_ps:
193*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
194*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
195*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vbroadcastss %xmm1, %zmm0 {%k1}
196*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
197*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
198*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <4 x float> %a2, <4 x float> undef, <16 x i32> zeroinitializer
199*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x float> %res0, <16 x float> %a0
200*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
201*9880d681SAndroid Build Coastguard Worker}
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_maskz_broadcastss_ps(i16 %a0, <4 x float> %a1) {
204*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_broadcastss_ps:
205*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
206*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
207*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
208*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}
209*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
210*9880d681SAndroid Build Coastguard Worker;
211*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_broadcastss_ps:
212*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
213*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
214*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}
215*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
216*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
217*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <4 x float> %a1, <4 x float> undef, <16 x i32> zeroinitializer
218*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x float> %res0, <16 x float> zeroinitializer
219*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_movddup_pd(<8 x double> %a0) {
223*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_movddup_pd:
224*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
225*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
226*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
227*9880d681SAndroid Build Coastguard Worker;
228*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_movddup_pd:
229*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
230*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
231*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
232*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
233*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
234*9880d681SAndroid Build Coastguard Worker}
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_movddup_pd(<8 x double> %a0, i8 %a1, <8 x double> %a2) {
237*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_movddup_pd:
238*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
239*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
240*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
241*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = zmm1[0,0,2,2,4,4,6,6]
242*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_movddup_pd:
245*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
246*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
247*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = zmm1[0,0,2,2,4,4,6,6]
248*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
249*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
250*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a2, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
251*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
252*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
253*9880d681SAndroid Build Coastguard Worker}
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_movddup_pd(i8 %a0, <8 x double> %a1) {
256*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_movddup_pd:
257*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
258*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
259*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
260*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]
261*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
262*9880d681SAndroid Build Coastguard Worker;
263*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_movddup_pd:
264*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
265*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
266*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]
267*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
268*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
269*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
270*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
271*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_movehdup_ps(<16 x float> %a0) {
275*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_movehdup_ps:
276*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
277*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovshdup {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
278*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
279*9880d681SAndroid Build Coastguard Worker;
280*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_movehdup_ps:
281*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
282*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovshdup {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
283*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
284*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <16 x float> %a0, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
285*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res
286*9880d681SAndroid Build Coastguard Worker}
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_mask_movehdup_ps(<16 x float> %a0, i16 %a1, <16 x float> %a2) {
289*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_movehdup_ps:
290*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
291*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
292*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
293*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = zmm1[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
294*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
295*9880d681SAndroid Build Coastguard Worker;
296*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_movehdup_ps:
297*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
298*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
299*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = zmm1[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
300*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
301*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
302*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a2, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
303*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x float> %res0, <16 x float> %a0
304*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_maskz_movehdup_ps(i16 %a0, <16 x float> %a1) {
308*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_movehdup_ps:
309*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
310*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
311*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
312*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
313*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
314*9880d681SAndroid Build Coastguard Worker;
315*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_movehdup_ps:
316*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
317*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
318*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
319*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
320*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
321*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a1, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
322*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x float> %res0, <16 x float> zeroinitializer
323*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
324*9880d681SAndroid Build Coastguard Worker}
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_moveldup_ps(<16 x float> %a0) {
327*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_moveldup_ps:
328*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
329*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovsldup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
330*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
331*9880d681SAndroid Build Coastguard Worker;
332*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_moveldup_ps:
333*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
334*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovsldup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
335*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
336*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <16 x float> %a0, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
337*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res
338*9880d681SAndroid Build Coastguard Worker}
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_mask_moveldup_ps(<16 x float> %a0, i16 %a1, <16 x float> %a2) {
341*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_moveldup_ps:
342*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
343*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
344*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
345*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = zmm1[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
346*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
347*9880d681SAndroid Build Coastguard Worker;
348*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_moveldup_ps:
349*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
350*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
351*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = zmm1[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
352*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
353*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
354*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a2, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
355*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x float> %res0, <16 x float> %a0
356*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
357*9880d681SAndroid Build Coastguard Worker}
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_maskz_moveldup_ps(i16 %a0, <16 x float> %a1) {
360*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_moveldup_ps:
361*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
362*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
363*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
364*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
365*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
366*9880d681SAndroid Build Coastguard Worker;
367*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_moveldup_ps:
368*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
369*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
370*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
371*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
372*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
373*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a1, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
374*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x float> %res0, <16 x float> zeroinitializer
375*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
376*9880d681SAndroid Build Coastguard Worker}
377*9880d681SAndroid Build Coastguard Worker
378*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_permute_pd(<8 x double> %a0) {
379*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_permute_pd:
380*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
381*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,2,4,4,6,6]
382*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
383*9880d681SAndroid Build Coastguard Worker;
384*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_permute_pd:
385*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
386*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,2,4,4,6,6]
387*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
388*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
389*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
390*9880d681SAndroid Build Coastguard Worker}
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_permute_pd(<8 x double> %a0, i8 %a1, <8 x double> %a2) {
393*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_permute_pd:
394*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
395*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
396*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
397*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermilpd {{.*#+}} zmm0 {%k1} = zmm1[0,1,2,2,4,4,6,6]
398*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
399*9880d681SAndroid Build Coastguard Worker;
400*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_permute_pd:
401*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
402*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
403*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermilpd {{.*#+}} zmm0 {%k1} = zmm1[0,1,2,2,4,4,6,6]
404*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
405*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
406*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a2, <8 x double> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
407*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
408*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
409*9880d681SAndroid Build Coastguard Worker}
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_permute_pd(i8 %a0, <8 x double> %a1) {
412*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_permute_pd:
413*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
414*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
415*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
416*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermilpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,2,4,4,6,6]
417*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
418*9880d681SAndroid Build Coastguard Worker;
419*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_permute_pd:
420*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
421*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
422*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermilpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,2,4,4,6,6]
423*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
424*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
425*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
426*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
427*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
428*9880d681SAndroid Build Coastguard Worker}
429*9880d681SAndroid Build Coastguard Worker
430*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_permute_ps(<16 x float> %a0) {
431*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_permute_ps:
432*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
433*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermilps {{.*#+}} zmm0 = zmm0[2,0,0,0,6,4,4,4,10,8,8,8,14,12,12,12]
434*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
435*9880d681SAndroid Build Coastguard Worker;
436*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_permute_ps:
437*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
438*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermilps {{.*#+}} zmm0 = zmm0[2,0,0,0,6,4,4,4,10,8,8,8,14,12,12,12]
439*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
440*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <16 x float> %a0, <16 x float> undef, <16 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4, i32 10, i32 8, i32 8, i32 8, i32 14, i32 12, i32 12, i32 12>
441*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res
442*9880d681SAndroid Build Coastguard Worker}
443*9880d681SAndroid Build Coastguard Worker
444*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_mask_permute_ps(<16 x float> %a0, i16 %a1, <16 x float> %a2) {
445*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_permute_ps:
446*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
447*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
448*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
449*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermilps {{.*#+}} zmm0 {%k1} = zmm1[2,0,0,0,6,4,4,4,10,8,8,8,14,12,12,12]
450*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
451*9880d681SAndroid Build Coastguard Worker;
452*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_permute_ps:
453*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
454*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
455*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermilps {{.*#+}} zmm0 {%k1} = zmm1[2,0,0,0,6,4,4,4,10,8,8,8,14,12,12,12]
456*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
457*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
458*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a2, <16 x float> undef, <16 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4, i32 10, i32 8, i32 8, i32 8, i32 14, i32 12, i32 12, i32 12>
459*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x float> %res0, <16 x float> %a0
460*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
461*9880d681SAndroid Build Coastguard Worker}
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_maskz_permute_ps(i16 %a0, <16 x float> %a1) {
464*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_permute_ps:
465*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
466*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
467*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
468*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermilps {{.*#+}} zmm0 {%k1} {z} = zmm0[2,0,0,0,6,4,4,4,10,8,8,8,14,12,12,12]
469*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
470*9880d681SAndroid Build Coastguard Worker;
471*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_permute_ps:
472*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
473*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
474*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermilps {{.*#+}} zmm0 {%k1} {z} = zmm0[2,0,0,0,6,4,4,4,10,8,8,8,14,12,12,12]
475*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
476*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
477*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a1, <16 x float> undef, <16 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4, i32 10, i32 8, i32 8, i32 8, i32 14, i32 12, i32 12, i32 12>
478*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x float> %res0, <16 x float> zeroinitializer
479*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
480*9880d681SAndroid Build Coastguard Worker}
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_permutex_epi64(<8 x i64> %a0) {
483*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_permutex_epi64:
484*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
485*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermq {{.*#+}} zmm0 = zmm0[0,0,0,0,4,4,4,4]
486*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
487*9880d681SAndroid Build Coastguard Worker;
488*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_permutex_epi64:
489*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
490*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermq {{.*#+}} zmm0 = zmm0[0,0,0,0,4,4,4,4]
491*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
492*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x i64> %a0, <8 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
493*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
494*9880d681SAndroid Build Coastguard Worker}
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_permutex_epi64(<8 x i64> %a0, i8 %a1, <8 x i64> %a2) {
497*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_permutex_epi64:
498*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
499*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
500*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
501*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermq {{.*#+}} zmm0 {%k1} = zmm1[0,0,0,0,4,4,4,4]
502*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
503*9880d681SAndroid Build Coastguard Worker;
504*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_permutex_epi64:
505*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
506*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
507*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermq {{.*#+}} zmm0 {%k1} = zmm1[0,0,0,0,4,4,4,4]
508*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
509*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
510*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x i64> %a2, <8 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
511*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x i64> %res0, <8 x i64> %a0
512*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
513*9880d681SAndroid Build Coastguard Worker}
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_permutex_epi64(i8 %a0, <8 x i64> %a1) {
516*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_permutex_epi64:
517*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
518*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
519*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
520*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermq {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,0,0,4,4,4,4]
521*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
522*9880d681SAndroid Build Coastguard Worker;
523*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_permutex_epi64:
524*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
525*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
526*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermq {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,0,0,4,4,4,4]
527*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
529*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x i64> %a1, <8 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
530*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x i64> %res0, <8 x i64> zeroinitializer
531*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
532*9880d681SAndroid Build Coastguard Worker}
533*9880d681SAndroid Build Coastguard Worker
534*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_permutex_pd(<8 x double> %a0) {
535*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_permutex_pd:
536*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
537*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,0,4,4,4,4]
538*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
539*9880d681SAndroid Build Coastguard Worker;
540*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_permutex_pd:
541*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
542*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,0,4,4,4,4]
543*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
544*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
545*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_permutex_pd(<8 x double> %a0, i8 %a1, <8 x double> %a2) {
549*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_permutex_pd:
550*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
551*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
552*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
553*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermpd {{.*#+}} zmm0 {%k1} = zmm1[0,0,0,0,4,4,4,4]
554*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
555*9880d681SAndroid Build Coastguard Worker;
556*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_permutex_pd:
557*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
558*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
559*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermpd {{.*#+}} zmm0 {%k1} = zmm1[0,0,0,0,4,4,4,4]
560*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
561*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
562*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a2, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
563*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
564*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
565*9880d681SAndroid Build Coastguard Worker}
566*9880d681SAndroid Build Coastguard Worker
567*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_permutex_pd(i8 %a0, <8 x double> %a1) {
568*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_permutex_pd:
569*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
570*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
571*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
572*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,0,0,4,4,4,4]
573*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
574*9880d681SAndroid Build Coastguard Worker;
575*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_permutex_pd:
576*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
577*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
578*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,0,0,4,4,4,4]
579*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
580*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
581*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
582*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
583*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
584*9880d681SAndroid Build Coastguard Worker}
585*9880d681SAndroid Build Coastguard Worker
586*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_shuffle_epi32(<8 x i64> %a0) {
587*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_shuffle_epi32:
588*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
589*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshufd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4,9,8,8,8,13,12,12,12]
590*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
591*9880d681SAndroid Build Coastguard Worker;
592*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_shuffle_epi32:
593*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
594*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshufd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4,9,8,8,8,13,12,12,12]
595*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
596*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
597*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg0, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4, i32 9, i32 8, i32 8, i32 8, i32 13, i32 12, i32 12, i32 12>
598*9880d681SAndroid Build Coastguard Worker  %res1 = bitcast <16 x i32> %res0 to <8 x i64>
599*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
600*9880d681SAndroid Build Coastguard Worker}
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_shuffle_epi32(<8 x i64> %a0, i16 %a1, <8 x i64> %a2) {
603*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_shuffle_epi32:
604*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
605*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
606*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
607*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshufd {{.*#+}} zmm0 {%k1} = zmm1[1,0,0,0,5,4,4,4,9,8,8,8,13,12,12,12]
608*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
609*9880d681SAndroid Build Coastguard Worker;
610*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_shuffle_epi32:
611*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
612*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
613*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshufd {{.*#+}} zmm0 {%k1} = zmm1[1,0,0,0,5,4,4,4,9,8,8,8,13,12,12,12]
614*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
615*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
616*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
617*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <8 x i64> %a2 to <16 x i32>
618*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg2, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4, i32 9, i32 8, i32 8, i32 8, i32 13, i32 12, i32 12, i32 12>
619*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x i32> %res0, <16 x i32> %arg0
620*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
621*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
622*9880d681SAndroid Build Coastguard Worker}
623*9880d681SAndroid Build Coastguard Worker
624*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_shuffle_epi32(i16 %a0, <8 x i64> %a1) {
625*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_shuffle_epi32:
626*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
627*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
628*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
629*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[1,0,0,0,5,4,4,4,9,8,8,8,13,12,12,12]
630*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
631*9880d681SAndroid Build Coastguard Worker;
632*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_shuffle_epi32:
633*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
634*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
635*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[1,0,0,0,5,4,4,4,9,8,8,8,13,12,12,12]
636*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
637*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
638*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <8 x i64> %a1 to <16 x i32>
639*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg1, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4, i32 9, i32 8, i32 8, i32 8, i32 13, i32 12, i32 12, i32 12>
640*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x i32> %res0, <16 x i32> zeroinitializer
641*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
642*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
643*9880d681SAndroid Build Coastguard Worker}
644*9880d681SAndroid Build Coastguard Worker
645*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_shuffle_pd(<8 x double> %a0, <8 x double> %a1) {
646*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_shuffle_pd:
647*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
648*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[3],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
649*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
650*9880d681SAndroid Build Coastguard Worker;
651*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_shuffle_pd:
652*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
653*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[3],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
654*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
655*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x double> %a0, <8 x double> %a1, <8 x i32> <i32 0, i32 8, i32 3, i32 10, i32 4, i32 12, i32 6, i32 14>
656*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
657*9880d681SAndroid Build Coastguard Worker}
658*9880d681SAndroid Build Coastguard Worker
659*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_shuffle_pd(<8 x double> %a0, i8 %a1, <8 x double> %a2, <8 x double> %a3) {
660*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_shuffle_pd:
661*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
662*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
663*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
664*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[3],zmm2[2],zmm1[4],zmm2[4],zmm1[6],zmm2[6]
665*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
666*9880d681SAndroid Build Coastguard Worker;
667*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_shuffle_pd:
668*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
669*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
670*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[3],zmm2[2],zmm1[4],zmm2[4],zmm1[6],zmm2[6]
671*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
672*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
673*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a2, <8 x double> %a3, <8 x i32> <i32 0, i32 8, i32 3, i32 10, i32 4, i32 12, i32 6, i32 14>
674*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
675*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
676*9880d681SAndroid Build Coastguard Worker}
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_shuffle_pd(i8 %a0, <8 x double> %a1, <8 x double> %a2) {
679*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_shuffle_pd:
680*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
681*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
682*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
683*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[3],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
684*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
685*9880d681SAndroid Build Coastguard Worker;
686*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_shuffle_pd:
687*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
688*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
689*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[3],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
690*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
691*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
692*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a1, <8 x double> %a2, <8 x i32> <i32 0, i32 8, i32 3, i32 10, i32 4, i32 12, i32 6, i32 14>
693*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
694*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
695*9880d681SAndroid Build Coastguard Worker}
696*9880d681SAndroid Build Coastguard Worker
697*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_unpackhi_epi32(<8 x i64> %a0, <8 x i64> %a1) {
698*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpackhi_epi32:
699*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
700*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckhdq {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
701*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
702*9880d681SAndroid Build Coastguard Worker;
703*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpackhi_epi32:
704*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
705*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckhdq {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
706*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
707*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
708*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <8 x i64> %a1 to <16 x i32>
709*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg0, <16 x i32> %arg1, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
710*9880d681SAndroid Build Coastguard Worker  %res1 = bitcast <16 x i32> %res0 to <8 x i64>
711*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
712*9880d681SAndroid Build Coastguard Worker}
713*9880d681SAndroid Build Coastguard Worker
714*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_unpackhi_epi32(<8 x i64> %a0, i16 %a1, <8 x i64> %a2, <8 x i64> %a3) {
715*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpackhi_epi32:
716*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
717*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
718*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
719*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckhdq {{.*#+}} zmm0 {%k1} = zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[14],zmm2[14],zmm1[15],zmm2[15]
720*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
721*9880d681SAndroid Build Coastguard Worker;
722*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpackhi_epi32:
723*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
724*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
725*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckhdq {{.*#+}} zmm0 {%k1} = zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[14],zmm2[14],zmm1[15],zmm2[15]
726*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
727*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
728*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
729*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <8 x i64> %a2 to <16 x i32>
730*9880d681SAndroid Build Coastguard Worker  %arg3 = bitcast <8 x i64> %a3 to <16 x i32>
731*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg2, <16 x i32> %arg3, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
732*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x i32> %res0, <16 x i32> %arg0
733*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
734*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
735*9880d681SAndroid Build Coastguard Worker}
736*9880d681SAndroid Build Coastguard Worker
737*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_unpackhi_epi32(i16 %a0, <8 x i64> %a1, <8 x i64> %a2) {
738*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpackhi_epi32:
739*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
740*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
741*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
742*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckhdq {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
743*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
744*9880d681SAndroid Build Coastguard Worker;
745*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpackhi_epi32:
746*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
747*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
748*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckhdq {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
749*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
750*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
751*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <8 x i64> %a1 to <16 x i32>
752*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <8 x i64> %a2 to <16 x i32>
753*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg1, <16 x i32> %arg2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
754*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x i32> %res0, <16 x i32> zeroinitializer
755*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
756*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
757*9880d681SAndroid Build Coastguard Worker}
758*9880d681SAndroid Build Coastguard Worker
759*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_unpackhi_epi64(<8 x i64> %a0, <8 x i64> %a1) {
760*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpackhi_epi64:
761*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
762*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
763*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
764*9880d681SAndroid Build Coastguard Worker;
765*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpackhi_epi64:
766*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
767*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
768*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
769*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x i64> %a0, <8 x i64> %a1, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
770*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
771*9880d681SAndroid Build Coastguard Worker}
772*9880d681SAndroid Build Coastguard Worker
773*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_unpackhi_epi64(<8 x i64> %a0, i8 %a1, <8 x i64> %a2, <8 x i64> %a3) {
774*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpackhi_epi64:
775*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
776*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
777*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
778*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm1[1],zmm2[1],zmm1[3],zmm2[3],zmm1[5],zmm2[5],zmm1[7],zmm2[7]
779*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
780*9880d681SAndroid Build Coastguard Worker;
781*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpackhi_epi64:
782*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
783*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
784*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm1[1],zmm2[1],zmm1[3],zmm2[3],zmm1[5],zmm2[5],zmm1[7],zmm2[7]
785*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
786*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
787*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x i64> %a2, <8 x i64> %a3, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
788*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x i64> %res0, <8 x i64> %a0
789*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
790*9880d681SAndroid Build Coastguard Worker}
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_unpackhi_epi64(i8 %a0, <8 x i64> %a1, <8 x i64> %a2) {
793*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpackhi_epi64:
794*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
795*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
796*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
797*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
798*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
799*9880d681SAndroid Build Coastguard Worker;
800*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpackhi_epi64:
801*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
802*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
803*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
804*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
805*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
806*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x i64> %a1, <8 x i64> %a2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
807*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x i64> %res0, <8 x i64> zeroinitializer
808*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
809*9880d681SAndroid Build Coastguard Worker}
810*9880d681SAndroid Build Coastguard Worker
811*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_unpackhi_pd(<8 x double> %a0, <8 x double> %a1) {
812*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpackhi_pd:
813*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
814*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
815*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
816*9880d681SAndroid Build Coastguard Worker;
817*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpackhi_pd:
818*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
819*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
820*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
821*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x double> %a0, <8 x double> %a1, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
822*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
823*9880d681SAndroid Build Coastguard Worker}
824*9880d681SAndroid Build Coastguard Worker
825*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_unpackhi_pd(<8 x double> %a0, i8 %a1, <8 x double> %a2, <8 x double> %a3) {
826*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpackhi_pd:
827*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
828*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
829*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
830*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} = zmm1[1],zmm2[1],zmm1[3],zmm2[3],zmm1[5],zmm2[5],zmm1[7],zmm2[7]
831*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
832*9880d681SAndroid Build Coastguard Worker;
833*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpackhi_pd:
834*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
835*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
836*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} = zmm1[1],zmm2[1],zmm1[3],zmm2[3],zmm1[5],zmm2[5],zmm1[7],zmm2[7]
837*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
838*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
839*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a2, <8 x double> %a3, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
840*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
841*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
842*9880d681SAndroid Build Coastguard Worker}
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_unpackhi_pd(i8 %a0, <8 x double> %a1, <8 x double> %a2) {
845*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpackhi_pd:
846*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
847*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
848*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
849*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
850*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
851*9880d681SAndroid Build Coastguard Worker;
852*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpackhi_pd:
853*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
854*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
855*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
856*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
857*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
858*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a1, <8 x double> %a2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
859*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
860*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
861*9880d681SAndroid Build Coastguard Worker}
862*9880d681SAndroid Build Coastguard Worker
863*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_unpackhi_ps(<16 x float> %a0, <16 x float> %a1) {
864*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpackhi_ps:
865*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
866*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
867*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
868*9880d681SAndroid Build Coastguard Worker;
869*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpackhi_ps:
870*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
871*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
872*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
873*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <16 x float> %a0, <16 x float> %a1, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
874*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res
875*9880d681SAndroid Build Coastguard Worker}
876*9880d681SAndroid Build Coastguard Worker
877*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_mask_unpackhi_ps(<16 x float> %a0, i16 %a1, <16 x float> %a2, <16 x float> %a3) {
878*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpackhi_ps:
879*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
880*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
881*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
882*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} = zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[14],zmm2[14],zmm1[15],zmm2[15]
883*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
884*9880d681SAndroid Build Coastguard Worker;
885*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpackhi_ps:
886*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
887*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
888*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} = zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[14],zmm2[14],zmm1[15],zmm2[15]
889*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
890*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
891*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a2, <16 x float> %a3, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
892*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x float> %res0, <16 x float> %a0
893*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
894*9880d681SAndroid Build Coastguard Worker}
895*9880d681SAndroid Build Coastguard Worker
896*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_maskz_unpackhi_ps(i16 %a0, <16 x float> %a1, <16 x float> %a2) {
897*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpackhi_ps:
898*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
899*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
900*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
901*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
902*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
903*9880d681SAndroid Build Coastguard Worker;
904*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpackhi_ps:
905*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
906*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
907*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
908*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
909*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
910*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a1, <16 x float> %a2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
911*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x float> %res0, <16 x float> zeroinitializer
912*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
913*9880d681SAndroid Build Coastguard Worker}
914*9880d681SAndroid Build Coastguard Worker
915*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_unpacklo_epi32(<8 x i64> %a0, <8 x i64> %a1) {
916*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpacklo_epi32:
917*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
918*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
919*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
920*9880d681SAndroid Build Coastguard Worker;
921*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpacklo_epi32:
922*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
923*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
924*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
925*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
926*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <8 x i64> %a1 to <16 x i32>
927*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg0, <16 x i32> %arg1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
928*9880d681SAndroid Build Coastguard Worker  %res1 = bitcast <16 x i32> %res0 to <8 x i64>
929*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
930*9880d681SAndroid Build Coastguard Worker}
931*9880d681SAndroid Build Coastguard Worker
932*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_unpacklo_epi32(<8 x i64> %a0, i16 %a1, <8 x i64> %a2, <8 x i64> %a3) {
933*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpacklo_epi32:
934*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
935*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
936*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
937*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckldq {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[12],zmm2[12],zmm1[13],zmm2[13]
938*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
939*9880d681SAndroid Build Coastguard Worker;
940*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpacklo_epi32:
941*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
942*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
943*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckldq {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[12],zmm2[12],zmm1[13],zmm2[13]
944*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
945*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <8 x i64> %a0 to <16 x i32>
946*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
947*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <8 x i64> %a2 to <16 x i32>
948*9880d681SAndroid Build Coastguard Worker  %arg3 = bitcast <8 x i64> %a3 to <16 x i32>
949*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg2, <16 x i32> %arg3, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
950*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x i32> %res0, <16 x i32> %arg0
951*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
952*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
953*9880d681SAndroid Build Coastguard Worker}
954*9880d681SAndroid Build Coastguard Worker
955*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_unpacklo_epi32(i16 %a0, <8 x i64> %a1, <8 x i64> %a2) {
956*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpacklo_epi32:
957*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
958*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
959*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
960*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpckldq {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
961*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
962*9880d681SAndroid Build Coastguard Worker;
963*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpacklo_epi32:
964*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
965*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
966*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpckldq {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
967*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
968*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
969*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <8 x i64> %a1 to <16 x i32>
970*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <8 x i64> %a2 to <16 x i32>
971*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x i32> %arg1, <16 x i32> %arg2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
972*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x i32> %res0, <16 x i32> zeroinitializer
973*9880d681SAndroid Build Coastguard Worker  %res2 = bitcast <16 x i32> %res1 to <8 x i64>
974*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
975*9880d681SAndroid Build Coastguard Worker}
976*9880d681SAndroid Build Coastguard Worker
977*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_unpacklo_epi64(<8 x i64> %a0, <8 x i64> %a1) {
978*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpacklo_epi64:
979*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
980*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
981*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
982*9880d681SAndroid Build Coastguard Worker;
983*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpacklo_epi64:
984*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
985*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
986*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
987*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x i64> %a0, <8 x i64> %a1, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
988*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
989*9880d681SAndroid Build Coastguard Worker}
990*9880d681SAndroid Build Coastguard Worker
991*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_mask_unpacklo_epi64(<8 x i64> %a0, i8 %a1, <8 x i64> %a2, <8 x i64> %a3) {
992*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpacklo_epi64:
993*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
994*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
995*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
996*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm1[0],zmm2[0],zmm1[2],zmm2[2],zmm1[4],zmm2[4],zmm1[6],zmm2[6]
997*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
998*9880d681SAndroid Build Coastguard Worker;
999*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpacklo_epi64:
1000*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1001*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
1002*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm1[0],zmm2[0],zmm1[2],zmm2[2],zmm1[4],zmm2[4],zmm1[6],zmm2[6]
1003*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1004*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
1005*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x i64> %a2, <8 x i64> %a3, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1006*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x i64> %res0, <8 x i64> %a0
1007*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
1008*9880d681SAndroid Build Coastguard Worker}
1009*9880d681SAndroid Build Coastguard Worker
1010*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mm512_maskz_unpacklo_epi64(i8 %a0, <8 x i64> %a1, <8 x i64> %a2) {
1011*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpacklo_epi64:
1012*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1013*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
1014*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
1015*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1016*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1017*9880d681SAndroid Build Coastguard Worker;
1018*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpacklo_epi64:
1019*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1020*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
1021*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1022*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1023*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
1024*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x i64> %a1, <8 x i64> %a2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1025*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x i64> %res0, <8 x i64> zeroinitializer
1026*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res1
1027*9880d681SAndroid Build Coastguard Worker}
1028*9880d681SAndroid Build Coastguard Worker
1029*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_unpacklo_pd(<8 x double> %a0, <8 x double> %a1) {
1030*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpacklo_pd:
1031*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1032*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1033*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1034*9880d681SAndroid Build Coastguard Worker;
1035*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpacklo_pd:
1036*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1037*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1038*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1039*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x double> %a0, <8 x double> %a1, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1040*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res
1041*9880d681SAndroid Build Coastguard Worker}
1042*9880d681SAndroid Build Coastguard Worker
1043*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_mask_unpacklo_pd(<8 x double> %a0, i8 %a1, <8 x double> %a2, <8 x double> %a3) {
1044*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpacklo_pd:
1045*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1046*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
1047*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
1048*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[2],zmm2[2],zmm1[4],zmm2[4],zmm1[6],zmm2[6]
1049*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1050*9880d681SAndroid Build Coastguard Worker;
1051*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpacklo_pd:
1052*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1053*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
1054*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[2],zmm2[2],zmm1[4],zmm2[4],zmm1[6],zmm2[6]
1055*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1056*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i8 %a1 to <8 x i1>
1057*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a2, <8 x double> %a3, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1058*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg1, <8 x double> %res0, <8 x double> %a0
1059*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
1060*9880d681SAndroid Build Coastguard Worker}
1061*9880d681SAndroid Build Coastguard Worker
1062*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mm512_maskz_unpacklo_pd(i8 %a0, <8 x double> %a1, <8 x double> %a2) {
1063*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpacklo_pd:
1064*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1065*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
1066*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
1067*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1068*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1069*9880d681SAndroid Build Coastguard Worker;
1070*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpacklo_pd:
1071*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1072*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
1073*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1074*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1075*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i8 %a0 to <8 x i1>
1076*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <8 x double> %a1, <8 x double> %a2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1077*9880d681SAndroid Build Coastguard Worker  %res1 = select <8 x i1> %arg0, <8 x double> %res0, <8 x double> zeroinitializer
1078*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res1
1079*9880d681SAndroid Build Coastguard Worker}
1080*9880d681SAndroid Build Coastguard Worker
1081*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_unpacklo_ps(<16 x float> %a0, <16 x float> %a1) {
1082*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_unpacklo_ps:
1083*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1084*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
1085*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1086*9880d681SAndroid Build Coastguard Worker;
1087*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_unpacklo_ps:
1088*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1089*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
1090*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1091*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <16 x float> %a0, <16 x float> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
1092*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res
1093*9880d681SAndroid Build Coastguard Worker}
1094*9880d681SAndroid Build Coastguard Worker
1095*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_mask_unpacklo_ps(<16 x float> %a0, i16 %a1, <16 x float> %a2, <16 x float> %a3) {
1096*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_mask_unpacklo_ps:
1097*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1098*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
1099*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
1100*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[12],zmm2[12],zmm1[13],zmm2[13]
1101*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1102*9880d681SAndroid Build Coastguard Worker;
1103*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_mask_unpacklo_ps:
1104*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1105*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
1106*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[12],zmm2[12],zmm1[13],zmm2[13]
1107*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1108*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast i16 %a1 to <16 x i1>
1109*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a2, <16 x float> %a3, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
1110*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg1, <16 x float> %res0, <16 x float> %a0
1111*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
1112*9880d681SAndroid Build Coastguard Worker}
1113*9880d681SAndroid Build Coastguard Worker
1114*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mm512_maskz_unpacklo_ps(i16 %a0, <16 x float> %a1, <16 x float> %a2) {
1115*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm512_maskz_unpacklo_ps:
1116*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1117*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movw {{[0-9]+}}(%esp), %ax
1118*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    kmovw %eax, %k1
1119*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
1120*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1121*9880d681SAndroid Build Coastguard Worker;
1122*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm512_maskz_unpacklo_ps:
1123*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1124*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    kmovw %edi, %k1
1125*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
1126*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1127*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast i16 %a0 to <16 x i1>
1128*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <16 x float> %a1, <16 x float> %a2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
1129*9880d681SAndroid Build Coastguard Worker  %res1 = select <16 x i1> %arg0, <16 x float> %res0, <16 x float> zeroinitializer
1130*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res1
1131*9880d681SAndroid Build Coastguard Worker}
1132*9880d681SAndroid Build Coastguard Worker
1133*9880d681SAndroid Build Coastguard Worker!0 = !{i32 1}
1134*9880d681SAndroid Build Coastguard Worker
1135