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-BE
12 define <2 x double> @test2elt(i32 %a.coerce) local_unnamed_addr #0 {
13 ; CHECK-P8-LABEL: test2elt:
14 ; CHECK-P8: # %bb.0: # %entry
15 ; CHECK-P8-NEXT: addis r4, r2, .LCPI0_0@toc@ha
16 ; CHECK-P8-NEXT: mtvsrwz v2, r3
17 ; CHECK-P8-NEXT: addi r4, r4, .LCPI0_0@toc@l
18 ; CHECK-P8-NEXT: xxlxor v4, v4, v4
19 ; CHECK-P8-NEXT: lvx v3, 0, r4
20 ; CHECK-P8-NEXT: vperm v2, v4, v2, v3
21 ; CHECK-P8-NEXT: xvcvuxddp v2, v2
24 ; CHECK-P9-LABEL: test2elt:
25 ; CHECK-P9: # %bb.0: # %entry
26 ; CHECK-P9-NEXT: mtvsrwz v2, r3
27 ; CHECK-P9-NEXT: addis r3, r2, .LCPI0_0@toc@ha
28 ; CHECK-P9-NEXT: xxlxor v4, v4, v4
29 ; CHECK-P9-NEXT: addi r3, r3, .LCPI0_0@toc@l
30 ; CHECK-P9-NEXT: lxv v3, 0(r3)
31 ; CHECK-P9-NEXT: vperm v2, v4, v2, v3
32 ; CHECK-P9-NEXT: xvcvuxddp v2, v2
35 ; CHECK-BE-LABEL: test2elt:
36 ; CHECK-BE: # %bb.0: # %entry
37 ; CHECK-BE-NEXT: mtvsrwz v2, r3
38 ; CHECK-BE-NEXT: addis r3, r2, .LCPI0_0@toc@ha
39 ; CHECK-BE-NEXT: xxlxor v4, v4, v4
40 ; CHECK-BE-NEXT: addi r3, r3, .LCPI0_0@toc@l
41 ; CHECK-BE-NEXT: lxv v3, 0(r3)
42 ; CHECK-BE-NEXT: vperm v2, v4, v2, v3
43 ; CHECK-BE-NEXT: xvcvuxddp v2, v2
46 %0 = bitcast i32 %a.coerce to <2 x i16>
47 %1 = uitofp <2 x i16> %0 to <2 x double>
51 define void @test4elt(<4 x double>* noalias nocapture sret(<4 x double>) %agg.result, i64 %a.coerce) local_unnamed_addr #1 {
52 ; CHECK-P8-LABEL: test4elt:
53 ; CHECK-P8: # %bb.0: # %entry
54 ; CHECK-P8-NEXT: addis r5, r2, .LCPI1_0@toc@ha
55 ; CHECK-P8-NEXT: addis r6, r2, .LCPI1_1@toc@ha
56 ; CHECK-P8-NEXT: mtvsrd v2, r4
57 ; CHECK-P8-NEXT: addi r5, r5, .LCPI1_0@toc@l
58 ; CHECK-P8-NEXT: addi r4, r6, .LCPI1_1@toc@l
59 ; CHECK-P8-NEXT: xxlxor v4, v4, v4
60 ; CHECK-P8-NEXT: lvx v3, 0, r5
61 ; CHECK-P8-NEXT: lvx v5, 0, r4
62 ; CHECK-P8-NEXT: li r4, 16
63 ; CHECK-P8-NEXT: vperm v3, v4, v2, v3
64 ; CHECK-P8-NEXT: vperm v2, v4, v2, v5
65 ; CHECK-P8-NEXT: xvcvuxddp vs0, v3
66 ; CHECK-P8-NEXT: xvcvuxddp vs1, v2
67 ; CHECK-P8-NEXT: xxswapd vs0, vs0
68 ; CHECK-P8-NEXT: xxswapd vs1, vs1
69 ; CHECK-P8-NEXT: stxvd2x vs1, r3, r4
70 ; CHECK-P8-NEXT: stxvd2x vs0, 0, r3
73 ; CHECK-P9-LABEL: test4elt:
74 ; CHECK-P9: # %bb.0: # %entry
75 ; CHECK-P9-NEXT: mtvsrd v2, r4
76 ; CHECK-P9-NEXT: addis r4, r2, .LCPI1_0@toc@ha
77 ; CHECK-P9-NEXT: xxlxor v4, v4, v4
78 ; CHECK-P9-NEXT: addi r4, r4, .LCPI1_0@toc@l
79 ; CHECK-P9-NEXT: lxv v3, 0(r4)
80 ; CHECK-P9-NEXT: addis r4, r2, .LCPI1_1@toc@ha
81 ; CHECK-P9-NEXT: addi r4, r4, .LCPI1_1@toc@l
82 ; CHECK-P9-NEXT: vperm v3, v4, v2, v3
83 ; CHECK-P9-NEXT: xvcvuxddp vs0, v3
84 ; CHECK-P9-NEXT: lxv v3, 0(r4)
85 ; CHECK-P9-NEXT: vperm v2, v4, v2, v3
86 ; CHECK-P9-NEXT: stxv vs0, 0(r3)
87 ; CHECK-P9-NEXT: xvcvuxddp vs1, v2
88 ; CHECK-P9-NEXT: stxv vs1, 16(r3)
91 ; CHECK-BE-LABEL: test4elt:
92 ; CHECK-BE: # %bb.0: # %entry
93 ; CHECK-BE-NEXT: mtvsrd v2, r4
94 ; CHECK-BE-NEXT: addis r4, r2, .LCPI1_0@toc@ha
95 ; CHECK-BE-NEXT: xxlxor v4, v4, v4
96 ; CHECK-BE-NEXT: addi r4, r4, .LCPI1_0@toc@l
97 ; CHECK-BE-NEXT: lxv v3, 0(r4)
98 ; CHECK-BE-NEXT: addis r4, r2, .LCPI1_1@toc@ha
99 ; CHECK-BE-NEXT: addi r4, r4, .LCPI1_1@toc@l
100 ; CHECK-BE-NEXT: vperm v3, v4, v2, v3
101 ; CHECK-BE-NEXT: xvcvuxddp vs0, v3
102 ; CHECK-BE-NEXT: lxv v3, 0(r4)
103 ; CHECK-BE-NEXT: vperm v2, v4, v2, v3
104 ; CHECK-BE-NEXT: stxv vs0, 0(r3)
105 ; CHECK-BE-NEXT: xvcvuxddp vs1, v2
106 ; CHECK-BE-NEXT: stxv vs1, 16(r3)
109 %0 = bitcast i64 %a.coerce to <4 x i16>
110 %1 = uitofp <4 x i16> %0 to <4 x double>
111 store <4 x double> %1, <4 x double>* %agg.result, align 32
115 define void @test8elt(<8 x double>* noalias nocapture sret(<8 x double>) %agg.result, <8 x i16> %a) local_unnamed_addr #2 {
116 ; CHECK-P8-LABEL: test8elt:
117 ; CHECK-P8: # %bb.0: # %entry
118 ; CHECK-P8-NEXT: addis r4, r2, .LCPI2_0@toc@ha
119 ; CHECK-P8-NEXT: addis r5, r2, .LCPI2_2@toc@ha
120 ; CHECK-P8-NEXT: xxlxor v4, v4, v4
121 ; CHECK-P8-NEXT: addi r4, r4, .LCPI2_0@toc@l
122 ; CHECK-P8-NEXT: addi r5, r5, .LCPI2_2@toc@l
123 ; CHECK-P8-NEXT: lvx v3, 0, r4
124 ; CHECK-P8-NEXT: addis r4, r2, .LCPI2_3@toc@ha
125 ; CHECK-P8-NEXT: lvx v5, 0, r5
126 ; CHECK-P8-NEXT: addis r5, r2, .LCPI2_1@toc@ha
127 ; CHECK-P8-NEXT: addi r4, r4, .LCPI2_3@toc@l
128 ; CHECK-P8-NEXT: addi r5, r5, .LCPI2_1@toc@l
129 ; CHECK-P8-NEXT: lvx v0, 0, r4
130 ; CHECK-P8-NEXT: lvx v1, 0, r5
131 ; CHECK-P8-NEXT: li r4, 48
132 ; CHECK-P8-NEXT: li r5, 32
133 ; CHECK-P8-NEXT: vperm v3, v4, v2, v3
134 ; CHECK-P8-NEXT: vperm v5, v4, v2, v5
135 ; CHECK-P8-NEXT: vperm v0, v4, v2, v0
136 ; CHECK-P8-NEXT: vperm v2, v4, v2, v1
137 ; CHECK-P8-NEXT: xvcvuxddp vs0, v3
138 ; CHECK-P8-NEXT: xvcvuxddp vs1, v5
139 ; CHECK-P8-NEXT: xvcvuxddp vs2, v0
140 ; CHECK-P8-NEXT: xvcvuxddp vs3, v2
141 ; CHECK-P8-NEXT: xxswapd vs0, vs0
142 ; CHECK-P8-NEXT: xxswapd vs1, vs1
143 ; CHECK-P8-NEXT: xxswapd vs2, vs2
144 ; CHECK-P8-NEXT: xxswapd vs3, vs3
145 ; CHECK-P8-NEXT: stxvd2x vs2, r3, r4
146 ; CHECK-P8-NEXT: li r4, 16
147 ; CHECK-P8-NEXT: stxvd2x vs1, r3, r5
148 ; CHECK-P8-NEXT: stxvd2x vs3, r3, r4
149 ; CHECK-P8-NEXT: stxvd2x vs0, 0, r3
152 ; CHECK-P9-LABEL: test8elt:
153 ; CHECK-P9: # %bb.0: # %entry
154 ; CHECK-P9-NEXT: addis r4, r2, .LCPI2_0@toc@ha
155 ; CHECK-P9-NEXT: xxlxor v4, v4, v4
156 ; CHECK-P9-NEXT: addi r4, r4, .LCPI2_0@toc@l
157 ; CHECK-P9-NEXT: lxv v3, 0(r4)
158 ; CHECK-P9-NEXT: addis r4, r2, .LCPI2_1@toc@ha
159 ; CHECK-P9-NEXT: addi r4, r4, .LCPI2_1@toc@l
160 ; CHECK-P9-NEXT: vperm v3, v4, v2, v3
161 ; CHECK-P9-NEXT: xvcvuxddp vs0, v3
162 ; CHECK-P9-NEXT: lxv v3, 0(r4)
163 ; CHECK-P9-NEXT: addis r4, r2, .LCPI2_2@toc@ha
164 ; CHECK-P9-NEXT: addi r4, r4, .LCPI2_2@toc@l
165 ; CHECK-P9-NEXT: vperm v3, v4, v2, v3
166 ; CHECK-P9-NEXT: stxv vs0, 0(r3)
167 ; CHECK-P9-NEXT: xvcvuxddp vs1, v3
168 ; CHECK-P9-NEXT: lxv v3, 0(r4)
169 ; CHECK-P9-NEXT: addis r4, r2, .LCPI2_3@toc@ha
170 ; CHECK-P9-NEXT: addi r4, r4, .LCPI2_3@toc@l
171 ; CHECK-P9-NEXT: vperm v3, v4, v2, v3
172 ; CHECK-P9-NEXT: stxv vs1, 16(r3)
173 ; CHECK-P9-NEXT: xvcvuxddp vs2, v3
174 ; CHECK-P9-NEXT: lxv v3, 0(r4)
175 ; CHECK-P9-NEXT: vperm v2, v4, v2, v3
176 ; CHECK-P9-NEXT: stxv vs2, 32(r3)
177 ; CHECK-P9-NEXT: xvcvuxddp vs3, v2
178 ; CHECK-P9-NEXT: stxv vs3, 48(r3)
181 ; CHECK-BE-LABEL: test8elt:
182 ; CHECK-BE: # %bb.0: # %entry
183 ; CHECK-BE-NEXT: addis r4, r2, .LCPI2_0@toc@ha
184 ; CHECK-BE-NEXT: xxlxor v4, v4, v4
185 ; CHECK-BE-NEXT: addi r4, r4, .LCPI2_0@toc@l
186 ; CHECK-BE-NEXT: lxv v3, 0(r4)
187 ; CHECK-BE-NEXT: addis r4, r2, .LCPI2_1@toc@ha
188 ; CHECK-BE-NEXT: addi r4, r4, .LCPI2_1@toc@l
189 ; CHECK-BE-NEXT: vperm v3, v4, v2, v3
190 ; CHECK-BE-NEXT: xvcvuxddp vs0, v3
191 ; CHECK-BE-NEXT: lxv v3, 0(r4)
192 ; CHECK-BE-NEXT: addis r4, r2, .LCPI2_2@toc@ha
193 ; CHECK-BE-NEXT: addi r4, r4, .LCPI2_2@toc@l
194 ; CHECK-BE-NEXT: vperm v3, v4, v2, v3
195 ; CHECK-BE-NEXT: stxv vs0, 0(r3)
196 ; CHECK-BE-NEXT: xvcvuxddp vs1, v3
197 ; CHECK-BE-NEXT: lxv v3, 0(r4)
198 ; CHECK-BE-NEXT: addis r4, r2, .LCPI2_3@toc@ha
199 ; CHECK-BE-NEXT: addi r4, r4, .LCPI2_3@toc@l
200 ; CHECK-BE-NEXT: vperm v3, v4, v2, v3
201 ; CHECK-BE-NEXT: stxv vs1, 16(r3)
202 ; CHECK-BE-NEXT: xvcvuxddp vs2, v3
203 ; CHECK-BE-NEXT: lxv v3, 0(r4)
204 ; CHECK-BE-NEXT: vperm v2, v4, v2, v3
205 ; CHECK-BE-NEXT: stxv vs2, 32(r3)
206 ; CHECK-BE-NEXT: xvcvuxddp vs3, v2
207 ; CHECK-BE-NEXT: stxv vs3, 48(r3)
210 %0 = uitofp <8 x i16> %a to <8 x double>
211 store <8 x double> %0, <8 x double>* %agg.result, align 64
215 define void @test16elt(<16 x double>* noalias nocapture sret(<16 x double>) %agg.result, <16 x i16>* nocapture readonly) local_unnamed_addr #3 {
216 ; CHECK-P8-LABEL: test16elt:
217 ; CHECK-P8: # %bb.0: # %entry
218 ; CHECK-P8-NEXT: addis r6, r2, .LCPI3_2@toc@ha
219 ; CHECK-P8-NEXT: addis r5, r2, .LCPI3_0@toc@ha
220 ; CHECK-P8-NEXT: lvx v4, 0, r4
221 ; CHECK-P8-NEXT: xxlxor v3, v3, v3
222 ; CHECK-P8-NEXT: addi r6, r6, .LCPI3_2@toc@l
223 ; CHECK-P8-NEXT: addi r5, r5, .LCPI3_0@toc@l
224 ; CHECK-P8-NEXT: lvx v5, 0, r6
225 ; CHECK-P8-NEXT: li r6, 16
226 ; CHECK-P8-NEXT: lvx v2, 0, r5
227 ; CHECK-P8-NEXT: addis r5, r2, .LCPI3_1@toc@ha
228 ; CHECK-P8-NEXT: lvx v0, r4, r6
229 ; CHECK-P8-NEXT: addis r4, r2, .LCPI3_3@toc@ha
230 ; CHECK-P8-NEXT: addi r5, r5, .LCPI3_1@toc@l
231 ; CHECK-P8-NEXT: addi r4, r4, .LCPI3_3@toc@l
232 ; CHECK-P8-NEXT: lvx v1, 0, r5
233 ; CHECK-P8-NEXT: li r5, 96
234 ; CHECK-P8-NEXT: lvx v8, 0, r4
235 ; CHECK-P8-NEXT: vperm v6, v3, v4, v2
236 ; CHECK-P8-NEXT: li r4, 112
237 ; CHECK-P8-NEXT: vperm v7, v3, v4, v5
238 ; CHECK-P8-NEXT: vperm v2, v3, v0, v2
239 ; CHECK-P8-NEXT: vperm v9, v3, v0, v1
240 ; CHECK-P8-NEXT: vperm v5, v3, v0, v5
241 ; CHECK-P8-NEXT: vperm v0, v3, v0, v8
242 ; CHECK-P8-NEXT: vperm v1, v3, v4, v1
243 ; CHECK-P8-NEXT: vperm v3, v3, v4, v8
244 ; CHECK-P8-NEXT: xvcvuxddp vs1, v2
245 ; CHECK-P8-NEXT: xvcvuxddp vs4, v9
246 ; CHECK-P8-NEXT: xvcvuxddp vs2, v5
247 ; CHECK-P8-NEXT: xvcvuxddp vs3, v0
248 ; CHECK-P8-NEXT: xvcvuxddp vs0, v7
249 ; CHECK-P8-NEXT: xvcvuxddp vs5, v3
250 ; CHECK-P8-NEXT: xvcvuxddp vs6, v6
251 ; CHECK-P8-NEXT: xxswapd vs1, vs1
252 ; CHECK-P8-NEXT: xvcvuxddp vs7, v1
253 ; CHECK-P8-NEXT: xxswapd vs4, vs4
254 ; CHECK-P8-NEXT: xxswapd vs2, vs2
255 ; CHECK-P8-NEXT: xxswapd vs3, vs3
256 ; CHECK-P8-NEXT: xxswapd vs0, vs0
257 ; CHECK-P8-NEXT: xxswapd vs5, vs5
258 ; CHECK-P8-NEXT: stxvd2x vs3, r3, r4
259 ; CHECK-P8-NEXT: stxvd2x vs2, r3, r5
260 ; CHECK-P8-NEXT: li r4, 80
261 ; CHECK-P8-NEXT: li r5, 64
262 ; CHECK-P8-NEXT: xxswapd vs2, vs7
263 ; CHECK-P8-NEXT: xxswapd vs3, vs6
264 ; CHECK-P8-NEXT: stxvd2x vs4, r3, r4
265 ; CHECK-P8-NEXT: li r4, 48
266 ; CHECK-P8-NEXT: stxvd2x vs1, r3, r5
267 ; CHECK-P8-NEXT: li r5, 32
268 ; CHECK-P8-NEXT: stxvd2x vs5, r3, r4
269 ; CHECK-P8-NEXT: stxvd2x vs0, r3, r5
270 ; CHECK-P8-NEXT: stxvd2x vs2, r3, r6
271 ; CHECK-P8-NEXT: stxvd2x vs3, 0, r3
274 ; CHECK-P9-LABEL: test16elt:
275 ; CHECK-P9: # %bb.0: # %entry
276 ; CHECK-P9-NEXT: lxv v2, 16(r4)
277 ; CHECK-P9-NEXT: lxv v3, 0(r4)
278 ; CHECK-P9-NEXT: addis r4, r2, .LCPI3_0@toc@ha
279 ; CHECK-P9-NEXT: xxlxor v5, v5, v5
280 ; CHECK-P9-NEXT: addi r4, r4, .LCPI3_0@toc@l
281 ; CHECK-P9-NEXT: lxv v4, 0(r4)
282 ; CHECK-P9-NEXT: addis r4, r2, .LCPI3_1@toc@ha
283 ; CHECK-P9-NEXT: addi r4, r4, .LCPI3_1@toc@l
284 ; CHECK-P9-NEXT: vperm v0, v5, v3, v4
285 ; CHECK-P9-NEXT: xvcvuxddp vs0, v0
286 ; CHECK-P9-NEXT: lxv v0, 0(r4)
287 ; CHECK-P9-NEXT: addis r4, r2, .LCPI3_2@toc@ha
288 ; CHECK-P9-NEXT: addi r4, r4, .LCPI3_2@toc@l
289 ; CHECK-P9-NEXT: vperm v1, v5, v3, v0
290 ; CHECK-P9-NEXT: stxv vs0, 0(r3)
291 ; CHECK-P9-NEXT: xvcvuxddp vs1, v1
292 ; CHECK-P9-NEXT: lxv v1, 0(r4)
293 ; CHECK-P9-NEXT: addis r4, r2, .LCPI3_3@toc@ha
294 ; CHECK-P9-NEXT: addi r4, r4, .LCPI3_3@toc@l
295 ; CHECK-P9-NEXT: vperm v6, v5, v3, v1
296 ; CHECK-P9-NEXT: stxv vs1, 16(r3)
297 ; CHECK-P9-NEXT: xvcvuxddp vs2, v6
298 ; CHECK-P9-NEXT: lxv v6, 0(r4)
299 ; CHECK-P9-NEXT: vperm v3, v5, v3, v6
300 ; CHECK-P9-NEXT: stxv vs2, 32(r3)
301 ; CHECK-P9-NEXT: xvcvuxddp vs3, v3
302 ; CHECK-P9-NEXT: vperm v3, v5, v2, v4
303 ; CHECK-P9-NEXT: xvcvuxddp vs4, v3
304 ; CHECK-P9-NEXT: vperm v3, v5, v2, v0
305 ; CHECK-P9-NEXT: xvcvuxddp vs5, v3
306 ; CHECK-P9-NEXT: vperm v3, v5, v2, v1
307 ; CHECK-P9-NEXT: vperm v2, v5, v2, v6
308 ; CHECK-P9-NEXT: stxv vs3, 48(r3)
309 ; CHECK-P9-NEXT: xvcvuxddp vs6, v3
310 ; CHECK-P9-NEXT: xvcvuxddp vs7, v2
311 ; CHECK-P9-NEXT: stxv vs4, 64(r3)
312 ; CHECK-P9-NEXT: stxv vs5, 80(r3)
313 ; CHECK-P9-NEXT: stxv vs7, 112(r3)
314 ; CHECK-P9-NEXT: stxv vs6, 96(r3)
317 ; CHECK-BE-LABEL: test16elt:
318 ; CHECK-BE: # %bb.0: # %entry
319 ; CHECK-BE-NEXT: lxv v2, 16(r4)
320 ; CHECK-BE-NEXT: lxv v3, 0(r4)
321 ; CHECK-BE-NEXT: addis r4, r2, .LCPI3_0@toc@ha
322 ; CHECK-BE-NEXT: xxlxor v5, v5, v5
323 ; CHECK-BE-NEXT: addi r4, r4, .LCPI3_0@toc@l
324 ; CHECK-BE-NEXT: lxv v4, 0(r4)
325 ; CHECK-BE-NEXT: addis r4, r2, .LCPI3_1@toc@ha
326 ; CHECK-BE-NEXT: addi r4, r4, .LCPI3_1@toc@l
327 ; CHECK-BE-NEXT: vperm v0, v5, v3, v4
328 ; CHECK-BE-NEXT: xvcvuxddp vs0, v0
329 ; CHECK-BE-NEXT: lxv v0, 0(r4)
330 ; CHECK-BE-NEXT: addis r4, r2, .LCPI3_2@toc@ha
331 ; CHECK-BE-NEXT: addi r4, r4, .LCPI3_2@toc@l
332 ; CHECK-BE-NEXT: vperm v1, v5, v3, v0
333 ; CHECK-BE-NEXT: stxv vs0, 0(r3)
334 ; CHECK-BE-NEXT: xvcvuxddp vs1, v1
335 ; CHECK-BE-NEXT: lxv v1, 0(r4)
336 ; CHECK-BE-NEXT: addis r4, r2, .LCPI3_3@toc@ha
337 ; CHECK-BE-NEXT: addi r4, r4, .LCPI3_3@toc@l
338 ; CHECK-BE-NEXT: vperm v6, v5, v3, v1
339 ; CHECK-BE-NEXT: stxv vs1, 16(r3)
340 ; CHECK-BE-NEXT: xvcvuxddp vs2, v6
341 ; CHECK-BE-NEXT: lxv v6, 0(r4)
342 ; CHECK-BE-NEXT: vperm v3, v5, v3, v6
343 ; CHECK-BE-NEXT: stxv vs2, 32(r3)
344 ; CHECK-BE-NEXT: xvcvuxddp vs3, v3
345 ; CHECK-BE-NEXT: vperm v3, v5, v2, v4
346 ; CHECK-BE-NEXT: xvcvuxddp vs4, v3
347 ; CHECK-BE-NEXT: vperm v3, v5, v2, v0
348 ; CHECK-BE-NEXT: xvcvuxddp vs5, v3
349 ; CHECK-BE-NEXT: vperm v3, v5, v2, v1
350 ; CHECK-BE-NEXT: vperm v2, v5, v2, v6
351 ; CHECK-BE-NEXT: stxv vs3, 48(r3)
352 ; CHECK-BE-NEXT: xvcvuxddp vs6, v3
353 ; CHECK-BE-NEXT: xvcvuxddp vs7, v2
354 ; CHECK-BE-NEXT: stxv vs4, 64(r3)
355 ; CHECK-BE-NEXT: stxv vs5, 80(r3)
356 ; CHECK-BE-NEXT: stxv vs7, 112(r3)
357 ; CHECK-BE-NEXT: stxv vs6, 96(r3)
360 %a = load <16 x i16>, <16 x i16>* %0, align 32
361 %1 = uitofp <16 x i16> %a to <16 x double>
362 store <16 x double> %1, <16 x double>* %agg.result, align 128
366 define <2 x double> @test2elt_signed(i32 %a.coerce) local_unnamed_addr #0 {
367 ; CHECK-P8-LABEL: test2elt_signed:
368 ; CHECK-P8: # %bb.0: # %entry
369 ; CHECK-P8-NEXT: addis r4, r2, .LCPI4_0@toc@ha
370 ; CHECK-P8-NEXT: mtvsrwz v3, r3
371 ; CHECK-P8-NEXT: addis r3, r2, .LCPI4_1@toc@ha
372 ; CHECK-P8-NEXT: addi r4, r4, .LCPI4_0@toc@l
373 ; CHECK-P8-NEXT: addi r3, r3, .LCPI4_1@toc@l
374 ; CHECK-P8-NEXT: lvx v2, 0, r4
375 ; CHECK-P8-NEXT: lxvd2x vs0, 0, r3
376 ; CHECK-P8-NEXT: vperm v2, v3, v3, v2
377 ; CHECK-P8-NEXT: xxswapd v3, vs0
378 ; CHECK-P8-NEXT: vsld v2, v2, v3
379 ; CHECK-P8-NEXT: vsrad v2, v2, v3
380 ; CHECK-P8-NEXT: xvcvsxddp v2, v2
383 ; CHECK-P9-LABEL: test2elt_signed:
384 ; CHECK-P9: # %bb.0: # %entry
385 ; CHECK-P9-NEXT: mtvsrwz v2, r3
386 ; CHECK-P9-NEXT: addis r3, r2, .LCPI4_0@toc@ha
387 ; CHECK-P9-NEXT: addi r3, r3, .LCPI4_0@toc@l
388 ; CHECK-P9-NEXT: lxv v3, 0(r3)
389 ; CHECK-P9-NEXT: vperm v2, v2, v2, v3
390 ; CHECK-P9-NEXT: vextsh2d v2, v2
391 ; CHECK-P9-NEXT: xvcvsxddp v2, v2
394 ; CHECK-BE-LABEL: test2elt_signed:
395 ; CHECK-BE: # %bb.0: # %entry
396 ; CHECK-BE-NEXT: mtvsrwz v2, r3
397 ; CHECK-BE-NEXT: addis r3, r2, .LCPI4_0@toc@ha
398 ; CHECK-BE-NEXT: addi r3, r3, .LCPI4_0@toc@l
399 ; CHECK-BE-NEXT: lxv v3, 0(r3)
400 ; CHECK-BE-NEXT: vperm v2, v2, v2, v3
401 ; CHECK-BE-NEXT: vextsh2d v2, v2
402 ; CHECK-BE-NEXT: xvcvsxddp v2, v2
405 %0 = bitcast i32 %a.coerce to <2 x i16>
406 %1 = sitofp <2 x i16> %0 to <2 x double>
410 define void @test4elt_signed(<4 x double>* noalias nocapture sret(<4 x double>) %agg.result, i64 %a.coerce) local_unnamed_addr #1 {
411 ; CHECK-P8-LABEL: test4elt_signed:
412 ; CHECK-P8: # %bb.0: # %entry
413 ; CHECK-P8-NEXT: addis r5, r2, .LCPI5_0@toc@ha
414 ; CHECK-P8-NEXT: addis r6, r2, .LCPI5_2@toc@ha
415 ; CHECK-P8-NEXT: mtvsrd v3, r4
416 ; CHECK-P8-NEXT: addis r4, r2, .LCPI5_1@toc@ha
417 ; CHECK-P8-NEXT: addi r5, r5, .LCPI5_0@toc@l
418 ; CHECK-P8-NEXT: addi r4, r4, .LCPI5_1@toc@l
419 ; CHECK-P8-NEXT: lvx v2, 0, r5
420 ; CHECK-P8-NEXT: addi r5, r6, .LCPI5_2@toc@l
421 ; CHECK-P8-NEXT: lxvd2x vs0, 0, r4
422 ; CHECK-P8-NEXT: li r4, 16
423 ; CHECK-P8-NEXT: lvx v4, 0, r5
424 ; CHECK-P8-NEXT: vperm v2, v3, v3, v2
425 ; CHECK-P8-NEXT: vperm v3, v3, v3, v4
426 ; CHECK-P8-NEXT: xxswapd v4, vs0
427 ; CHECK-P8-NEXT: vsld v2, v2, v4
428 ; CHECK-P8-NEXT: vsld v3, v3, v4
429 ; CHECK-P8-NEXT: vsrad v2, v2, v4
430 ; CHECK-P8-NEXT: vsrad v3, v3, v4
431 ; CHECK-P8-NEXT: xvcvsxddp vs0, v2
432 ; CHECK-P8-NEXT: xvcvsxddp vs1, v3
433 ; CHECK-P8-NEXT: xxswapd vs0, vs0
434 ; CHECK-P8-NEXT: xxswapd vs1, vs1
435 ; CHECK-P8-NEXT: stxvd2x vs1, r3, r4
436 ; CHECK-P8-NEXT: stxvd2x vs0, 0, r3
439 ; CHECK-P9-LABEL: test4elt_signed:
440 ; CHECK-P9: # %bb.0: # %entry
441 ; CHECK-P9-NEXT: mtvsrd v2, r4
442 ; CHECK-P9-NEXT: addis r4, r2, .LCPI5_0@toc@ha
443 ; CHECK-P9-NEXT: addi r4, r4, .LCPI5_0@toc@l
444 ; CHECK-P9-NEXT: lxv v3, 0(r4)
445 ; CHECK-P9-NEXT: addis r4, r2, .LCPI5_1@toc@ha
446 ; CHECK-P9-NEXT: addi r4, r4, .LCPI5_1@toc@l
447 ; CHECK-P9-NEXT: vperm v3, v2, v2, v3
448 ; CHECK-P9-NEXT: vextsh2d v3, v3
449 ; CHECK-P9-NEXT: xvcvsxddp vs0, v3
450 ; CHECK-P9-NEXT: lxv v3, 0(r4)
451 ; CHECK-P9-NEXT: vperm v2, v2, v2, v3
452 ; CHECK-P9-NEXT: stxv vs0, 0(r3)
453 ; CHECK-P9-NEXT: vextsh2d v2, v2
454 ; CHECK-P9-NEXT: xvcvsxddp vs1, v2
455 ; CHECK-P9-NEXT: stxv vs1, 16(r3)
458 ; CHECK-BE-LABEL: test4elt_signed:
459 ; CHECK-BE: # %bb.0: # %entry
460 ; CHECK-BE-NEXT: mtvsrd v2, r4
461 ; CHECK-BE-NEXT: addis r4, r2, .LCPI5_0@toc@ha
462 ; CHECK-BE-NEXT: xxlxor v3, v3, v3
463 ; CHECK-BE-NEXT: addi r4, r4, .LCPI5_0@toc@l
464 ; CHECK-BE-NEXT: lxv v4, 0(r4)
465 ; CHECK-BE-NEXT: addis r4, r2, .LCPI5_1@toc@ha
466 ; CHECK-BE-NEXT: addi r4, r4, .LCPI5_1@toc@l
467 ; CHECK-BE-NEXT: vperm v3, v3, v2, v4
468 ; CHECK-BE-NEXT: vextsh2d v3, v3
469 ; CHECK-BE-NEXT: xvcvsxddp vs0, v3
470 ; CHECK-BE-NEXT: lxv v3, 0(r4)
471 ; CHECK-BE-NEXT: vperm v2, v2, v2, v3
472 ; CHECK-BE-NEXT: stxv vs0, 16(r3)
473 ; CHECK-BE-NEXT: vextsh2d v2, v2
474 ; CHECK-BE-NEXT: xvcvsxddp vs1, v2
475 ; CHECK-BE-NEXT: stxv vs1, 0(r3)
478 %0 = bitcast i64 %a.coerce to <4 x i16>
479 %1 = sitofp <4 x i16> %0 to <4 x double>
480 store <4 x double> %1, <4 x double>* %agg.result, align 32
484 define void @test8elt_signed(<8 x double>* noalias nocapture sret(<8 x double>) %agg.result, <8 x i16> %a) local_unnamed_addr #2 {
485 ; CHECK-P8-LABEL: test8elt_signed:
486 ; CHECK-P8: # %bb.0: # %entry
487 ; CHECK-P8-NEXT: addis r5, r2, .LCPI6_2@toc@ha
488 ; CHECK-P8-NEXT: addis r4, r2, .LCPI6_0@toc@ha
489 ; CHECK-P8-NEXT: addis r6, r2, .LCPI6_3@toc@ha
490 ; CHECK-P8-NEXT: addi r5, r5, .LCPI6_2@toc@l
491 ; CHECK-P8-NEXT: addi r4, r4, .LCPI6_0@toc@l
492 ; CHECK-P8-NEXT: addi r6, r6, .LCPI6_3@toc@l
493 ; CHECK-P8-NEXT: lvx v4, 0, r5
494 ; CHECK-P8-NEXT: addis r5, r2, .LCPI6_4@toc@ha
495 ; CHECK-P8-NEXT: lvx v3, 0, r4
496 ; CHECK-P8-NEXT: lvx v5, 0, r6
497 ; CHECK-P8-NEXT: addis r4, r2, .LCPI6_1@toc@ha
498 ; CHECK-P8-NEXT: addi r5, r5, .LCPI6_4@toc@l
499 ; CHECK-P8-NEXT: addi r4, r4, .LCPI6_1@toc@l
500 ; CHECK-P8-NEXT: lvx v0, 0, r5
501 ; CHECK-P8-NEXT: lxvd2x vs0, 0, r4
502 ; CHECK-P8-NEXT: li r4, 48
503 ; CHECK-P8-NEXT: li r5, 32
504 ; CHECK-P8-NEXT: vperm v3, v2, v2, v3
505 ; CHECK-P8-NEXT: vperm v4, v2, v2, v4
506 ; CHECK-P8-NEXT: vperm v5, v2, v2, v5
507 ; CHECK-P8-NEXT: vperm v2, v2, v2, v0
508 ; CHECK-P8-NEXT: xxswapd v0, vs0
509 ; CHECK-P8-NEXT: vsld v3, v3, v0
510 ; CHECK-P8-NEXT: vsld v4, v4, v0
511 ; CHECK-P8-NEXT: vsld v5, v5, v0
512 ; CHECK-P8-NEXT: vsld v2, v2, v0
513 ; CHECK-P8-NEXT: vsrad v3, v3, v0
514 ; CHECK-P8-NEXT: vsrad v2, v2, v0
515 ; CHECK-P8-NEXT: vsrad v4, v4, v0
516 ; CHECK-P8-NEXT: vsrad v5, v5, v0
517 ; CHECK-P8-NEXT: xvcvsxddp vs2, v2
518 ; CHECK-P8-NEXT: xvcvsxddp vs0, v3
519 ; CHECK-P8-NEXT: xvcvsxddp vs1, v5
520 ; CHECK-P8-NEXT: xvcvsxddp vs3, v4
521 ; CHECK-P8-NEXT: xxswapd vs2, vs2
522 ; CHECK-P8-NEXT: xxswapd vs0, vs0
523 ; CHECK-P8-NEXT: xxswapd vs1, vs1
524 ; CHECK-P8-NEXT: xxswapd vs3, vs3
525 ; CHECK-P8-NEXT: stxvd2x vs2, r3, r4
526 ; CHECK-P8-NEXT: li r4, 16
527 ; CHECK-P8-NEXT: stxvd2x vs1, r3, r5
528 ; CHECK-P8-NEXT: stxvd2x vs3, r3, r4
529 ; CHECK-P8-NEXT: stxvd2x vs0, 0, r3
532 ; CHECK-P9-LABEL: test8elt_signed:
533 ; CHECK-P9: # %bb.0: # %entry
534 ; CHECK-P9-NEXT: addis r4, r2, .LCPI6_0@toc@ha
535 ; CHECK-P9-NEXT: addi r4, r4, .LCPI6_0@toc@l
536 ; CHECK-P9-NEXT: lxv v3, 0(r4)
537 ; CHECK-P9-NEXT: addis r4, r2, .LCPI6_1@toc@ha
538 ; CHECK-P9-NEXT: addi r4, r4, .LCPI6_1@toc@l
539 ; CHECK-P9-NEXT: vperm v3, v2, v2, v3
540 ; CHECK-P9-NEXT: vextsh2d v3, v3
541 ; CHECK-P9-NEXT: xvcvsxddp vs0, v3
542 ; CHECK-P9-NEXT: lxv v3, 0(r4)
543 ; CHECK-P9-NEXT: addis r4, r2, .LCPI6_2@toc@ha
544 ; CHECK-P9-NEXT: addi r4, r4, .LCPI6_2@toc@l
545 ; CHECK-P9-NEXT: vperm v3, v2, v2, v3
546 ; CHECK-P9-NEXT: stxv vs0, 0(r3)
547 ; CHECK-P9-NEXT: vextsh2d v3, v3
548 ; CHECK-P9-NEXT: xvcvsxddp vs1, v3
549 ; CHECK-P9-NEXT: lxv v3, 0(r4)
550 ; CHECK-P9-NEXT: addis r4, r2, .LCPI6_3@toc@ha
551 ; CHECK-P9-NEXT: addi r4, r4, .LCPI6_3@toc@l
552 ; CHECK-P9-NEXT: vperm v3, v2, v2, v3
553 ; CHECK-P9-NEXT: stxv vs1, 16(r3)
554 ; CHECK-P9-NEXT: vextsh2d v3, v3
555 ; CHECK-P9-NEXT: xvcvsxddp vs2, v3
556 ; CHECK-P9-NEXT: lxv v3, 0(r4)
557 ; CHECK-P9-NEXT: vperm v2, v2, v2, v3
558 ; CHECK-P9-NEXT: stxv vs2, 32(r3)
559 ; CHECK-P9-NEXT: vextsh2d v2, v2
560 ; CHECK-P9-NEXT: xvcvsxddp vs3, v2
561 ; CHECK-P9-NEXT: stxv vs3, 48(r3)
564 ; CHECK-BE-LABEL: test8elt_signed:
565 ; CHECK-BE: # %bb.0: # %entry
566 ; CHECK-BE-NEXT: addis r4, r2, .LCPI6_0@toc@ha
567 ; CHECK-BE-NEXT: xxlxor v4, v4, v4
568 ; CHECK-BE-NEXT: addi r4, r4, .LCPI6_0@toc@l
569 ; CHECK-BE-NEXT: lxv v3, 0(r4)
570 ; CHECK-BE-NEXT: addis r4, r2, .LCPI6_1@toc@ha
571 ; CHECK-BE-NEXT: addi r4, r4, .LCPI6_1@toc@l
572 ; CHECK-BE-NEXT: vperm v3, v4, v2, v3
573 ; CHECK-BE-NEXT: vextsh2d v3, v3
574 ; CHECK-BE-NEXT: xvcvsxddp vs0, v3
575 ; CHECK-BE-NEXT: lxv v3, 0(r4)
576 ; CHECK-BE-NEXT: addis r4, r2, .LCPI6_2@toc@ha
577 ; CHECK-BE-NEXT: addi r4, r4, .LCPI6_2@toc@l
578 ; CHECK-BE-NEXT: vperm v3, v4, v2, v3
579 ; CHECK-BE-NEXT: stxv vs0, 16(r3)
580 ; CHECK-BE-NEXT: vextsh2d v3, v3
581 ; CHECK-BE-NEXT: xvcvsxddp vs1, v3
582 ; CHECK-BE-NEXT: lxv v3, 0(r4)
583 ; CHECK-BE-NEXT: addis r4, r2, .LCPI6_3@toc@ha
584 ; CHECK-BE-NEXT: addi r4, r4, .LCPI6_3@toc@l
585 ; CHECK-BE-NEXT: vperm v3, v2, v2, v3
586 ; CHECK-BE-NEXT: stxv vs1, 48(r3)
587 ; CHECK-BE-NEXT: vextsh2d v3, v3
588 ; CHECK-BE-NEXT: xvcvsxddp vs2, v3
589 ; CHECK-BE-NEXT: lxv v3, 0(r4)
590 ; CHECK-BE-NEXT: vperm v2, v2, v2, v3
591 ; CHECK-BE-NEXT: stxv vs2, 0(r3)
592 ; CHECK-BE-NEXT: vextsh2d v2, v2
593 ; CHECK-BE-NEXT: xvcvsxddp vs3, v2
594 ; CHECK-BE-NEXT: stxv vs3, 32(r3)
597 %0 = sitofp <8 x i16> %a to <8 x double>
598 store <8 x double> %0, <8 x double>* %agg.result, align 64
602 define void @test16elt_signed(<16 x double>* noalias nocapture sret(<16 x double>) %agg.result, <16 x i16>* nocapture readonly) local_unnamed_addr #3 {
603 ; CHECK-P8-LABEL: test16elt_signed:
604 ; CHECK-P8: # %bb.0: # %entry
605 ; CHECK-P8-NEXT: addis r5, r2, .LCPI7_0@toc@ha
606 ; CHECK-P8-NEXT: addis r6, r2, .LCPI7_2@toc@ha
607 ; CHECK-P8-NEXT: lvx v4, 0, r4
608 ; CHECK-P8-NEXT: addi r5, r5, .LCPI7_0@toc@l
609 ; CHECK-P8-NEXT: addi r6, r6, .LCPI7_2@toc@l
610 ; CHECK-P8-NEXT: lvx v2, 0, r5
611 ; CHECK-P8-NEXT: addis r5, r2, .LCPI7_3@toc@ha
612 ; CHECK-P8-NEXT: lvx v3, 0, r6
613 ; CHECK-P8-NEXT: addis r6, r2, .LCPI7_4@toc@ha
614 ; CHECK-P8-NEXT: addi r5, r5, .LCPI7_3@toc@l
615 ; CHECK-P8-NEXT: addi r6, r6, .LCPI7_4@toc@l
616 ; CHECK-P8-NEXT: lvx v5, 0, r5
617 ; CHECK-P8-NEXT: lvx v0, 0, r6
618 ; CHECK-P8-NEXT: li r6, 16
619 ; CHECK-P8-NEXT: addis r5, r2, .LCPI7_1@toc@ha
620 ; CHECK-P8-NEXT: lvx v7, r4, r6
621 ; CHECK-P8-NEXT: addi r5, r5, .LCPI7_1@toc@l
622 ; CHECK-P8-NEXT: vperm v1, v4, v4, v2
623 ; CHECK-P8-NEXT: li r4, 112
624 ; CHECK-P8-NEXT: vperm v6, v4, v4, v3
625 ; CHECK-P8-NEXT: lxvd2x vs0, 0, r5
626 ; CHECK-P8-NEXT: li r5, 96
627 ; CHECK-P8-NEXT: vperm v8, v4, v4, v5
628 ; CHECK-P8-NEXT: vperm v4, v4, v4, v0
629 ; CHECK-P8-NEXT: vperm v5, v7, v7, v5
630 ; CHECK-P8-NEXT: xxswapd v9, vs0
631 ; CHECK-P8-NEXT: vperm v0, v7, v7, v0
632 ; CHECK-P8-NEXT: vperm v2, v7, v7, v2
633 ; CHECK-P8-NEXT: vperm v3, v7, v7, v3
634 ; CHECK-P8-NEXT: vsld v1, v1, v9
635 ; CHECK-P8-NEXT: vsld v6, v6, v9
636 ; CHECK-P8-NEXT: vsld v5, v5, v9
637 ; CHECK-P8-NEXT: vsld v0, v0, v9
638 ; CHECK-P8-NEXT: vsld v2, v2, v9
639 ; CHECK-P8-NEXT: vsld v3, v3, v9
640 ; CHECK-P8-NEXT: vsrad v5, v5, v9
641 ; CHECK-P8-NEXT: vsrad v0, v0, v9
642 ; CHECK-P8-NEXT: vsld v7, v8, v9
643 ; CHECK-P8-NEXT: vsld v4, v4, v9
644 ; CHECK-P8-NEXT: vsrad v2, v2, v9
645 ; CHECK-P8-NEXT: vsrad v3, v3, v9
646 ; CHECK-P8-NEXT: xvcvsxddp vs2, v5
647 ; CHECK-P8-NEXT: xvcvsxddp vs3, v0
648 ; CHECK-P8-NEXT: vsrad v1, v1, v9
649 ; CHECK-P8-NEXT: vsrad v6, v6, v9
650 ; CHECK-P8-NEXT: vsrad v7, v7, v9
651 ; CHECK-P8-NEXT: vsrad v4, v4, v9
652 ; CHECK-P8-NEXT: xvcvsxddp vs1, v2
653 ; CHECK-P8-NEXT: xxswapd vs2, vs2
654 ; CHECK-P8-NEXT: xvcvsxddp vs4, v3
655 ; CHECK-P8-NEXT: xxswapd vs3, vs3
656 ; CHECK-P8-NEXT: xvcvsxddp vs0, v7
657 ; CHECK-P8-NEXT: xvcvsxddp vs5, v4
658 ; CHECK-P8-NEXT: xvcvsxddp vs6, v1
659 ; CHECK-P8-NEXT: stxvd2x vs3, r3, r4
660 ; CHECK-P8-NEXT: li r4, 80
661 ; CHECK-P8-NEXT: xvcvsxddp vs7, v6
662 ; CHECK-P8-NEXT: stxvd2x vs2, r3, r5
663 ; CHECK-P8-NEXT: li r5, 64
664 ; CHECK-P8-NEXT: xxswapd vs1, vs1
665 ; CHECK-P8-NEXT: xxswapd vs4, vs4
666 ; CHECK-P8-NEXT: xxswapd vs0, vs0
667 ; CHECK-P8-NEXT: xxswapd vs5, vs5
668 ; CHECK-P8-NEXT: xxswapd vs3, vs6
669 ; CHECK-P8-NEXT: stxvd2x vs4, r3, r4
670 ; CHECK-P8-NEXT: li r4, 48
671 ; CHECK-P8-NEXT: xxswapd vs2, vs7
672 ; CHECK-P8-NEXT: stxvd2x vs1, r3, r5
673 ; CHECK-P8-NEXT: li r5, 32
674 ; CHECK-P8-NEXT: stxvd2x vs5, r3, r4
675 ; CHECK-P8-NEXT: stxvd2x vs0, r3, r5
676 ; CHECK-P8-NEXT: stxvd2x vs2, r3, r6
677 ; CHECK-P8-NEXT: stxvd2x vs3, 0, r3
680 ; CHECK-P9-LABEL: test16elt_signed:
681 ; CHECK-P9: # %bb.0: # %entry
682 ; CHECK-P9-NEXT: addis r5, r2, .LCPI7_0@toc@ha
683 ; CHECK-P9-NEXT: lxv v2, 0(r4)
684 ; CHECK-P9-NEXT: addi r5, r5, .LCPI7_0@toc@l
685 ; CHECK-P9-NEXT: lxv v3, 0(r5)
686 ; CHECK-P9-NEXT: addis r5, r2, .LCPI7_1@toc@ha
687 ; CHECK-P9-NEXT: addi r5, r5, .LCPI7_1@toc@l
688 ; CHECK-P9-NEXT: lxv v5, 0(r5)
689 ; CHECK-P9-NEXT: addis r5, r2, .LCPI7_2@toc@ha
690 ; CHECK-P9-NEXT: vperm v4, v2, v2, v3
691 ; CHECK-P9-NEXT: addi r5, r5, .LCPI7_2@toc@l
692 ; CHECK-P9-NEXT: vextsh2d v4, v4
693 ; CHECK-P9-NEXT: lxv v0, 0(r5)
694 ; CHECK-P9-NEXT: addis r5, r2, .LCPI7_3@toc@ha
695 ; CHECK-P9-NEXT: xvcvsxddp vs0, v4
696 ; CHECK-P9-NEXT: vperm v4, v2, v2, v5
697 ; CHECK-P9-NEXT: addi r5, r5, .LCPI7_3@toc@l
698 ; CHECK-P9-NEXT: lxv v1, 0(r5)
699 ; CHECK-P9-NEXT: vextsh2d v4, v4
700 ; CHECK-P9-NEXT: xvcvsxddp vs1, v4
701 ; CHECK-P9-NEXT: vperm v4, v2, v2, v0
702 ; CHECK-P9-NEXT: vperm v2, v2, v2, v1
703 ; CHECK-P9-NEXT: stxv vs0, 0(r3)
704 ; CHECK-P9-NEXT: vextsh2d v4, v4
705 ; CHECK-P9-NEXT: xvcvsxddp vs2, v4
706 ; CHECK-P9-NEXT: lxv v4, 16(r4)
707 ; CHECK-P9-NEXT: stxv vs1, 16(r3)
708 ; CHECK-P9-NEXT: vextsh2d v2, v2
709 ; CHECK-P9-NEXT: xvcvsxddp vs3, v2
710 ; CHECK-P9-NEXT: vperm v2, v4, v4, v3
711 ; CHECK-P9-NEXT: stxv vs2, 32(r3)
712 ; CHECK-P9-NEXT: vextsh2d v2, v2
713 ; CHECK-P9-NEXT: stxv vs3, 48(r3)
714 ; CHECK-P9-NEXT: xvcvsxddp vs4, v2
715 ; CHECK-P9-NEXT: vperm v2, v4, v4, v5
716 ; CHECK-P9-NEXT: vextsh2d v2, v2
717 ; CHECK-P9-NEXT: xvcvsxddp vs5, v2
718 ; CHECK-P9-NEXT: vperm v2, v4, v4, v0
719 ; CHECK-P9-NEXT: stxv vs4, 64(r3)
720 ; CHECK-P9-NEXT: vextsh2d v2, v2
721 ; CHECK-P9-NEXT: xvcvsxddp vs6, v2
722 ; CHECK-P9-NEXT: vperm v2, v4, v4, v1
723 ; CHECK-P9-NEXT: stxv vs5, 80(r3)
724 ; CHECK-P9-NEXT: vextsh2d v2, v2
725 ; CHECK-P9-NEXT: xvcvsxddp vs7, v2
726 ; CHECK-P9-NEXT: stxv vs6, 96(r3)
727 ; CHECK-P9-NEXT: stxv vs7, 112(r3)
730 ; CHECK-BE-LABEL: test16elt_signed:
731 ; CHECK-BE: # %bb.0: # %entry
732 ; CHECK-BE-NEXT: addis r5, r2, .LCPI7_0@toc@ha
733 ; CHECK-BE-NEXT: lxv v4, 0(r4)
734 ; CHECK-BE-NEXT: lxv v1, 16(r4)
735 ; CHECK-BE-NEXT: xxlxor v5, v5, v5
736 ; CHECK-BE-NEXT: addis r4, r2, .LCPI7_2@toc@ha
737 ; CHECK-BE-NEXT: addi r5, r5, .LCPI7_0@toc@l
738 ; CHECK-BE-NEXT: addi r4, r4, .LCPI7_2@toc@l
739 ; CHECK-BE-NEXT: lxv v2, 0(r5)
740 ; CHECK-BE-NEXT: addis r5, r2, .LCPI7_1@toc@ha
741 ; CHECK-BE-NEXT: addi r5, r5, .LCPI7_1@toc@l
742 ; CHECK-BE-NEXT: lxv v3, 0(r5)
743 ; CHECK-BE-NEXT: vperm v0, v5, v4, v2
744 ; CHECK-BE-NEXT: vperm v2, v5, v1, v2
745 ; CHECK-BE-NEXT: vextsh2d v2, v2
746 ; CHECK-BE-NEXT: vextsh2d v0, v0
747 ; CHECK-BE-NEXT: xvcvsxddp vs2, v2
748 ; CHECK-BE-NEXT: vperm v2, v5, v1, v3
749 ; CHECK-BE-NEXT: xvcvsxddp vs0, v0
750 ; CHECK-BE-NEXT: vperm v0, v5, v4, v3
751 ; CHECK-BE-NEXT: vextsh2d v2, v2
752 ; CHECK-BE-NEXT: vextsh2d v0, v0
753 ; CHECK-BE-NEXT: xvcvsxddp vs3, v2
754 ; CHECK-BE-NEXT: lxv v2, 0(r4)
755 ; CHECK-BE-NEXT: addis r4, r2, .LCPI7_3@toc@ha
756 ; CHECK-BE-NEXT: xvcvsxddp vs1, v0
757 ; CHECK-BE-NEXT: addi r4, r4, .LCPI7_3@toc@l
758 ; CHECK-BE-NEXT: stxv vs2, 80(r3)
759 ; CHECK-BE-NEXT: stxv vs0, 16(r3)
760 ; CHECK-BE-NEXT: vperm v3, v4, v4, v2
761 ; CHECK-BE-NEXT: vperm v2, v1, v1, v2
762 ; CHECK-BE-NEXT: stxv vs3, 112(r3)
763 ; CHECK-BE-NEXT: stxv vs1, 48(r3)
764 ; CHECK-BE-NEXT: vextsh2d v3, v3
765 ; CHECK-BE-NEXT: vextsh2d v2, v2
766 ; CHECK-BE-NEXT: xvcvsxddp vs4, v3
767 ; CHECK-BE-NEXT: lxv v3, 0(r4)
768 ; CHECK-BE-NEXT: xvcvsxddp vs6, v2
769 ; CHECK-BE-NEXT: vperm v4, v4, v4, v3
770 ; CHECK-BE-NEXT: vperm v2, v1, v1, v3
771 ; CHECK-BE-NEXT: stxv vs6, 64(r3)
772 ; CHECK-BE-NEXT: stxv vs4, 0(r3)
773 ; CHECK-BE-NEXT: vextsh2d v4, v4
774 ; CHECK-BE-NEXT: vextsh2d v2, v2
775 ; CHECK-BE-NEXT: xvcvsxddp vs5, v4
776 ; CHECK-BE-NEXT: xvcvsxddp vs7, v2
777 ; CHECK-BE-NEXT: stxv vs7, 96(r3)
778 ; CHECK-BE-NEXT: stxv vs5, 32(r3)
781 %a = load <16 x i16>, <16 x i16>* %0, align 32
782 %1 = sitofp <16 x i16> %a to <16 x double>
783 store <16 x double> %1, <16 x double>* %agg.result, align 128