[RISCV] Change func to funct in RISCVInstrInfoXqci.td. NFC (#119669)
[llvm-project.git] / llvm / test / CodeGen / PowerPC / v16i8_scalar_to_vector_shuffle.ll
blob3ab49cd39f8d80440720499faf39ae27025426f0
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \
3 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu < %s | \
4 ; RUN: FileCheck %s --check-prefix=CHECK-LE-P8
5 ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
6 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu < %s | \
7 ; RUN: FileCheck %s --check-prefix=CHECK-LE-P9
8 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \
9 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \
10 ; RUN: FileCheck %s --check-prefix=CHECK-BE-P8
11 ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
12 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \
13 ; RUN: FileCheck %s --check-prefix=CHECK-BE-P9
15 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \
16 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \
17 ; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P8
18 ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
19 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \
20 ; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P9
21 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \
22 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \
23 ; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P8
24 ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \
25 ; RUN:   -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \
26 ; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P9
28 define <16 x i8> @test_v16i8_v16i8(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {
29 ; CHECK-LE-P8-LABEL: test_v16i8_v16i8:
30 ; CHECK-LE-P8:       # %bb.0: # %entry
31 ; CHECK-LE-P8-NEXT:    lbz r3, 0(r3)
32 ; CHECK-LE-P8-NEXT:    lbz r4, 0(r4)
33 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r3
34 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r4
35 ; CHECK-LE-P8-NEXT:    vmrghh v2, v3, v2
36 ; CHECK-LE-P8-NEXT:    blr
38 ; CHECK-LE-P9-LABEL: test_v16i8_v16i8:
39 ; CHECK-LE-P9:       # %bb.0: # %entry
40 ; CHECK-LE-P9-NEXT:    lxsibzx v2, 0, r3
41 ; CHECK-LE-P9-NEXT:    lxsibzx v3, 0, r4
42 ; CHECK-LE-P9-NEXT:    vmrghh v2, v3, v2
43 ; CHECK-LE-P9-NEXT:    blr
45 ; CHECK-BE-P8-LABEL: test_v16i8_v16i8:
46 ; CHECK-BE-P8:       # %bb.0: # %entry
47 ; CHECK-BE-P8-NEXT:    addis r5, r2, .LCPI0_0@toc@ha
48 ; CHECK-BE-P8-NEXT:    lbz r3, 0(r3)
49 ; CHECK-BE-P8-NEXT:    lbz r4, 0(r4)
50 ; CHECK-BE-P8-NEXT:    addi r5, r5, .LCPI0_0@toc@l
51 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r4
52 ; CHECK-BE-P8-NEXT:    mtvsrwz v4, r3
53 ; CHECK-BE-P8-NEXT:    lxvw4x v2, 0, r5
54 ; CHECK-BE-P8-NEXT:    vperm v2, v4, v3, v2
55 ; CHECK-BE-P8-NEXT:    blr
57 ; CHECK-BE-P9-LABEL: test_v16i8_v16i8:
58 ; CHECK-BE-P9:       # %bb.0: # %entry
59 ; CHECK-BE-P9-NEXT:    addis r5, r2, .LCPI0_0@toc@ha
60 ; CHECK-BE-P9-NEXT:    lxsibzx v2, 0, r4
61 ; CHECK-BE-P9-NEXT:    lxsibzx f1, 0, r3
62 ; CHECK-BE-P9-NEXT:    addi r5, r5, .LCPI0_0@toc@l
63 ; CHECK-BE-P9-NEXT:    lxv vs0, 0(r5)
64 ; CHECK-BE-P9-NEXT:    xxperm v2, vs1, vs0
65 ; CHECK-BE-P9-NEXT:    blr
67 ; CHECK-AIX-64-P8-LABEL: test_v16i8_v16i8:
68 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
69 ; CHECK-AIX-64-P8-NEXT:    lbz r3, 0(r3)
70 ; CHECK-AIX-64-P8-NEXT:    lbz r4, 0(r4)
71 ; CHECK-AIX-64-P8-NEXT:    ld r5, L..C0(r2) # %const.0
72 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v2, 0, r5
73 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4
74 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v4, r3
75 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v4, v3, v2
76 ; CHECK-AIX-64-P8-NEXT:    blr
78 ; CHECK-AIX-64-P9-LABEL: test_v16i8_v16i8:
79 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
80 ; CHECK-AIX-64-P9-NEXT:    ld r5, L..C0(r2) # %const.0
81 ; CHECK-AIX-64-P9-NEXT:    lxsibzx v2, 0, r4
82 ; CHECK-AIX-64-P9-NEXT:    lxsibzx f1, 0, r3
83 ; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r5)
84 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs1, vs0
85 ; CHECK-AIX-64-P9-NEXT:    blr
87 ; CHECK-AIX-32-P8-LABEL: test_v16i8_v16i8:
88 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
89 ; CHECK-AIX-32-P8-NEXT:    lbz r3, 0(r3)
90 ; CHECK-AIX-32-P8-NEXT:    lbz r4, 0(r4)
91 ; CHECK-AIX-32-P8-NEXT:    lwz r5, L..C0(r2) # %const.0
92 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r5
93 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v3, r4
94 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v4, r3
95 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v4, v3, v2
96 ; CHECK-AIX-32-P8-NEXT:    blr
98 ; CHECK-AIX-32-P9-LABEL: test_v16i8_v16i8:
99 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
100 ; CHECK-AIX-32-P9-NEXT:    lwz r5, L..C0(r2) # %const.0
101 ; CHECK-AIX-32-P9-NEXT:    lxsibzx v2, 0, r4
102 ; CHECK-AIX-32-P9-NEXT:    lxsibzx f1, 0, r3
103 ; CHECK-AIX-32-P9-NEXT:    lxv vs0, 0(r5)
104 ; CHECK-AIX-32-P9-NEXT:    xxperm v2, vs1, vs0
105 ; CHECK-AIX-32-P9-NEXT:    blr
106 entry:
107   %0 = load <1 x i8>, ptr %a, align 4
108   %bc1 = bitcast <1 x i8> %0 to i8
109   %vecinit3 = insertelement <16 x i8> poison, i8 %bc1, i64 0
110   %1 = load <1 x i8>, ptr %b, align 8
111   %bc2 = bitcast <1 x i8> %1 to i8
112   %vecinit6 = insertelement <16 x i8> undef, i8 %bc2, i64 0
113   %2 = bitcast <16 x i8> %vecinit3 to <16 x i8>
114   %3 = bitcast <16 x i8> %vecinit6 to <16 x i8>
115   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
116   ret <16 x i8> %shuffle
119 define <16 x i8> @test_v16i8_none(<16 x i8> %a, i8 %b) {
120 ; CHECK-LE-P8-LABEL: test_v16i8_none:
121 ; CHECK-LE-P8:       # %bb.0: # %entry
122 ; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
123 ; CHECK-LE-P8-NEXT:    mtvsrd v4, r5
124 ; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI1_0@toc@l
125 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3
126 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
127 ; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3
128 ; CHECK-LE-P8-NEXT:    blr
130 ; CHECK-LE-P9-LABEL: test_v16i8_none:
131 ; CHECK-LE-P9:       # %bb.0: # %entry
132 ; CHECK-LE-P9-NEXT:    mtvsrwz v3, r5
133 ; CHECK-LE-P9-NEXT:    vinsertb v2, v3, 15
134 ; CHECK-LE-P9-NEXT:    blr
136 ; CHECK-BE-P8-LABEL: test_v16i8_none:
137 ; CHECK-BE-P8:       # %bb.0: # %entry
138 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
139 ; CHECK-BE-P8-NEXT:    mtvsrwz v4, r5
140 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI1_0@toc@l
141 ; CHECK-BE-P8-NEXT:    lxvw4x v3, 0, r3
142 ; CHECK-BE-P8-NEXT:    vperm v2, v4, v2, v3
143 ; CHECK-BE-P8-NEXT:    blr
145 ; CHECK-BE-P9-LABEL: test_v16i8_none:
146 ; CHECK-BE-P9:       # %bb.0: # %entry
147 ; CHECK-BE-P9-NEXT:    mtvsrwz v3, r5
148 ; CHECK-BE-P9-NEXT:    vinsertb v2, v3, 0
149 ; CHECK-BE-P9-NEXT:    blr
151 ; CHECK-AIX-64-P8-LABEL: test_v16i8_none:
152 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
153 ; CHECK-AIX-64-P8-NEXT:    ld r4, L..C1(r2) # %const.0
154 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v4, r3
155 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v3, 0, r4
156 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v4, v2, v3
157 ; CHECK-AIX-64-P8-NEXT:    blr
159 ; CHECK-AIX-64-P9-LABEL: test_v16i8_none:
160 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
161 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v3, r3
162 ; CHECK-AIX-64-P9-NEXT:    vinsertb v2, v3, 0
163 ; CHECK-AIX-64-P9-NEXT:    blr
165 ; CHECK-AIX-32-P8-LABEL: test_v16i8_none:
166 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
167 ; CHECK-AIX-32-P8-NEXT:    lwz r4, L..C1(r2) # %const.0
168 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v4, r3
169 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r4
170 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v4, v2, v3
171 ; CHECK-AIX-32-P8-NEXT:    blr
173 ; CHECK-AIX-32-P9-LABEL: test_v16i8_none:
174 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
175 ; CHECK-AIX-32-P9-NEXT:    mtvsrwz v3, r3
176 ; CHECK-AIX-32-P9-NEXT:    vinsertb v2, v3, 0
177 ; CHECK-AIX-32-P9-NEXT:    blr
178 entry:
179   %vecins = insertelement <16 x i8> %a, i8 %b, i32 0
180   ret <16 x i8> %vecins
183 define <16 x i8> @test_none_v16i8(i8 %arg, ptr nocapture noundef readonly %b) {
184 ; CHECK-LE-P8-LABEL: test_none_v16i8:
185 ; CHECK-LE-P8:       # %bb.0: # %entry
186 ; CHECK-LE-P8-NEXT:    addis r5, r2, .LCPI2_0@toc@ha
187 ; CHECK-LE-P8-NEXT:    lxvd2x v3, 0, r4
188 ; CHECK-LE-P8-NEXT:    mtvsrd v4, r3
189 ; CHECK-LE-P8-NEXT:    addi r5, r5, .LCPI2_0@toc@l
190 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r5
191 ; CHECK-LE-P8-NEXT:    xxswapd v2, vs0
192 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v3, v2
193 ; CHECK-LE-P8-NEXT:    blr
195 ; CHECK-LE-P9-LABEL: test_none_v16i8:
196 ; CHECK-LE-P9:       # %bb.0: # %entry
197 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r3
198 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
199 ; CHECK-LE-P9-NEXT:    lxv vs0, 0(r4)
200 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI2_0@toc@l
201 ; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)
202 ; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1
203 ; CHECK-LE-P9-NEXT:    blr
205 ; CHECK-BE-P8-LABEL: test_none_v16i8:
206 ; CHECK-BE-P8:       # %bb.0: # %entry
207 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3
208 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
209 ; CHECK-BE-P8-NEXT:    lxvw4x v2, 0, r4
210 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI2_0@toc@l
211 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
212 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
213 ; CHECK-BE-P8-NEXT:    blr
215 ; CHECK-BE-P9-LABEL: test_none_v16i8:
216 ; CHECK-BE-P9:       # %bb.0: # %entry
217 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r3
218 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
219 ; CHECK-BE-P9-NEXT:    lxv vs0, 0(r4)
220 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI2_0@toc@l
221 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
222 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
223 ; CHECK-BE-P9-NEXT:    blr
225 ; CHECK-AIX-64-P8-LABEL: test_none_v16i8:
226 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
227 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r3
228 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C2(r2) # %const.0
229 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v2, 0, r4
230 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
231 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
232 ; CHECK-AIX-64-P8-NEXT:    blr
234 ; CHECK-AIX-64-P9-LABEL: test_none_v16i8:
235 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
236 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r3
237 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C1(r2) # %const.0
238 ; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r4)
239 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
240 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
241 ; CHECK-AIX-64-P9-NEXT:    blr
243 ; CHECK-AIX-32-P8-LABEL: test_none_v16i8:
244 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
245 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r4
246 ; CHECK-AIX-32-P8-NEXT:    stb r3, -16(r1)
247 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
248 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
249 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v2, v3
250 ; CHECK-AIX-32-P8-NEXT:    blr
252 ; CHECK-AIX-32-P9-LABEL: test_none_v16i8:
253 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
254 ; CHECK-AIX-32-P9-NEXT:    lxv v2, 0(r4)
255 ; CHECK-AIX-32-P9-NEXT:    stb r3, -16(r1)
256 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -16(r1)
257 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v2, v3
258 ; CHECK-AIX-32-P9-NEXT:    blr
259 entry:
260   %lhs = load <16 x i8>, ptr %b, align 4
261   %rhs = insertelement <16 x i8> undef, i8 %arg, i32 0
262   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
263   ret <16 x i8> %shuffle
266 define <16 x i8> @test_v16i8_v8i16(i16 %arg, i8 %arg1) {
267 ; CHECK-LE-P8-LABEL: test_v16i8_v8i16:
268 ; CHECK-LE-P8:       # %bb.0: # %entry
269 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r4
270 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r3
271 ; CHECK-LE-P8-NEXT:    vmrghh v2, v3, v2
272 ; CHECK-LE-P8-NEXT:    blr
274 ; CHECK-LE-P9-LABEL: test_v16i8_v8i16:
275 ; CHECK-LE-P9:       # %bb.0: # %entry
276 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r4
277 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r3
278 ; CHECK-LE-P9-NEXT:    vmrghh v2, v3, v2
279 ; CHECK-LE-P9-NEXT:    blr
281 ; CHECK-BE-P8-LABEL: test_v16i8_v8i16:
282 ; CHECK-BE-P8:       # %bb.0: # %entry
283 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3
284 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
285 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4
286 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI3_0@toc@l
287 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
288 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
289 ; CHECK-BE-P8-NEXT:    blr
291 ; CHECK-BE-P9-LABEL: test_v16i8_v8i16:
292 ; CHECK-BE-P9:       # %bb.0: # %entry
293 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r3
294 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
295 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r4
296 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI3_0@toc@l
297 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
298 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
299 ; CHECK-BE-P9-NEXT:    blr
301 ; CHECK-AIX-64-P8-LABEL: test_v16i8_v8i16:
302 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
303 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r3
304 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C3(r2) # %const.0
305 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4
306 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
307 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
308 ; CHECK-AIX-64-P8-NEXT:    blr
310 ; CHECK-AIX-64-P9-LABEL: test_v16i8_v8i16:
311 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
312 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r3
313 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C2(r2) # %const.0
314 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r4
315 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
316 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
317 ; CHECK-AIX-64-P9-NEXT:    blr
319 ; CHECK-AIX-32-P8-LABEL: test_v16i8_v8i16:
320 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
321 ; CHECK-AIX-32-P8-NEXT:    stb r4, -32(r1)
322 ; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -32
323 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r4
324 ; CHECK-AIX-32-P8-NEXT:    sth r3, -16(r1)
325 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
326 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
327 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v2, v3
328 ; CHECK-AIX-32-P8-NEXT:    blr
330 ; CHECK-AIX-32-P9-LABEL: test_v16i8_v8i16:
331 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
332 ; CHECK-AIX-32-P9-NEXT:    stb r4, -32(r1)
333 ; CHECK-AIX-32-P9-NEXT:    sth r3, -16(r1)
334 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -32(r1)
335 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -16(r1)
336 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v2, v3
337 ; CHECK-AIX-32-P9-NEXT:    blr
338 entry:
339   %lhs = insertelement <16 x i8> undef, i8 %arg1, i32 0
340   %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0
341   %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>
342   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
343   ret <16 x i8> %shuffle
346 define <16 x i8> @test_v8i16_v16i8(i16 %arg, i8 %arg1) {
347 ; CHECK-LE-P8-LABEL: test_v8i16_v16i8:
348 ; CHECK-LE-P8:       # %bb.0: # %entry
349 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r4
350 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r3
351 ; CHECK-LE-P8-NEXT:    vmrghh v2, v2, v3
352 ; CHECK-LE-P8-NEXT:    blr
354 ; CHECK-LE-P9-LABEL: test_v8i16_v16i8:
355 ; CHECK-LE-P9:       # %bb.0: # %entry
356 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r4
357 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r3
358 ; CHECK-LE-P9-NEXT:    vmrghh v2, v2, v3
359 ; CHECK-LE-P9-NEXT:    blr
361 ; CHECK-BE-P8-LABEL: test_v8i16_v16i8:
362 ; CHECK-BE-P8:       # %bb.0: # %entry
363 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3
364 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI4_0@toc@ha
365 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4
366 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI4_0@toc@l
367 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
368 ; CHECK-BE-P8-NEXT:    vperm v2, v3, v2, v4
369 ; CHECK-BE-P8-NEXT:    blr
371 ; CHECK-BE-P9-LABEL: test_v8i16_v16i8:
372 ; CHECK-BE-P9:       # %bb.0: # %entry
373 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r3
374 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI4_0@toc@ha
375 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r4
376 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI4_0@toc@l
377 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
378 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
379 ; CHECK-BE-P9-NEXT:    blr
381 ; CHECK-AIX-64-P8-LABEL: test_v8i16_v16i8:
382 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
383 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r3
384 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C4(r2) # %const.0
385 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4
386 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
387 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v3, v2, v4
388 ; CHECK-AIX-64-P8-NEXT:    blr
390 ; CHECK-AIX-64-P9-LABEL: test_v8i16_v16i8:
391 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
392 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r3
393 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C3(r2) # %const.0
394 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
395 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
396 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
397 ; CHECK-AIX-64-P9-NEXT:    blr
399 ; CHECK-AIX-32-P8-LABEL: test_v8i16_v16i8:
400 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
401 ; CHECK-AIX-32-P8-NEXT:    stb r4, -32(r1)
402 ; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -32
403 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r4
404 ; CHECK-AIX-32-P8-NEXT:    sth r3, -16(r1)
405 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
406 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
407 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v3, v2
408 ; CHECK-AIX-32-P8-NEXT:    blr
410 ; CHECK-AIX-32-P9-LABEL: test_v8i16_v16i8:
411 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
412 ; CHECK-AIX-32-P9-NEXT:    stb r4, -32(r1)
413 ; CHECK-AIX-32-P9-NEXT:    sth r3, -16(r1)
414 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -32(r1)
415 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -16(r1)
416 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v3, v2
417 ; CHECK-AIX-32-P9-NEXT:    blr
418 entry:
419   %rhs = insertelement <16 x i8> undef, i8 %arg1, i32 0
420   %lhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0
421   %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>
422   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
423   ret <16 x i8> %shuffle
426 define <16 x i8> @test_none_v8i16(i16 %arg, ptr nocapture noundef readonly %b) {
427 ; CHECK-LE-P8-LABEL: test_none_v8i16:
428 ; CHECK-LE-P8:       # %bb.0: # %entry
429 ; CHECK-LE-P8-NEXT:    addis r5, r2, .LCPI5_0@toc@ha
430 ; CHECK-LE-P8-NEXT:    lxvd2x v3, 0, r4
431 ; CHECK-LE-P8-NEXT:    mtvsrd v4, r3
432 ; CHECK-LE-P8-NEXT:    addi r5, r5, .LCPI5_0@toc@l
433 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r5
434 ; CHECK-LE-P8-NEXT:    xxswapd v2, vs0
435 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v3, v2
436 ; CHECK-LE-P8-NEXT:    blr
438 ; CHECK-LE-P9-LABEL: test_none_v8i16:
439 ; CHECK-LE-P9:       # %bb.0: # %entry
440 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r3
441 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
442 ; CHECK-LE-P9-NEXT:    lxv vs0, 0(r4)
443 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI5_0@toc@l
444 ; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)
445 ; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1
446 ; CHECK-LE-P9-NEXT:    blr
448 ; CHECK-BE-P8-LABEL: test_none_v8i16:
449 ; CHECK-BE-P8:       # %bb.0: # %entry
450 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3
451 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
452 ; CHECK-BE-P8-NEXT:    lxvw4x v2, 0, r4
453 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI5_0@toc@l
454 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
455 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
456 ; CHECK-BE-P8-NEXT:    blr
458 ; CHECK-BE-P9-LABEL: test_none_v8i16:
459 ; CHECK-BE-P9:       # %bb.0: # %entry
460 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r3
461 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
462 ; CHECK-BE-P9-NEXT:    lxv vs0, 0(r4)
463 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI5_0@toc@l
464 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
465 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
466 ; CHECK-BE-P9-NEXT:    blr
468 ; CHECK-AIX-64-P8-LABEL: test_none_v8i16:
469 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
470 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r3
471 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C5(r2) # %const.0
472 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v2, 0, r4
473 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
474 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
475 ; CHECK-AIX-64-P8-NEXT:    blr
477 ; CHECK-AIX-64-P9-LABEL: test_none_v8i16:
478 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
479 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r3
480 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C4(r2) # %const.0
481 ; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r4)
482 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
483 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
484 ; CHECK-AIX-64-P9-NEXT:    blr
486 ; CHECK-AIX-32-P8-LABEL: test_none_v8i16:
487 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
488 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r4
489 ; CHECK-AIX-32-P8-NEXT:    sth r3, -16(r1)
490 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
491 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
492 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v2, v3
493 ; CHECK-AIX-32-P8-NEXT:    blr
495 ; CHECK-AIX-32-P9-LABEL: test_none_v8i16:
496 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
497 ; CHECK-AIX-32-P9-NEXT:    lxv v2, 0(r4)
498 ; CHECK-AIX-32-P9-NEXT:    sth r3, -16(r1)
499 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -16(r1)
500 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v2, v3
501 ; CHECK-AIX-32-P9-NEXT:    blr
502 entry:
503   %lhs = load <16 x i8>, ptr %b, align 4
504   %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0
505   %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>
506   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
507   ret <16 x i8> %shuffle
510 define <8 x i16> @test_v8i16_none(<8 x i16> %a, i16 %b) {
511 ; CHECK-LE-P8-LABEL: test_v8i16_none:
512 ; CHECK-LE-P8:       # %bb.0: # %entry
513 ; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI6_0@toc@ha
514 ; CHECK-LE-P8-NEXT:    mtvsrd v4, r5
515 ; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI6_0@toc@l
516 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3
517 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
518 ; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3
519 ; CHECK-LE-P8-NEXT:    blr
521 ; CHECK-LE-P9-LABEL: test_v8i16_none:
522 ; CHECK-LE-P9:       # %bb.0: # %entry
523 ; CHECK-LE-P9-NEXT:    mtvsrwz v3, r5
524 ; CHECK-LE-P9-NEXT:    vinserth v2, v3, 14
525 ; CHECK-LE-P9-NEXT:    blr
527 ; CHECK-BE-P8-LABEL: test_v8i16_none:
528 ; CHECK-BE-P8:       # %bb.0: # %entry
529 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI6_0@toc@ha
530 ; CHECK-BE-P8-NEXT:    mtvsrwz v4, r5
531 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI6_0@toc@l
532 ; CHECK-BE-P8-NEXT:    lxvw4x v3, 0, r3
533 ; CHECK-BE-P8-NEXT:    vperm v2, v4, v2, v3
534 ; CHECK-BE-P8-NEXT:    blr
536 ; CHECK-BE-P9-LABEL: test_v8i16_none:
537 ; CHECK-BE-P9:       # %bb.0: # %entry
538 ; CHECK-BE-P9-NEXT:    mtvsrwz v3, r5
539 ; CHECK-BE-P9-NEXT:    vinserth v2, v3, 0
540 ; CHECK-BE-P9-NEXT:    blr
542 ; CHECK-AIX-64-P8-LABEL: test_v8i16_none:
543 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
544 ; CHECK-AIX-64-P8-NEXT:    ld r4, L..C6(r2) # %const.0
545 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v4, r3
546 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v3, 0, r4
547 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v4, v2, v3
548 ; CHECK-AIX-64-P8-NEXT:    blr
550 ; CHECK-AIX-64-P9-LABEL: test_v8i16_none:
551 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
552 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v3, r3
553 ; CHECK-AIX-64-P9-NEXT:    vinserth v2, v3, 0
554 ; CHECK-AIX-64-P9-NEXT:    blr
556 ; CHECK-AIX-32-P8-LABEL: test_v8i16_none:
557 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
558 ; CHECK-AIX-32-P8-NEXT:    sth r3, -16(r1)
559 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C2(r2) # %const.0
560 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
561 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
562 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
563 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v4, v2, v3
564 ; CHECK-AIX-32-P8-NEXT:    blr
566 ; CHECK-AIX-32-P9-LABEL: test_v8i16_none:
567 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
568 ; CHECK-AIX-32-P9-NEXT:    mtvsrwz v3, r3
569 ; CHECK-AIX-32-P9-NEXT:    vinserth v2, v3, 0
570 ; CHECK-AIX-32-P9-NEXT:    blr
571 entry:
572   %vecins = insertelement <8 x i16> %a, i16 %b, i32 0
573   ret <8 x i16> %vecins
576 define <16 x i8> @test_v16i8_v4i32(i8 %arg, i32 %arg1, <16 x i8> %a, <4 x i32> %b) {
577 ; CHECK-LE-P8-LABEL: test_v16i8_v4i32:
578 ; CHECK-LE-P8:       # %bb.0: # %entry
579 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r3
580 ; CHECK-LE-P8-NEXT:    mtvsrwz v3, r4
581 ; CHECK-LE-P8-NEXT:    vmrghb v2, v3, v2
582 ; CHECK-LE-P8-NEXT:    blr
584 ; CHECK-LE-P9-LABEL: test_v16i8_v4i32:
585 ; CHECK-LE-P9:       # %bb.0: # %entry
586 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r3
587 ; CHECK-LE-P9-NEXT:    mtvsrwz v3, r4
588 ; CHECK-LE-P9-NEXT:    vmrghb v2, v3, v2
589 ; CHECK-LE-P9-NEXT:    blr
591 ; CHECK-BE-P8-LABEL: test_v16i8_v4i32:
592 ; CHECK-BE-P8:       # %bb.0: # %entry
593 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r3
594 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI7_0@toc@ha
595 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r4
596 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI7_0@toc@l
597 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
598 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
599 ; CHECK-BE-P8-NEXT:    blr
601 ; CHECK-BE-P9-LABEL: test_v16i8_v4i32:
602 ; CHECK-BE-P9:       # %bb.0: # %entry
603 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r3
604 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI7_0@toc@ha
605 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r4
606 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI7_0@toc@l
607 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
608 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
609 ; CHECK-BE-P9-NEXT:    blr
611 ; CHECK-AIX-64-P8-LABEL: test_v16i8_v4i32:
612 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
613 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r3
614 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C7(r2) # %const.0
615 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4
616 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
617 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
618 ; CHECK-AIX-64-P8-NEXT:    blr
620 ; CHECK-AIX-64-P9-LABEL: test_v16i8_v4i32:
621 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
622 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r3
623 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C5(r2) # %const.0
624 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
625 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
626 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
627 ; CHECK-AIX-64-P9-NEXT:    blr
629 ; CHECK-AIX-32-P8-LABEL: test_v16i8_v4i32:
630 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
631 ; CHECK-AIX-32-P8-NEXT:    stb r3, -16(r1)
632 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
633 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
634 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
635 ; CHECK-AIX-32-P8-NEXT:    stw r4, -32(r1)
636 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
637 ; CHECK-AIX-32-P8-NEXT:    vmrghb v2, v2, v3
638 ; CHECK-AIX-32-P8-NEXT:    blr
640 ; CHECK-AIX-32-P9-LABEL: test_v16i8_v4i32:
641 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
642 ; CHECK-AIX-32-P9-NEXT:    stb r3, -16(r1)
643 ; CHECK-AIX-32-P9-NEXT:    stw r4, -32(r1)
644 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
645 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
646 ; CHECK-AIX-32-P9-NEXT:    vmrghb v2, v2, v3
647 ; CHECK-AIX-32-P9-NEXT:    blr
648 entry:
649   %lhs.tmp = insertelement <16 x i8> %a, i8 %arg, i32 0
650   %lhs = bitcast <16 x i8> %lhs.tmp to <16 x i8>
651   %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 0
652   %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>
653   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
654   ret <16 x i8> %shuffle
657 define <16 x i8> @test_v4i32_v16i8(i32 %arg, i8 %arg1) {
658 ; CHECK-LE-P8-LABEL: test_v4i32_v16i8:
659 ; CHECK-LE-P8:       # %bb.0: # %entry
660 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r4
661 ; CHECK-LE-P8-NEXT:    mtvsrwz v3, r3
662 ; CHECK-LE-P8-NEXT:    vmrghh v2, v2, v3
663 ; CHECK-LE-P8-NEXT:    blr
665 ; CHECK-LE-P9-LABEL: test_v4i32_v16i8:
666 ; CHECK-LE-P9:       # %bb.0: # %entry
667 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r4
668 ; CHECK-LE-P9-NEXT:    mtvsrwz v3, r3
669 ; CHECK-LE-P9-NEXT:    vmrghh v2, v2, v3
670 ; CHECK-LE-P9-NEXT:    blr
672 ; CHECK-BE-P8-LABEL: test_v4i32_v16i8:
673 ; CHECK-BE-P8:       # %bb.0: # %entry
674 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3
675 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI8_0@toc@ha
676 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4
677 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI8_0@toc@l
678 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
679 ; CHECK-BE-P8-NEXT:    vperm v2, v3, v2, v4
680 ; CHECK-BE-P8-NEXT:    blr
682 ; CHECK-BE-P9-LABEL: test_v4i32_v16i8:
683 ; CHECK-BE-P9:       # %bb.0: # %entry
684 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r3
685 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI8_0@toc@ha
686 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r4
687 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI8_0@toc@l
688 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
689 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
690 ; CHECK-BE-P9-NEXT:    blr
692 ; CHECK-AIX-64-P8-LABEL: test_v4i32_v16i8:
693 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
694 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r3
695 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C8(r2) # %const.0
696 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4
697 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
698 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v3, v2, v4
699 ; CHECK-AIX-64-P8-NEXT:    blr
701 ; CHECK-AIX-64-P9-LABEL: test_v4i32_v16i8:
702 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
703 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r3
704 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C6(r2) # %const.0
705 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
706 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
707 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
708 ; CHECK-AIX-64-P9-NEXT:    blr
710 ; CHECK-AIX-32-P8-LABEL: test_v4i32_v16i8:
711 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
712 ; CHECK-AIX-32-P8-NEXT:    stb r4, -32(r1)
713 ; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -32
714 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r4
715 ; CHECK-AIX-32-P8-NEXT:    stw r3, -16(r1)
716 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
717 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
718 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v3, v2
719 ; CHECK-AIX-32-P8-NEXT:    blr
721 ; CHECK-AIX-32-P9-LABEL: test_v4i32_v16i8:
722 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
723 ; CHECK-AIX-32-P9-NEXT:    stb r4, -32(r1)
724 ; CHECK-AIX-32-P9-NEXT:    stw r3, -16(r1)
725 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -32(r1)
726 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -16(r1)
727 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v3, v2
728 ; CHECK-AIX-32-P9-NEXT:    blr
729 entry:
730   %rhs = insertelement <16 x i8> undef, i8 %arg1, i32 0
731   %lhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 0
732   %lhs = bitcast <4 x i32> %lhs.tmp to <16 x i8>
733   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
734   ret <16 x i8> %shuffle
737 define <4 x i32> @test_none_v4i32(<4 x i32> %a, i64 %b) {
738 ; CHECK-LE-P8-LABEL: test_none_v4i32:
739 ; CHECK-LE-P8:       # %bb.0: # %entry
740 ; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI9_0@toc@ha
741 ; CHECK-LE-P8-NEXT:    mtvsrwz v4, r5
742 ; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI9_0@toc@l
743 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3
744 ; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI9_1@toc@ha
745 ; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI9_1@toc@l
746 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
747 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3
748 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v2, v3
749 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
750 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v2, v3
751 ; CHECK-LE-P8-NEXT:    blr
753 ; CHECK-LE-P9-LABEL: test_none_v4i32:
754 ; CHECK-LE-P9:       # %bb.0: # %entry
755 ; CHECK-LE-P9-NEXT:    mtfprwz f0, r5
756 ; CHECK-LE-P9-NEXT:    xxinsertw v2, vs0, 8
757 ; CHECK-LE-P9-NEXT:    xxinsertw v2, vs0, 0
758 ; CHECK-LE-P9-NEXT:    blr
760 ; CHECK-BE-P8-LABEL: test_none_v4i32:
761 ; CHECK-BE-P8:       # %bb.0: # %entry
762 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI9_0@toc@ha
763 ; CHECK-BE-P8-NEXT:    mtvsrwz v4, r5
764 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI9_0@toc@l
765 ; CHECK-BE-P8-NEXT:    lxvw4x v3, 0, r3
766 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI9_1@toc@ha
767 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI9_1@toc@l
768 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v4, v3
769 ; CHECK-BE-P8-NEXT:    lxvw4x v3, 0, r3
770 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v4, v3
771 ; CHECK-BE-P8-NEXT:    blr
773 ; CHECK-BE-P9-LABEL: test_none_v4i32:
774 ; CHECK-BE-P9:       # %bb.0: # %entry
775 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r5
776 ; CHECK-BE-P9-NEXT:    xxinsertw v2, vs0, 4
777 ; CHECK-BE-P9-NEXT:    xxinsertw v2, vs0, 12
778 ; CHECK-BE-P9-NEXT:    blr
780 ; CHECK-AIX-64-P8-LABEL: test_none_v4i32:
781 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
782 ; CHECK-AIX-64-P8-NEXT:    ld r4, L..C9(r2) # %const.0
783 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v4, r3
784 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C10(r2) # %const.1
785 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v3, 0, r4
786 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v4, v3
787 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v3, 0, r3
788 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v4, v3
789 ; CHECK-AIX-64-P8-NEXT:    blr
791 ; CHECK-AIX-64-P9-LABEL: test_none_v4i32:
792 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
793 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r3
794 ; CHECK-AIX-64-P9-NEXT:    xxinsertw v2, vs0, 4
795 ; CHECK-AIX-64-P9-NEXT:    xxinsertw v2, vs0, 12
796 ; CHECK-AIX-64-P9-NEXT:    blr
798 ; CHECK-AIX-32-P8-LABEL: test_none_v4i32:
799 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
800 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C3(r2) # %const.0
801 ; CHECK-AIX-32-P8-NEXT:    stw r4, -16(r1)
802 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
803 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
804 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
805 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C4(r2) # %const.1
806 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v4, v3
807 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
808 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v4, v3
809 ; CHECK-AIX-32-P8-NEXT:    blr
811 ; CHECK-AIX-32-P9-LABEL: test_none_v4i32:
812 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
813 ; CHECK-AIX-32-P9-NEXT:    mtfprwz f0, r4
814 ; CHECK-AIX-32-P9-NEXT:    xxinsertw v2, vs0, 4
815 ; CHECK-AIX-32-P9-NEXT:    xxinsertw v2, vs0, 12
816 ; CHECK-AIX-32-P9-NEXT:    blr
817 entry:
818   %conv = trunc i64 %b to i32
819   %vecins = insertelement <4 x i32> %a, i32 %conv, i32 1
820   %vecins2 = insertelement <4 x i32> %vecins, i32 %conv, i32 3
821   ret <4 x i32> %vecins2
824 define <16 x i8> @test_v4i32_none(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {
825 ; CHECK-LE-P8-LABEL: test_v4i32_none:
826 ; CHECK-LE-P8:       # %bb.0: # %entry
827 ; CHECK-LE-P8-NEXT:    lbzx r4, 0, r4
828 ; CHECK-LE-P8-NEXT:    lxsiwzx v4, 0, r3
829 ; CHECK-LE-P8-NEXT:    mtvsrwz v2, r4
830 ; CHECK-LE-P8-NEXT:    addis r4, r2, .LCPI10_0@toc@ha
831 ; CHECK-LE-P8-NEXT:    addi r4, r4, .LCPI10_0@toc@l
832 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r4
833 ; CHECK-LE-P8-NEXT:    vspltb v2, v2, 7
834 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
835 ; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3
836 ; CHECK-LE-P8-NEXT:    blr
838 ; CHECK-LE-P9-LABEL: test_v4i32_none:
839 ; CHECK-LE-P9:       # %bb.0: # %entry
840 ; CHECK-LE-P9-NEXT:    lxsiwzx v2, 0, r3
841 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI10_0@toc@ha
842 ; CHECK-LE-P9-NEXT:    lxsibzx v3, 0, r4
843 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI10_0@toc@l
844 ; CHECK-LE-P9-NEXT:    lxv vs0, 0(r3)
845 ; CHECK-LE-P9-NEXT:    vspltb v3, v3, 7
846 ; CHECK-LE-P9-NEXT:    xxperm v2, v3, vs0
847 ; CHECK-LE-P9-NEXT:    blr
849 ; CHECK-BE-P8-LABEL: test_v4i32_none:
850 ; CHECK-BE-P8:       # %bb.0: # %entry
851 ; CHECK-BE-P8-NEXT:    lbzx r4, 0, r4
852 ; CHECK-BE-P8-NEXT:    lxsiwzx v3, 0, r3
853 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI10_0@toc@ha
854 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI10_0@toc@l
855 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4
856 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
857 ; CHECK-BE-P8-NEXT:    vspltb v2, v2, 7
858 ; CHECK-BE-P8-NEXT:    vperm v2, v3, v2, v4
859 ; CHECK-BE-P8-NEXT:    blr
861 ; CHECK-BE-P9-LABEL: test_v4i32_none:
862 ; CHECK-BE-P9:       # %bb.0: # %entry
863 ; CHECK-BE-P9-NEXT:    lfiwzx f0, 0, r3
864 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI10_0@toc@ha
865 ; CHECK-BE-P9-NEXT:    lxsibzx v2, 0, r4
866 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI10_0@toc@l
867 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
868 ; CHECK-BE-P9-NEXT:    vspltb v2, v2, 7
869 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
870 ; CHECK-BE-P9-NEXT:    blr
872 ; CHECK-AIX-64-P8-LABEL: test_v4i32_none:
873 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
874 ; CHECK-AIX-64-P8-NEXT:    lbzx r4, 0, r4
875 ; CHECK-AIX-64-P8-NEXT:    lxsiwzx v3, 0, r3
876 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C11(r2) # %const.0
877 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4
878 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
879 ; CHECK-AIX-64-P8-NEXT:    vspltb v2, v2, 7
880 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v3, v2, v4
881 ; CHECK-AIX-64-P8-NEXT:    blr
883 ; CHECK-AIX-64-P9-LABEL: test_v4i32_none:
884 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
885 ; CHECK-AIX-64-P9-NEXT:    lfiwzx f0, 0, r3
886 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C7(r2) # %const.0
887 ; CHECK-AIX-64-P9-NEXT:    lxsibzx v2, 0, r4
888 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
889 ; CHECK-AIX-64-P9-NEXT:    vspltb v2, v2, 7
890 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
891 ; CHECK-AIX-64-P9-NEXT:    blr
893 ; CHECK-AIX-32-P8-LABEL: test_v4i32_none:
894 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
895 ; CHECK-AIX-32-P8-NEXT:    lbzx r4, 0, r4
896 ; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r3
897 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C5(r2) # %const.0
898 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r4
899 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
900 ; CHECK-AIX-32-P8-NEXT:    vspltb v2, v2, 7
901 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v3, v2, v4
902 ; CHECK-AIX-32-P8-NEXT:    blr
904 ; CHECK-AIX-32-P9-LABEL: test_v4i32_none:
905 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
906 ; CHECK-AIX-32-P9-NEXT:    lfiwzx f0, 0, r3
907 ; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C1(r2) # %const.0
908 ; CHECK-AIX-32-P9-NEXT:    lxsibzx v2, 0, r4
909 ; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r3)
910 ; CHECK-AIX-32-P9-NEXT:    vspltb v2, v2, 7
911 ; CHECK-AIX-32-P9-NEXT:    xxperm v2, vs0, vs1
912 ; CHECK-AIX-32-P9-NEXT:    blr
913 entry:
914   %0 = load <4 x i8>, ptr %a, align 4
915   %bc1 = bitcast <4 x i8> %0 to i32
916   %vecinit3 = insertelement <4 x i32> poison, i32 %bc1, i64 0
917   %1 = load <1 x i8>, ptr %b, align 8
918   %bc2 = bitcast <1 x i8> %1 to i8
919   %vecinit6 = insertelement <16 x i8> undef, i8 %bc2, i64 0
920   %2 = bitcast <4 x i32> %vecinit3 to <16 x i8>
921   %3 = bitcast <16 x i8> %vecinit6 to <16 x i8>
922   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
923   ret <16 x i8> %shuffle
926 define <16 x i8> @test_v16i8_v2i64(i8 %arg, i64 %arg1, <16 x i8> %a, <2 x i64> %b) {
927 ; CHECK-LE-P8-LABEL: test_v16i8_v2i64:
928 ; CHECK-LE-P8:       # %bb.0: # %entry
929 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r3
930 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r4
931 ; CHECK-LE-P8-NEXT:    vmrghb v2, v3, v2
932 ; CHECK-LE-P8-NEXT:    blr
934 ; CHECK-LE-P9-LABEL: test_v16i8_v2i64:
935 ; CHECK-LE-P9:       # %bb.0: # %entry
936 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r3
937 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r4
938 ; CHECK-LE-P9-NEXT:    vmrghb v2, v3, v2
939 ; CHECK-LE-P9-NEXT:    blr
941 ; CHECK-BE-P8-LABEL: test_v16i8_v2i64:
942 ; CHECK-BE-P8:       # %bb.0: # %entry
943 ; CHECK-BE-P8-NEXT:    sldi r3, r3, 56
944 ; CHECK-BE-P8-NEXT:    mtvsrd v3, r4
945 ; CHECK-BE-P8-NEXT:    mtvsrd v2, r3
946 ; CHECK-BE-P8-NEXT:    vmrghb v2, v2, v3
947 ; CHECK-BE-P8-NEXT:    blr
949 ; CHECK-BE-P9-LABEL: test_v16i8_v2i64:
950 ; CHECK-BE-P9:       # %bb.0: # %entry
951 ; CHECK-BE-P9-NEXT:    sldi r3, r3, 56
952 ; CHECK-BE-P9-NEXT:    mtvsrd v3, r4
953 ; CHECK-BE-P9-NEXT:    mtvsrd v2, r3
954 ; CHECK-BE-P9-NEXT:    vmrghb v2, v2, v3
955 ; CHECK-BE-P9-NEXT:    blr
957 ; CHECK-AIX-64-P8-LABEL: test_v16i8_v2i64:
958 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
959 ; CHECK-AIX-64-P8-NEXT:    sldi r3, r3, 56
960 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v3, r4
961 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v2, r3
962 ; CHECK-AIX-64-P8-NEXT:    vmrghb v2, v2, v3
963 ; CHECK-AIX-64-P8-NEXT:    blr
965 ; CHECK-AIX-64-P9-LABEL: test_v16i8_v2i64:
966 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
967 ; CHECK-AIX-64-P9-NEXT:    sldi r3, r3, 56
968 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v3, r4
969 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v2, r3
970 ; CHECK-AIX-64-P9-NEXT:    vmrghb v2, v2, v3
971 ; CHECK-AIX-64-P9-NEXT:    blr
973 ; CHECK-AIX-32-P8-LABEL: test_v16i8_v2i64:
974 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
975 ; CHECK-AIX-32-P8-NEXT:    stb r3, -16(r1)
976 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
977 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
978 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
979 ; CHECK-AIX-32-P8-NEXT:    stw r4, -32(r1)
980 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
981 ; CHECK-AIX-32-P8-NEXT:    vmrghb v2, v2, v3
982 ; CHECK-AIX-32-P8-NEXT:    blr
984 ; CHECK-AIX-32-P9-LABEL: test_v16i8_v2i64:
985 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
986 ; CHECK-AIX-32-P9-NEXT:    stb r3, -16(r1)
987 ; CHECK-AIX-32-P9-NEXT:    stw r4, -32(r1)
988 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
989 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
990 ; CHECK-AIX-32-P9-NEXT:    vmrghb v2, v2, v3
991 ; CHECK-AIX-32-P9-NEXT:    blr
992 entry:
993   %lhs.tmp = insertelement <16 x i8> %a, i8 %arg, i32 0
994   %lhs = bitcast <16 x i8> %lhs.tmp to <16 x i8>
995   %rhs.tmp = insertelement <2 x i64> %b, i64 %arg1, i32 0
996   %rhs = bitcast <2 x i64> %rhs.tmp to <16 x i8>
997   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
998   ret <16 x i8> %shuffle
1001 define <16 x i8> @test_v2i64_v16i8(i64 %arg, i8 %arg1) {
1002 ; CHECK-LE-P8-LABEL: test_v2i64_v16i8:
1003 ; CHECK-LE-P8:       # %bb.0: # %entry
1004 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r4
1005 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r3
1006 ; CHECK-LE-P8-NEXT:    vmrghh v2, v2, v3
1007 ; CHECK-LE-P8-NEXT:    blr
1009 ; CHECK-LE-P9-LABEL: test_v2i64_v16i8:
1010 ; CHECK-LE-P9:       # %bb.0: # %entry
1011 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r4
1012 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r3
1013 ; CHECK-LE-P9-NEXT:    vmrghh v2, v2, v3
1014 ; CHECK-LE-P9-NEXT:    blr
1016 ; CHECK-BE-P8-LABEL: test_v2i64_v16i8:
1017 ; CHECK-BE-P8:       # %bb.0: # %entry
1018 ; CHECK-BE-P8-NEXT:    sldi r4, r4, 56
1019 ; CHECK-BE-P8-NEXT:    mtvsrd v3, r3
1020 ; CHECK-BE-P8-NEXT:    mtvsrd v2, r4
1021 ; CHECK-BE-P8-NEXT:    vmrghh v2, v3, v2
1022 ; CHECK-BE-P8-NEXT:    blr
1024 ; CHECK-BE-P9-LABEL: test_v2i64_v16i8:
1025 ; CHECK-BE-P9:       # %bb.0: # %entry
1026 ; CHECK-BE-P9-NEXT:    sldi r4, r4, 56
1027 ; CHECK-BE-P9-NEXT:    mtvsrd v3, r3
1028 ; CHECK-BE-P9-NEXT:    mtvsrd v2, r4
1029 ; CHECK-BE-P9-NEXT:    vmrghh v2, v3, v2
1030 ; CHECK-BE-P9-NEXT:    blr
1032 ; CHECK-AIX-64-P8-LABEL: test_v2i64_v16i8:
1033 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1034 ; CHECK-AIX-64-P8-NEXT:    sldi r4, r4, 56
1035 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v3, r3
1036 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v2, r4
1037 ; CHECK-AIX-64-P8-NEXT:    vmrghh v2, v3, v2
1038 ; CHECK-AIX-64-P8-NEXT:    blr
1040 ; CHECK-AIX-64-P9-LABEL: test_v2i64_v16i8:
1041 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1042 ; CHECK-AIX-64-P9-NEXT:    sldi r4, r4, 56
1043 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v3, r3
1044 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v2, r4
1045 ; CHECK-AIX-64-P9-NEXT:    vmrghh v2, v3, v2
1046 ; CHECK-AIX-64-P9-NEXT:    blr
1048 ; CHECK-AIX-32-P8-LABEL: test_v2i64_v16i8:
1049 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1050 ; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -32
1051 ; CHECK-AIX-32-P8-NEXT:    stb r5, -32(r1)
1052 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r4
1053 ; CHECK-AIX-32-P8-NEXT:    stw r3, -16(r1)
1054 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1055 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
1056 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v3, v2
1057 ; CHECK-AIX-32-P8-NEXT:    blr
1059 ; CHECK-AIX-32-P9-LABEL: test_v2i64_v16i8:
1060 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1061 ; CHECK-AIX-32-P9-NEXT:    stb r5, -32(r1)
1062 ; CHECK-AIX-32-P9-NEXT:    stw r3, -16(r1)
1063 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -32(r1)
1064 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -16(r1)
1065 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v3, v2
1066 ; CHECK-AIX-32-P9-NEXT:    blr
1067 entry:
1068   %rhs = insertelement <16 x i8> undef, i8 %arg1, i32 0
1069   %lhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 0
1070   %lhs = bitcast <2 x i64> %lhs.tmp to <16 x i8>
1071   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1072   ret <16 x i8> %shuffle
1075 define dso_local <16 x i8> @test_1_2(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) local_unnamed_addr {
1076 ; CHECK-LE-P8-LABEL: test_1_2:
1077 ; CHECK-LE-P8:       # %bb.0: # %entry
1078 ; CHECK-LE-P8-NEXT:    lbzx r3, 0, r3
1079 ; CHECK-LE-P8-NEXT:    lxsdx v4, 0, r4
1080 ; CHECK-LE-P8-NEXT:    mtvsrwz v2, r3
1081 ; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
1082 ; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI13_0@toc@l
1083 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3
1084 ; CHECK-LE-P8-NEXT:    vspltb v2, v2, 7
1085 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
1086 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v2, v3
1087 ; CHECK-LE-P8-NEXT:    blr
1089 ; CHECK-LE-P9-LABEL: test_1_2:
1090 ; CHECK-LE-P9:       # %bb.0: # %entry
1091 ; CHECK-LE-P9-NEXT:    lxsibzx v2, 0, r3
1092 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
1093 ; CHECK-LE-P9-NEXT:    lfd f0, 0(r4)
1094 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI13_0@toc@l
1095 ; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)
1096 ; CHECK-LE-P9-NEXT:    vspltb v2, v2, 7
1097 ; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1
1098 ; CHECK-LE-P9-NEXT:    blr
1100 ; CHECK-BE-P8-LABEL: test_1_2:
1101 ; CHECK-BE-P8:       # %bb.0: # %entry
1102 ; CHECK-BE-P8-NEXT:    lbzx r3, 0, r3
1103 ; CHECK-BE-P8-NEXT:    lxsdx v3, 0, r4
1104 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r3
1105 ; CHECK-BE-P8-NEXT:    vspltb v2, v2, 7
1106 ; CHECK-BE-P8-NEXT:    vmrghh v2, v2, v3
1107 ; CHECK-BE-P8-NEXT:    blr
1109 ; CHECK-BE-P9-LABEL: test_1_2:
1110 ; CHECK-BE-P9:       # %bb.0: # %entry
1111 ; CHECK-BE-P9-NEXT:    lxsibzx v2, 0, r3
1112 ; CHECK-BE-P9-NEXT:    lxsd v3, 0(r4)
1113 ; CHECK-BE-P9-NEXT:    vspltb v2, v2, 7
1114 ; CHECK-BE-P9-NEXT:    vmrghh v2, v2, v3
1115 ; CHECK-BE-P9-NEXT:    blr
1117 ; CHECK-AIX-64-P8-LABEL: test_1_2:
1118 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1119 ; CHECK-AIX-64-P8-NEXT:    lbzx r3, 0, r3
1120 ; CHECK-AIX-64-P8-NEXT:    lxsdx v3, 0, r4
1121 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r3
1122 ; CHECK-AIX-64-P8-NEXT:    vspltb v2, v2, 7
1123 ; CHECK-AIX-64-P8-NEXT:    vmrghh v2, v2, v3
1124 ; CHECK-AIX-64-P8-NEXT:    blr
1126 ; CHECK-AIX-64-P9-LABEL: test_1_2:
1127 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1128 ; CHECK-AIX-64-P9-NEXT:    lxsibzx v2, 0, r3
1129 ; CHECK-AIX-64-P9-NEXT:    lxsd v3, 0(r4)
1130 ; CHECK-AIX-64-P9-NEXT:    vspltb v2, v2, 7
1131 ; CHECK-AIX-64-P9-NEXT:    vmrghh v2, v2, v3
1132 ; CHECK-AIX-64-P9-NEXT:    blr
1134 ; CHECK-AIX-32-P8-LABEL: test_1_2:
1135 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1136 ; CHECK-AIX-32-P8-NEXT:    lbzx r3, 0, r3
1137 ; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r4
1138 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r3
1139 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C6(r2) # %const.0
1140 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
1141 ; CHECK-AIX-32-P8-NEXT:    vspltb v2, v2, 7
1142 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4
1143 ; CHECK-AIX-32-P8-NEXT:    blr
1145 ; CHECK-AIX-32-P9-LABEL: test_1_2:
1146 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1147 ; CHECK-AIX-32-P9-NEXT:    lxsibzx v2, 0, r3
1148 ; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C2(r2) # %const.0
1149 ; CHECK-AIX-32-P9-NEXT:    vspltb v3, v2, 7
1150 ; CHECK-AIX-32-P9-NEXT:    lxsiwzx v2, 0, r4
1151 ; CHECK-AIX-32-P9-NEXT:    lxv vs0, 0(r3)
1152 ; CHECK-AIX-32-P9-NEXT:    xxperm v2, v3, vs0
1153 ; CHECK-AIX-32-P9-NEXT:    blr
1154 entry:
1155   %0 = load <1 x i8>, ptr %a, align 4
1156   %bc1 = bitcast <1 x i8> %0 to i8
1157   %vecinit3 = insertelement <16 x i8> poison, i8 %bc1, i64 0
1158   %1 = load <2 x i8>, ptr %b, align 8
1159   %bc2 = bitcast <2 x i8> %1 to i16
1160   %vecinit6 = insertelement <8 x i16> undef, i16 %bc2, i64 0
1161   %2 = bitcast <16 x i8> %vecinit3 to <16 x i8>
1162   %3 = bitcast <8 x i16> %vecinit6 to <16 x i8>
1163   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1164   ret <16 x i8> %shuffle
1167 define <16 x i8> @test_none_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {
1168 ; CHECK-LE-P8-LABEL: test_none_v2i64:
1169 ; CHECK-LE-P8:       # %bb.0: # %entry
1170 ; CHECK-LE-P8-NEXT:    lbzx r3, 0, r3
1171 ; CHECK-LE-P8-NEXT:    lxsdx v4, 0, r4
1172 ; CHECK-LE-P8-NEXT:    mtvsrwz v2, r3
1173 ; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
1174 ; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI14_0@toc@l
1175 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3
1176 ; CHECK-LE-P8-NEXT:    vspltb v2, v2, 7
1177 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
1178 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v2, v3
1179 ; CHECK-LE-P8-NEXT:    blr
1181 ; CHECK-LE-P9-LABEL: test_none_v2i64:
1182 ; CHECK-LE-P9:       # %bb.0: # %entry
1183 ; CHECK-LE-P9-NEXT:    lxsibzx v2, 0, r3
1184 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
1185 ; CHECK-LE-P9-NEXT:    lfd f0, 0(r4)
1186 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI14_0@toc@l
1187 ; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)
1188 ; CHECK-LE-P9-NEXT:    vspltb v2, v2, 7
1189 ; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1
1190 ; CHECK-LE-P9-NEXT:    blr
1192 ; CHECK-BE-P8-LABEL: test_none_v2i64:
1193 ; CHECK-BE-P8:       # %bb.0: # %entry
1194 ; CHECK-BE-P8-NEXT:    lbzx r3, 0, r3
1195 ; CHECK-BE-P8-NEXT:    lxsdx v3, 0, r4
1196 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r3
1197 ; CHECK-BE-P8-NEXT:    vspltb v2, v2, 7
1198 ; CHECK-BE-P8-NEXT:    vmrghh v2, v2, v3
1199 ; CHECK-BE-P8-NEXT:    blr
1201 ; CHECK-BE-P9-LABEL: test_none_v2i64:
1202 ; CHECK-BE-P9:       # %bb.0: # %entry
1203 ; CHECK-BE-P9-NEXT:    lxsibzx v2, 0, r3
1204 ; CHECK-BE-P9-NEXT:    lxsd v3, 0(r4)
1205 ; CHECK-BE-P9-NEXT:    vspltb v2, v2, 7
1206 ; CHECK-BE-P9-NEXT:    vmrghh v2, v2, v3
1207 ; CHECK-BE-P9-NEXT:    blr
1209 ; CHECK-AIX-64-P8-LABEL: test_none_v2i64:
1210 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1211 ; CHECK-AIX-64-P8-NEXT:    lbzx r3, 0, r3
1212 ; CHECK-AIX-64-P8-NEXT:    lxsdx v3, 0, r4
1213 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r3
1214 ; CHECK-AIX-64-P8-NEXT:    vspltb v2, v2, 7
1215 ; CHECK-AIX-64-P8-NEXT:    vmrghh v2, v2, v3
1216 ; CHECK-AIX-64-P8-NEXT:    blr
1218 ; CHECK-AIX-64-P9-LABEL: test_none_v2i64:
1219 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1220 ; CHECK-AIX-64-P9-NEXT:    lxsibzx v2, 0, r3
1221 ; CHECK-AIX-64-P9-NEXT:    lxsd v3, 0(r4)
1222 ; CHECK-AIX-64-P9-NEXT:    vspltb v2, v2, 7
1223 ; CHECK-AIX-64-P9-NEXT:    vmrghh v2, v2, v3
1224 ; CHECK-AIX-64-P9-NEXT:    blr
1226 ; CHECK-AIX-32-P8-LABEL: test_none_v2i64:
1227 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1228 ; CHECK-AIX-32-P8-NEXT:    lbzx r3, 0, r3
1229 ; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r4
1230 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r3
1231 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C7(r2) # %const.0
1232 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
1233 ; CHECK-AIX-32-P8-NEXT:    vspltb v2, v2, 7
1234 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4
1235 ; CHECK-AIX-32-P8-NEXT:    blr
1237 ; CHECK-AIX-32-P9-LABEL: test_none_v2i64:
1238 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1239 ; CHECK-AIX-32-P9-NEXT:    lxsibzx v2, 0, r3
1240 ; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C3(r2) # %const.0
1241 ; CHECK-AIX-32-P9-NEXT:    vspltb v3, v2, 7
1242 ; CHECK-AIX-32-P9-NEXT:    lxsiwzx v2, 0, r4
1243 ; CHECK-AIX-32-P9-NEXT:    lxv vs0, 0(r3)
1244 ; CHECK-AIX-32-P9-NEXT:    xxperm v2, v3, vs0
1245 ; CHECK-AIX-32-P9-NEXT:    blr
1246 entry:
1247   %0 = load <1 x i8>, ptr %a, align 4
1248   %bc1 = bitcast <1 x i8> %0 to i8
1249   %vecinit3 = insertelement <16 x i8> poison, i8 %bc1, i64 0
1250   %1 = load <2 x i8>, ptr %b, align 8
1251   %bc2 = bitcast <2 x i8> %1 to i16
1252   %vecinit6 = insertelement <8 x i16> undef, i16 %bc2, i64 0
1253   %2 = bitcast <16 x i8> %vecinit3 to <16 x i8>
1254   %3 = bitcast <8 x i16> %vecinit6 to <16 x i8>
1255   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1256   ret <16 x i8> %shuffle
1259 define <16 x i8> @test_v2i64_none(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {
1260 ; CHECK-LE-P8-LABEL: test_v2i64_none:
1261 ; CHECK-LE-P8:       # %bb.0: # %entry
1262 ; CHECK-LE-P8-NEXT:    lbzx r4, 0, r4
1263 ; CHECK-LE-P8-NEXT:    lxsdx v4, 0, r3
1264 ; CHECK-LE-P8-NEXT:    mtvsrwz v2, r4
1265 ; CHECK-LE-P8-NEXT:    addis r4, r2, .LCPI15_0@toc@ha
1266 ; CHECK-LE-P8-NEXT:    addi r4, r4, .LCPI15_0@toc@l
1267 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r4
1268 ; CHECK-LE-P8-NEXT:    vspltb v2, v2, 7
1269 ; CHECK-LE-P8-NEXT:    xxswapd v3, vs0
1270 ; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3
1271 ; CHECK-LE-P8-NEXT:    blr
1273 ; CHECK-LE-P9-LABEL: test_v2i64_none:
1274 ; CHECK-LE-P9:       # %bb.0: # %entry
1275 ; CHECK-LE-P9-NEXT:    lxsd v2, 0(r3)
1276 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
1277 ; CHECK-LE-P9-NEXT:    lxsibzx v3, 0, r4
1278 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI15_0@toc@l
1279 ; CHECK-LE-P9-NEXT:    lxv vs0, 0(r3)
1280 ; CHECK-LE-P9-NEXT:    vspltb v3, v3, 7
1281 ; CHECK-LE-P9-NEXT:    xxperm v2, v3, vs0
1282 ; CHECK-LE-P9-NEXT:    blr
1284 ; CHECK-BE-P8-LABEL: test_v2i64_none:
1285 ; CHECK-BE-P8:       # %bb.0: # %entry
1286 ; CHECK-BE-P8-NEXT:    lbzx r4, 0, r4
1287 ; CHECK-BE-P8-NEXT:    lxsdx v3, 0, r3
1288 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4
1289 ; CHECK-BE-P8-NEXT:    vspltb v2, v2, 7
1290 ; CHECK-BE-P8-NEXT:    vmrghh v2, v3, v2
1291 ; CHECK-BE-P8-NEXT:    blr
1293 ; CHECK-BE-P9-LABEL: test_v2i64_none:
1294 ; CHECK-BE-P9:       # %bb.0: # %entry
1295 ; CHECK-BE-P9-NEXT:    lxsibzx v3, 0, r4
1296 ; CHECK-BE-P9-NEXT:    lxsd v2, 0(r3)
1297 ; CHECK-BE-P9-NEXT:    vspltb v3, v3, 7
1298 ; CHECK-BE-P9-NEXT:    vmrghh v2, v2, v3
1299 ; CHECK-BE-P9-NEXT:    blr
1301 ; CHECK-AIX-64-P8-LABEL: test_v2i64_none:
1302 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1303 ; CHECK-AIX-64-P8-NEXT:    lbzx r4, 0, r4
1304 ; CHECK-AIX-64-P8-NEXT:    lxsdx v3, 0, r3
1305 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4
1306 ; CHECK-AIX-64-P8-NEXT:    vspltb v2, v2, 7
1307 ; CHECK-AIX-64-P8-NEXT:    vmrghh v2, v3, v2
1308 ; CHECK-AIX-64-P8-NEXT:    blr
1310 ; CHECK-AIX-64-P9-LABEL: test_v2i64_none:
1311 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1312 ; CHECK-AIX-64-P9-NEXT:    lxsibzx v3, 0, r4
1313 ; CHECK-AIX-64-P9-NEXT:    lxsd v2, 0(r3)
1314 ; CHECK-AIX-64-P9-NEXT:    vspltb v3, v3, 7
1315 ; CHECK-AIX-64-P9-NEXT:    vmrghh v2, v2, v3
1316 ; CHECK-AIX-64-P9-NEXT:    blr
1318 ; CHECK-AIX-32-P8-LABEL: test_v2i64_none:
1319 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1320 ; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, 0, r3
1321 ; CHECK-AIX-32-P8-NEXT:    lbzx r3, 0, r4
1322 ; CHECK-AIX-32-P8-NEXT:    mtvsrwz v3, r3
1323 ; CHECK-AIX-32-P8-NEXT:    xxspltw v2, vs0, 1
1324 ; CHECK-AIX-32-P8-NEXT:    vspltb v3, v3, 7
1325 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v2, v3
1326 ; CHECK-AIX-32-P8-NEXT:    blr
1328 ; CHECK-AIX-32-P9-LABEL: test_v2i64_none:
1329 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1330 ; CHECK-AIX-32-P9-NEXT:    lxsibzx v3, 0, r4
1331 ; CHECK-AIX-32-P9-NEXT:    lxvwsx v2, 0, r3
1332 ; CHECK-AIX-32-P9-NEXT:    vspltb v3, v3, 7
1333 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v2, v3
1334 ; CHECK-AIX-32-P9-NEXT:    blr
1335 entry:
1336   %0 = load <8 x i8>, ptr %a, align 4
1337   %bc1 = bitcast <8 x i8> %0 to i64
1338   %vecinit3 = insertelement <2 x i64> poison, i64 %bc1, i64 0
1339   %1 = load <1 x i8>, ptr %b, align 8
1340   %bc2 = bitcast <1 x i8> %1 to i8
1341   %vecinit6 = insertelement <16 x i8> undef, i8 %bc2, i64 0
1342   %2 = bitcast <2 x i64> %vecinit3 to <16 x i8>
1343   %3 = bitcast <16 x i8> %vecinit6 to <16 x i8>
1344   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1345   ret <16 x i8> %shuffle
1348 define <16 x i8> @test_v8i16_v8i16rhs(i16 %arg, i16 %arg1) {
1349 ; CHECK-LE-P8-LABEL: test_v8i16_v8i16rhs:
1350 ; CHECK-LE-P8:       # %bb.0: # %entry
1351 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r3
1352 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r4
1353 ; CHECK-LE-P8-NEXT:    vmrghh v2, v3, v2
1354 ; CHECK-LE-P8-NEXT:    blr
1356 ; CHECK-LE-P9-LABEL: test_v8i16_v8i16rhs:
1357 ; CHECK-LE-P9:       # %bb.0: # %entry
1358 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r3
1359 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r4
1360 ; CHECK-LE-P9-NEXT:    vmrghh v2, v3, v2
1361 ; CHECK-LE-P9-NEXT:    blr
1363 ; CHECK-BE-P8-LABEL: test_v8i16_v8i16rhs:
1364 ; CHECK-BE-P8:       # %bb.0: # %entry
1365 ; CHECK-BE-P8-NEXT:    addis r5, r2, .LCPI16_0@toc@ha
1366 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r4
1367 ; CHECK-BE-P8-NEXT:    mtvsrwz v4, r3
1368 ; CHECK-BE-P8-NEXT:    addi r5, r5, .LCPI16_0@toc@l
1369 ; CHECK-BE-P8-NEXT:    lxvw4x v2, 0, r5
1370 ; CHECK-BE-P8-NEXT:    vperm v2, v4, v3, v2
1371 ; CHECK-BE-P8-NEXT:    blr
1373 ; CHECK-BE-P9-LABEL: test_v8i16_v8i16rhs:
1374 ; CHECK-BE-P9:       # %bb.0: # %entry
1375 ; CHECK-BE-P9-NEXT:    addis r5, r2, .LCPI16_0@toc@ha
1376 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r4
1377 ; CHECK-BE-P9-NEXT:    mtfprwz f1, r3
1378 ; CHECK-BE-P9-NEXT:    addi r5, r5, .LCPI16_0@toc@l
1379 ; CHECK-BE-P9-NEXT:    lxv vs0, 0(r5)
1380 ; CHECK-BE-P9-NEXT:    xxperm v2, vs1, vs0
1381 ; CHECK-BE-P9-NEXT:    blr
1383 ; CHECK-AIX-64-P8-LABEL: test_v8i16_v8i16rhs:
1384 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1385 ; CHECK-AIX-64-P8-NEXT:    ld r5, L..C12(r2) # %const.0
1386 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4
1387 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v4, r3
1388 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v2, 0, r5
1389 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v4, v3, v2
1390 ; CHECK-AIX-64-P8-NEXT:    blr
1392 ; CHECK-AIX-64-P9-LABEL: test_v8i16_v8i16rhs:
1393 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1394 ; CHECK-AIX-64-P9-NEXT:    ld r5, L..C8(r2) # %const.0
1395 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
1396 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f1, r3
1397 ; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r5)
1398 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs1, vs0
1399 ; CHECK-AIX-64-P9-NEXT:    blr
1401 ; CHECK-AIX-32-P8-LABEL: test_v8i16_v8i16rhs:
1402 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1403 ; CHECK-AIX-32-P8-NEXT:    sth r3, -32(r1)
1404 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1405 ; CHECK-AIX-32-P8-NEXT:    sth r4, -16(r1)
1406 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
1407 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1408 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
1409 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v3, v2
1410 ; CHECK-AIX-32-P8-NEXT:    blr
1412 ; CHECK-AIX-32-P9-LABEL: test_v8i16_v8i16rhs:
1413 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1414 ; CHECK-AIX-32-P9-NEXT:    sth r4, -16(r1)
1415 ; CHECK-AIX-32-P9-NEXT:    sth r3, -32(r1)
1416 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
1417 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
1418 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v3, v2
1419 ; CHECK-AIX-32-P9-NEXT:    blr
1420 entry:
1421   %rhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 0
1422   %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>
1423   %lhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0
1424   %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>
1425   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1426   ret <16 x i8> %shuffle
1429 define <16 x i8> @test_v8i16_v4i32(<8 x i16> %a, <4 x i32> %b, i16 %arg, i32 %arg1) {
1430 ; CHECK-LE-P8-LABEL: test_v8i16_v4i32:
1431 ; CHECK-LE-P8:       # %bb.0: # %entry
1432 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r7
1433 ; CHECK-LE-P8-NEXT:    mtvsrwz v3, r8
1434 ; CHECK-LE-P8-NEXT:    vmrghb v2, v3, v2
1435 ; CHECK-LE-P8-NEXT:    blr
1437 ; CHECK-LE-P9-LABEL: test_v8i16_v4i32:
1438 ; CHECK-LE-P9:       # %bb.0: # %entry
1439 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r7
1440 ; CHECK-LE-P9-NEXT:    mtvsrwz v3, r8
1441 ; CHECK-LE-P9-NEXT:    vmrghb v2, v3, v2
1442 ; CHECK-LE-P9-NEXT:    blr
1444 ; CHECK-BE-P8-LABEL: test_v8i16_v4i32:
1445 ; CHECK-BE-P8:       # %bb.0: # %entry
1446 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI17_0@toc@ha
1447 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r7
1448 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r8
1449 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI17_0@toc@l
1450 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
1451 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
1452 ; CHECK-BE-P8-NEXT:    blr
1454 ; CHECK-BE-P9-LABEL: test_v8i16_v4i32:
1455 ; CHECK-BE-P9:       # %bb.0: # %entry
1456 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI17_0@toc@ha
1457 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r7
1458 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r8
1459 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI17_0@toc@l
1460 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
1461 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
1462 ; CHECK-BE-P9-NEXT:    blr
1464 ; CHECK-AIX-64-P8-LABEL: test_v8i16_v4i32:
1465 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1466 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r3
1467 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C13(r2) # %const.0
1468 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4
1469 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
1470 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
1471 ; CHECK-AIX-64-P8-NEXT:    blr
1473 ; CHECK-AIX-64-P9-LABEL: test_v8i16_v4i32:
1474 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1475 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r3
1476 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C9(r2) # %const.0
1477 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
1478 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
1479 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
1480 ; CHECK-AIX-64-P9-NEXT:    blr
1482 ; CHECK-AIX-32-P8-LABEL: test_v8i16_v4i32:
1483 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1484 ; CHECK-AIX-32-P8-NEXT:    sth r3, -16(r1)
1485 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1486 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
1487 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1488 ; CHECK-AIX-32-P8-NEXT:    stw r4, -32(r1)
1489 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
1490 ; CHECK-AIX-32-P8-NEXT:    vmrghb v2, v2, v3
1491 ; CHECK-AIX-32-P8-NEXT:    blr
1493 ; CHECK-AIX-32-P9-LABEL: test_v8i16_v4i32:
1494 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1495 ; CHECK-AIX-32-P9-NEXT:    sth r3, -16(r1)
1496 ; CHECK-AIX-32-P9-NEXT:    stw r4, -32(r1)
1497 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
1498 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
1499 ; CHECK-AIX-32-P9-NEXT:    vmrghb v2, v2, v3
1500 ; CHECK-AIX-32-P9-NEXT:    blr
1501 entry:
1502   %lhs.tmp = insertelement <8 x i16> %a, i16 %arg, i32 0
1503   %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>
1504   %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 0
1505   %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>
1506   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1507   ret <16 x i8> %shuffle
1510 define <16 x i8> @test_v8i16_v2i64(<8 x i16> %a, <2 x i64> %b, i16 %arg, i64 %arg1) {
1511 ; CHECK-LE-P8-LABEL: test_v8i16_v2i64:
1512 ; CHECK-LE-P8:       # %bb.0: # %entry
1513 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r7
1514 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r8
1515 ; CHECK-LE-P8-NEXT:    vmrghb v2, v3, v2
1516 ; CHECK-LE-P8-NEXT:    blr
1518 ; CHECK-LE-P9-LABEL: test_v8i16_v2i64:
1519 ; CHECK-LE-P9:       # %bb.0: # %entry
1520 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r7
1521 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r8
1522 ; CHECK-LE-P9-NEXT:    vmrghb v2, v3, v2
1523 ; CHECK-LE-P9-NEXT:    blr
1525 ; CHECK-BE-P8-LABEL: test_v8i16_v2i64:
1526 ; CHECK-BE-P8:       # %bb.0: # %entry
1527 ; CHECK-BE-P8-NEXT:    sldi r3, r7, 48
1528 ; CHECK-BE-P8-NEXT:    mtvsrd v3, r8
1529 ; CHECK-BE-P8-NEXT:    mtvsrd v2, r3
1530 ; CHECK-BE-P8-NEXT:    vmrghb v2, v2, v3
1531 ; CHECK-BE-P8-NEXT:    blr
1533 ; CHECK-BE-P9-LABEL: test_v8i16_v2i64:
1534 ; CHECK-BE-P9:       # %bb.0: # %entry
1535 ; CHECK-BE-P9-NEXT:    sldi r3, r7, 48
1536 ; CHECK-BE-P9-NEXT:    mtvsrd v3, r8
1537 ; CHECK-BE-P9-NEXT:    mtvsrd v2, r3
1538 ; CHECK-BE-P9-NEXT:    vmrghb v2, v2, v3
1539 ; CHECK-BE-P9-NEXT:    blr
1541 ; CHECK-AIX-64-P8-LABEL: test_v8i16_v2i64:
1542 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1543 ; CHECK-AIX-64-P8-NEXT:    sldi r3, r3, 48
1544 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v3, r4
1545 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v2, r3
1546 ; CHECK-AIX-64-P8-NEXT:    vmrghb v2, v2, v3
1547 ; CHECK-AIX-64-P8-NEXT:    blr
1549 ; CHECK-AIX-64-P9-LABEL: test_v8i16_v2i64:
1550 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1551 ; CHECK-AIX-64-P9-NEXT:    sldi r3, r3, 48
1552 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v3, r4
1553 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v2, r3
1554 ; CHECK-AIX-64-P9-NEXT:    vmrghb v2, v2, v3
1555 ; CHECK-AIX-64-P9-NEXT:    blr
1557 ; CHECK-AIX-32-P8-LABEL: test_v8i16_v2i64:
1558 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1559 ; CHECK-AIX-32-P8-NEXT:    sth r3, -16(r1)
1560 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1561 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
1562 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1563 ; CHECK-AIX-32-P8-NEXT:    stw r4, -32(r1)
1564 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
1565 ; CHECK-AIX-32-P8-NEXT:    vmrghb v2, v2, v3
1566 ; CHECK-AIX-32-P8-NEXT:    blr
1568 ; CHECK-AIX-32-P9-LABEL: test_v8i16_v2i64:
1569 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1570 ; CHECK-AIX-32-P9-NEXT:    sth r3, -16(r1)
1571 ; CHECK-AIX-32-P9-NEXT:    stw r4, -32(r1)
1572 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
1573 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
1574 ; CHECK-AIX-32-P9-NEXT:    vmrghb v2, v2, v3
1575 ; CHECK-AIX-32-P9-NEXT:    blr
1576 entry:
1577   %lhs.tmp = insertelement <8 x i16> %a, i16 %arg, i32 0
1578   %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>
1579   %rhs.tmp = insertelement <2 x i64> %b, i64 %arg1, i32 0
1580   %rhs = bitcast <2 x i64> %rhs.tmp to <16 x i8>
1581   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1582   ret <16 x i8> %shuffle
1585 define <16 x i8> @test_v4i32_v4i32(i32 %arg, i32 %arg1, <4 x i32> %a, <4 x i32> %b) {
1586 ; CHECK-LE-P8-LABEL: test_v4i32_v4i32:
1587 ; CHECK-LE-P8:       # %bb.0: # %entry
1588 ; CHECK-LE-P8-NEXT:    mtfprwz f0, r3
1589 ; CHECK-LE-P8-NEXT:    mtfprwz f1, r4
1590 ; CHECK-LE-P8-NEXT:    xxmrghw v2, vs1, vs0
1591 ; CHECK-LE-P8-NEXT:    blr
1593 ; CHECK-LE-P9-LABEL: test_v4i32_v4i32:
1594 ; CHECK-LE-P9:       # %bb.0: # %entry
1595 ; CHECK-LE-P9-NEXT:    mtfprwz f0, r3
1596 ; CHECK-LE-P9-NEXT:    mtfprwz f1, r4
1597 ; CHECK-LE-P9-NEXT:    xxmrghw v2, vs1, vs0
1598 ; CHECK-LE-P9-NEXT:    blr
1600 ; CHECK-BE-P8-LABEL: test_v4i32_v4i32:
1601 ; CHECK-BE-P8:       # %bb.0: # %entry
1602 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4
1603 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3
1604 ; CHECK-BE-P8-NEXT:    vmrgow v2, v3, v2
1605 ; CHECK-BE-P8-NEXT:    blr
1607 ; CHECK-BE-P9-LABEL: test_v4i32_v4i32:
1608 ; CHECK-BE-P9:       # %bb.0: # %entry
1609 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r4
1610 ; CHECK-BE-P9-NEXT:    mtvsrwz v3, r3
1611 ; CHECK-BE-P9-NEXT:    vmrgow v2, v3, v2
1612 ; CHECK-BE-P9-NEXT:    blr
1614 ; CHECK-AIX-64-P8-LABEL: test_v4i32_v4i32:
1615 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1616 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4
1617 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r3
1618 ; CHECK-AIX-64-P8-NEXT:    vmrgow v2, v3, v2
1619 ; CHECK-AIX-64-P8-NEXT:    blr
1621 ; CHECK-AIX-64-P9-LABEL: test_v4i32_v4i32:
1622 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1623 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
1624 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v3, r3
1625 ; CHECK-AIX-64-P9-NEXT:    vmrgow v2, v3, v2
1626 ; CHECK-AIX-64-P9-NEXT:    blr
1628 ; CHECK-AIX-32-P8-LABEL: test_v4i32_v4i32:
1629 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1630 ; CHECK-AIX-32-P8-NEXT:    stw r3, -32(r1)
1631 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1632 ; CHECK-AIX-32-P8-NEXT:    stw r4, -16(r1)
1633 ; CHECK-AIX-32-P8-NEXT:    lxvw4x vs0, 0, r3
1634 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1635 ; CHECK-AIX-32-P8-NEXT:    lxvw4x vs1, 0, r3
1636 ; CHECK-AIX-32-P8-NEXT:    xxmrghw v2, vs1, vs0
1637 ; CHECK-AIX-32-P8-NEXT:    blr
1639 ; CHECK-AIX-32-P9-LABEL: test_v4i32_v4i32:
1640 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1641 ; CHECK-AIX-32-P9-NEXT:    stw r4, -16(r1)
1642 ; CHECK-AIX-32-P9-NEXT:    stw r3, -32(r1)
1643 ; CHECK-AIX-32-P9-NEXT:    lxv vs0, -16(r1)
1644 ; CHECK-AIX-32-P9-NEXT:    lxv vs1, -32(r1)
1645 ; CHECK-AIX-32-P9-NEXT:    xxmrghw v2, vs1, vs0
1646 ; CHECK-AIX-32-P9-NEXT:    blr
1647 entry:
1648   %lhs.tmp = insertelement <4 x i32> %a, i32 %arg, i32 0
1649   %lhs = bitcast <4 x i32> %lhs.tmp to <16 x i8>
1650   %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 0
1651   %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>
1652   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1653   ret <16 x i8> %shuffle
1656 define <16 x i8> @test_v4i32_v8i16(i32 %arg, i16 %arg1) {
1657 ; CHECK-LE-P8-LABEL: test_v4i32_v8i16:
1658 ; CHECK-LE-P8:       # %bb.0: # %entry
1659 ; CHECK-LE-P8-NEXT:    mtvsrwz v2, r3
1660 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r4
1661 ; CHECK-LE-P8-NEXT:    vmrghh v2, v3, v2
1662 ; CHECK-LE-P8-NEXT:    blr
1664 ; CHECK-LE-P9-LABEL: test_v4i32_v8i16:
1665 ; CHECK-LE-P9:       # %bb.0: # %entry
1666 ; CHECK-LE-P9-NEXT:    mtvsrwz v2, r3
1667 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r4
1668 ; CHECK-LE-P9-NEXT:    vmrghh v2, v3, v2
1669 ; CHECK-LE-P9-NEXT:    blr
1671 ; CHECK-BE-P8-LABEL: test_v4i32_v8i16:
1672 ; CHECK-BE-P8:       # %bb.0: # %entry
1673 ; CHECK-BE-P8-NEXT:    mtvsrwz v2, r3
1674 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI20_0@toc@ha
1675 ; CHECK-BE-P8-NEXT:    mtvsrwz v3, r4
1676 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI20_0@toc@l
1677 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
1678 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
1679 ; CHECK-BE-P8-NEXT:    blr
1681 ; CHECK-BE-P9-LABEL: test_v4i32_v8i16:
1682 ; CHECK-BE-P9:       # %bb.0: # %entry
1683 ; CHECK-BE-P9-NEXT:    mtfprwz f0, r3
1684 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI20_0@toc@ha
1685 ; CHECK-BE-P9-NEXT:    mtvsrwz v2, r4
1686 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI20_0@toc@l
1687 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
1688 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
1689 ; CHECK-BE-P9-NEXT:    blr
1691 ; CHECK-AIX-64-P8-LABEL: test_v4i32_v8i16:
1692 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1693 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r3
1694 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C14(r2) # %const.0
1695 ; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4
1696 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
1697 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
1698 ; CHECK-AIX-64-P8-NEXT:    blr
1700 ; CHECK-AIX-64-P9-LABEL: test_v4i32_v8i16:
1701 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1702 ; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r3
1703 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C10(r2) # %const.0
1704 ; CHECK-AIX-64-P9-NEXT:    mtvsrwz v2, r4
1705 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
1706 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
1707 ; CHECK-AIX-64-P9-NEXT:    blr
1709 ; CHECK-AIX-32-P8-LABEL: test_v4i32_v8i16:
1710 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1711 ; CHECK-AIX-32-P8-NEXT:    stw r3, -16(r1)
1712 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1713 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
1714 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1715 ; CHECK-AIX-32-P8-NEXT:    sth r4, -32(r1)
1716 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
1717 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v2, v3
1718 ; CHECK-AIX-32-P8-NEXT:    blr
1720 ; CHECK-AIX-32-P9-LABEL: test_v4i32_v8i16:
1721 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1722 ; CHECK-AIX-32-P9-NEXT:    stw r3, -16(r1)
1723 ; CHECK-AIX-32-P9-NEXT:    sth r4, -32(r1)
1724 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
1725 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
1726 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v2, v3
1727 ; CHECK-AIX-32-P9-NEXT:    blr
1728 entry:
1729   %lhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 0
1730   %lhs = bitcast <4 x i32> %lhs.tmp to <16 x i8>
1731   %rhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 0
1732   %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>
1733   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1734   ret <16 x i8> %shuffle
1737 define <16 x i8> @test_v2i64_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {
1738 ; CHECK-LE-P8-LABEL: test_v2i64_v2i64:
1739 ; CHECK-LE-P8:       # %bb.0: # %entry
1740 ; CHECK-LE-P8-NEXT:    lxsdx v2, 0, r3
1741 ; CHECK-LE-P8-NEXT:    lxsdx v3, 0, r4
1742 ; CHECK-LE-P8-NEXT:    vmrghh v2, v3, v2
1743 ; CHECK-LE-P8-NEXT:    blr
1745 ; CHECK-LE-P9-LABEL: test_v2i64_v2i64:
1746 ; CHECK-LE-P9:       # %bb.0: # %entry
1747 ; CHECK-LE-P9-NEXT:    lxsd v2, 0(r3)
1748 ; CHECK-LE-P9-NEXT:    lxsd v3, 0(r4)
1749 ; CHECK-LE-P9-NEXT:    vmrghh v2, v3, v2
1750 ; CHECK-LE-P9-NEXT:    blr
1752 ; CHECK-BE-P8-LABEL: test_v2i64_v2i64:
1753 ; CHECK-BE-P8:       # %bb.0: # %entry
1754 ; CHECK-BE-P8-NEXT:    lxsdx v2, 0, r3
1755 ; CHECK-BE-P8-NEXT:    lxsdx v3, 0, r4
1756 ; CHECK-BE-P8-NEXT:    vmrghh v2, v2, v3
1757 ; CHECK-BE-P8-NEXT:    blr
1759 ; CHECK-BE-P9-LABEL: test_v2i64_v2i64:
1760 ; CHECK-BE-P9:       # %bb.0: # %entry
1761 ; CHECK-BE-P9-NEXT:    lxsd v2, 0(r3)
1762 ; CHECK-BE-P9-NEXT:    lxsd v3, 0(r4)
1763 ; CHECK-BE-P9-NEXT:    vmrghh v2, v2, v3
1764 ; CHECK-BE-P9-NEXT:    blr
1766 ; CHECK-AIX-64-P8-LABEL: test_v2i64_v2i64:
1767 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1768 ; CHECK-AIX-64-P8-NEXT:    lxsdx v2, 0, r3
1769 ; CHECK-AIX-64-P8-NEXT:    lxsdx v3, 0, r4
1770 ; CHECK-AIX-64-P8-NEXT:    vmrghh v2, v2, v3
1771 ; CHECK-AIX-64-P8-NEXT:    blr
1773 ; CHECK-AIX-64-P9-LABEL: test_v2i64_v2i64:
1774 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1775 ; CHECK-AIX-64-P9-NEXT:    lxsd v2, 0(r3)
1776 ; CHECK-AIX-64-P9-NEXT:    lxsd v3, 0(r4)
1777 ; CHECK-AIX-64-P9-NEXT:    vmrghh v2, v2, v3
1778 ; CHECK-AIX-64-P9-NEXT:    blr
1780 ; CHECK-AIX-32-P8-LABEL: test_v2i64_v2i64:
1781 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1782 ; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, 0, r3
1783 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C8(r2) # %const.0
1784 ; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r4
1785 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
1786 ; CHECK-AIX-32-P8-NEXT:    xxspltw v2, vs0, 1
1787 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4
1788 ; CHECK-AIX-32-P8-NEXT:    blr
1790 ; CHECK-AIX-32-P9-LABEL: test_v2i64_v2i64:
1791 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1792 ; CHECK-AIX-32-P9-NEXT:    lxvwsx vs0, 0, r3
1793 ; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C4(r2) # %const.0
1794 ; CHECK-AIX-32-P9-NEXT:    lxsiwzx v2, 0, r4
1795 ; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r3)
1796 ; CHECK-AIX-32-P9-NEXT:    xxperm v2, vs0, vs1
1797 ; CHECK-AIX-32-P9-NEXT:    blr
1798 entry:
1799   %0 = load <8 x i8>, ptr %a, align 4
1800   %bc1 = bitcast <8 x i8> %0 to i64
1801   %vecinit3 = insertelement <2 x i64> poison, i64 %bc1, i64 0
1802   %1 = load <2 x i8>, ptr %b, align 8
1803   %bc2 = bitcast <2 x i8> %1 to i16
1804   %vecinit6 = insertelement <8 x i16> undef, i16 %bc2, i64 0
1805   %2 = bitcast <2 x i64> %vecinit3 to <16 x i8>
1806   %3 = bitcast <8 x i16> %vecinit6 to <16 x i8>
1807   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1808   ret <16 x i8> %shuffle
1811 define <16 x i8> @test_v2i64_v4i32(i64 %arg, i32 %arg1, <2 x i64> %a, <4 x i32> %b) {
1812 ; CHECK-LE-P8-LABEL: test_v2i64_v4i32:
1813 ; CHECK-LE-P8:       # %bb.0: # %entry
1814 ; CHECK-LE-P8-NEXT:    mtfprd f0, r3
1815 ; CHECK-LE-P8-NEXT:    mtfprwz f1, r4
1816 ; CHECK-LE-P8-NEXT:    xxmrghw v2, vs1, vs0
1817 ; CHECK-LE-P8-NEXT:    blr
1819 ; CHECK-LE-P9-LABEL: test_v2i64_v4i32:
1820 ; CHECK-LE-P9:       # %bb.0: # %entry
1821 ; CHECK-LE-P9-NEXT:    mtfprd f0, r3
1822 ; CHECK-LE-P9-NEXT:    mtfprwz f1, r4
1823 ; CHECK-LE-P9-NEXT:    xxmrghw v2, vs1, vs0
1824 ; CHECK-LE-P9-NEXT:    blr
1826 ; CHECK-BE-P8-LABEL: test_v2i64_v4i32:
1827 ; CHECK-BE-P8:       # %bb.0: # %entry
1828 ; CHECK-BE-P8-NEXT:    mtfprd f0, r3
1829 ; CHECK-BE-P8-NEXT:    sldi r3, r4, 32
1830 ; CHECK-BE-P8-NEXT:    mtfprd f1, r3
1831 ; CHECK-BE-P8-NEXT:    xxmrghw v2, vs0, vs1
1832 ; CHECK-BE-P8-NEXT:    blr
1834 ; CHECK-BE-P9-LABEL: test_v2i64_v4i32:
1835 ; CHECK-BE-P9:       # %bb.0: # %entry
1836 ; CHECK-BE-P9-NEXT:    mtvsrws vs1, r4
1837 ; CHECK-BE-P9-NEXT:    mtfprd f0, r3
1838 ; CHECK-BE-P9-NEXT:    xxmrghw v2, vs0, vs1
1839 ; CHECK-BE-P9-NEXT:    blr
1841 ; CHECK-AIX-64-P8-LABEL: test_v2i64_v4i32:
1842 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1843 ; CHECK-AIX-64-P8-NEXT:    mtfprd f0, r3
1844 ; CHECK-AIX-64-P8-NEXT:    sldi r3, r4, 32
1845 ; CHECK-AIX-64-P8-NEXT:    mtfprd f1, r3
1846 ; CHECK-AIX-64-P8-NEXT:    xxmrghw v2, vs0, vs1
1847 ; CHECK-AIX-64-P8-NEXT:    blr
1849 ; CHECK-AIX-64-P9-LABEL: test_v2i64_v4i32:
1850 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1851 ; CHECK-AIX-64-P9-NEXT:    mtvsrws vs1, r4
1852 ; CHECK-AIX-64-P9-NEXT:    mtfprd f0, r3
1853 ; CHECK-AIX-64-P9-NEXT:    xxmrghw v2, vs0, vs1
1854 ; CHECK-AIX-64-P9-NEXT:    blr
1856 ; CHECK-AIX-32-P8-LABEL: test_v2i64_v4i32:
1857 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1858 ; CHECK-AIX-32-P8-NEXT:    stw r3, -32(r1)
1859 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1860 ; CHECK-AIX-32-P8-NEXT:    stw r5, -16(r1)
1861 ; CHECK-AIX-32-P8-NEXT:    lxvw4x vs0, 0, r3
1862 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1863 ; CHECK-AIX-32-P8-NEXT:    lxvw4x vs1, 0, r3
1864 ; CHECK-AIX-32-P8-NEXT:    xxmrghw v2, vs1, vs0
1865 ; CHECK-AIX-32-P8-NEXT:    blr
1867 ; CHECK-AIX-32-P9-LABEL: test_v2i64_v4i32:
1868 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1869 ; CHECK-AIX-32-P9-NEXT:    stw r5, -16(r1)
1870 ; CHECK-AIX-32-P9-NEXT:    stw r3, -32(r1)
1871 ; CHECK-AIX-32-P9-NEXT:    lxv vs0, -16(r1)
1872 ; CHECK-AIX-32-P9-NEXT:    lxv vs1, -32(r1)
1873 ; CHECK-AIX-32-P9-NEXT:    xxmrghw v2, vs1, vs0
1874 ; CHECK-AIX-32-P9-NEXT:    blr
1875 entry:
1876   %lhs.tmp = insertelement <2 x i64> %a, i64 %arg, i32 0
1877   %lhs = bitcast <2 x i64> %lhs.tmp to <16 x i8>
1878   %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 0
1879   %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>
1880   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1881   ret <16 x i8> %shuffle
1884 define <16 x i8> @test_v2i64_v8i16(i64 %arg, i16 %arg1) {
1885 ; CHECK-LE-P8-LABEL: test_v2i64_v8i16:
1886 ; CHECK-LE-P8:       # %bb.0: # %entry
1887 ; CHECK-LE-P8-NEXT:    mtvsrd v2, r3
1888 ; CHECK-LE-P8-NEXT:    mtvsrd v3, r4
1889 ; CHECK-LE-P8-NEXT:    vmrghh v2, v3, v2
1890 ; CHECK-LE-P8-NEXT:    blr
1892 ; CHECK-LE-P9-LABEL: test_v2i64_v8i16:
1893 ; CHECK-LE-P9:       # %bb.0: # %entry
1894 ; CHECK-LE-P9-NEXT:    mtvsrd v2, r3
1895 ; CHECK-LE-P9-NEXT:    mtvsrd v3, r4
1896 ; CHECK-LE-P9-NEXT:    vmrghh v2, v3, v2
1897 ; CHECK-LE-P9-NEXT:    blr
1899 ; CHECK-BE-P8-LABEL: test_v2i64_v8i16:
1900 ; CHECK-BE-P8:       # %bb.0: # %entry
1901 ; CHECK-BE-P8-NEXT:    mtvsrd v2, r3
1902 ; CHECK-BE-P8-NEXT:    sldi r3, r4, 48
1903 ; CHECK-BE-P8-NEXT:    mtvsrd v3, r3
1904 ; CHECK-BE-P8-NEXT:    vmrghh v2, v2, v3
1905 ; CHECK-BE-P8-NEXT:    blr
1907 ; CHECK-BE-P9-LABEL: test_v2i64_v8i16:
1908 ; CHECK-BE-P9:       # %bb.0: # %entry
1909 ; CHECK-BE-P9-NEXT:    mtvsrd v2, r3
1910 ; CHECK-BE-P9-NEXT:    sldi r3, r4, 48
1911 ; CHECK-BE-P9-NEXT:    mtvsrd v3, r3
1912 ; CHECK-BE-P9-NEXT:    vmrghh v2, v2, v3
1913 ; CHECK-BE-P9-NEXT:    blr
1915 ; CHECK-AIX-64-P8-LABEL: test_v2i64_v8i16:
1916 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
1917 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v2, r3
1918 ; CHECK-AIX-64-P8-NEXT:    sldi r3, r4, 48
1919 ; CHECK-AIX-64-P8-NEXT:    mtvsrd v3, r3
1920 ; CHECK-AIX-64-P8-NEXT:    vmrghh v2, v2, v3
1921 ; CHECK-AIX-64-P8-NEXT:    blr
1923 ; CHECK-AIX-64-P9-LABEL: test_v2i64_v8i16:
1924 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
1925 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v2, r3
1926 ; CHECK-AIX-64-P9-NEXT:    sldi r3, r4, 48
1927 ; CHECK-AIX-64-P9-NEXT:    mtvsrd v3, r3
1928 ; CHECK-AIX-64-P9-NEXT:    vmrghh v2, v2, v3
1929 ; CHECK-AIX-64-P9-NEXT:    blr
1931 ; CHECK-AIX-32-P8-LABEL: test_v2i64_v8i16:
1932 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
1933 ; CHECK-AIX-32-P8-NEXT:    stw r3, -16(r1)
1934 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16
1935 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v2, 0, r3
1936 ; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -32
1937 ; CHECK-AIX-32-P8-NEXT:    sth r5, -32(r1)
1938 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3
1939 ; CHECK-AIX-32-P8-NEXT:    vmrghh v2, v2, v3
1940 ; CHECK-AIX-32-P8-NEXT:    blr
1942 ; CHECK-AIX-32-P9-LABEL: test_v2i64_v8i16:
1943 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
1944 ; CHECK-AIX-32-P9-NEXT:    stw r3, -16(r1)
1945 ; CHECK-AIX-32-P9-NEXT:    sth r5, -32(r1)
1946 ; CHECK-AIX-32-P9-NEXT:    lxv v2, -16(r1)
1947 ; CHECK-AIX-32-P9-NEXT:    lxv v3, -32(r1)
1948 ; CHECK-AIX-32-P9-NEXT:    vmrghh v2, v2, v3
1949 ; CHECK-AIX-32-P9-NEXT:    blr
1950 entry:
1951   %lhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 0
1952   %lhs = bitcast <2 x i64> %lhs.tmp to <16 x i8>
1953   %rhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 0
1954   %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>
1955   %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1956   ret <16 x i8> %shuffle
1959 define <16 x i8> @test_v4i32_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {
1960 ; CHECK-LE-P8-LABEL: test_v4i32_v2i64:
1961 ; CHECK-LE-P8:       # %bb.0: # %entry
1962 ; CHECK-LE-P8-NEXT:    addis r5, r2, .LCPI24_0@toc@ha
1963 ; CHECK-LE-P8-NEXT:    lxsiwzx v3, 0, r3
1964 ; CHECK-LE-P8-NEXT:    lxsdx v4, 0, r4
1965 ; CHECK-LE-P8-NEXT:    addi r5, r5, .LCPI24_0@toc@l
1966 ; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r5
1967 ; CHECK-LE-P8-NEXT:    xxswapd v2, vs0
1968 ; CHECK-LE-P8-NEXT:    vperm v2, v4, v3, v2
1969 ; CHECK-LE-P8-NEXT:    blr
1971 ; CHECK-LE-P9-LABEL: test_v4i32_v2i64:
1972 ; CHECK-LE-P9:       # %bb.0: # %entry
1973 ; CHECK-LE-P9-NEXT:    lxsiwzx v2, 0, r3
1974 ; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
1975 ; CHECK-LE-P9-NEXT:    lfd f0, 0(r4)
1976 ; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI24_0@toc@l
1977 ; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)
1978 ; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1
1979 ; CHECK-LE-P9-NEXT:    blr
1981 ; CHECK-BE-P8-LABEL: test_v4i32_v2i64:
1982 ; CHECK-BE-P8:       # %bb.0: # %entry
1983 ; CHECK-BE-P8-NEXT:    lfiwzx f0, 0, r3
1984 ; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
1985 ; CHECK-BE-P8-NEXT:    lxsdx v3, 0, r4
1986 ; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI24_0@toc@l
1987 ; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3
1988 ; CHECK-BE-P8-NEXT:    xxsldwi v2, f0, f0, 1
1989 ; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4
1990 ; CHECK-BE-P8-NEXT:    blr
1992 ; CHECK-BE-P9-LABEL: test_v4i32_v2i64:
1993 ; CHECK-BE-P9:       # %bb.0: # %entry
1994 ; CHECK-BE-P9-NEXT:    lfiwzx f0, 0, r3
1995 ; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
1996 ; CHECK-BE-P9-NEXT:    lxsd v2, 0(r4)
1997 ; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI24_0@toc@l
1998 ; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)
1999 ; CHECK-BE-P9-NEXT:    xxsldwi vs0, f0, f0, 1
2000 ; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1
2001 ; CHECK-BE-P9-NEXT:    blr
2003 ; CHECK-AIX-64-P8-LABEL: test_v4i32_v2i64:
2004 ; CHECK-AIX-64-P8:       # %bb.0: # %entry
2005 ; CHECK-AIX-64-P8-NEXT:    lfiwzx f0, 0, r3
2006 ; CHECK-AIX-64-P8-NEXT:    ld r3, L..C15(r2) # %const.0
2007 ; CHECK-AIX-64-P8-NEXT:    lxsdx v3, 0, r4
2008 ; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3
2009 ; CHECK-AIX-64-P8-NEXT:    xxsldwi v2, f0, f0, 1
2010 ; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4
2011 ; CHECK-AIX-64-P8-NEXT:    blr
2013 ; CHECK-AIX-64-P9-LABEL: test_v4i32_v2i64:
2014 ; CHECK-AIX-64-P9:       # %bb.0: # %entry
2015 ; CHECK-AIX-64-P9-NEXT:    lfiwzx f0, 0, r3
2016 ; CHECK-AIX-64-P9-NEXT:    ld r3, L..C11(r2) # %const.0
2017 ; CHECK-AIX-64-P9-NEXT:    lxsd v2, 0(r4)
2018 ; CHECK-AIX-64-P9-NEXT:    xxsldwi vs0, f0, f0, 1
2019 ; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)
2020 ; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1
2021 ; CHECK-AIX-64-P9-NEXT:    blr
2023 ; CHECK-AIX-32-P8-LABEL: test_v4i32_v2i64:
2024 ; CHECK-AIX-32-P8:       # %bb.0: # %entry
2025 ; CHECK-AIX-32-P8-NEXT:    li r5, 4
2026 ; CHECK-AIX-32-P8-NEXT:    lfiwzx f1, 0, r4
2027 ; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r3
2028 ; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C9(r2) # %const.0
2029 ; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, r4, r5
2030 ; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3
2031 ; CHECK-AIX-32-P8-NEXT:    xxspltw vs1, vs1, 1
2032 ; CHECK-AIX-32-P8-NEXT:    xxspltw vs0, vs0, 1
2033 ; CHECK-AIX-32-P8-NEXT:    xxmrghw v2, vs1, vs0
2034 ; CHECK-AIX-32-P8-NEXT:    vperm v2, v3, v2, v4
2035 ; CHECK-AIX-32-P8-NEXT:    blr
2037 ; CHECK-AIX-32-P9-LABEL: test_v4i32_v2i64:
2038 ; CHECK-AIX-32-P9:       # %bb.0: # %entry
2039 ; CHECK-AIX-32-P9-NEXT:    lfiwzx f0, 0, r3
2040 ; CHECK-AIX-32-P9-NEXT:    li r3, 4
2041 ; CHECK-AIX-32-P9-NEXT:    lxvwsx vs2, 0, r4
2042 ; CHECK-AIX-32-P9-NEXT:    lxvwsx vs1, r4, r3
2043 ; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C5(r2) # %const.0
2044 ; CHECK-AIX-32-P9-NEXT:    xxmrghw v2, vs2, vs1
2045 ; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r3)
2046 ; CHECK-AIX-32-P9-NEXT:    xxperm v2, vs0, vs1
2047 ; CHECK-AIX-32-P9-NEXT:    blr
2048 entry:
2049   %0 = load <4 x i8>, ptr %a, align 4
2050   %bc1 = bitcast <4 x i8> %0 to i32
2051   %vecinit3 = insertelement <4 x i32> poison, i32 %bc1, i64 0
2052   %1 = load <8 x i8>, ptr %b, align 8
2053   %bc2 = bitcast <8 x i8> %1 to i64
2054   %vecinit6 = insertelement <2 x i64> undef, i64 %bc2, i64 0
2055   %2 = bitcast <4 x i32> %vecinit3 to <16 x i8>
2056   %3 = bitcast <2 x i64> %vecinit6 to <16 x i8>
2057   %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
2058   ret <16 x i8> %shuffle