[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / PowerPC / canonical-merge-shuffles.ll
blobf2bd4c7f40a4664e81a232e5757dfef641d2c676
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3 ; RUN:     -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
4 ; RUN: FileCheck %s --check-prefix=CHECK-P8
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
6 ; RUN:     -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
7 ; RUN: FileCheck %s --check-prefix=CHECK-P9
8 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
9 ; RUN:     -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
10 ; RUN: FileCheck %s --check-prefix=CHECK-P9-BE
11 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
12 ; RUN:     -mcpu=pwr8 -mattr=-vsx -ppc-asm-full-reg-names \
13 ; RUN:     -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-NOVSX
14 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
15 ; RUN:     -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
16 ; RUN: FileCheck %s --check-prefix=CHECK-P7
17 ; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr \
18 ; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix-xcoff < %s | \
19 ; RUN: FileCheck %s --check-prefixes=P8-AIX,P8-AIX-64
20 ; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr \
21 ; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix-xcoff < %s | \
22 ; RUN: FileCheck %s --check-prefixes=P8-AIX,P8-AIX-32
24 define dso_local <16 x i8> @testmrghb(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
25 ; CHECK-P8-LABEL: testmrghb:
26 ; CHECK-P8:       # %bb.0: # %entry
27 ; CHECK-P8-NEXT:    vmrghb v2, v3, v2
28 ; CHECK-P8-NEXT:    blr
30 ; CHECK-P9-LABEL: testmrghb:
31 ; CHECK-P9:       # %bb.0: # %entry
32 ; CHECK-P9-NEXT:    vmrghb v2, v3, v2
33 ; CHECK-P9-NEXT:    blr
35 ; CHECK-P9-BE-LABEL: testmrghb:
36 ; CHECK-P9-BE:       # %bb.0: # %entry
37 ; CHECK-P9-BE-NEXT:    vmrglb v2, v2, v3
38 ; CHECK-P9-BE-NEXT:    blr
40 ; CHECK-NOVSX-LABEL: testmrghb:
41 ; CHECK-NOVSX:       # %bb.0: # %entry
42 ; CHECK-NOVSX-NEXT:    vmrghb v2, v3, v2
43 ; CHECK-NOVSX-NEXT:    blr
45 ; CHECK-P7-LABEL: testmrghb:
46 ; CHECK-P7:       # %bb.0: # %entry
47 ; CHECK-P7-NEXT:    vmrghb v2, v3, v2
48 ; CHECK-P7-NEXT:    blr
50 ; P8-AIX-LABEL: testmrghb:
51 ; P8-AIX:       # %bb.0: # %entry
52 ; P8-AIX-NEXT:    vmrglb v2, v2, v3
53 ; P8-AIX-NEXT:    blr
54 entry:
55   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
56   ret <16 x i8> %shuffle
58 define dso_local <16 x i8> @testmrghb2(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
59 ; CHECK-P8-LABEL: testmrghb2:
60 ; CHECK-P8:       # %bb.0: # %entry
61 ; CHECK-P8-NEXT:    vmrghb v2, v2, v3
62 ; CHECK-P8-NEXT:    blr
64 ; CHECK-P9-LABEL: testmrghb2:
65 ; CHECK-P9:       # %bb.0: # %entry
66 ; CHECK-P9-NEXT:    vmrghb v2, v2, v3
67 ; CHECK-P9-NEXT:    blr
69 ; CHECK-P9-BE-LABEL: testmrghb2:
70 ; CHECK-P9-BE:       # %bb.0: # %entry
71 ; CHECK-P9-BE-NEXT:    vmrglb v2, v3, v2
72 ; CHECK-P9-BE-NEXT:    blr
74 ; CHECK-NOVSX-LABEL: testmrghb2:
75 ; CHECK-NOVSX:       # %bb.0: # %entry
76 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
77 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI1_0@toc@l
78 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
79 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v2, v4
80 ; CHECK-NOVSX-NEXT:    blr
82 ; CHECK-P7-LABEL: testmrghb2:
83 ; CHECK-P7:       # %bb.0: # %entry
84 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
85 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI1_0@toc@l
86 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
87 ; CHECK-P7-NEXT:    xxswapd v4, vs0
88 ; CHECK-P7-NEXT:    vperm v2, v3, v2, v4
89 ; CHECK-P7-NEXT:    blr
91 ; P8-AIX-LABEL: testmrghb2:
92 ; P8-AIX:       # %bb.0: # %entry
93 ; P8-AIX-NEXT:    vmrglb v2, v3, v2
94 ; P8-AIX-NEXT:    blr
95 entry:
96   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 24, i32 8, i32 25, i32 9, i32 26, i32 10, i32 27, i32 11, i32 28, i32 12, i32 29, i32 13, i32 30, i32 14, i32 31, i32 15>
97   ret <16 x i8> %shuffle
99 define dso_local <16 x i8> @testmrghh(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
100 ; CHECK-P8-LABEL: testmrghh:
101 ; CHECK-P8:       # %bb.0: # %entry
102 ; CHECK-P8-NEXT:    vmrghh v2, v3, v2
103 ; CHECK-P8-NEXT:    blr
105 ; CHECK-P9-LABEL: testmrghh:
106 ; CHECK-P9:       # %bb.0: # %entry
107 ; CHECK-P9-NEXT:    vmrghh v2, v3, v2
108 ; CHECK-P9-NEXT:    blr
110 ; CHECK-P9-BE-LABEL: testmrghh:
111 ; CHECK-P9-BE:       # %bb.0: # %entry
112 ; CHECK-P9-BE-NEXT:    vmrglh v2, v2, v3
113 ; CHECK-P9-BE-NEXT:    blr
115 ; CHECK-NOVSX-LABEL: testmrghh:
116 ; CHECK-NOVSX:       # %bb.0: # %entry
117 ; CHECK-NOVSX-NEXT:    vmrghh v2, v3, v2
118 ; CHECK-NOVSX-NEXT:    blr
120 ; CHECK-P7-LABEL: testmrghh:
121 ; CHECK-P7:       # %bb.0: # %entry
122 ; CHECK-P7-NEXT:    vmrghh v2, v3, v2
123 ; CHECK-P7-NEXT:    blr
125 ; P8-AIX-LABEL: testmrghh:
126 ; P8-AIX:       # %bb.0: # %entry
127 ; P8-AIX-NEXT:    vmrglh v2, v2, v3
128 ; P8-AIX-NEXT:    blr
129 entry:
130   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 9, i32 24, i32 25, i32 10, i32 11, i32 26, i32 27, i32 12, i32 13, i32 28, i32 29, i32 14, i32 15, i32 30, i32 31>
131   ret <16 x i8> %shuffle
133 define dso_local <16 x i8> @testmrghh2(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
134 ; CHECK-P8-LABEL: testmrghh2:
135 ; CHECK-P8:       # %bb.0: # %entry
136 ; CHECK-P8-NEXT:    vmrghh v2, v2, v3
137 ; CHECK-P8-NEXT:    blr
139 ; CHECK-P9-LABEL: testmrghh2:
140 ; CHECK-P9:       # %bb.0: # %entry
141 ; CHECK-P9-NEXT:    vmrghh v2, v2, v3
142 ; CHECK-P9-NEXT:    blr
144 ; CHECK-P9-BE-LABEL: testmrghh2:
145 ; CHECK-P9-BE:       # %bb.0: # %entry
146 ; CHECK-P9-BE-NEXT:    vmrglh v2, v3, v2
147 ; CHECK-P9-BE-NEXT:    blr
149 ; CHECK-NOVSX-LABEL: testmrghh2:
150 ; CHECK-NOVSX:       # %bb.0: # %entry
151 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
152 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI3_0@toc@l
153 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
154 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v2, v4
155 ; CHECK-NOVSX-NEXT:    blr
157 ; CHECK-P7-LABEL: testmrghh2:
158 ; CHECK-P7:       # %bb.0: # %entry
159 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
160 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI3_0@toc@l
161 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
162 ; CHECK-P7-NEXT:    xxswapd v4, vs0
163 ; CHECK-P7-NEXT:    vperm v2, v3, v2, v4
164 ; CHECK-P7-NEXT:    blr
166 ; P8-AIX-LABEL: testmrghh2:
167 ; P8-AIX:       # %bb.0: # %entry
168 ; P8-AIX-NEXT:    vmrglh v2, v3, v2
169 ; P8-AIX-NEXT:    blr
170 entry:
171   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 24, i32 25, i32 8, i32 9, i32 26, i32 27, i32 10, i32 11, i32 28, i32 29, i32 12, i32 13, i32 30, i32 31, i32 14, i32 15>
172   ret <16 x i8> %shuffle
174 define dso_local <16 x i8> @testmrglb(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
175 ; CHECK-P8-LABEL: testmrglb:
176 ; CHECK-P8:       # %bb.0: # %entry
177 ; CHECK-P8-NEXT:    vmrglb v2, v3, v2
178 ; CHECK-P8-NEXT:    blr
180 ; CHECK-P9-LABEL: testmrglb:
181 ; CHECK-P9:       # %bb.0: # %entry
182 ; CHECK-P9-NEXT:    vmrglb v2, v3, v2
183 ; CHECK-P9-NEXT:    blr
185 ; CHECK-P9-BE-LABEL: testmrglb:
186 ; CHECK-P9-BE:       # %bb.0: # %entry
187 ; CHECK-P9-BE-NEXT:    vmrghb v2, v2, v3
188 ; CHECK-P9-BE-NEXT:    blr
190 ; CHECK-NOVSX-LABEL: testmrglb:
191 ; CHECK-NOVSX:       # %bb.0: # %entry
192 ; CHECK-NOVSX-NEXT:    vmrglb v2, v3, v2
193 ; CHECK-NOVSX-NEXT:    blr
195 ; CHECK-P7-LABEL: testmrglb:
196 ; CHECK-P7:       # %bb.0: # %entry
197 ; CHECK-P7-NEXT:    vmrglb v2, v3, v2
198 ; CHECK-P7-NEXT:    blr
200 ; P8-AIX-LABEL: testmrglb:
201 ; P8-AIX:       # %bb.0: # %entry
202 ; P8-AIX-NEXT:    vmrghb v2, v2, v3
203 ; P8-AIX-NEXT:    blr
204 entry:
205   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
206   ret <16 x i8> %shuffle
208 define dso_local <16 x i8> @testmrglb2(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
209 ; CHECK-P8-LABEL: testmrglb2:
210 ; CHECK-P8:       # %bb.0: # %entry
211 ; CHECK-P8-NEXT:    vmrglb v2, v2, v3
212 ; CHECK-P8-NEXT:    blr
214 ; CHECK-P9-LABEL: testmrglb2:
215 ; CHECK-P9:       # %bb.0: # %entry
216 ; CHECK-P9-NEXT:    vmrglb v2, v2, v3
217 ; CHECK-P9-NEXT:    blr
219 ; CHECK-P9-BE-LABEL: testmrglb2:
220 ; CHECK-P9-BE:       # %bb.0: # %entry
221 ; CHECK-P9-BE-NEXT:    vmrghb v2, v3, v2
222 ; CHECK-P9-BE-NEXT:    blr
224 ; CHECK-NOVSX-LABEL: testmrglb2:
225 ; CHECK-NOVSX:       # %bb.0: # %entry
226 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
227 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI5_0@toc@l
228 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
229 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v2, v4
230 ; CHECK-NOVSX-NEXT:    blr
232 ; CHECK-P7-LABEL: testmrglb2:
233 ; CHECK-P7:       # %bb.0: # %entry
234 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
235 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI5_0@toc@l
236 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
237 ; CHECK-P7-NEXT:    xxswapd v4, vs0
238 ; CHECK-P7-NEXT:    vperm v2, v3, v2, v4
239 ; CHECK-P7-NEXT:    blr
241 ; P8-AIX-LABEL: testmrglb2:
242 ; P8-AIX:       # %bb.0: # %entry
243 ; P8-AIX-NEXT:    vmrghb v2, v3, v2
244 ; P8-AIX-NEXT:    blr
245 entry:
246   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 0, i32 17, i32 1, i32 18, i32 2, i32 19, i32 3, i32 20, i32 4, i32 21, i32 5, i32 22, i32 6, i32 23, i32 7>
247   ret <16 x i8> %shuffle
249 define dso_local <16 x i8> @testmrglh(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
250 ; CHECK-P8-LABEL: testmrglh:
251 ; CHECK-P8:       # %bb.0: # %entry
252 ; CHECK-P8-NEXT:    vmrglh v2, v3, v2
253 ; CHECK-P8-NEXT:    blr
255 ; CHECK-P9-LABEL: testmrglh:
256 ; CHECK-P9:       # %bb.0: # %entry
257 ; CHECK-P9-NEXT:    vmrglh v2, v3, v2
258 ; CHECK-P9-NEXT:    blr
260 ; CHECK-P9-BE-LABEL: testmrglh:
261 ; CHECK-P9-BE:       # %bb.0: # %entry
262 ; CHECK-P9-BE-NEXT:    vmrghh v2, v2, v3
263 ; CHECK-P9-BE-NEXT:    blr
265 ; CHECK-NOVSX-LABEL: testmrglh:
266 ; CHECK-NOVSX:       # %bb.0: # %entry
267 ; CHECK-NOVSX-NEXT:    vmrglh v2, v3, v2
268 ; CHECK-NOVSX-NEXT:    blr
270 ; CHECK-P7-LABEL: testmrglh:
271 ; CHECK-P7:       # %bb.0: # %entry
272 ; CHECK-P7-NEXT:    vmrglh v2, v3, v2
273 ; CHECK-P7-NEXT:    blr
275 ; P8-AIX-LABEL: testmrglh:
276 ; P8-AIX:       # %bb.0: # %entry
277 ; P8-AIX-NEXT:    vmrghh v2, v2, v3
278 ; P8-AIX-NEXT:    blr
279 entry:
280   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 2, i32 3, i32 18, i32 19, i32 4, i32 5, i32 20, i32 21, i32 6, i32 7, i32 22, i32 23>
281   ret <16 x i8> %shuffle
283 define dso_local <16 x i8> @testmrglh2(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
284 ; CHECK-P8-LABEL: testmrglh2:
285 ; CHECK-P8:       # %bb.0: # %entry
286 ; CHECK-P8-NEXT:    vmrglh v2, v2, v3
287 ; CHECK-P8-NEXT:    blr
289 ; CHECK-P9-LABEL: testmrglh2:
290 ; CHECK-P9:       # %bb.0: # %entry
291 ; CHECK-P9-NEXT:    vmrglh v2, v2, v3
292 ; CHECK-P9-NEXT:    blr
294 ; CHECK-P9-BE-LABEL: testmrglh2:
295 ; CHECK-P9-BE:       # %bb.0: # %entry
296 ; CHECK-P9-BE-NEXT:    vmrghh v2, v3, v2
297 ; CHECK-P9-BE-NEXT:    blr
299 ; CHECK-NOVSX-LABEL: testmrglh2:
300 ; CHECK-NOVSX:       # %bb.0: # %entry
301 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI7_0@toc@ha
302 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI7_0@toc@l
303 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
304 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v2, v4
305 ; CHECK-NOVSX-NEXT:    blr
307 ; CHECK-P7-LABEL: testmrglh2:
308 ; CHECK-P7:       # %bb.0: # %entry
309 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI7_0@toc@ha
310 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI7_0@toc@l
311 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
312 ; CHECK-P7-NEXT:    xxswapd v4, vs0
313 ; CHECK-P7-NEXT:    vperm v2, v3, v2, v4
314 ; CHECK-P7-NEXT:    blr
316 ; P8-AIX-LABEL: testmrglh2:
317 ; P8-AIX:       # %bb.0: # %entry
318 ; P8-AIX-NEXT:    vmrghh v2, v3, v2
319 ; P8-AIX-NEXT:    blr
320 entry:
321   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 0, i32 1, i32 18, i32 19, i32 2, i32 3, i32 20, i32 21, i32 4, i32 5, i32 22, i32 23, i32 6, i32 7>
322   ret <16 x i8> %shuffle
324 define dso_local <16 x i8> @testmrghw(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
325 ; CHECK-P8-LABEL: testmrghw:
326 ; CHECK-P8:       # %bb.0: # %entry
327 ; CHECK-P8-NEXT:    xxmrghw v2, v3, v2
328 ; CHECK-P8-NEXT:    blr
330 ; CHECK-P9-LABEL: testmrghw:
331 ; CHECK-P9:       # %bb.0: # %entry
332 ; CHECK-P9-NEXT:    xxmrghw v2, v3, v2
333 ; CHECK-P9-NEXT:    blr
335 ; CHECK-P9-BE-LABEL: testmrghw:
336 ; CHECK-P9-BE:       # %bb.0: # %entry
337 ; CHECK-P9-BE-NEXT:    xxmrglw v2, v2, v3
338 ; CHECK-P9-BE-NEXT:    blr
340 ; CHECK-NOVSX-LABEL: testmrghw:
341 ; CHECK-NOVSX:       # %bb.0: # %entry
342 ; CHECK-NOVSX-NEXT:    vmrghw v2, v3, v2
343 ; CHECK-NOVSX-NEXT:    blr
345 ; CHECK-P7-LABEL: testmrghw:
346 ; CHECK-P7:       # %bb.0: # %entry
347 ; CHECK-P7-NEXT:    xxmrghw v2, v3, v2
348 ; CHECK-P7-NEXT:    blr
350 ; P8-AIX-LABEL: testmrghw:
351 ; P8-AIX:       # %bb.0: # %entry
352 ; P8-AIX-NEXT:    xxmrglw v2, v2, v3
353 ; P8-AIX-NEXT:    blr
354 entry:
355   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 24, i32 25, i32 26, i32 27, i32 12, i32 13, i32 14, i32 15, i32 28, i32 29, i32 30, i32 31>
356   ret <16 x i8> %shuffle
358 define dso_local <16 x i8> @testmrghw2(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
359 ; CHECK-P8-LABEL: testmrghw2:
360 ; CHECK-P8:       # %bb.0: # %entry
361 ; CHECK-P8-NEXT:    xxmrghw v2, v2, v3
362 ; CHECK-P8-NEXT:    blr
364 ; CHECK-P9-LABEL: testmrghw2:
365 ; CHECK-P9:       # %bb.0: # %entry
366 ; CHECK-P9-NEXT:    xxmrghw v2, v2, v3
367 ; CHECK-P9-NEXT:    blr
369 ; CHECK-P9-BE-LABEL: testmrghw2:
370 ; CHECK-P9-BE:       # %bb.0: # %entry
371 ; CHECK-P9-BE-NEXT:    xxmrglw v2, v3, v2
372 ; CHECK-P9-BE-NEXT:    blr
374 ; CHECK-NOVSX-LABEL: testmrghw2:
375 ; CHECK-NOVSX:       # %bb.0: # %entry
376 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI9_0@toc@ha
377 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI9_0@toc@l
378 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
379 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v2, v4
380 ; CHECK-NOVSX-NEXT:    blr
382 ; CHECK-P7-LABEL: testmrghw2:
383 ; CHECK-P7:       # %bb.0: # %entry
384 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI9_0@toc@ha
385 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI9_0@toc@l
386 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
387 ; CHECK-P7-NEXT:    xxswapd v4, vs0
388 ; CHECK-P7-NEXT:    vperm v2, v3, v2, v4
389 ; CHECK-P7-NEXT:    blr
391 ; P8-AIX-LABEL: testmrghw2:
392 ; P8-AIX:       # %bb.0: # %entry
393 ; P8-AIX-NEXT:    xxmrglw v2, v3, v2
394 ; P8-AIX-NEXT:    blr
395 entry:
396   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 24, i32 25, i32 26, i32 27, i32 8, i32 9, i32 10, i32 11, i32 28, i32 29, i32 30, i32 31, i32 12, i32 13, i32 14, i32 15>
397   ret <16 x i8> %shuffle
399 define dso_local <16 x i8> @testmrglw(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
400 ; CHECK-P8-LABEL: testmrglw:
401 ; CHECK-P8:       # %bb.0: # %entry
402 ; CHECK-P8-NEXT:    xxmrglw v2, v3, v2
403 ; CHECK-P8-NEXT:    blr
405 ; CHECK-P9-LABEL: testmrglw:
406 ; CHECK-P9:       # %bb.0: # %entry
407 ; CHECK-P9-NEXT:    xxmrglw v2, v3, v2
408 ; CHECK-P9-NEXT:    blr
410 ; CHECK-P9-BE-LABEL: testmrglw:
411 ; CHECK-P9-BE:       # %bb.0: # %entry
412 ; CHECK-P9-BE-NEXT:    xxmrghw v2, v2, v3
413 ; CHECK-P9-BE-NEXT:    blr
415 ; CHECK-NOVSX-LABEL: testmrglw:
416 ; CHECK-NOVSX:       # %bb.0: # %entry
417 ; CHECK-NOVSX-NEXT:    vmrglw v2, v3, v2
418 ; CHECK-NOVSX-NEXT:    blr
420 ; CHECK-P7-LABEL: testmrglw:
421 ; CHECK-P7:       # %bb.0: # %entry
422 ; CHECK-P7-NEXT:    xxmrglw v2, v3, v2
423 ; CHECK-P7-NEXT:    blr
425 ; P8-AIX-LABEL: testmrglw:
426 ; P8-AIX:       # %bb.0: # %entry
427 ; P8-AIX-NEXT:    xxmrghw v2, v2, v3
428 ; P8-AIX-NEXT:    blr
429 entry:
430   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23>
431   ret <16 x i8> %shuffle
433 define dso_local <16 x i8> @testmrglw2(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
434 ; CHECK-P8-LABEL: testmrglw2:
435 ; CHECK-P8:       # %bb.0: # %entry
436 ; CHECK-P8-NEXT:    xxmrglw v2, v2, v3
437 ; CHECK-P8-NEXT:    blr
439 ; CHECK-P9-LABEL: testmrglw2:
440 ; CHECK-P9:       # %bb.0: # %entry
441 ; CHECK-P9-NEXT:    xxmrglw v2, v2, v3
442 ; CHECK-P9-NEXT:    blr
444 ; CHECK-P9-BE-LABEL: testmrglw2:
445 ; CHECK-P9-BE:       # %bb.0: # %entry
446 ; CHECK-P9-BE-NEXT:    xxmrghw v2, v3, v2
447 ; CHECK-P9-BE-NEXT:    blr
449 ; CHECK-NOVSX-LABEL: testmrglw2:
450 ; CHECK-NOVSX:       # %bb.0: # %entry
451 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI11_0@toc@ha
452 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI11_0@toc@l
453 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
454 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v2, v4
455 ; CHECK-NOVSX-NEXT:    blr
457 ; CHECK-P7-LABEL: testmrglw2:
458 ; CHECK-P7:       # %bb.0: # %entry
459 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI11_0@toc@ha
460 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI11_0@toc@l
461 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
462 ; CHECK-P7-NEXT:    xxswapd v4, vs0
463 ; CHECK-P7-NEXT:    vperm v2, v3, v2, v4
464 ; CHECK-P7-NEXT:    blr
466 ; P8-AIX-LABEL: testmrglw2:
467 ; P8-AIX:       # %bb.0: # %entry
468 ; P8-AIX-NEXT:    xxmrghw v2, v3, v2
469 ; P8-AIX-NEXT:    blr
470 entry:
471   %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 0, i32 1, i32 2, i32 3, i32 20, i32 21, i32 22, i32 23, i32 4, i32 5, i32 6, i32 7>
472   ret <16 x i8> %shuffle
475 define dso_local <8 x i16> @testmrglb3(ptr nocapture readonly %a) local_unnamed_addr #0 {
476 ; CHECK-P8-LABEL: testmrglb3:
477 ; CHECK-P8:       # %bb.0: # %entry
478 ; CHECK-P8-NEXT:    lxsdx v2, 0, r3
479 ; CHECK-P8-NEXT:    xxlxor v3, v3, v3
480 ; CHECK-P8-NEXT:    vmrghb v2, v3, v2
481 ; CHECK-P8-NEXT:    blr
483 ; CHECK-P9-LABEL: testmrglb3:
484 ; CHECK-P9:       # %bb.0: # %entry
485 ; CHECK-P9-NEXT:    lxsd v2, 0(r3)
486 ; CHECK-P9-NEXT:    xxlxor v3, v3, v3
487 ; CHECK-P9-NEXT:    vmrghb v2, v3, v2
488 ; CHECK-P9-NEXT:    blr
490 ; CHECK-P9-BE-LABEL: testmrglb3:
491 ; CHECK-P9-BE:       # %bb.0: # %entry
492 ; CHECK-P9-BE-NEXT:    lxsd v2, 0(r3)
493 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI12_0@toc@ha
494 ; CHECK-P9-BE-NEXT:    xxlxor vs1, vs1, vs1
495 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI12_0@toc@l
496 ; CHECK-P9-BE-NEXT:    lxv vs0, 0(r3)
497 ; CHECK-P9-BE-NEXT:    xxperm v2, vs1, vs0
498 ; CHECK-P9-BE-NEXT:    blr
500 ; CHECK-NOVSX-LABEL: testmrglb3:
501 ; CHECK-NOVSX:       # %bb.0: # %entry
502 ; CHECK-NOVSX-NEXT:    ld r3, 0(r3)
503 ; CHECK-NOVSX-NEXT:    vxor v4, v4, v4
504 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
505 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
506 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
507 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI12_0@toc@ha
508 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI12_0@toc@l
509 ; CHECK-NOVSX-NEXT:    lvx v3, 0, r3
510 ; CHECK-NOVSX-NEXT:    vperm v2, v2, v4, v3
511 ; CHECK-NOVSX-NEXT:    blr
513 ; CHECK-P7-LABEL: testmrglb3:
514 ; CHECK-P7:       # %bb.0: # %entry
515 ; CHECK-P7-NEXT:    ld r3, 0(r3)
516 ; CHECK-P7-NEXT:    xxlxor v4, v4, v4
517 ; CHECK-P7-NEXT:    std r3, -16(r1)
518 ; CHECK-P7-NEXT:    addi r3, r1, -16
519 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
520 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI12_0@toc@ha
521 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI12_0@toc@l
522 ; CHECK-P7-NEXT:    xxswapd v2, vs0
523 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
524 ; CHECK-P7-NEXT:    xxswapd v3, vs0
525 ; CHECK-P7-NEXT:    vperm v2, v2, v4, v3
526 ; CHECK-P7-NEXT:    blr
528 ; P8-AIX-64-LABEL: testmrglb3:
529 ; P8-AIX-64:       # %bb.0: # %entry
530 ; P8-AIX-64-NEXT:    lxsdx v2, 0, r3
531 ; P8-AIX-64-NEXT:    ld r3, L..C0(r2) # %const.0
532 ; P8-AIX-64-NEXT:    xxlxor v4, v4, v4
533 ; P8-AIX-64-NEXT:    lxvw4x v3, 0, r3
534 ; P8-AIX-64-NEXT:    vperm v2, v4, v2, v3
535 ; P8-AIX-64-NEXT:    blr
537 ; P8-AIX-32-LABEL: testmrglb3:
538 ; P8-AIX-32:       # %bb.0: # %entry
539 ; P8-AIX-32-NEXT:    lwz r4, 4(r3)
540 ; P8-AIX-32-NEXT:    xxlxor v3, v3, v3
541 ; P8-AIX-32-NEXT:    stw r4, -16(r1)
542 ; P8-AIX-32-NEXT:    lwz r3, 0(r3)
543 ; P8-AIX-32-NEXT:    stw r3, -32(r1)
544 ; P8-AIX-32-NEXT:    addi r3, r1, -16
545 ; P8-AIX-32-NEXT:    lxvw4x vs0, 0, r3
546 ; P8-AIX-32-NEXT:    addi r3, r1, -32
547 ; P8-AIX-32-NEXT:    lxvw4x vs1, 0, r3
548 ; P8-AIX-32-NEXT:    xxmrghw v2, vs1, vs0
549 ; P8-AIX-32-NEXT:    vmrghb v2, v3, v2
550 ; P8-AIX-32-NEXT:    blr
551 entry:
552   %0 = load <8 x i8>, ptr %a, align 8
553   %1 = zext <8 x i8> %0 to <8 x i16>
554   ret <8 x i16> %1
557 define dso_local void @no_crash_elt0_from_RHS(ptr noalias nocapture dereferenceable(16) %.vtx6) #0 {
558 ; CHECK-P8-LABEL: no_crash_elt0_from_RHS:
559 ; CHECK-P8:       # %bb.0: # %test_entry
560 ; CHECK-P8-NEXT:    mflr r0
561 ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
562 ; CHECK-P8-NEXT:    stdu r1, -48(r1)
563 ; CHECK-P8-NEXT:    std r0, 64(r1)
564 ; CHECK-P8-NEXT:    mr r30, r3
565 ; CHECK-P8-NEXT:    bl dummy
566 ; CHECK-P8-NEXT:    nop
567 ; CHECK-P8-NEXT:    xxlxor f0, f0, f0
568 ; CHECK-P8-NEXT:    # kill: def $f1 killed $f1 def $vsl1
569 ; CHECK-P8-NEXT:    xxmrghd vs0, vs1, vs0
570 ; CHECK-P8-NEXT:    xxswapd vs0, vs0
571 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r30
573 ; CHECK-P9-LABEL: no_crash_elt0_from_RHS:
574 ; CHECK-P9:       # %bb.0: # %test_entry
575 ; CHECK-P9-NEXT:    mflr r0
576 ; CHECK-P9-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
577 ; CHECK-P9-NEXT:    stdu r1, -48(r1)
578 ; CHECK-P9-NEXT:    std r0, 64(r1)
579 ; CHECK-P9-NEXT:    mr r30, r3
580 ; CHECK-P9-NEXT:    bl dummy
581 ; CHECK-P9-NEXT:    nop
582 ; CHECK-P9-NEXT:    xxlxor f0, f0, f0
583 ; CHECK-P9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
584 ; CHECK-P9-NEXT:    xxmrghd vs0, vs1, vs0
585 ; CHECK-P9-NEXT:    stxv vs0, 0(r30)
587 ; CHECK-P9-BE-LABEL: no_crash_elt0_from_RHS:
588 ; CHECK-P9-BE:       # %bb.0: # %test_entry
589 ; CHECK-P9-BE-NEXT:    mflr r0
590 ; CHECK-P9-BE-NEXT:    stdu r1, -128(r1)
591 ; CHECK-P9-BE-NEXT:    std r0, 144(r1)
592 ; CHECK-P9-BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill
593 ; CHECK-P9-BE-NEXT:    mr r30, r3
594 ; CHECK-P9-BE-NEXT:    bl dummy
595 ; CHECK-P9-BE-NEXT:    nop
596 ; CHECK-P9-BE-NEXT:    xxlxor f0, f0, f0
597 ; CHECK-P9-BE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
598 ; CHECK-P9-BE-NEXT:    xxmrghd vs0, vs0, vs1
599 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r30)
601 ; CHECK-NOVSX-LABEL: no_crash_elt0_from_RHS:
602 ; CHECK-NOVSX:       # %bb.0: # %test_entry
603 ; CHECK-NOVSX-NEXT:    mflr r0
604 ; CHECK-NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
605 ; CHECK-NOVSX-NEXT:    stdu r1, -48(r1)
606 ; CHECK-NOVSX-NEXT:    std r0, 64(r1)
607 ; CHECK-NOVSX-NEXT:    mr r30, r3
608 ; CHECK-NOVSX-NEXT:    bl dummy
609 ; CHECK-NOVSX-NEXT:    nop
610 ; CHECK-NOVSX-NEXT:    li r3, 0
611 ; CHECK-NOVSX-NEXT:    stfd f1, 8(r30)
612 ; CHECK-NOVSX-NEXT:    std r3, 0(r30)
614 ; CHECK-P7-LABEL: no_crash_elt0_from_RHS:
615 ; CHECK-P7:       # %bb.0: # %test_entry
616 ; CHECK-P7-NEXT:    mflr r0
617 ; CHECK-P7-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
618 ; CHECK-P7-NEXT:    stdu r1, -48(r1)
619 ; CHECK-P7-NEXT:    std r0, 64(r1)
620 ; CHECK-P7-NEXT:    mr r30, r3
621 ; CHECK-P7-NEXT:    bl dummy
622 ; CHECK-P7-NEXT:    nop
623 ; CHECK-P7-NEXT:    xxlxor f0, f0, f0
624 ; CHECK-P7-NEXT:    # kill: def $f1 killed $f1 def $vsl1
625 ; CHECK-P7-NEXT:    xxmrghd vs0, vs1, vs0
626 ; CHECK-P7-NEXT:    xxswapd vs0, vs0
627 ; CHECK-P7-NEXT:    stxvd2x vs0, 0, r30
629 ; P8-AIX-64-LABEL: no_crash_elt0_from_RHS:
630 ; P8-AIX-64:       # %bb.0: # %test_entry
631 ; P8-AIX-64-NEXT:    mflr r0
632 ; P8-AIX-64-NEXT:    stdu r1, -128(r1)
633 ; P8-AIX-64-NEXT:    std r0, 144(r1)
634 ; P8-AIX-64-NEXT:    std r31, 120(r1) # 8-byte Folded Spill
635 ; P8-AIX-64-NEXT:    mr r31, r3
636 ; P8-AIX-64-NEXT:    bl .dummy[PR]
637 ; P8-AIX-64-NEXT:    nop
638 ; P8-AIX-64-NEXT:    xxlxor f0, f0, f0
639 ; P8-AIX-64-NEXT:    # kill: def $f1 killed $f1 def $vsl1
640 ; P8-AIX-64-NEXT:    xxmrghd vs0, vs0, vs1
641 ; P8-AIX-64-NEXT:    stxvd2x vs0, 0, r31
643 ; P8-AIX-32-LABEL: no_crash_elt0_from_RHS:
644 ; P8-AIX-32:       # %bb.0: # %test_entry
645 ; P8-AIX-32-NEXT:    mflr r0
646 ; P8-AIX-32-NEXT:    stwu r1, -64(r1)
647 ; P8-AIX-32-NEXT:    stw r0, 72(r1)
648 ; P8-AIX-32-NEXT:    stw r31, 60(r1) # 4-byte Folded Spill
649 ; P8-AIX-32-NEXT:    mr r31, r3
650 ; P8-AIX-32-NEXT:    bl .dummy[PR]
651 ; P8-AIX-32-NEXT:    nop
652 ; P8-AIX-32-NEXT:    xxlxor f0, f0, f0
653 ; P8-AIX-32-NEXT:    # kill: def $f1 killed $f1 def $vsl1
654 ; P8-AIX-32-NEXT:    xxmrghd vs0, vs0, vs1
655 ; P8-AIX-32-NEXT:    stxvd2x vs0, 0, r31
656 test_entry:
657   %_div_result = tail call double @dummy()
658   %oldret = insertvalue { double, double } undef, double %_div_result, 0
659   %0 = extractvalue { double, double } %oldret, 0
660   %.splatinsert = insertelement <2 x double> undef, double %0, i32 0
661   %.splat = shufflevector <2 x double> %.splatinsert, <2 x double> undef, <2 x i32> zeroinitializer
662   %1 = shufflevector <2 x double> zeroinitializer, <2 x double> %.splat, <2 x i32> <i32 0, i32 3>
663   store <2 x double> %1, ptr %.vtx6, align 16
664   unreachable
667 define dso_local <16 x i8> @no_crash_bitcast(i32 %a) {
668 ; CHECK-P8-LABEL: no_crash_bitcast:
669 ; CHECK-P8:       # %bb.0: # %entry
670 ; CHECK-P8-NEXT:    mtvsrwz v2, r3
671 ; CHECK-P8-NEXT:    blr
673 ; CHECK-P9-LABEL: no_crash_bitcast:
674 ; CHECK-P9:       # %bb.0: # %entry
675 ; CHECK-P9-NEXT:    mtvsrwz v2, r3
676 ; CHECK-P9-NEXT:    blr
678 ; CHECK-P9-BE-LABEL: no_crash_bitcast:
679 ; CHECK-P9-BE:       # %bb.0: # %entry
680 ; CHECK-P9-BE-NEXT:    mtfprwz f0, r3
681 ; CHECK-P9-BE-NEXT:    xxmrghw v2, vs0, vs0
682 ; CHECK-P9-BE-NEXT:    blr
684 ; CHECK-NOVSX-LABEL: no_crash_bitcast:
685 ; CHECK-NOVSX:       # %bb.0: # %entry
686 ; CHECK-NOVSX-NEXT:    stw r3, -16(r1)
687 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
688 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI14_0@toc@l
689 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
690 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
691 ; CHECK-NOVSX-NEXT:    lvx v3, 0, r3
692 ; CHECK-NOVSX-NEXT:    vperm v2, v3, v3, v2
693 ; CHECK-NOVSX-NEXT:    blr
695 ; CHECK-P7-LABEL: no_crash_bitcast:
696 ; CHECK-P7:       # %bb.0: # %entry
697 ; CHECK-P7-NEXT:    stw r3, -16(r1)
698 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
699 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI14_0@toc@l
700 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
701 ; CHECK-P7-NEXT:    addi r3, r1, -16
702 ; CHECK-P7-NEXT:    xxswapd v2, vs0
703 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
704 ; CHECK-P7-NEXT:    xxswapd v3, vs0
705 ; CHECK-P7-NEXT:    vperm v2, v3, v3, v2
706 ; CHECK-P7-NEXT:    blr
708 ; P8-AIX-64-LABEL: no_crash_bitcast:
709 ; P8-AIX-64:       # %bb.0: # %entry
710 ; P8-AIX-64-NEXT:    mtfprwz f0, r3
711 ; P8-AIX-64-NEXT:    xxmrghw v2, vs0, vs0
712 ; P8-AIX-64-NEXT:    blr
714 ; P8-AIX-32-LABEL: no_crash_bitcast:
715 ; P8-AIX-32:       # %bb.0: # %entry
716 ; P8-AIX-32-NEXT:    stw r3, -16(r1)
717 ; P8-AIX-32-NEXT:    lwz r3, L..C0(r2) # %const.0
718 ; P8-AIX-32-NEXT:    lxvw4x v2, 0, r3
719 ; P8-AIX-32-NEXT:    addi r3, r1, -16
720 ; P8-AIX-32-NEXT:    lxvw4x v3, 0, r3
721 ; P8-AIX-32-NEXT:    vperm v2, v3, v3, v2
722 ; P8-AIX-32-NEXT:    blr
723 entry:
724   %cast = bitcast i32 %a to <4 x i8>
725   %ret = shufflevector <4 x i8> %cast, <4 x i8> undef, <16 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
726   ret <16 x i8> %ret
729 define dso_local <4 x i32> @replace_undefs_in_splat(<4 x i32> %a) local_unnamed_addr #0 {
730 ; CHECK-P8-LABEL: replace_undefs_in_splat:
731 ; CHECK-P8:       # %bb.0: # %entry
732 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
733 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI15_0@toc@l
734 ; CHECK-P8-NEXT:    lxvd2x v3, 0, r3
735 ; CHECK-P8-NEXT:    vmrgow v2, v3, v2
736 ; CHECK-P8-NEXT:    blr
738 ; CHECK-P9-LABEL: replace_undefs_in_splat:
739 ; CHECK-P9:       # %bb.0: # %entry
740 ; CHECK-P9-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
741 ; CHECK-P9-NEXT:    addi r3, r3, .LCPI15_0@toc@l
742 ; CHECK-P9-NEXT:    lxv v3, 0(r3)
743 ; CHECK-P9-NEXT:    vmrgow v2, v3, v2
744 ; CHECK-P9-NEXT:    blr
746 ; CHECK-P9-BE-LABEL: replace_undefs_in_splat:
747 ; CHECK-P9-BE:       # %bb.0: # %entry
748 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
749 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI15_0@toc@l
750 ; CHECK-P9-BE-NEXT:    lxv vs1, 0(r3)
751 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI15_1@toc@ha
752 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI15_1@toc@l
753 ; CHECK-P9-BE-NEXT:    lxv vs0, 0(r3)
754 ; CHECK-P9-BE-NEXT:    xxperm vs0, v2, vs1
755 ; CHECK-P9-BE-NEXT:    xxlor v2, vs0, vs0
756 ; CHECK-P9-BE-NEXT:    blr
758 ; CHECK-NOVSX-LABEL: replace_undefs_in_splat:
759 ; CHECK-NOVSX:       # %bb.0: # %entry
760 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
761 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI15_0@toc@l
762 ; CHECK-NOVSX-NEXT:    lvx v3, 0, r3
763 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI15_1@toc@ha
764 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI15_1@toc@l
765 ; CHECK-NOVSX-NEXT:    lvx v4, 0, r3
766 ; CHECK-NOVSX-NEXT:    vperm v2, v4, v2, v3
767 ; CHECK-NOVSX-NEXT:    blr
769 ; CHECK-P7-LABEL: replace_undefs_in_splat:
770 ; CHECK-P7:       # %bb.0: # %entry
771 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
772 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI15_0@toc@l
773 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
774 ; CHECK-P7-NEXT:    addis r3, r2, .LCPI15_1@toc@ha
775 ; CHECK-P7-NEXT:    addi r3, r3, .LCPI15_1@toc@l
776 ; CHECK-P7-NEXT:    xxswapd v3, vs0
777 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
778 ; CHECK-P7-NEXT:    xxswapd v4, vs0
779 ; CHECK-P7-NEXT:    vperm v2, v4, v2, v3
780 ; CHECK-P7-NEXT:    blr
782 ; P8-AIX-64-LABEL: replace_undefs_in_splat:
783 ; P8-AIX-64:       # %bb.0: # %entry
784 ; P8-AIX-64-NEXT:    ld r3, L..C1(r2) # %const.0
785 ; P8-AIX-64-NEXT:    lxvw4x v3, 0, r3
786 ; P8-AIX-64-NEXT:    ld r3, L..C2(r2) # %const.1
787 ; P8-AIX-64-NEXT:    lxvw4x v4, 0, r3
788 ; P8-AIX-64-NEXT:    vperm v2, v2, v4, v3
789 ; P8-AIX-64-NEXT:    blr
791 ; P8-AIX-32-LABEL: replace_undefs_in_splat:
792 ; P8-AIX-32:       # %bb.0: # %entry
793 ; P8-AIX-32-NEXT:    lwz r3, L..C1(r2) # %const.0
794 ; P8-AIX-32-NEXT:    lxvw4x v3, 0, r3
795 ; P8-AIX-32-NEXT:    lwz r3, L..C2(r2) # %const.1
796 ; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
797 ; P8-AIX-32-NEXT:    vperm v2, v2, v4, v3
798 ; P8-AIX-32-NEXT:    blr
799 entry:
800   %vecins1 = shufflevector <4 x i32> %a, <4 x i32> <i32 undef, i32 566, i32 undef, i32 566>, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
801   ret <4 x i32> %vecins1
804 define dso_local <16 x i8> @no_RAUW_in_combine_during_legalize(ptr nocapture readonly %ptr, i32 signext %offset) local_unnamed_addr #0 {
805 ; CHECK-P8-LABEL: no_RAUW_in_combine_during_legalize:
806 ; CHECK-P8:       # %bb.0: # %entry
807 ; CHECK-P8-NEXT:    sldi r4, r4, 2
808 ; CHECK-P8-NEXT:    xxlxor v3, v3, v3
809 ; CHECK-P8-NEXT:    lfiwzx f0, r3, r4
810 ; CHECK-P8-NEXT:    xxspltd v2, f0, 0
811 ; CHECK-P8-NEXT:    vmrglb v2, v3, v2
812 ; CHECK-P8-NEXT:    blr
814 ; CHECK-P9-LABEL: no_RAUW_in_combine_during_legalize:
815 ; CHECK-P9:       # %bb.0: # %entry
816 ; CHECK-P9-NEXT:    sldi r4, r4, 2
817 ; CHECK-P9-NEXT:    xxlxor v3, v3, v3
818 ; CHECK-P9-NEXT:    lfiwzx f0, r3, r4
819 ; CHECK-P9-NEXT:    xxspltd v2, f0, 0
820 ; CHECK-P9-NEXT:    vmrglb v2, v3, v2
821 ; CHECK-P9-NEXT:    blr
823 ; CHECK-P9-BE-LABEL: no_RAUW_in_combine_during_legalize:
824 ; CHECK-P9-BE:       # %bb.0: # %entry
825 ; CHECK-P9-BE-NEXT:    sldi r4, r4, 2
826 ; CHECK-P9-BE-NEXT:    xxlxor v3, v3, v3
827 ; CHECK-P9-BE-NEXT:    lxsiwzx v2, r3, r4
828 ; CHECK-P9-BE-NEXT:    vmrghb v2, v2, v3
829 ; CHECK-P9-BE-NEXT:    blr
831 ; CHECK-NOVSX-LABEL: no_RAUW_in_combine_during_legalize:
832 ; CHECK-NOVSX:       # %bb.0: # %entry
833 ; CHECK-NOVSX-NEXT:    sldi r4, r4, 2
834 ; CHECK-NOVSX-NEXT:    vxor v3, v3, v3
835 ; CHECK-NOVSX-NEXT:    lwzx r3, r3, r4
836 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
837 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
838 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
839 ; CHECK-NOVSX-NEXT:    vmrglb v2, v3, v2
840 ; CHECK-NOVSX-NEXT:    blr
842 ; CHECK-P7-LABEL: no_RAUW_in_combine_during_legalize:
843 ; CHECK-P7:       # %bb.0: # %entry
844 ; CHECK-P7-NEXT:    sldi r4, r4, 2
845 ; CHECK-P7-NEXT:    xxlxor v3, v3, v3
846 ; CHECK-P7-NEXT:    lfiwzx f0, r3, r4
847 ; CHECK-P7-NEXT:    xxspltd v2, f0, 0
848 ; CHECK-P7-NEXT:    vmrglb v2, v3, v2
849 ; CHECK-P7-NEXT:    blr
851 ; P8-AIX-64-LABEL: no_RAUW_in_combine_during_legalize:
852 ; P8-AIX-64:       # %bb.0: # %entry
853 ; P8-AIX-64-NEXT:    sldi r4, r4, 2
854 ; P8-AIX-64-NEXT:    xxlxor v3, v3, v3
855 ; P8-AIX-64-NEXT:    lxsiwzx v2, r3, r4
856 ; P8-AIX-64-NEXT:    vmrghb v2, v2, v3
857 ; P8-AIX-64-NEXT:    blr
859 ; P8-AIX-32-LABEL: no_RAUW_in_combine_during_legalize:
860 ; P8-AIX-32:       # %bb.0: # %entry
861 ; P8-AIX-32-NEXT:    slwi r4, r4, 2
862 ; P8-AIX-32-NEXT:    xxlxor v3, v3, v3
863 ; P8-AIX-32-NEXT:    lwzx r3, r3, r4
864 ; P8-AIX-32-NEXT:    li r4, 0
865 ; P8-AIX-32-NEXT:    stw r4, -32(r1)
866 ; P8-AIX-32-NEXT:    stw r3, -16(r1)
867 ; P8-AIX-32-NEXT:    addi r3, r1, -32
868 ; P8-AIX-32-NEXT:    lxvw4x vs0, 0, r3
869 ; P8-AIX-32-NEXT:    addi r3, r1, -16
870 ; P8-AIX-32-NEXT:    lxvw4x vs1, 0, r3
871 ; P8-AIX-32-NEXT:    xxmrghw v2, vs0, vs1
872 ; P8-AIX-32-NEXT:    vmrghb v2, v2, v3
873 ; P8-AIX-32-NEXT:    blr
874 entry:
875   %idx.ext = sext i32 %offset to i64
876   %add.ptr = getelementptr inbounds i32, ptr %ptr, i64 %idx.ext
877   %0 = load i32, ptr %add.ptr, align 4
878   %conv = zext i32 %0 to i64
879   %splat.splatinsert = insertelement <2 x i64> undef, i64 %conv, i32 0
880   %1 = bitcast <2 x i64> %splat.splatinsert to <16 x i8>
881   %shuffle = shufflevector <16 x i8> %1, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
882   ret <16 x i8> %shuffle
885 define dso_local <4 x i32> @testSplat4Low(ptr nocapture readonly %ptr) local_unnamed_addr #0 {
886 ; CHECK-P8-LABEL: testSplat4Low:
887 ; CHECK-P8:       # %bb.0: # %entry
888 ; CHECK-P8-NEXT:    lfdx f0, 0, r3
889 ; CHECK-P8-NEXT:    xxspltw v2, vs0, 0
890 ; CHECK-P8-NEXT:    blr
892 ; CHECK-P9-LABEL: testSplat4Low:
893 ; CHECK-P9:       # %bb.0: # %entry
894 ; CHECK-P9-NEXT:    addi r3, r3, 4
895 ; CHECK-P9-NEXT:    lxvwsx v2, 0, r3
896 ; CHECK-P9-NEXT:    blr
898 ; CHECK-P9-BE-LABEL: testSplat4Low:
899 ; CHECK-P9-BE:       # %bb.0: # %entry
900 ; CHECK-P9-BE-NEXT:    addi r3, r3, 4
901 ; CHECK-P9-BE-NEXT:    lxvwsx v2, 0, r3
902 ; CHECK-P9-BE-NEXT:    blr
904 ; CHECK-NOVSX-LABEL: testSplat4Low:
905 ; CHECK-NOVSX:       # %bb.0: # %entry
906 ; CHECK-NOVSX-NEXT:    ld r3, 0(r3)
907 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
908 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
909 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
910 ; CHECK-NOVSX-NEXT:    vspltw v2, v2, 2
911 ; CHECK-NOVSX-NEXT:    blr
913 ; CHECK-P7-LABEL: testSplat4Low:
914 ; CHECK-P7:       # %bb.0: # %entry
915 ; CHECK-P7-NEXT:    ld r3, 0(r3)
916 ; CHECK-P7-NEXT:    std r3, -16(r1)
917 ; CHECK-P7-NEXT:    addi r3, r1, -16
918 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
919 ; CHECK-P7-NEXT:    xxswapd v2, vs0
920 ; CHECK-P7-NEXT:    xxspltw v2, v2, 2
921 ; CHECK-P7-NEXT:    blr
923 ; P8-AIX-64-LABEL: testSplat4Low:
924 ; P8-AIX-64:       # %bb.0: # %entry
925 ; P8-AIX-64-NEXT:    lfdx f0, 0, r3
926 ; P8-AIX-64-NEXT:    xxspltw v2, vs0, 1
927 ; P8-AIX-64-NEXT:    blr
929 ; P8-AIX-32-LABEL: testSplat4Low:
930 ; P8-AIX-32:       # %bb.0: # %entry
931 ; P8-AIX-32-NEXT:    addi r3, r3, 4
932 ; P8-AIX-32-NEXT:    lfiwzx f0, 0, r3
933 ; P8-AIX-32-NEXT:    xxspltw v2, vs0, 1
934 ; P8-AIX-32-NEXT:    blr
935 entry:
936   %0 = load <8 x i8>, ptr %ptr, align 8
937   %vecinit18 = shufflevector <8 x i8> %0, <8 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
938   %1 = bitcast <16 x i8> %vecinit18 to <4 x i32>
939   ret <4 x i32> %1
942 ; Function Attrs: norecurse nounwind readonly
943 define dso_local <4 x i32> @testSplat4hi(ptr nocapture readonly %ptr) local_unnamed_addr #0 {
944 ; CHECK-P8-LABEL: testSplat4hi:
945 ; CHECK-P8:       # %bb.0: # %entry
946 ; CHECK-P8-NEXT:    lfdx f0, 0, r3
947 ; CHECK-P8-NEXT:    xxspltw v2, vs0, 1
948 ; CHECK-P8-NEXT:    blr
950 ; CHECK-P9-LABEL: testSplat4hi:
951 ; CHECK-P9:       # %bb.0: # %entry
952 ; CHECK-P9-NEXT:    lxvwsx v2, 0, r3
953 ; CHECK-P9-NEXT:    blr
955 ; CHECK-P9-BE-LABEL: testSplat4hi:
956 ; CHECK-P9-BE:       # %bb.0: # %entry
957 ; CHECK-P9-BE-NEXT:    lxvwsx v2, 0, r3
958 ; CHECK-P9-BE-NEXT:    blr
960 ; CHECK-NOVSX-LABEL: testSplat4hi:
961 ; CHECK-NOVSX:       # %bb.0: # %entry
962 ; CHECK-NOVSX-NEXT:    ld r3, 0(r3)
963 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
964 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
965 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
966 ; CHECK-NOVSX-NEXT:    vspltw v2, v2, 3
967 ; CHECK-NOVSX-NEXT:    blr
969 ; CHECK-P7-LABEL: testSplat4hi:
970 ; CHECK-P7:       # %bb.0: # %entry
971 ; CHECK-P7-NEXT:    ld r3, 0(r3)
972 ; CHECK-P7-NEXT:    std r3, -16(r1)
973 ; CHECK-P7-NEXT:    addi r3, r1, -16
974 ; CHECK-P7-NEXT:    lxvd2x vs0, 0, r3
975 ; CHECK-P7-NEXT:    xxswapd v2, vs0
976 ; CHECK-P7-NEXT:    xxspltw v2, v2, 3
977 ; CHECK-P7-NEXT:    blr
979 ; P8-AIX-64-LABEL: testSplat4hi:
980 ; P8-AIX-64:       # %bb.0: # %entry
981 ; P8-AIX-64-NEXT:    lfdx f0, 0, r3
982 ; P8-AIX-64-NEXT:    xxspltw v2, vs0, 0
983 ; P8-AIX-64-NEXT:    blr
985 ; P8-AIX-32-LABEL: testSplat4hi:
986 ; P8-AIX-32:       # %bb.0: # %entry
987 ; P8-AIX-32-NEXT:    lfiwzx f0, 0, r3
988 ; P8-AIX-32-NEXT:    xxspltw v2, vs0, 1
989 ; P8-AIX-32-NEXT:    blr
990 entry:
991   %0 = load <8 x i8>, ptr %ptr, align 8
992   %vecinit22 = shufflevector <8 x i8> %0, <8 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
993   %1 = bitcast <16 x i8> %vecinit22 to <4 x i32>
994   ret <4 x i32> %1
997 ; Function Attrs: norecurse nounwind readonly
998 define dso_local <2 x i64> @testSplat8(ptr nocapture readonly %ptr) local_unnamed_addr #0 {
999 ; CHECK-P8-LABEL: testSplat8:
1000 ; CHECK-P8:       # %bb.0: # %entry
1001 ; CHECK-P8-NEXT:    lxvdsx v2, 0, r3
1002 ; CHECK-P8-NEXT:    blr
1004 ; CHECK-P9-LABEL: testSplat8:
1005 ; CHECK-P9:       # %bb.0: # %entry
1006 ; CHECK-P9-NEXT:    lxvdsx v2, 0, r3
1007 ; CHECK-P9-NEXT:    blr
1009 ; CHECK-P9-BE-LABEL: testSplat8:
1010 ; CHECK-P9-BE:       # %bb.0: # %entry
1011 ; CHECK-P9-BE-NEXT:    lxvdsx v2, 0, r3
1012 ; CHECK-P9-BE-NEXT:    blr
1014 ; CHECK-NOVSX-LABEL: testSplat8:
1015 ; CHECK-NOVSX:       # %bb.0: # %entry
1016 ; CHECK-NOVSX-NEXT:    ld r3, 0(r3)
1017 ; CHECK-NOVSX-NEXT:    std r3, -8(r1)
1018 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
1019 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
1020 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
1021 ; CHECK-NOVSX-NEXT:    blr
1023 ; CHECK-P7-LABEL: testSplat8:
1024 ; CHECK-P7:       # %bb.0: # %entry
1025 ; CHECK-P7-NEXT:    lxvdsx v2, 0, r3
1026 ; CHECK-P7-NEXT:    blr
1028 ; P8-AIX-64-LABEL: testSplat8:
1029 ; P8-AIX-64:       # %bb.0: # %entry
1030 ; P8-AIX-64-NEXT:    lxvdsx v2, 0, r3
1031 ; P8-AIX-64-NEXT:    blr
1033 ; P8-AIX-32-LABEL: testSplat8:
1034 ; P8-AIX-32:       # %bb.0: # %entry
1035 ; P8-AIX-32-NEXT:    lwz r4, 4(r3)
1036 ; P8-AIX-32-NEXT:    stw r4, -16(r1)
1037 ; P8-AIX-32-NEXT:    lwz r3, 0(r3)
1038 ; P8-AIX-32-NEXT:    stw r3, -32(r1)
1039 ; P8-AIX-32-NEXT:    addi r3, r1, -16
1040 ; P8-AIX-32-NEXT:    lxvw4x vs0, 0, r3
1041 ; P8-AIX-32-NEXT:    addi r3, r1, -32
1042 ; P8-AIX-32-NEXT:    lxvw4x vs1, 0, r3
1043 ; P8-AIX-32-NEXT:    xxmrghw vs0, vs1, vs0
1044 ; P8-AIX-32-NEXT:    xxmrghd v2, vs0, vs0
1045 ; P8-AIX-32-NEXT:    blr
1046 entry:
1047   %0 = load <8 x i8>, ptr %ptr, align 8
1048   %vecinit30 = shufflevector <8 x i8> %0, <8 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1049   %1 = bitcast <16 x i8> %vecinit30 to <2 x i64>
1050   ret <2 x i64> %1
1053 define <2 x i64> @testSplati64_0(ptr nocapture readonly %ptr) #0 {
1054 ; CHECK-P8-LABEL: testSplati64_0:
1055 ; CHECK-P8:       # %bb.0: # %entry
1056 ; CHECK-P8-NEXT:    lxvdsx v2, 0, r3
1057 ; CHECK-P8-NEXT:    blr
1059 ; CHECK-P9-LABEL: testSplati64_0:
1060 ; CHECK-P9:       # %bb.0: # %entry
1061 ; CHECK-P9-NEXT:    lxvdsx v2, 0, r3
1062 ; CHECK-P9-NEXT:    blr
1064 ; CHECK-P9-BE-LABEL: testSplati64_0:
1065 ; CHECK-P9-BE:       # %bb.0: # %entry
1066 ; CHECK-P9-BE-NEXT:    lxvdsx v2, 0, r3
1067 ; CHECK-P9-BE-NEXT:    blr
1069 ; CHECK-NOVSX-LABEL: testSplati64_0:
1070 ; CHECK-NOVSX:       # %bb.0: # %entry
1071 ; CHECK-NOVSX-NEXT:    ld r3, 0(r3)
1072 ; CHECK-NOVSX-NEXT:    std r3, -8(r1)
1073 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
1074 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
1075 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
1076 ; CHECK-NOVSX-NEXT:    blr
1078 ; CHECK-P7-LABEL: testSplati64_0:
1079 ; CHECK-P7:       # %bb.0: # %entry
1080 ; CHECK-P7-NEXT:    lxvdsx v2, 0, r3
1081 ; CHECK-P7-NEXT:    blr
1083 ; P8-AIX-64-LABEL: testSplati64_0:
1084 ; P8-AIX-64:       # %bb.0: # %entry
1085 ; P8-AIX-64-NEXT:    lxvdsx v2, 0, r3
1086 ; P8-AIX-64-NEXT:    blr
1088 ; P8-AIX-32-LABEL: testSplati64_0:
1089 ; P8-AIX-32:       # %bb.0: # %entry
1090 ; P8-AIX-32-NEXT:    lwz r4, 0(r3)
1091 ; P8-AIX-32-NEXT:    lwz r3, 4(r3)
1092 ; P8-AIX-32-NEXT:    stw r3, -16(r1)
1093 ; P8-AIX-32-NEXT:    lwz r3, L..C3(r2) # %const.0
1094 ; P8-AIX-32-NEXT:    stw r4, -32(r1)
1095 ; P8-AIX-32-NEXT:    lxvw4x v2, 0, r3
1096 ; P8-AIX-32-NEXT:    addi r3, r1, -16
1097 ; P8-AIX-32-NEXT:    lxvw4x v3, 0, r3
1098 ; P8-AIX-32-NEXT:    addi r3, r1, -32
1099 ; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
1100 ; P8-AIX-32-NEXT:    vperm v2, v4, v3, v2
1101 ; P8-AIX-32-NEXT:    blr
1102 entry:
1103   %0 = load <1 x i64>, ptr %ptr, align 8
1104   %1 = shufflevector <1 x i64> %0, <1 x i64> undef, <2 x i32> <i32 0, i32 0>
1105   ret <2 x i64> %1
1108 define <2 x i64> @testSplati64_1(ptr nocapture readonly %ptr) #0 {
1109 ; CHECK-P8-LABEL: testSplati64_1:
1110 ; CHECK-P8:       # %bb.0: # %entry
1111 ; CHECK-P8-NEXT:    addi r3, r3, 8
1112 ; CHECK-P8-NEXT:    lxvdsx v2, 0, r3
1113 ; CHECK-P8-NEXT:    blr
1115 ; CHECK-P9-LABEL: testSplati64_1:
1116 ; CHECK-P9:       # %bb.0: # %entry
1117 ; CHECK-P9-NEXT:    addi r3, r3, 8
1118 ; CHECK-P9-NEXT:    lxvdsx v2, 0, r3
1119 ; CHECK-P9-NEXT:    blr
1121 ; CHECK-P9-BE-LABEL: testSplati64_1:
1122 ; CHECK-P9-BE:       # %bb.0: # %entry
1123 ; CHECK-P9-BE-NEXT:    addi r3, r3, 8
1124 ; CHECK-P9-BE-NEXT:    lxvdsx v2, 0, r3
1125 ; CHECK-P9-BE-NEXT:    blr
1127 ; CHECK-NOVSX-LABEL: testSplati64_1:
1128 ; CHECK-NOVSX:       # %bb.0: # %entry
1129 ; CHECK-NOVSX-NEXT:    ld r4, 8(r3)
1130 ; CHECK-NOVSX-NEXT:    std r4, -8(r1)
1131 ; CHECK-NOVSX-NEXT:    ld r3, 0(r3)
1132 ; CHECK-NOVSX-NEXT:    std r3, -16(r1)
1133 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
1134 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
1135 ; CHECK-NOVSX-NEXT:    addis r3, r2, .LCPI21_0@toc@ha
1136 ; CHECK-NOVSX-NEXT:    addi r3, r3, .LCPI21_0@toc@l
1137 ; CHECK-NOVSX-NEXT:    lvx v3, 0, r3
1138 ; CHECK-NOVSX-NEXT:    vperm v2, v2, v2, v3
1139 ; CHECK-NOVSX-NEXT:    blr
1141 ; CHECK-P7-LABEL: testSplati64_1:
1142 ; CHECK-P7:       # %bb.0: # %entry
1143 ; CHECK-P7-NEXT:    addi r3, r3, 8
1144 ; CHECK-P7-NEXT:    lxvdsx v2, 0, r3
1145 ; CHECK-P7-NEXT:    blr
1147 ; P8-AIX-LABEL: testSplati64_1:
1148 ; P8-AIX:       # %bb.0: # %entry
1149 ; P8-AIX-NEXT:    addi r3, r3, 8
1150 ; P8-AIX-NEXT:    lxvdsx v2, 0, r3
1151 ; P8-AIX-NEXT:    blr
1152 entry:
1153   %0 = load <2 x i64>, ptr %ptr, align 8
1154   %1 = shufflevector <2 x i64> %0, <2 x i64> undef, <2 x i32> <i32 1, i32 1>
1155   ret <2 x i64> %1
1158 define dso_local void @testByteSplat() #0 {
1159 ; CHECK-P8-LABEL: testByteSplat:
1160 ; CHECK-P8:       # %bb.0: # %entry
1161 ; CHECK-P8-NEXT:    lbzx r3, 0, r3
1162 ; CHECK-P8-NEXT:    mtvsrwz v2, r3
1163 ; CHECK-P8-NEXT:    vspltb v2, v2, 7
1164 ; CHECK-P8-NEXT:    xxswapd vs0, v2
1165 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r3
1166 ; CHECK-P8-NEXT:    blr
1168 ; CHECK-P9-LABEL: testByteSplat:
1169 ; CHECK-P9:       # %bb.0: # %entry
1170 ; CHECK-P9-NEXT:    lxsibzx v2, 0, r3
1171 ; CHECK-P9-NEXT:    vspltb v2, v2, 7
1172 ; CHECK-P9-NEXT:    stxv v2, 0(r3)
1173 ; CHECK-P9-NEXT:    blr
1175 ; CHECK-P9-BE-LABEL: testByteSplat:
1176 ; CHECK-P9-BE:       # %bb.0: # %entry
1177 ; CHECK-P9-BE-NEXT:    lxsibzx v2, 0, r3
1178 ; CHECK-P9-BE-NEXT:    vspltb v2, v2, 7
1179 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r3)
1180 ; CHECK-P9-BE-NEXT:    blr
1182 ; CHECK-NOVSX-LABEL: testByteSplat:
1183 ; CHECK-NOVSX:       # %bb.0: # %entry
1184 ; CHECK-NOVSX-NEXT:    lbz r3, 0(r3)
1185 ; CHECK-NOVSX-NEXT:    stb r3, -16(r1)
1186 ; CHECK-NOVSX-NEXT:    addi r3, r1, -16
1187 ; CHECK-NOVSX-NEXT:    lvx v2, 0, r3
1188 ; CHECK-NOVSX-NEXT:    vspltb v2, v2, 15
1189 ; CHECK-NOVSX-NEXT:    stvx v2, 0, r3
1190 ; CHECK-NOVSX-NEXT:    blr
1192 ; CHECK-P7-LABEL: testByteSplat:
1193 ; CHECK-P7:       # %bb.0: # %entry
1194 ; CHECK-P7-NEXT:    lvsr v2, 0, r3
1195 ; CHECK-P7-NEXT:    lvx v3, 0, r3
1196 ; CHECK-P7-NEXT:    vperm v2, v3, v3, v2
1197 ; CHECK-P7-NEXT:    vspltb v2, v2, 15
1198 ; CHECK-P7-NEXT:    stxvd2x v2, 0, r3
1199 ; CHECK-P7-NEXT:    blr
1201 ; P8-AIX-LABEL: testByteSplat:
1202 ; P8-AIX:       # %bb.0: # %entry
1203 ; P8-AIX-NEXT:    lbzx r3, 0, r3
1204 ; P8-AIX-NEXT:    mtvsrwz v2, r3
1205 ; P8-AIX-NEXT:    vspltb v2, v2, 7
1206 ; P8-AIX-NEXT:    stxvw4x v2, 0, r3
1207 ; P8-AIX-NEXT:    blr
1208 entry:
1209   %0 = load i8, ptr undef, align 1
1210   %splat.splatinsert.i = insertelement <16 x i8> poison, i8 %0, i32 0
1211   %splat.splat.i = shufflevector <16 x i8> %splat.splatinsert.i, <16 x i8> poison, <16 x i32> zeroinitializer
1212   store <16 x i8> %splat.splat.i, ptr undef, align 16
1213   ret void
1216 declare double @dummy() local_unnamed_addr
1217 attributes #0 = { nounwind }