1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-64
3 ; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix-xcoff -vec-extabi -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-32
4 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -mcpu=pwr10 < %s | FileCheck %s -check-prefix=CHECK-64-P10
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix-xcoff -vec-extabi -mcpu=pwr10 < %s | FileCheck %s -check-prefix=CHECK-32-P10
9 define <16 x i8> @testByte(<16 x i8> %a, i64 %b, i64 %idx) {
10 ; CHECK-64-LABEL: testByte:
11 ; CHECK-64: # %bb.0: # %entry
12 ; CHECK-64-NEXT: addi 5, 1, -16
13 ; CHECK-64-NEXT: clrldi 4, 4, 60
14 ; CHECK-64-NEXT: stxv 34, -16(1)
15 ; CHECK-64-NEXT: stbx 3, 5, 4
16 ; CHECK-64-NEXT: lxv 34, -16(1)
19 ; CHECK-32-LABEL: testByte:
20 ; CHECK-32: # %bb.0: # %entry
21 ; CHECK-32-NEXT: addi 5, 1, -16
22 ; CHECK-32-NEXT: clrlwi 3, 6, 28
23 ; CHECK-32-NEXT: stxv 34, -16(1)
24 ; CHECK-32-NEXT: stbx 4, 5, 3
25 ; CHECK-32-NEXT: lxv 34, -16(1)
28 ; CHECK-64-P10-LABEL: testByte:
29 ; CHECK-64-P10: # %bb.0: # %entry
30 ; CHECK-64-P10-NEXT: vinsblx 2, 4, 3
31 ; CHECK-64-P10-NEXT: blr
33 ; CHECK-32-P10-LABEL: testByte:
34 ; CHECK-32-P10: # %bb.0: # %entry
35 ; CHECK-32-P10-NEXT: vinsblx 2, 6, 4
36 ; CHECK-32-P10-NEXT: blr
38 %conv = trunc i64 %b to i8
39 %vecins = insertelement <16 x i8> %a, i8 %conv, i64 %idx
45 define <8 x i16> @testHalf(<8 x i16> %a, i64 %b, i64 %idx) {
46 ; CHECK-64-LABEL: testHalf:
47 ; CHECK-64: # %bb.0: # %entry
48 ; CHECK-64-NEXT: addi 5, 1, -16
49 ; CHECK-64-NEXT: rlwinm 4, 4, 1, 28, 30
50 ; CHECK-64-NEXT: stxv 34, -16(1)
51 ; CHECK-64-NEXT: sthx 3, 5, 4
52 ; CHECK-64-NEXT: lxv 34, -16(1)
55 ; CHECK-32-LABEL: testHalf:
56 ; CHECK-32: # %bb.0: # %entry
57 ; CHECK-32-NEXT: addi 5, 1, -16
58 ; CHECK-32-NEXT: rlwinm 3, 6, 1, 28, 30
59 ; CHECK-32-NEXT: stxv 34, -16(1)
60 ; CHECK-32-NEXT: sthx 4, 5, 3
61 ; CHECK-32-NEXT: lxv 34, -16(1)
64 ; CHECK-64-P10-LABEL: testHalf:
65 ; CHECK-64-P10: # %bb.0: # %entry
66 ; CHECK-64-P10-NEXT: slwi 4, 4, 1
67 ; CHECK-64-P10-NEXT: vinshlx 2, 4, 3
68 ; CHECK-64-P10-NEXT: blr
70 ; CHECK-32-P10-LABEL: testHalf:
71 ; CHECK-32-P10: # %bb.0: # %entry
72 ; CHECK-32-P10-NEXT: slwi 3, 6, 1
73 ; CHECK-32-P10-NEXT: vinshlx 2, 3, 4
74 ; CHECK-32-P10-NEXT: blr
76 %conv = trunc i64 %b to i16
77 %vecins = insertelement <8 x i16> %a, i16 %conv, i64 %idx
83 define <4 x i32> @testWord(<4 x i32> %a, i64 %b, i64 %idx) {
84 ; CHECK-64-LABEL: testWord:
85 ; CHECK-64: # %bb.0: # %entry
86 ; CHECK-64-NEXT: addi 5, 1, -16
87 ; CHECK-64-NEXT: rlwinm 4, 4, 2, 28, 29
88 ; CHECK-64-NEXT: stxv 34, -16(1)
89 ; CHECK-64-NEXT: stwx 3, 5, 4
90 ; CHECK-64-NEXT: lxv 34, -16(1)
93 ; CHECK-32-LABEL: testWord:
94 ; CHECK-32: # %bb.0: # %entry
95 ; CHECK-32-NEXT: addi 5, 1, -16
96 ; CHECK-32-NEXT: rlwinm 3, 6, 2, 28, 29
97 ; CHECK-32-NEXT: stxv 34, -16(1)
98 ; CHECK-32-NEXT: stwx 4, 5, 3
99 ; CHECK-32-NEXT: lxv 34, -16(1)
102 ; CHECK-64-P10-LABEL: testWord:
103 ; CHECK-64-P10: # %bb.0: # %entry
104 ; CHECK-64-P10-NEXT: slwi 4, 4, 2
105 ; CHECK-64-P10-NEXT: vinswlx 2, 4, 3
106 ; CHECK-64-P10-NEXT: blr
108 ; CHECK-32-P10-LABEL: testWord:
109 ; CHECK-32-P10: # %bb.0: # %entry
110 ; CHECK-32-P10-NEXT: slwi 3, 6, 2
111 ; CHECK-32-P10-NEXT: vinswlx 2, 3, 4
112 ; CHECK-32-P10-NEXT: blr
114 %conv = trunc i64 %b to i32
115 %vecins = insertelement <4 x i32> %a, i32 %conv, i64 %idx
116 ret <4 x i32> %vecins
121 define <4 x i32> @testWordImm(<4 x i32> %a, i64 %b) {
122 ; CHECK-64-LABEL: testWordImm:
123 ; CHECK-64: # %bb.0: # %entry
124 ; CHECK-64-NEXT: mtfprwz 0, 3
125 ; CHECK-64-NEXT: xxinsertw 34, 0, 4
126 ; CHECK-64-NEXT: xxinsertw 34, 0, 12
129 ; CHECK-32-LABEL: testWordImm:
130 ; CHECK-32: # %bb.0: # %entry
131 ; CHECK-32-NEXT: mtfprwz 0, 4
132 ; CHECK-32-NEXT: xxinsertw 34, 0, 4
133 ; CHECK-32-NEXT: xxinsertw 34, 0, 12
136 ; CHECK-64-P10-LABEL: testWordImm:
137 ; CHECK-64-P10: # %bb.0: # %entry
138 ; CHECK-64-P10-NEXT: vinsw 2, 3, 4
139 ; CHECK-64-P10-NEXT: vinsw 2, 3, 12
140 ; CHECK-64-P10-NEXT: blr
142 ; CHECK-32-P10-LABEL: testWordImm:
143 ; CHECK-32-P10: # %bb.0: # %entry
144 ; CHECK-32-P10-NEXT: vinsw 2, 4, 4
145 ; CHECK-32-P10-NEXT: vinsw 2, 4, 12
146 ; CHECK-32-P10-NEXT: blr
148 %conv = trunc i64 %b to i32
149 %vecins = insertelement <4 x i32> %a, i32 %conv, i32 1
150 %vecins2 = insertelement <4 x i32> %vecins, i32 %conv, i32 3
151 ret <4 x i32> %vecins2
156 define <2 x i64> @testDoubleword(<2 x i64> %a, i64 %b, i64 %idx) {
157 ; CHECK-64-LABEL: testDoubleword:
158 ; CHECK-64: # %bb.0: # %entry
159 ; CHECK-64-NEXT: addi 5, 1, -16
160 ; CHECK-64-NEXT: rlwinm 4, 4, 3, 28, 28
161 ; CHECK-64-NEXT: stxv 34, -16(1)
162 ; CHECK-64-NEXT: stdx 3, 5, 4
163 ; CHECK-64-NEXT: lxv 34, -16(1)
166 ; CHECK-32-LABEL: testDoubleword:
167 ; CHECK-32: # %bb.0: # %entry
168 ; CHECK-32-NEXT: add 5, 6, 6
169 ; CHECK-32-NEXT: addi 7, 1, -32
170 ; CHECK-32-NEXT: stxv 34, -32(1)
171 ; CHECK-32-NEXT: rlwinm 6, 5, 2, 28, 29
172 ; CHECK-32-NEXT: stwx 3, 7, 6
173 ; CHECK-32-NEXT: addi 3, 5, 1
174 ; CHECK-32-NEXT: addi 5, 1, -16
175 ; CHECK-32-NEXT: lxv 0, -32(1)
176 ; CHECK-32-NEXT: rlwinm 3, 3, 2, 28, 29
177 ; CHECK-32-NEXT: stxv 0, -16(1)
178 ; CHECK-32-NEXT: stwx 4, 5, 3
179 ; CHECK-32-NEXT: lxv 34, -16(1)
182 ; CHECK-64-P10-LABEL: testDoubleword:
183 ; CHECK-64-P10: # %bb.0: # %entry
184 ; CHECK-64-P10-NEXT: rlwinm 4, 4, 3, 0, 28
185 ; CHECK-64-P10-NEXT: vinsdlx 2, 4, 3
186 ; CHECK-64-P10-NEXT: blr
188 ; CHECK-32-P10-LABEL: testDoubleword:
189 ; CHECK-32-P10: # %bb.0: # %entry
190 ; CHECK-32-P10-NEXT: add 5, 6, 6
191 ; CHECK-32-P10-NEXT: slwi 6, 5, 2
192 ; CHECK-32-P10-NEXT: vinswlx 2, 6, 3
193 ; CHECK-32-P10-NEXT: addi 3, 5, 1
194 ; CHECK-32-P10-NEXT: slwi 3, 3, 2
195 ; CHECK-32-P10-NEXT: vinswlx 2, 3, 4
196 ; CHECK-32-P10-NEXT: blr
198 %vecins = insertelement <2 x i64> %a, i64 %b, i64 %idx
199 ret <2 x i64> %vecins
202 ; Doubleword immediate
204 define <2 x i64> @testDoublewordImm(<2 x i64> %a, i64 %b) {
205 ; CHECK-64-LABEL: testDoublewordImm:
206 ; CHECK-64: # %bb.0: # %entry
207 ; CHECK-64-NEXT: mtfprd 0, 3
208 ; CHECK-64-NEXT: xxmrghd 34, 34, 0
211 ; CHECK-32-LABEL: testDoublewordImm:
212 ; CHECK-32: # %bb.0: # %entry
213 ; CHECK-32-NEXT: mtfprwz 0, 3
214 ; CHECK-32-NEXT: xxinsertw 34, 0, 8
215 ; CHECK-32-NEXT: mtfprwz 0, 4
216 ; CHECK-32-NEXT: xxinsertw 34, 0, 12
219 ; CHECK-64-P10-LABEL: testDoublewordImm:
220 ; CHECK-64-P10: # %bb.0: # %entry
221 ; CHECK-64-P10-NEXT: vinsd 2, 3, 8
222 ; CHECK-64-P10-NEXT: blr
224 ; CHECK-32-P10-LABEL: testDoublewordImm:
225 ; CHECK-32-P10: # %bb.0: # %entry
226 ; CHECK-32-P10-NEXT: vinsw 2, 3, 8
227 ; CHECK-32-P10-NEXT: vinsw 2, 4, 12
228 ; CHECK-32-P10-NEXT: blr
230 %vecins = insertelement <2 x i64> %a, i64 %b, i32 1
231 ret <2 x i64> %vecins
234 define <2 x i64> @testDoublewordImm2(<2 x i64> %a, i64 %b) {
235 ; CHECK-64-LABEL: testDoublewordImm2:
236 ; CHECK-64: # %bb.0: # %entry
237 ; CHECK-64-NEXT: mtfprd 0, 3
238 ; CHECK-64-NEXT: xxpermdi 34, 0, 34, 1
241 ; CHECK-32-LABEL: testDoublewordImm2:
242 ; CHECK-32: # %bb.0: # %entry
243 ; CHECK-32-NEXT: mtfprwz 0, 3
244 ; CHECK-32-NEXT: xxinsertw 34, 0, 0
245 ; CHECK-32-NEXT: mtfprwz 0, 4
246 ; CHECK-32-NEXT: xxinsertw 34, 0, 4
249 ; CHECK-64-P10-LABEL: testDoublewordImm2:
250 ; CHECK-64-P10: # %bb.0: # %entry
251 ; CHECK-64-P10-NEXT: vinsd 2, 3, 0
252 ; CHECK-64-P10-NEXT: blr
254 ; CHECK-32-P10-LABEL: testDoublewordImm2:
255 ; CHECK-32-P10: # %bb.0: # %entry
256 ; CHECK-32-P10-NEXT: vinsw 2, 3, 0
257 ; CHECK-32-P10-NEXT: vinsw 2, 4, 4
258 ; CHECK-32-P10-NEXT: blr
260 %vecins = insertelement <2 x i64> %a, i64 %b, i32 0
261 ret <2 x i64> %vecins
266 define <4 x float> @testFloat1(<4 x float> %a, float %b, i32 zeroext %idx1) {
267 ; CHECK-64-LABEL: testFloat1:
268 ; CHECK-64: # %bb.0: # %entry
269 ; CHECK-64-NEXT: rlwinm 3, 4, 2, 28, 29
270 ; CHECK-64-NEXT: addi 4, 1, -16
271 ; CHECK-64-NEXT: stxv 34, -16(1)
272 ; CHECK-64-NEXT: stfsx 1, 4, 3
273 ; CHECK-64-NEXT: lxv 34, -16(1)
276 ; CHECK-32-LABEL: testFloat1:
277 ; CHECK-32: # %bb.0: # %entry
278 ; CHECK-32-NEXT: rlwinm 3, 4, 2, 28, 29
279 ; CHECK-32-NEXT: addi 4, 1, -16
280 ; CHECK-32-NEXT: stxv 34, -16(1)
281 ; CHECK-32-NEXT: stfsx 1, 4, 3
282 ; CHECK-32-NEXT: lxv 34, -16(1)
285 ; CHECK-64-P10-LABEL: testFloat1:
286 ; CHECK-64-P10: # %bb.0: # %entry
287 ; CHECK-64-P10-NEXT: xscvdpspn 35, 1
288 ; CHECK-64-P10-NEXT: slwi 3, 4, 2
289 ; CHECK-64-P10-NEXT: vinswvlx 2, 3, 3
290 ; CHECK-64-P10-NEXT: blr
292 ; CHECK-32-P10-LABEL: testFloat1:
293 ; CHECK-32-P10: # %bb.0: # %entry
294 ; CHECK-32-P10-NEXT: xscvdpspn 35, 1
295 ; CHECK-32-P10-NEXT: slwi 3, 4, 2
296 ; CHECK-32-P10-NEXT: vinswvlx 2, 3, 3
297 ; CHECK-32-P10-NEXT: blr
299 %vecins = insertelement <4 x float> %a, float %b, i32 %idx1
300 ret <4 x float> %vecins
303 define <4 x float> @testFloat2(<4 x float> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {
304 ; CHECK-64-LABEL: testFloat2:
305 ; CHECK-64: # %bb.0: # %entry
306 ; CHECK-64-NEXT: lwz 6, 0(3)
307 ; CHECK-64-NEXT: addi 7, 1, -16
308 ; CHECK-64-NEXT: rlwinm 4, 4, 2, 28, 29
309 ; CHECK-64-NEXT: stxv 34, -16(1)
310 ; CHECK-64-NEXT: rlwinm 5, 5, 2, 28, 29
311 ; CHECK-64-NEXT: stwx 6, 7, 4
312 ; CHECK-64-NEXT: addi 4, 1, -32
313 ; CHECK-64-NEXT: lxv 0, -16(1)
314 ; CHECK-64-NEXT: lwz 3, 1(3)
315 ; CHECK-64-NEXT: stxv 0, -32(1)
316 ; CHECK-64-NEXT: stwx 3, 4, 5
317 ; CHECK-64-NEXT: lxv 34, -32(1)
320 ; CHECK-32-LABEL: testFloat2:
321 ; CHECK-32: # %bb.0: # %entry
322 ; CHECK-32-NEXT: lwz 6, 0(3)
323 ; CHECK-32-NEXT: addi 7, 1, -16
324 ; CHECK-32-NEXT: rlwinm 4, 4, 2, 28, 29
325 ; CHECK-32-NEXT: stxv 34, -16(1)
326 ; CHECK-32-NEXT: rlwinm 5, 5, 2, 28, 29
327 ; CHECK-32-NEXT: stwx 6, 7, 4
328 ; CHECK-32-NEXT: addi 4, 1, -48
329 ; CHECK-32-NEXT: lxv 0, -16(1)
330 ; CHECK-32-NEXT: lwz 3, 1(3)
331 ; CHECK-32-NEXT: stxv 0, -48(1)
332 ; CHECK-32-NEXT: stwx 3, 4, 5
333 ; CHECK-32-NEXT: lxv 34, -48(1)
336 ; CHECK-64-P10-LABEL: testFloat2:
337 ; CHECK-64-P10: # %bb.0: # %entry
338 ; CHECK-64-P10-NEXT: lwz 6, 0(3)
339 ; CHECK-64-P10-NEXT: lwz 3, 1(3)
340 ; CHECK-64-P10-NEXT: slwi 4, 4, 2
341 ; CHECK-64-P10-NEXT: vinswlx 2, 4, 6
342 ; CHECK-64-P10-NEXT: slwi 4, 5, 2
343 ; CHECK-64-P10-NEXT: vinswlx 2, 4, 3
344 ; CHECK-64-P10-NEXT: blr
346 ; CHECK-32-P10-LABEL: testFloat2:
347 ; CHECK-32-P10: # %bb.0: # %entry
348 ; CHECK-32-P10-NEXT: lwz 6, 0(3)
349 ; CHECK-32-P10-NEXT: lwz 3, 1(3)
350 ; CHECK-32-P10-NEXT: slwi 4, 4, 2
351 ; CHECK-32-P10-NEXT: vinswlx 2, 4, 6
352 ; CHECK-32-P10-NEXT: slwi 4, 5, 2
353 ; CHECK-32-P10-NEXT: vinswlx 2, 4, 3
354 ; CHECK-32-P10-NEXT: blr
356 %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 1
357 %0 = load float, ptr %b, align 4
358 %vecins = insertelement <4 x float> %a, float %0, i32 %idx1
359 %1 = load float, ptr %add.ptr1, align 4
360 %vecins2 = insertelement <4 x float> %vecins, float %1, i32 %idx2
361 ret <4 x float> %vecins2
364 define <4 x float> @testFloat3(<4 x float> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {
365 ; CHECK-64-LABEL: testFloat3:
366 ; CHECK-64: # %bb.0: # %entry
367 ; CHECK-64-NEXT: lis 6, 1
368 ; CHECK-64-NEXT: addi 7, 1, -16
369 ; CHECK-64-NEXT: rlwinm 4, 4, 2, 28, 29
370 ; CHECK-64-NEXT: rlwinm 5, 5, 2, 28, 29
371 ; CHECK-64-NEXT: lwzx 6, 3, 6
372 ; CHECK-64-NEXT: stxv 34, -16(1)
373 ; CHECK-64-NEXT: stwx 6, 7, 4
374 ; CHECK-64-NEXT: li 4, 1
375 ; CHECK-64-NEXT: lxv 0, -16(1)
376 ; CHECK-64-NEXT: rldic 4, 4, 36, 27
377 ; CHECK-64-NEXT: lwzx 3, 3, 4
378 ; CHECK-64-NEXT: addi 4, 1, -32
379 ; CHECK-64-NEXT: stxv 0, -32(1)
380 ; CHECK-64-NEXT: stwx 3, 4, 5
381 ; CHECK-64-NEXT: lxv 34, -32(1)
384 ; CHECK-32-LABEL: testFloat3:
385 ; CHECK-32: # %bb.0: # %entry
386 ; CHECK-32-NEXT: lis 6, 1
387 ; CHECK-32-NEXT: addi 7, 1, -16
388 ; CHECK-32-NEXT: rlwinm 4, 4, 2, 28, 29
389 ; CHECK-32-NEXT: rlwinm 5, 5, 2, 28, 29
390 ; CHECK-32-NEXT: lwzx 6, 3, 6
391 ; CHECK-32-NEXT: stxv 34, -16(1)
392 ; CHECK-32-NEXT: stwx 6, 7, 4
393 ; CHECK-32-NEXT: addi 4, 1, -48
394 ; CHECK-32-NEXT: lxv 0, -16(1)
395 ; CHECK-32-NEXT: lwz 3, 0(3)
396 ; CHECK-32-NEXT: stxv 0, -48(1)
397 ; CHECK-32-NEXT: stwx 3, 4, 5
398 ; CHECK-32-NEXT: lxv 34, -48(1)
401 ; CHECK-64-P10-LABEL: testFloat3:
402 ; CHECK-64-P10: # %bb.0: # %entry
403 ; CHECK-64-P10-NEXT: plwz 6, 65536(3), 0
404 ; CHECK-64-P10-NEXT: slwi 4, 4, 2
405 ; CHECK-64-P10-NEXT: vinswlx 2, 4, 6
406 ; CHECK-64-P10-NEXT: li 4, 1
407 ; CHECK-64-P10-NEXT: rldic 4, 4, 36, 27
408 ; CHECK-64-P10-NEXT: lwzx 3, 3, 4
409 ; CHECK-64-P10-NEXT: slwi 4, 5, 2
410 ; CHECK-64-P10-NEXT: vinswlx 2, 4, 3
411 ; CHECK-64-P10-NEXT: blr
413 ; CHECK-32-P10-LABEL: testFloat3:
414 ; CHECK-32-P10: # %bb.0: # %entry
415 ; CHECK-32-P10-NEXT: plwz 6, 65536(3), 0
416 ; CHECK-32-P10-NEXT: lwz 3, 0(3)
417 ; CHECK-32-P10-NEXT: slwi 4, 4, 2
418 ; CHECK-32-P10-NEXT: vinswlx 2, 4, 6
419 ; CHECK-32-P10-NEXT: slwi 4, 5, 2
420 ; CHECK-32-P10-NEXT: vinswlx 2, 4, 3
421 ; CHECK-32-P10-NEXT: blr
423 %add.ptr = getelementptr inbounds i8, ptr %b, i64 65536
424 %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 68719476736
425 %0 = load float, ptr %add.ptr, align 4
426 %vecins = insertelement <4 x float> %a, float %0, i32 %idx1
427 %1 = load float, ptr %add.ptr1, align 4
428 %vecins2 = insertelement <4 x float> %vecins, float %1, i32 %idx2
429 ret <4 x float> %vecins2
434 define <4 x float> @testFloatImm1(<4 x float> %a, float %b) {
435 ; CHECK-64-LABEL: testFloatImm1:
436 ; CHECK-64: # %bb.0: # %entry
437 ; CHECK-64-NEXT: xscvdpspn 0, 1
438 ; CHECK-64-NEXT: xxinsertw 34, 0, 0
439 ; CHECK-64-NEXT: xxinsertw 34, 0, 8
442 ; CHECK-32-LABEL: testFloatImm1:
443 ; CHECK-32: # %bb.0: # %entry
444 ; CHECK-32-NEXT: xscvdpspn 0, 1
445 ; CHECK-32-NEXT: xxinsertw 34, 0, 0
446 ; CHECK-32-NEXT: xxinsertw 34, 0, 8
449 ; CHECK-64-P10-LABEL: testFloatImm1:
450 ; CHECK-64-P10: # %bb.0: # %entry
451 ; CHECK-64-P10-NEXT: xscvdpspn 0, 1
452 ; CHECK-64-P10-NEXT: xxinsertw 34, 0, 0
453 ; CHECK-64-P10-NEXT: xxinsertw 34, 0, 8
454 ; CHECK-64-P10-NEXT: blr
456 ; CHECK-32-P10-LABEL: testFloatImm1:
457 ; CHECK-32-P10: # %bb.0: # %entry
458 ; CHECK-32-P10-NEXT: xscvdpspn 0, 1
459 ; CHECK-32-P10-NEXT: xxinsertw 34, 0, 0
460 ; CHECK-32-P10-NEXT: xxinsertw 34, 0, 8
461 ; CHECK-32-P10-NEXT: blr
463 %vecins = insertelement <4 x float> %a, float %b, i32 0
464 %vecins1 = insertelement <4 x float> %vecins, float %b, i32 2
465 ret <4 x float> %vecins1
468 define <4 x float> @testFloatImm2(<4 x float> %a, ptr %b) {
469 ; CHECK-64-LABEL: testFloatImm2:
470 ; CHECK-64: # %bb.0: # %entry
471 ; CHECK-64-NEXT: lwz 4, 0(3)
472 ; CHECK-64-NEXT: lwz 3, 4(3)
473 ; CHECK-64-NEXT: mtfprwz 0, 4
474 ; CHECK-64-NEXT: xxinsertw 34, 0, 0
475 ; CHECK-64-NEXT: mtfprwz 0, 3
476 ; CHECK-64-NEXT: xxinsertw 34, 0, 8
479 ; CHECK-32-LABEL: testFloatImm2:
480 ; CHECK-32: # %bb.0: # %entry
481 ; CHECK-32-NEXT: lwz 4, 0(3)
482 ; CHECK-32-NEXT: lwz 3, 4(3)
483 ; CHECK-32-NEXT: mtfprwz 0, 4
484 ; CHECK-32-NEXT: xxinsertw 34, 0, 0
485 ; CHECK-32-NEXT: mtfprwz 0, 3
486 ; CHECK-32-NEXT: xxinsertw 34, 0, 8
489 ; CHECK-64-P10-LABEL: testFloatImm2:
490 ; CHECK-64-P10: # %bb.0: # %entry
491 ; CHECK-64-P10-NEXT: lwz 4, 0(3)
492 ; CHECK-64-P10-NEXT: lwz 3, 4(3)
493 ; CHECK-64-P10-NEXT: vinsw 2, 4, 0
494 ; CHECK-64-P10-NEXT: vinsw 2, 3, 8
495 ; CHECK-64-P10-NEXT: blr
497 ; CHECK-32-P10-LABEL: testFloatImm2:
498 ; CHECK-32-P10: # %bb.0: # %entry
499 ; CHECK-32-P10-NEXT: lwz 4, 0(3)
500 ; CHECK-32-P10-NEXT: lwz 3, 4(3)
501 ; CHECK-32-P10-NEXT: vinsw 2, 4, 0
502 ; CHECK-32-P10-NEXT: vinsw 2, 3, 8
503 ; CHECK-32-P10-NEXT: blr
505 %add.ptr1 = getelementptr inbounds i32, ptr %b, i64 1
506 %0 = load float, ptr %b, align 4
507 %vecins = insertelement <4 x float> %a, float %0, i32 0
508 %1 = load float, ptr %add.ptr1, align 4
509 %vecins2 = insertelement <4 x float> %vecins, float %1, i32 2
510 ret <4 x float> %vecins2
513 define <4 x float> @testFloatImm3(<4 x float> %a, ptr %b) {
514 ; CHECK-64-LABEL: testFloatImm3:
515 ; CHECK-64: # %bb.0: # %entry
516 ; CHECK-64-NEXT: lis 4, 4
517 ; CHECK-64-NEXT: lwzx 4, 3, 4
518 ; CHECK-64-NEXT: mtfprwz 0, 4
519 ; CHECK-64-NEXT: li 4, 1
520 ; CHECK-64-NEXT: rldic 4, 4, 38, 25
521 ; CHECK-64-NEXT: xxinsertw 34, 0, 0
522 ; CHECK-64-NEXT: lwzx 3, 3, 4
523 ; CHECK-64-NEXT: mtfprwz 0, 3
524 ; CHECK-64-NEXT: xxinsertw 34, 0, 8
527 ; CHECK-32-LABEL: testFloatImm3:
528 ; CHECK-32: # %bb.0: # %entry
529 ; CHECK-32-NEXT: lis 4, 4
530 ; CHECK-32-NEXT: lwzx 4, 3, 4
531 ; CHECK-32-NEXT: lwz 3, 0(3)
532 ; CHECK-32-NEXT: mtfprwz 0, 4
533 ; CHECK-32-NEXT: xxinsertw 34, 0, 0
534 ; CHECK-32-NEXT: mtfprwz 0, 3
535 ; CHECK-32-NEXT: xxinsertw 34, 0, 8
538 ; CHECK-64-P10-LABEL: testFloatImm3:
539 ; CHECK-64-P10: # %bb.0: # %entry
540 ; CHECK-64-P10-NEXT: plwz 4, 262144(3), 0
541 ; CHECK-64-P10-NEXT: vinsw 2, 4, 0
542 ; CHECK-64-P10-NEXT: li 4, 1
543 ; CHECK-64-P10-NEXT: rldic 4, 4, 38, 25
544 ; CHECK-64-P10-NEXT: lwzx 3, 3, 4
545 ; CHECK-64-P10-NEXT: vinsw 2, 3, 8
546 ; CHECK-64-P10-NEXT: blr
548 ; CHECK-32-P10-LABEL: testFloatImm3:
549 ; CHECK-32-P10: # %bb.0: # %entry
550 ; CHECK-32-P10-NEXT: plwz 4, 262144(3), 0
551 ; CHECK-32-P10-NEXT: lwz 3, 0(3)
552 ; CHECK-32-P10-NEXT: vinsw 2, 4, 0
553 ; CHECK-32-P10-NEXT: vinsw 2, 3, 8
554 ; CHECK-32-P10-NEXT: blr
556 %add.ptr = getelementptr inbounds i32, ptr %b, i64 65536
557 %add.ptr1 = getelementptr inbounds i32, ptr %b, i64 68719476736
558 %0 = load float, ptr %add.ptr, align 4
559 %vecins = insertelement <4 x float> %a, float %0, i32 0
560 %1 = load float, ptr %add.ptr1, align 4
561 %vecins2 = insertelement <4 x float> %vecins, float %1, i32 2
562 ret <4 x float> %vecins2
567 define <2 x double> @testDouble1(<2 x double> %a, double %b, i32 zeroext %idx1) {
568 ; CHECK-64-LABEL: testDouble1:
569 ; CHECK-64: # %bb.0: # %entry
570 ; CHECK-64-NEXT: rlwinm 3, 4, 3, 28, 28
571 ; CHECK-64-NEXT: addi 4, 1, -16
572 ; CHECK-64-NEXT: stxv 34, -16(1)
573 ; CHECK-64-NEXT: stfdx 1, 4, 3
574 ; CHECK-64-NEXT: lxv 34, -16(1)
577 ; CHECK-32-LABEL: testDouble1:
578 ; CHECK-32: # %bb.0: # %entry
579 ; CHECK-32-NEXT: addi 4, 1, -16
580 ; CHECK-32-NEXT: rlwinm 3, 5, 3, 28, 28
581 ; CHECK-32-NEXT: stxv 34, -16(1)
582 ; CHECK-32-NEXT: stfdx 1, 4, 3
583 ; CHECK-32-NEXT: lxv 34, -16(1)
586 ; CHECK-64-P10-LABEL: testDouble1:
587 ; CHECK-64-P10: # %bb.0: # %entry
588 ; CHECK-64-P10-NEXT: mffprd 3, 1
589 ; CHECK-64-P10-NEXT: rlwinm 4, 4, 3, 0, 28
590 ; CHECK-64-P10-NEXT: vinsdlx 2, 4, 3
591 ; CHECK-64-P10-NEXT: blr
593 ; CHECK-32-P10-LABEL: testDouble1:
594 ; CHECK-32-P10: # %bb.0: # %entry
595 ; CHECK-32-P10-NEXT: addi 4, 1, -16
596 ; CHECK-32-P10-NEXT: rlwinm 3, 5, 3, 28, 28
597 ; CHECK-32-P10-NEXT: stxv 34, -16(1)
598 ; CHECK-32-P10-NEXT: stfdx 1, 4, 3
599 ; CHECK-32-P10-NEXT: lxv 34, -16(1)
600 ; CHECK-32-P10-NEXT: blr
602 %vecins = insertelement <2 x double> %a, double %b, i32 %idx1
603 ret <2 x double> %vecins
606 define <2 x double> @testDouble2(<2 x double> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {
607 ; CHECK-64-LABEL: testDouble2:
608 ; CHECK-64: # %bb.0: # %entry
609 ; CHECK-64-NEXT: ld 6, 0(3)
610 ; CHECK-64-NEXT: addi 7, 1, -32
611 ; CHECK-64-NEXT: rlwinm 4, 4, 3, 28, 28
612 ; CHECK-64-NEXT: stxv 34, -32(1)
613 ; CHECK-64-NEXT: rlwinm 5, 5, 3, 28, 28
614 ; CHECK-64-NEXT: stdx 6, 7, 4
615 ; CHECK-64-NEXT: li 4, 1
616 ; CHECK-64-NEXT: lxv 0, -32(1)
617 ; CHECK-64-NEXT: ldx 3, 3, 4
618 ; CHECK-64-NEXT: addi 4, 1, -16
619 ; CHECK-64-NEXT: stxv 0, -16(1)
620 ; CHECK-64-NEXT: stdx 3, 4, 5
621 ; CHECK-64-NEXT: lxv 34, -16(1)
624 ; CHECK-32-LABEL: testDouble2:
625 ; CHECK-32: # %bb.0: # %entry
626 ; CHECK-32-NEXT: lfd 0, 0(3)
627 ; CHECK-32-NEXT: addi 6, 1, -32
628 ; CHECK-32-NEXT: rlwinm 4, 4, 3, 28, 28
629 ; CHECK-32-NEXT: stxv 34, -32(1)
630 ; CHECK-32-NEXT: rlwinm 5, 5, 3, 28, 28
631 ; CHECK-32-NEXT: stfdx 0, 6, 4
632 ; CHECK-32-NEXT: lxv 0, -32(1)
633 ; CHECK-32-NEXT: lfd 1, 1(3)
634 ; CHECK-32-NEXT: addi 3, 1, -16
635 ; CHECK-32-NEXT: stxv 0, -16(1)
636 ; CHECK-32-NEXT: stfdx 1, 3, 5
637 ; CHECK-32-NEXT: lxv 34, -16(1)
640 ; CHECK-64-P10-LABEL: testDouble2:
641 ; CHECK-64-P10: # %bb.0: # %entry
642 ; CHECK-64-P10-NEXT: ld 6, 0(3)
643 ; CHECK-64-P10-NEXT: pld 3, 1(3), 0
644 ; CHECK-64-P10-NEXT: rlwinm 4, 4, 3, 0, 28
645 ; CHECK-64-P10-NEXT: vinsdlx 2, 4, 6
646 ; CHECK-64-P10-NEXT: rlwinm 4, 5, 3, 0, 28
647 ; CHECK-64-P10-NEXT: vinsdlx 2, 4, 3
648 ; CHECK-64-P10-NEXT: blr
650 ; CHECK-32-P10-LABEL: testDouble2:
651 ; CHECK-32-P10: # %bb.0: # %entry
652 ; CHECK-32-P10-NEXT: lfd 0, 0(3)
653 ; CHECK-32-P10-NEXT: addi 6, 1, -32
654 ; CHECK-32-P10-NEXT: rlwinm 4, 4, 3, 28, 28
655 ; CHECK-32-P10-NEXT: stxv 34, -32(1)
656 ; CHECK-32-P10-NEXT: rlwinm 5, 5, 3, 28, 28
657 ; CHECK-32-P10-NEXT: stfdx 0, 6, 4
658 ; CHECK-32-P10-NEXT: lxv 0, -32(1)
659 ; CHECK-32-P10-NEXT: plfd 1, 1(3), 0
660 ; CHECK-32-P10-NEXT: addi 3, 1, -16
661 ; CHECK-32-P10-NEXT: stxv 0, -16(1)
662 ; CHECK-32-P10-NEXT: stfdx 1, 3, 5
663 ; CHECK-32-P10-NEXT: lxv 34, -16(1)
664 ; CHECK-32-P10-NEXT: blr
666 %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 1
667 %0 = load double, ptr %b, align 8
668 %vecins = insertelement <2 x double> %a, double %0, i32 %idx1
669 %1 = load double, ptr %add.ptr1, align 8
670 %vecins2 = insertelement <2 x double> %vecins, double %1, i32 %idx2
671 ret <2 x double> %vecins2
674 define <2 x double> @testDouble3(<2 x double> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {
675 ; CHECK-64-LABEL: testDouble3:
676 ; CHECK-64: # %bb.0: # %entry
677 ; CHECK-64-NEXT: lis 6, 1
678 ; CHECK-64-NEXT: addi 7, 1, -32
679 ; CHECK-64-NEXT: rlwinm 4, 4, 3, 28, 28
680 ; CHECK-64-NEXT: rlwinm 5, 5, 3, 28, 28
681 ; CHECK-64-NEXT: ldx 6, 3, 6
682 ; CHECK-64-NEXT: stxv 34, -32(1)
683 ; CHECK-64-NEXT: stdx 6, 7, 4
684 ; CHECK-64-NEXT: li 4, 1
685 ; CHECK-64-NEXT: lxv 0, -32(1)
686 ; CHECK-64-NEXT: rldic 4, 4, 36, 27
687 ; CHECK-64-NEXT: ldx 3, 3, 4
688 ; CHECK-64-NEXT: addi 4, 1, -16
689 ; CHECK-64-NEXT: stxv 0, -16(1)
690 ; CHECK-64-NEXT: stdx 3, 4, 5
691 ; CHECK-64-NEXT: lxv 34, -16(1)
694 ; CHECK-32-LABEL: testDouble3:
695 ; CHECK-32: # %bb.0: # %entry
696 ; CHECK-32-NEXT: lis 6, 1
697 ; CHECK-32-NEXT: rlwinm 4, 4, 3, 28, 28
698 ; CHECK-32-NEXT: rlwinm 5, 5, 3, 28, 28
699 ; CHECK-32-NEXT: lfdx 0, 3, 6
700 ; CHECK-32-NEXT: addi 6, 1, -32
701 ; CHECK-32-NEXT: stxv 34, -32(1)
702 ; CHECK-32-NEXT: stfdx 0, 6, 4
703 ; CHECK-32-NEXT: lxv 0, -32(1)
704 ; CHECK-32-NEXT: lfd 1, 0(3)
705 ; CHECK-32-NEXT: addi 3, 1, -16
706 ; CHECK-32-NEXT: stxv 0, -16(1)
707 ; CHECK-32-NEXT: stfdx 1, 3, 5
708 ; CHECK-32-NEXT: lxv 34, -16(1)
711 ; CHECK-64-P10-LABEL: testDouble3:
712 ; CHECK-64-P10: # %bb.0: # %entry
713 ; CHECK-64-P10-NEXT: pld 6, 65536(3), 0
714 ; CHECK-64-P10-NEXT: rlwinm 4, 4, 3, 0, 28
715 ; CHECK-64-P10-NEXT: vinsdlx 2, 4, 6
716 ; CHECK-64-P10-NEXT: li 4, 1
717 ; CHECK-64-P10-NEXT: rldic 4, 4, 36, 27
718 ; CHECK-64-P10-NEXT: ldx 3, 3, 4
719 ; CHECK-64-P10-NEXT: rlwinm 4, 5, 3, 0, 28
720 ; CHECK-64-P10-NEXT: vinsdlx 2, 4, 3
721 ; CHECK-64-P10-NEXT: blr
723 ; CHECK-32-P10-LABEL: testDouble3:
724 ; CHECK-32-P10: # %bb.0: # %entry
725 ; CHECK-32-P10-NEXT: plfd 0, 65536(3), 0
726 ; CHECK-32-P10-NEXT: addi 6, 1, -32
727 ; CHECK-32-P10-NEXT: rlwinm 4, 4, 3, 28, 28
728 ; CHECK-32-P10-NEXT: stxv 34, -32(1)
729 ; CHECK-32-P10-NEXT: rlwinm 5, 5, 3, 28, 28
730 ; CHECK-32-P10-NEXT: stfdx 0, 6, 4
731 ; CHECK-32-P10-NEXT: lxv 0, -32(1)
732 ; CHECK-32-P10-NEXT: lfd 1, 0(3)
733 ; CHECK-32-P10-NEXT: addi 3, 1, -16
734 ; CHECK-32-P10-NEXT: stxv 0, -16(1)
735 ; CHECK-32-P10-NEXT: stfdx 1, 3, 5
736 ; CHECK-32-P10-NEXT: lxv 34, -16(1)
737 ; CHECK-32-P10-NEXT: blr
739 %add.ptr = getelementptr inbounds i8, ptr %b, i64 65536
740 %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 68719476736
741 %0 = load double, ptr %add.ptr, align 8
742 %vecins = insertelement <2 x double> %a, double %0, i32 %idx1
743 %1 = load double, ptr %add.ptr1, align 8
744 %vecins2 = insertelement <2 x double> %vecins, double %1, i32 %idx2
745 ret <2 x double> %vecins2
750 define <2 x double> @testDoubleImm1(<2 x double> %a, double %b) {
751 ; CHECK-64-LABEL: testDoubleImm1:
752 ; CHECK-64: # %bb.0: # %entry
753 ; CHECK-64-NEXT: xxpermdi 34, 1, 34, 1
756 ; CHECK-32-LABEL: testDoubleImm1:
757 ; CHECK-32: # %bb.0: # %entry
758 ; CHECK-32-NEXT: xxpermdi 34, 1, 34, 1
761 ; CHECK-64-P10-LABEL: testDoubleImm1:
762 ; CHECK-64-P10: # %bb.0: # %entry
763 ; CHECK-64-P10-NEXT: xxpermdi 34, 1, 34, 1
764 ; CHECK-64-P10-NEXT: blr
766 ; CHECK-32-P10-LABEL: testDoubleImm1:
767 ; CHECK-32-P10: # %bb.0: # %entry
768 ; CHECK-32-P10-NEXT: xxpermdi 34, 1, 34, 1
769 ; CHECK-32-P10-NEXT: blr
771 %vecins = insertelement <2 x double> %a, double %b, i32 0
772 ret <2 x double> %vecins
775 define <2 x double> @testDoubleImm2(<2 x double> %a, ptr %b) {
776 ; CHECK-64-LABEL: testDoubleImm2:
777 ; CHECK-64: # %bb.0: # %entry
778 ; CHECK-64-NEXT: lfd 0, 0(3)
779 ; CHECK-64-NEXT: xxpermdi 34, 0, 34, 1
782 ; CHECK-32-LABEL: testDoubleImm2:
783 ; CHECK-32: # %bb.0: # %entry
784 ; CHECK-32-NEXT: lfd 0, 0(3)
785 ; CHECK-32-NEXT: xxpermdi 34, 0, 34, 1
788 ; CHECK-64-P10-LABEL: testDoubleImm2:
789 ; CHECK-64-P10: # %bb.0: # %entry
790 ; CHECK-64-P10-NEXT: lfd 0, 0(3)
791 ; CHECK-64-P10-NEXT: xxpermdi 34, 0, 34, 1
792 ; CHECK-64-P10-NEXT: blr
794 ; CHECK-32-P10-LABEL: testDoubleImm2:
795 ; CHECK-32-P10: # %bb.0: # %entry
796 ; CHECK-32-P10-NEXT: lfd 0, 0(3)
797 ; CHECK-32-P10-NEXT: xxpermdi 34, 0, 34, 1
798 ; CHECK-32-P10-NEXT: blr
800 %0 = load double, ptr %b, align 8
801 %vecins = insertelement <2 x double> %a, double %0, i32 0
802 ret <2 x double> %vecins
805 define <2 x double> @testDoubleImm3(<2 x double> %a, ptr %b) {
806 ; CHECK-64-LABEL: testDoubleImm3:
807 ; CHECK-64: # %bb.0: # %entry
808 ; CHECK-64-NEXT: lfd 0, 4(3)
809 ; CHECK-64-NEXT: xxpermdi 34, 0, 34, 1
812 ; CHECK-32-LABEL: testDoubleImm3:
813 ; CHECK-32: # %bb.0: # %entry
814 ; CHECK-32-NEXT: lfd 0, 4(3)
815 ; CHECK-32-NEXT: xxpermdi 34, 0, 34, 1
818 ; CHECK-64-P10-LABEL: testDoubleImm3:
819 ; CHECK-64-P10: # %bb.0: # %entry
820 ; CHECK-64-P10-NEXT: lfd 0, 4(3)
821 ; CHECK-64-P10-NEXT: xxpermdi 34, 0, 34, 1
822 ; CHECK-64-P10-NEXT: blr
824 ; CHECK-32-P10-LABEL: testDoubleImm3:
825 ; CHECK-32-P10: # %bb.0: # %entry
826 ; CHECK-32-P10-NEXT: lfd 0, 4(3)
827 ; CHECK-32-P10-NEXT: xxpermdi 34, 0, 34, 1
828 ; CHECK-32-P10-NEXT: blr
830 %add.ptr = getelementptr inbounds i32, ptr %b, i64 1
831 %0 = load double, ptr %add.ptr, align 8
832 %vecins = insertelement <2 x double> %a, double %0, i32 0
833 ret <2 x double> %vecins
836 define <2 x double> @testDoubleImm4(<2 x double> %a, ptr %b) {
837 ; CHECK-64-LABEL: testDoubleImm4:
838 ; CHECK-64: # %bb.0: # %entry
839 ; CHECK-64-NEXT: lis 4, 4
840 ; CHECK-64-NEXT: lfdx 0, 3, 4
841 ; CHECK-64-NEXT: xxpermdi 34, 0, 34, 1
844 ; CHECK-32-LABEL: testDoubleImm4:
845 ; CHECK-32: # %bb.0: # %entry
846 ; CHECK-32-NEXT: lis 4, 4
847 ; CHECK-32-NEXT: lfdx 0, 3, 4
848 ; CHECK-32-NEXT: xxpermdi 34, 0, 34, 1
851 ; CHECK-64-P10-LABEL: testDoubleImm4:
852 ; CHECK-64-P10: # %bb.0: # %entry
853 ; CHECK-64-P10-NEXT: plfd 0, 262144(3), 0
854 ; CHECK-64-P10-NEXT: xxpermdi 34, 0, 34, 1
855 ; CHECK-64-P10-NEXT: blr
857 ; CHECK-32-P10-LABEL: testDoubleImm4:
858 ; CHECK-32-P10: # %bb.0: # %entry
859 ; CHECK-32-P10-NEXT: plfd 0, 262144(3), 0
860 ; CHECK-32-P10-NEXT: xxpermdi 34, 0, 34, 1
861 ; CHECK-32-P10-NEXT: blr
863 %add.ptr = getelementptr inbounds i32, ptr %b, i64 65536
864 %0 = load double, ptr %add.ptr, align 8
865 %vecins = insertelement <2 x double> %a, double %0, i32 0
866 ret <2 x double> %vecins
869 define <2 x double> @testDoubleImm5(<2 x double> %a, ptr %b) {
870 ; CHECK-64-LABEL: testDoubleImm5:
871 ; CHECK-64: # %bb.0: # %entry
872 ; CHECK-64-NEXT: li 4, 1
873 ; CHECK-64-NEXT: rldic 4, 4, 38, 25
874 ; CHECK-64-NEXT: lfdx 0, 3, 4
875 ; CHECK-64-NEXT: xxpermdi 34, 0, 34, 1
878 ; CHECK-32-LABEL: testDoubleImm5:
879 ; CHECK-32: # %bb.0: # %entry
880 ; CHECK-32-NEXT: lfd 0, 0(3)
881 ; CHECK-32-NEXT: xxpermdi 34, 0, 34, 1
884 ; CHECK-64-P10-LABEL: testDoubleImm5:
885 ; CHECK-64-P10: # %bb.0: # %entry
886 ; CHECK-64-P10-NEXT: li 4, 1
887 ; CHECK-64-P10-NEXT: rldic 4, 4, 38, 25
888 ; CHECK-64-P10-NEXT: lfdx 0, 3, 4
889 ; CHECK-64-P10-NEXT: xxpermdi 34, 0, 34, 1
890 ; CHECK-64-P10-NEXT: blr
892 ; CHECK-32-P10-LABEL: testDoubleImm5:
893 ; CHECK-32-P10: # %bb.0: # %entry
894 ; CHECK-32-P10-NEXT: lfd 0, 0(3)
895 ; CHECK-32-P10-NEXT: xxpermdi 34, 0, 34, 1
896 ; CHECK-32-P10-NEXT: blr
898 %add.ptr = getelementptr inbounds i32, ptr %b, i64 68719476736
899 %0 = load double, ptr %add.ptr, align 8
900 %vecins = insertelement <2 x double> %a, double %0, i32 0
901 ret <2 x double> %vecins