[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / X86 / tuning-shuffle-unpckps-avx512.ll
blob96155f0300d2dd28aaebd8afbf9c1e3ae8cd4ab4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512  | FileCheck %s --check-prefixes=CHECK,CHECK-SKX
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=icelake-server  | FileCheck %s --check-prefixes=CHECK,CHECK-ICX,CHECK-ICX-NO-BYPASS-DELAY
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=icelake-server -mattr=-no-bypass-delay-shuffle | FileCheck %s --check-prefixes=CHECK,CHECK-ICX,CHECK-ICX-BYPASS-DELAY
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4  | FileCheck %s --check-prefixes=CHECK,CHECK-V4
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq  | FileCheck %s --check-prefixes=CHECK,CHECK-AVX512
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver4  | FileCheck %s --check-prefixes=CHECK,CHECK-ZNVER4
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver5  | FileCheck %s --check-prefixes=CHECK,CHECK-ZNVER4
10 define <16 x float> @transform_VUNPCKLPSZrr(<16 x float> %a, <16 x float> %b) nounwind {
11 ; CHECK-LABEL: transform_VUNPCKLPSZrr:
12 ; CHECK:       # %bb.0:
13 ; CHECK-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]
14 ; CHECK-NEXT:    retq
15   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
16   ret <16 x float> %shufp
19 define <16 x float> @transform_VUNPCKHPSZrr(<16 x float> %a, <16 x float> %b) nounwind {
20 ; CHECK-LABEL: transform_VUNPCKHPSZrr:
21 ; CHECK:       # %bb.0:
22 ; CHECK-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]
23 ; CHECK-NEXT:    retq
24   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
25   ret <16 x float> %shufp
28 define <8 x float> @transform_VUNPCKLPSYrr(<8 x float> %a, <8 x float> %b) nounwind {
29 ; CHECK-SKX-LABEL: transform_VUNPCKLPSYrr:
30 ; CHECK-SKX:       # %bb.0:
31 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
32 ; CHECK-SKX-NEXT:    retq
34 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrr:
35 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
36 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
37 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
39 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrr:
40 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
41 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
42 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
44 ; CHECK-V4-LABEL: transform_VUNPCKLPSYrr:
45 ; CHECK-V4:       # %bb.0:
46 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
47 ; CHECK-V4-NEXT:    retq
49 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrr:
50 ; CHECK-AVX512:       # %bb.0:
51 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
52 ; CHECK-AVX512-NEXT:    retq
54 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrr:
55 ; CHECK-ZNVER4:       # %bb.0:
56 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
57 ; CHECK-ZNVER4-NEXT:    retq
58   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
59   ret <8 x float> %shufp
62 define <8 x float> @transform_VUNPCKHPSYrr(<8 x float> %a, <8 x float> %b) nounwind {
63 ; CHECK-SKX-LABEL: transform_VUNPCKHPSYrr:
64 ; CHECK-SKX:       # %bb.0:
65 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
66 ; CHECK-SKX-NEXT:    retq
68 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrr:
69 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
70 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
71 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
73 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrr:
74 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
75 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
76 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
78 ; CHECK-V4-LABEL: transform_VUNPCKHPSYrr:
79 ; CHECK-V4:       # %bb.0:
80 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
81 ; CHECK-V4-NEXT:    retq
83 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrr:
84 ; CHECK-AVX512:       # %bb.0:
85 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
86 ; CHECK-AVX512-NEXT:    retq
88 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrr:
89 ; CHECK-ZNVER4:       # %bb.0:
90 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
91 ; CHECK-ZNVER4-NEXT:    retq
92   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
93   ret <8 x float> %shufp
96 define <4 x float> @transform_VUNPCKLPSrr(<4 x float> %a, <4 x float> %b) nounwind {
97 ; CHECK-SKX-LABEL: transform_VUNPCKLPSrr:
98 ; CHECK-SKX:       # %bb.0:
99 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
100 ; CHECK-SKX-NEXT:    retq
102 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrr:
103 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
104 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
105 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
107 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrr:
108 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
109 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
110 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
112 ; CHECK-V4-LABEL: transform_VUNPCKLPSrr:
113 ; CHECK-V4:       # %bb.0:
114 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
115 ; CHECK-V4-NEXT:    retq
117 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSrr:
118 ; CHECK-AVX512:       # %bb.0:
119 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
120 ; CHECK-AVX512-NEXT:    retq
122 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrr:
123 ; CHECK-ZNVER4:       # %bb.0:
124 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
125 ; CHECK-ZNVER4-NEXT:    retq
126   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
127   ret <4 x float> %shufp
130 define <4 x float> @transform_VUNPCKHPSrr(<4 x float> %a, <4 x float> %b) nounwind {
131 ; CHECK-SKX-LABEL: transform_VUNPCKHPSrr:
132 ; CHECK-SKX:       # %bb.0:
133 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
134 ; CHECK-SKX-NEXT:    retq
136 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrr:
137 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
138 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
139 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
141 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrr:
142 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
143 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
144 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
146 ; CHECK-V4-LABEL: transform_VUNPCKHPSrr:
147 ; CHECK-V4:       # %bb.0:
148 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
149 ; CHECK-V4-NEXT:    retq
151 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSrr:
152 ; CHECK-AVX512:       # %bb.0:
153 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
154 ; CHECK-AVX512-NEXT:    retq
156 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrr:
157 ; CHECK-ZNVER4:       # %bb.0:
158 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
159 ; CHECK-ZNVER4-NEXT:    retq
160   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
161   ret <4 x float> %shufp
164 define <16 x float> @transform_VUNPCKLPSZrrkz(<16 x float> %a, <16 x float> %b, i16 %mask_int) nounwind {
165 ; CHECK-LABEL: transform_VUNPCKLPSZrrkz:
166 ; CHECK:       # %bb.0:
167 ; CHECK-NEXT:    kmovd %edi, %k1
168 ; CHECK-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]
169 ; CHECK-NEXT:    retq
170   %mask = bitcast i16 %mask_int to <16 x i1>
171   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
172   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer
173   ret <16 x float> %res
176 define <16 x float> @transform_VUNPCKHPSZrrkz(<16 x float> %a, <16 x float> %b, i16 %mask_int) nounwind {
177 ; CHECK-LABEL: transform_VUNPCKHPSZrrkz:
178 ; CHECK:       # %bb.0:
179 ; CHECK-NEXT:    kmovd %edi, %k1
180 ; CHECK-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]
181 ; CHECK-NEXT:    retq
182   %mask = bitcast i16 %mask_int to <16 x i1>
183   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
184   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer
185   ret <16 x float> %res
188 define <8 x float> @transform_VUNPCKLPSYrrkz(<8 x float> %a, <8 x float> %b, i8 %mask_int) nounwind {
189 ; CHECK-SKX-LABEL: transform_VUNPCKLPSYrrkz:
190 ; CHECK-SKX:       # %bb.0:
191 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
192 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
193 ; CHECK-SKX-NEXT:    retq
195 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrkz:
196 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
197 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
198 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
199 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
201 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrkz:
202 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
203 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
204 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
205 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
207 ; CHECK-V4-LABEL: transform_VUNPCKLPSYrrkz:
208 ; CHECK-V4:       # %bb.0:
209 ; CHECK-V4-NEXT:    kmovd %edi, %k1
210 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
211 ; CHECK-V4-NEXT:    retq
213 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrrkz:
214 ; CHECK-AVX512:       # %bb.0:
215 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
216 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
217 ; CHECK-AVX512-NEXT:    retq
219 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrrkz:
220 ; CHECK-ZNVER4:       # %bb.0:
221 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
222 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
223 ; CHECK-ZNVER4-NEXT:    retq
224   %mask = bitcast i8 %mask_int to <8 x i1>
225   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
226   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer
227   ret <8 x float> %res
230 define <8 x float> @transform_VUNPCKHPSYrrkz(<8 x float> %a, <8 x float> %b, i8 %mask_int) nounwind {
231 ; CHECK-SKX-LABEL: transform_VUNPCKHPSYrrkz:
232 ; CHECK-SKX:       # %bb.0:
233 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
234 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
235 ; CHECK-SKX-NEXT:    retq
237 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrkz:
238 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
239 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
240 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
241 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
243 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrkz:
244 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
245 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
246 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
247 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
249 ; CHECK-V4-LABEL: transform_VUNPCKHPSYrrkz:
250 ; CHECK-V4:       # %bb.0:
251 ; CHECK-V4-NEXT:    kmovd %edi, %k1
252 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
253 ; CHECK-V4-NEXT:    retq
255 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrrkz:
256 ; CHECK-AVX512:       # %bb.0:
257 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
258 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
259 ; CHECK-AVX512-NEXT:    retq
261 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrrkz:
262 ; CHECK-ZNVER4:       # %bb.0:
263 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
264 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
265 ; CHECK-ZNVER4-NEXT:    retq
266   %mask = bitcast i8 %mask_int to <8 x i1>
267   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
268   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer
269   ret <8 x float> %res
272 define <4 x float> @transform_VUNPCKLPSrrkz(<4 x float> %a, <4 x float> %b, i4 %mask_int) nounwind {
273 ; CHECK-SKX-LABEL: transform_VUNPCKLPSrrkz:
274 ; CHECK-SKX:       # %bb.0:
275 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
276 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
277 ; CHECK-SKX-NEXT:    retq
279 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrkz:
280 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
281 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
282 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
283 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
285 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrkz:
286 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
287 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
288 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
289 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
291 ; CHECK-V4-LABEL: transform_VUNPCKLPSrrkz:
292 ; CHECK-V4:       # %bb.0:
293 ; CHECK-V4-NEXT:    kmovd %edi, %k1
294 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
295 ; CHECK-V4-NEXT:    retq
297 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSrrkz:
298 ; CHECK-AVX512:       # %bb.0:
299 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
300 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
301 ; CHECK-AVX512-NEXT:    retq
303 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrrkz:
304 ; CHECK-ZNVER4:       # %bb.0:
305 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
306 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
307 ; CHECK-ZNVER4-NEXT:    retq
308   %mask = bitcast i4 %mask_int to <4 x i1>
309   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
310   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer
311   ret <4 x float> %res
314 define <4 x float> @transform_VUNPCKHPSrrkz(<4 x float> %a, <4 x float> %b, i4 %mask_int) nounwind {
315 ; CHECK-SKX-LABEL: transform_VUNPCKHPSrrkz:
316 ; CHECK-SKX:       # %bb.0:
317 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
318 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
319 ; CHECK-SKX-NEXT:    retq
321 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrkz:
322 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
323 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
324 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
325 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
327 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrkz:
328 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
329 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
330 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
331 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
333 ; CHECK-V4-LABEL: transform_VUNPCKHPSrrkz:
334 ; CHECK-V4:       # %bb.0:
335 ; CHECK-V4-NEXT:    kmovd %edi, %k1
336 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
337 ; CHECK-V4-NEXT:    retq
339 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSrrkz:
340 ; CHECK-AVX512:       # %bb.0:
341 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
342 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
343 ; CHECK-AVX512-NEXT:    retq
345 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrrkz:
346 ; CHECK-ZNVER4:       # %bb.0:
347 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
348 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
349 ; CHECK-ZNVER4-NEXT:    retq
350   %mask = bitcast i4 %mask_int to <4 x i1>
351   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
352   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer
353   ret <4 x float> %res
356 define <16 x float> @transform_VUNPCKLPSZrrk(<16 x float> %a, <16 x float> %b, <16 x float> %c, i16 %mask_int) nounwind {
357 ; CHECK-LABEL: transform_VUNPCKLPSZrrk:
358 ; CHECK:       # %bb.0:
359 ; CHECK-NEXT:    kmovd %edi, %k1
360 ; CHECK-NEXT:    vunpcklps {{.*#+}} zmm2 {%k1} = 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]
361 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
362 ; CHECK-NEXT:    retq
363   %mask = bitcast i16 %mask_int to <16 x i1>
364   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
365   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c
366   ret <16 x float> %res
369 define <16 x float> @transform_VUNPCKHPSZrrk(<16 x float> %a, <16 x float> %b, <16 x float> %c, i16 %mask_int) nounwind {
370 ; CHECK-LABEL: transform_VUNPCKHPSZrrk:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    kmovd %edi, %k1
373 ; CHECK-NEXT:    vunpckhps {{.*#+}} zmm2 {%k1} = 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]
374 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
375 ; CHECK-NEXT:    retq
376   %mask = bitcast i16 %mask_int to <16 x i1>
377   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
378   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c
379   ret <16 x float> %res
382 define <8 x float> @transform_VUNPCKLPSYrrk(<8 x float> %a, <8 x float> %b, <8 x float> %c, i8 %mask_int) nounwind {
383 ; CHECK-SKX-LABEL: transform_VUNPCKLPSYrrk:
384 ; CHECK-SKX:       # %bb.0:
385 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
386 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
387 ; CHECK-SKX-NEXT:    vmovaps %ymm2, %ymm0
388 ; CHECK-SKX-NEXT:    retq
390 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrk:
391 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
392 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
393 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
394 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %ymm2, %ymm0
395 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
397 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrk:
398 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
399 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
400 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
401 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %ymm2, %ymm0
402 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
404 ; CHECK-V4-LABEL: transform_VUNPCKLPSYrrk:
405 ; CHECK-V4:       # %bb.0:
406 ; CHECK-V4-NEXT:    kmovd %edi, %k1
407 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
408 ; CHECK-V4-NEXT:    vmovaps %ymm2, %ymm0
409 ; CHECK-V4-NEXT:    retq
411 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrrk:
412 ; CHECK-AVX512:       # %bb.0:
413 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
414 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
415 ; CHECK-AVX512-NEXT:    vmovaps %ymm2, %ymm0
416 ; CHECK-AVX512-NEXT:    retq
418 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrrk:
419 ; CHECK-ZNVER4:       # %bb.0:
420 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
421 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
422 ; CHECK-ZNVER4-NEXT:    vmovaps %ymm2, %ymm0
423 ; CHECK-ZNVER4-NEXT:    retq
424   %mask = bitcast i8 %mask_int to <8 x i1>
425   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
426   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c
427   ret <8 x float> %res
430 define <8 x float> @transform_VUNPCKHPSYrrk(<8 x float> %a, <8 x float> %b, <8 x float> %c, i8 %mask_int) nounwind {
431 ; CHECK-SKX-LABEL: transform_VUNPCKHPSYrrk:
432 ; CHECK-SKX:       # %bb.0:
433 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
434 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
435 ; CHECK-SKX-NEXT:    vmovaps %ymm2, %ymm0
436 ; CHECK-SKX-NEXT:    retq
438 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrk:
439 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
440 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
441 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
442 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %ymm2, %ymm0
443 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
445 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrk:
446 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
447 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
448 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
449 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %ymm2, %ymm0
450 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
452 ; CHECK-V4-LABEL: transform_VUNPCKHPSYrrk:
453 ; CHECK-V4:       # %bb.0:
454 ; CHECK-V4-NEXT:    kmovd %edi, %k1
455 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
456 ; CHECK-V4-NEXT:    vmovaps %ymm2, %ymm0
457 ; CHECK-V4-NEXT:    retq
459 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrrk:
460 ; CHECK-AVX512:       # %bb.0:
461 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
462 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
463 ; CHECK-AVX512-NEXT:    vmovaps %ymm2, %ymm0
464 ; CHECK-AVX512-NEXT:    retq
466 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrrk:
467 ; CHECK-ZNVER4:       # %bb.0:
468 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
469 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
470 ; CHECK-ZNVER4-NEXT:    vmovaps %ymm2, %ymm0
471 ; CHECK-ZNVER4-NEXT:    retq
472   %mask = bitcast i8 %mask_int to <8 x i1>
473   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
474   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c
475   ret <8 x float> %res
478 define <4 x float> @transform_VUNPCKLPSrrk(<4 x float> %a, <4 x float> %b, <4 x float> %c, i4 %mask_int) nounwind {
479 ; CHECK-SKX-LABEL: transform_VUNPCKLPSrrk:
480 ; CHECK-SKX:       # %bb.0:
481 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
482 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
483 ; CHECK-SKX-NEXT:    vmovaps %xmm2, %xmm0
484 ; CHECK-SKX-NEXT:    retq
486 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrk:
487 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
488 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
489 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
490 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %xmm2, %xmm0
491 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
493 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrk:
494 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
495 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
496 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
497 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %xmm2, %xmm0
498 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
500 ; CHECK-V4-LABEL: transform_VUNPCKLPSrrk:
501 ; CHECK-V4:       # %bb.0:
502 ; CHECK-V4-NEXT:    kmovd %edi, %k1
503 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
504 ; CHECK-V4-NEXT:    vmovaps %xmm2, %xmm0
505 ; CHECK-V4-NEXT:    retq
507 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSrrk:
508 ; CHECK-AVX512:       # %bb.0:
509 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
510 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
511 ; CHECK-AVX512-NEXT:    vmovaps %xmm2, %xmm0
512 ; CHECK-AVX512-NEXT:    retq
514 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrrk:
515 ; CHECK-ZNVER4:       # %bb.0:
516 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
517 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
518 ; CHECK-ZNVER4-NEXT:    vmovaps %xmm2, %xmm0
519 ; CHECK-ZNVER4-NEXT:    retq
520   %mask = bitcast i4 %mask_int to <4 x i1>
521   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
522   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c
523   ret <4 x float> %res
526 define <4 x float> @transform_VUNPCKHPSrrk(<4 x float> %a, <4 x float> %b, <4 x float> %c, i4 %mask_int) nounwind {
527 ; CHECK-SKX-LABEL: transform_VUNPCKHPSrrk:
528 ; CHECK-SKX:       # %bb.0:
529 ; CHECK-SKX-NEXT:    kmovd %edi, %k1
530 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
531 ; CHECK-SKX-NEXT:    vmovaps %xmm2, %xmm0
532 ; CHECK-SKX-NEXT:    retq
534 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrk:
535 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
536 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
537 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
538 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %xmm2, %xmm0
539 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
541 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrk:
542 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
543 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %edi, %k1
544 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
545 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %xmm2, %xmm0
546 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
548 ; CHECK-V4-LABEL: transform_VUNPCKHPSrrk:
549 ; CHECK-V4:       # %bb.0:
550 ; CHECK-V4-NEXT:    kmovd %edi, %k1
551 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
552 ; CHECK-V4-NEXT:    vmovaps %xmm2, %xmm0
553 ; CHECK-V4-NEXT:    retq
555 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSrrk:
556 ; CHECK-AVX512:       # %bb.0:
557 ; CHECK-AVX512-NEXT:    kmovd %edi, %k1
558 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
559 ; CHECK-AVX512-NEXT:    vmovaps %xmm2, %xmm0
560 ; CHECK-AVX512-NEXT:    retq
562 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrrk:
563 ; CHECK-ZNVER4:       # %bb.0:
564 ; CHECK-ZNVER4-NEXT:    kmovd %edi, %k1
565 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
566 ; CHECK-ZNVER4-NEXT:    vmovaps %xmm2, %xmm0
567 ; CHECK-ZNVER4-NEXT:    retq
568   %mask = bitcast i4 %mask_int to <4 x i1>
569   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
570   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c
571   ret <4 x float> %res
574 define <16 x float> @transform_VUNPCKLPSZrm(<16 x float> %a, ptr %pb) nounwind {
575 ; CHECK-LABEL: transform_VUNPCKLPSZrm:
576 ; CHECK:       # %bb.0:
577 ; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]
578 ; CHECK-NEXT:    retq
579   %b = load <16 x float>, ptr %pb
580   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
581   ret <16 x float> %shufp
584 define <16 x float> @transform_VUNPCKHPSZrm(<16 x float> %a, ptr %pb) nounwind {
585 ; CHECK-LABEL: transform_VUNPCKHPSZrm:
586 ; CHECK:       # %bb.0:
587 ; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]
588 ; CHECK-NEXT:    retq
589   %b = load <16 x float>, ptr %pb
590   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
591   ret <16 x float> %shufp
594 define <8 x float> @transform_VUNPCKLPSYrm(<8 x float> %a, ptr %pb) nounwind {
595 ; CHECK-SKX-LABEL: transform_VUNPCKLPSYrm:
596 ; CHECK-SKX:       # %bb.0:
597 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
598 ; CHECK-SKX-NEXT:    retq
600 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrm:
601 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
602 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
603 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
605 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrm:
606 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
607 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
608 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
610 ; CHECK-V4-LABEL: transform_VUNPCKLPSYrm:
611 ; CHECK-V4:       # %bb.0:
612 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
613 ; CHECK-V4-NEXT:    retq
615 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrm:
616 ; CHECK-AVX512:       # %bb.0:
617 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
618 ; CHECK-AVX512-NEXT:    retq
620 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrm:
621 ; CHECK-ZNVER4:       # %bb.0:
622 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
623 ; CHECK-ZNVER4-NEXT:    retq
624   %b = load <8 x float>, ptr %pb
625   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
626   ret <8 x float> %shufp
629 define <8 x float> @transform_VUNPCKHPSYrm(<8 x float> %a, ptr %pb) nounwind {
630 ; CHECK-SKX-LABEL: transform_VUNPCKHPSYrm:
631 ; CHECK-SKX:       # %bb.0:
632 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
633 ; CHECK-SKX-NEXT:    retq
635 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrm:
636 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
637 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
638 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
640 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrm:
641 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
642 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
643 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
645 ; CHECK-V4-LABEL: transform_VUNPCKHPSYrm:
646 ; CHECK-V4:       # %bb.0:
647 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
648 ; CHECK-V4-NEXT:    retq
650 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrm:
651 ; CHECK-AVX512:       # %bb.0:
652 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
653 ; CHECK-AVX512-NEXT:    retq
655 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrm:
656 ; CHECK-ZNVER4:       # %bb.0:
657 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
658 ; CHECK-ZNVER4-NEXT:    retq
659   %b = load <8 x float>, ptr %pb
660   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
661   ret <8 x float> %shufp
664 define <4 x float> @transform_VUNPCKLPSrm(<4 x float> %a, ptr %pb) nounwind {
665 ; CHECK-SKX-LABEL: transform_VUNPCKLPSrm:
666 ; CHECK-SKX:       # %bb.0:
667 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
668 ; CHECK-SKX-NEXT:    retq
670 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrm:
671 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
672 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
673 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
675 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrm:
676 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
677 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
678 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
680 ; CHECK-V4-LABEL: transform_VUNPCKLPSrm:
681 ; CHECK-V4:       # %bb.0:
682 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
683 ; CHECK-V4-NEXT:    retq
685 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSrm:
686 ; CHECK-AVX512:       # %bb.0:
687 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
688 ; CHECK-AVX512-NEXT:    retq
690 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrm:
691 ; CHECK-ZNVER4:       # %bb.0:
692 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
693 ; CHECK-ZNVER4-NEXT:    retq
694   %b = load <4 x float>, ptr %pb
695   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
696   ret <4 x float> %shufp
699 define <4 x float> @transform_VUNPCKHPSrm(<4 x float> %a, ptr %pb) nounwind {
700 ; CHECK-SKX-LABEL: transform_VUNPCKHPSrm:
701 ; CHECK-SKX:       # %bb.0:
702 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
703 ; CHECK-SKX-NEXT:    retq
705 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrm:
706 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
707 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
708 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
710 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrm:
711 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
712 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
713 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
715 ; CHECK-V4-LABEL: transform_VUNPCKHPSrm:
716 ; CHECK-V4:       # %bb.0:
717 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
718 ; CHECK-V4-NEXT:    retq
720 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSrm:
721 ; CHECK-AVX512:       # %bb.0:
722 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
723 ; CHECK-AVX512-NEXT:    retq
725 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrm:
726 ; CHECK-ZNVER4:       # %bb.0:
727 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
728 ; CHECK-ZNVER4-NEXT:    retq
729   %b = load <4 x float>, ptr %pb
730   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
731   ret <4 x float> %shufp
734 define <16 x float> @transform_VUNPCKLPSZrmkz(<16 x float> %a, ptr %pb, i16 %mask_int) nounwind {
735 ; CHECK-LABEL: transform_VUNPCKLPSZrmkz:
736 ; CHECK:       # %bb.0:
737 ; CHECK-NEXT:    kmovd %esi, %k1
738 ; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]
739 ; CHECK-NEXT:    retq
740   %mask = bitcast i16 %mask_int to <16 x i1>
741   %b = load <16 x float>, ptr %pb
742   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
743   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer
744   ret <16 x float> %res
747 define <16 x float> @transform_VUNPCKHPSZrmkz(<16 x float> %a, ptr %pb, i16 %mask_int) nounwind {
748 ; CHECK-LABEL: transform_VUNPCKHPSZrmkz:
749 ; CHECK:       # %bb.0:
750 ; CHECK-NEXT:    kmovd %esi, %k1
751 ; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]
752 ; CHECK-NEXT:    retq
753   %mask = bitcast i16 %mask_int to <16 x i1>
754   %b = load <16 x float>, ptr %pb
755   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
756   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer
757   ret <16 x float> %res
760 define <8 x float> @transform_VUNPCKLPSYrmkz(<8 x float> %a, ptr %pb, i8 %mask_int) nounwind {
761 ; CHECK-SKX-LABEL: transform_VUNPCKLPSYrmkz:
762 ; CHECK-SKX:       # %bb.0:
763 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
764 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
765 ; CHECK-SKX-NEXT:    retq
767 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmkz:
768 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
769 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
770 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
771 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
773 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmkz:
774 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
775 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
776 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
777 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
779 ; CHECK-V4-LABEL: transform_VUNPCKLPSYrmkz:
780 ; CHECK-V4:       # %bb.0:
781 ; CHECK-V4-NEXT:    kmovd %esi, %k1
782 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
783 ; CHECK-V4-NEXT:    retq
785 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrmkz:
786 ; CHECK-AVX512:       # %bb.0:
787 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
788 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
789 ; CHECK-AVX512-NEXT:    retq
791 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrmkz:
792 ; CHECK-ZNVER4:       # %bb.0:
793 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
794 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
795 ; CHECK-ZNVER4-NEXT:    retq
796   %mask = bitcast i8 %mask_int to <8 x i1>
797   %b = load <8 x float>, ptr %pb
798   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
799   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer
800   ret <8 x float> %res
803 define <8 x float> @transform_VUNPCKHPSYrmkz(<8 x float> %a, ptr %pb, i8 %mask_int) nounwind {
804 ; CHECK-SKX-LABEL: transform_VUNPCKHPSYrmkz:
805 ; CHECK-SKX:       # %bb.0:
806 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
807 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
808 ; CHECK-SKX-NEXT:    retq
810 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmkz:
811 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
812 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
813 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
814 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
816 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmkz:
817 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
818 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
819 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
820 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
822 ; CHECK-V4-LABEL: transform_VUNPCKHPSYrmkz:
823 ; CHECK-V4:       # %bb.0:
824 ; CHECK-V4-NEXT:    kmovd %esi, %k1
825 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
826 ; CHECK-V4-NEXT:    retq
828 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrmkz:
829 ; CHECK-AVX512:       # %bb.0:
830 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
831 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
832 ; CHECK-AVX512-NEXT:    retq
834 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrmkz:
835 ; CHECK-ZNVER4:       # %bb.0:
836 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
837 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
838 ; CHECK-ZNVER4-NEXT:    retq
839   %mask = bitcast i8 %mask_int to <8 x i1>
840   %b = load <8 x float>, ptr %pb
841   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
842   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer
843   ret <8 x float> %res
846 define <4 x float> @transform_VUNPCKLPSrmkz(<4 x float> %a, ptr %pb, i4 %mask_int) nounwind {
847 ; CHECK-SKX-LABEL: transform_VUNPCKLPSrmkz:
848 ; CHECK-SKX:       # %bb.0:
849 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
850 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]
851 ; CHECK-SKX-NEXT:    retq
853 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmkz:
854 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
855 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
856 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]
857 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
859 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmkz:
860 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
861 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
862 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]
863 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
865 ; CHECK-V4-LABEL: transform_VUNPCKLPSrmkz:
866 ; CHECK-V4:       # %bb.0:
867 ; CHECK-V4-NEXT:    kmovd %esi, %k1
868 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]
869 ; CHECK-V4-NEXT:    retq
871 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSrmkz:
872 ; CHECK-AVX512:       # %bb.0:
873 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
874 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]
875 ; CHECK-AVX512-NEXT:    retq
877 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrmkz:
878 ; CHECK-ZNVER4:       # %bb.0:
879 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
880 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]
881 ; CHECK-ZNVER4-NEXT:    retq
882   %mask = bitcast i4 %mask_int to <4 x i1>
883   %b = load <4 x float>, ptr %pb
884   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
885   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer
886   ret <4 x float> %res
889 define <4 x float> @transform_VUNPCKHPSrmkz(<4 x float> %a, ptr %pb, i4 %mask_int) nounwind {
890 ; CHECK-SKX-LABEL: transform_VUNPCKHPSrmkz:
891 ; CHECK-SKX:       # %bb.0:
892 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
893 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]
894 ; CHECK-SKX-NEXT:    retq
896 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmkz:
897 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
898 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
899 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]
900 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
902 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmkz:
903 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
904 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
905 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]
906 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
908 ; CHECK-V4-LABEL: transform_VUNPCKHPSrmkz:
909 ; CHECK-V4:       # %bb.0:
910 ; CHECK-V4-NEXT:    kmovd %esi, %k1
911 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]
912 ; CHECK-V4-NEXT:    retq
914 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSrmkz:
915 ; CHECK-AVX512:       # %bb.0:
916 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
917 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]
918 ; CHECK-AVX512-NEXT:    retq
920 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrmkz:
921 ; CHECK-ZNVER4:       # %bb.0:
922 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
923 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]
924 ; CHECK-ZNVER4-NEXT:    retq
925   %mask = bitcast i4 %mask_int to <4 x i1>
926   %b = load <4 x float>, ptr %pb
927   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
928   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer
929   ret <4 x float> %res
932 define <16 x float> @transform_VUNPCKLPSZrmk(<16 x float> %a, ptr %pb, <16 x float> %c, i16 %mask_int) nounwind {
933 ; CHECK-LABEL: transform_VUNPCKLPSZrmk:
934 ; CHECK:       # %bb.0:
935 ; CHECK-NEXT:    kmovd %esi, %k1
936 ; CHECK-NEXT:    vunpcklps {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]
937 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
938 ; CHECK-NEXT:    retq
939   %mask = bitcast i16 %mask_int to <16 x i1>
940   %b = load <16 x float>, ptr %pb
941   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
942   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c
943   ret <16 x float> %res
946 define <16 x float> @transform_VUNPCKHPSZrmk(<16 x float> %a, ptr %pb, <16 x float> %c, i16 %mask_int) nounwind {
947 ; CHECK-LABEL: transform_VUNPCKHPSZrmk:
948 ; CHECK:       # %bb.0:
949 ; CHECK-NEXT:    kmovd %esi, %k1
950 ; CHECK-NEXT:    vunpckhps {{.*#+}} zmm1 {%k1} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]
951 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
952 ; CHECK-NEXT:    retq
953   %mask = bitcast i16 %mask_int to <16 x i1>
954   %b = load <16 x float>, ptr %pb
955   %shufp = shufflevector <16 x float> %a, <16 x float> %b, <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>
956   %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c
957   ret <16 x float> %res
960 define <8 x float> @transform_VUNPCKLPSYrmk(<8 x float> %a, ptr %pb, <8 x float> %c, i8 %mask_int) nounwind {
961 ; CHECK-SKX-LABEL: transform_VUNPCKLPSYrmk:
962 ; CHECK-SKX:       # %bb.0:
963 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
964 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
965 ; CHECK-SKX-NEXT:    vmovaps %ymm1, %ymm0
966 ; CHECK-SKX-NEXT:    retq
968 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmk:
969 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
970 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
971 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
972 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %ymm1, %ymm0
973 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
975 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmk:
976 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
977 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
978 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
979 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %ymm1, %ymm0
980 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
982 ; CHECK-V4-LABEL: transform_VUNPCKLPSYrmk:
983 ; CHECK-V4:       # %bb.0:
984 ; CHECK-V4-NEXT:    kmovd %esi, %k1
985 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
986 ; CHECK-V4-NEXT:    vmovaps %ymm1, %ymm0
987 ; CHECK-V4-NEXT:    retq
989 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrmk:
990 ; CHECK-AVX512:       # %bb.0:
991 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
992 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
993 ; CHECK-AVX512-NEXT:    vmovaps %ymm1, %ymm0
994 ; CHECK-AVX512-NEXT:    retq
996 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrmk:
997 ; CHECK-ZNVER4:       # %bb.0:
998 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
999 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]
1000 ; CHECK-ZNVER4-NEXT:    vmovaps %ymm1, %ymm0
1001 ; CHECK-ZNVER4-NEXT:    retq
1002   %mask = bitcast i8 %mask_int to <8 x i1>
1003   %b = load <8 x float>, ptr %pb
1004   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
1005   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c
1006   ret <8 x float> %res
1009 define <8 x float> @transform_VUNPCKHPSYrmk(<8 x float> %a, ptr %pb, <8 x float> %c, i8 %mask_int) nounwind {
1010 ; CHECK-SKX-LABEL: transform_VUNPCKHPSYrmk:
1011 ; CHECK-SKX:       # %bb.0:
1012 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
1013 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
1014 ; CHECK-SKX-NEXT:    vmovaps %ymm1, %ymm0
1015 ; CHECK-SKX-NEXT:    retq
1017 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmk:
1018 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
1019 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
1020 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
1021 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %ymm1, %ymm0
1022 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
1024 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmk:
1025 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
1026 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
1027 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
1028 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %ymm1, %ymm0
1029 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
1031 ; CHECK-V4-LABEL: transform_VUNPCKHPSYrmk:
1032 ; CHECK-V4:       # %bb.0:
1033 ; CHECK-V4-NEXT:    kmovd %esi, %k1
1034 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
1035 ; CHECK-V4-NEXT:    vmovaps %ymm1, %ymm0
1036 ; CHECK-V4-NEXT:    retq
1038 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrmk:
1039 ; CHECK-AVX512:       # %bb.0:
1040 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
1041 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
1042 ; CHECK-AVX512-NEXT:    vmovaps %ymm1, %ymm0
1043 ; CHECK-AVX512-NEXT:    retq
1045 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrmk:
1046 ; CHECK-ZNVER4:       # %bb.0:
1047 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
1048 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]
1049 ; CHECK-ZNVER4-NEXT:    vmovaps %ymm1, %ymm0
1050 ; CHECK-ZNVER4-NEXT:    retq
1051   %mask = bitcast i8 %mask_int to <8 x i1>
1052   %b = load <8 x float>, ptr %pb
1053   %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
1054   %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c
1055   ret <8 x float> %res
1058 define <4 x float> @transform_VUNPCKLPSrmk(<4 x float> %a, ptr %pb, <4 x float> %c, i4 %mask_int) nounwind {
1059 ; CHECK-SKX-LABEL: transform_VUNPCKLPSrmk:
1060 ; CHECK-SKX:       # %bb.0:
1061 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
1062 ; CHECK-SKX-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]
1063 ; CHECK-SKX-NEXT:    vmovaps %xmm1, %xmm0
1064 ; CHECK-SKX-NEXT:    retq
1066 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmk:
1067 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
1068 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
1069 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckldq {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]
1070 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %xmm1, %xmm0
1071 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
1073 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmk:
1074 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
1075 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
1076 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]
1077 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %xmm1, %xmm0
1078 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
1080 ; CHECK-V4-LABEL: transform_VUNPCKLPSrmk:
1081 ; CHECK-V4:       # %bb.0:
1082 ; CHECK-V4-NEXT:    kmovd %esi, %k1
1083 ; CHECK-V4-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]
1084 ; CHECK-V4-NEXT:    vmovaps %xmm1, %xmm0
1085 ; CHECK-V4-NEXT:    retq
1087 ; CHECK-AVX512-LABEL: transform_VUNPCKLPSrmk:
1088 ; CHECK-AVX512:       # %bb.0:
1089 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
1090 ; CHECK-AVX512-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]
1091 ; CHECK-AVX512-NEXT:    vmovaps %xmm1, %xmm0
1092 ; CHECK-AVX512-NEXT:    retq
1094 ; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrmk:
1095 ; CHECK-ZNVER4:       # %bb.0:
1096 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
1097 ; CHECK-ZNVER4-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]
1098 ; CHECK-ZNVER4-NEXT:    vmovaps %xmm1, %xmm0
1099 ; CHECK-ZNVER4-NEXT:    retq
1100   %mask = bitcast i4 %mask_int to <4 x i1>
1101   %b = load <4 x float>, ptr %pb
1102   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1103   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c
1104   ret <4 x float> %res
1107 define <4 x float> @transform_VUNPCKHPSrmk(<4 x float> %a, ptr %pb, <4 x float> %c, i4 %mask_int) nounwind {
1108 ; CHECK-SKX-LABEL: transform_VUNPCKHPSrmk:
1109 ; CHECK-SKX:       # %bb.0:
1110 ; CHECK-SKX-NEXT:    kmovd %esi, %k1
1111 ; CHECK-SKX-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]
1112 ; CHECK-SKX-NEXT:    vmovaps %xmm1, %xmm0
1113 ; CHECK-SKX-NEXT:    retq
1115 ; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmk:
1116 ; CHECK-ICX-NO-BYPASS-DELAY:       # %bb.0:
1117 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
1118 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vpunpckhdq {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]
1119 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    vmovaps %xmm1, %xmm0
1120 ; CHECK-ICX-NO-BYPASS-DELAY-NEXT:    retq
1122 ; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmk:
1123 ; CHECK-ICX-BYPASS-DELAY:       # %bb.0:
1124 ; CHECK-ICX-BYPASS-DELAY-NEXT:    kmovd %esi, %k1
1125 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]
1126 ; CHECK-ICX-BYPASS-DELAY-NEXT:    vmovaps %xmm1, %xmm0
1127 ; CHECK-ICX-BYPASS-DELAY-NEXT:    retq
1129 ; CHECK-V4-LABEL: transform_VUNPCKHPSrmk:
1130 ; CHECK-V4:       # %bb.0:
1131 ; CHECK-V4-NEXT:    kmovd %esi, %k1
1132 ; CHECK-V4-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]
1133 ; CHECK-V4-NEXT:    vmovaps %xmm1, %xmm0
1134 ; CHECK-V4-NEXT:    retq
1136 ; CHECK-AVX512-LABEL: transform_VUNPCKHPSrmk:
1137 ; CHECK-AVX512:       # %bb.0:
1138 ; CHECK-AVX512-NEXT:    kmovd %esi, %k1
1139 ; CHECK-AVX512-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]
1140 ; CHECK-AVX512-NEXT:    vmovaps %xmm1, %xmm0
1141 ; CHECK-AVX512-NEXT:    retq
1143 ; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrmk:
1144 ; CHECK-ZNVER4:       # %bb.0:
1145 ; CHECK-ZNVER4-NEXT:    kmovd %esi, %k1
1146 ; CHECK-ZNVER4-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]
1147 ; CHECK-ZNVER4-NEXT:    vmovaps %xmm1, %xmm0
1148 ; CHECK-ZNVER4-NEXT:    retq
1149   %mask = bitcast i4 %mask_int to <4 x i1>
1150   %b = load <4 x float>, ptr %pb
1151   %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1152   %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c
1153   ret <4 x float> %res
1155 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1156 ; CHECK-ICX: {{.*}}