1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc < %s -march=nvptx64 | FileCheck %s
3 ; RUN: llc < %s -march=nvptx | FileCheck %s
4 ; RUN: %if ptxas && !ptxas-12.0 %{ llc < %s -march=nvptx -verify-machineinstrs | %ptxas-verify %}
5 ; RUN: %if ptxas %{ llc < %s -march=nvptx64 -verify-machineinstrs | %ptxas-verify %}
7 target triple = "nvptx64-nvidia-cuda"
9 %struct.A = type { i8, i16 }
10 %struct.char2 = type { i8, i8 }
11 %struct.char4 = type { i8, i8, i8, i8 }
12 %struct.short2 = type { i16, i16 }
13 %struct.short4 = type { i16, i16, i16, i16 }
14 %struct.int2 = type { i32, i32 }
15 %struct.int4 = type { i32, i32, i32, i32 }
16 %struct.longlong2 = type { i64, i64 }
17 %struct.float2 = type { float, float }
18 %struct.float4 = type { float, float, float, float }
19 %struct.double2 = type { double, double }
21 define void @st_param_i8_i16() {
22 ; CHECK-LABEL: st_param_i8_i16(
26 ; CHECK-NEXT: // %bb.0:
27 ; CHECK-NEXT: { // callseq 0, 0
28 ; CHECK-NEXT: .param .align 2 .b8 param0[4];
29 ; CHECK-NEXT: st.param.b8 [param0+0], 1;
30 ; CHECK-NEXT: st.param.b16 [param0+2], 2;
31 ; CHECK-NEXT: call.uni
32 ; CHECK-NEXT: call_i8_i16,
36 ; CHECK-NEXT: } // callseq 0
38 call void @call_i8_i16(%struct.A { i8 1, i16 2 })
42 define void @st_param_i32() {
43 ; CHECK-LABEL: st_param_i32(
47 ; CHECK-NEXT: // %bb.0:
48 ; CHECK-NEXT: { // callseq 1, 0
49 ; CHECK-NEXT: .param .b32 param0;
50 ; CHECK-NEXT: st.param.b32 [param0+0], 3;
51 ; CHECK-NEXT: call.uni
52 ; CHECK-NEXT: call_i32,
56 ; CHECK-NEXT: } // callseq 1
58 call void @call_i32(i32 3)
62 define void @st_param_i64() {
63 ; CHECK-LABEL: st_param_i64(
67 ; CHECK-NEXT: // %bb.0:
68 ; CHECK-NEXT: { // callseq 2, 0
69 ; CHECK-NEXT: .param .b64 param0;
70 ; CHECK-NEXT: st.param.b64 [param0+0], 4;
71 ; CHECK-NEXT: call.uni
72 ; CHECK-NEXT: call_i64,
76 ; CHECK-NEXT: } // callseq 2
78 call void @call_i64(i64 4)
82 define void @st_param_f32() {
83 ; CHECK-LABEL: st_param_f32(
87 ; CHECK-NEXT: // %bb.0:
88 ; CHECK-NEXT: { // callseq 3, 0
89 ; CHECK-NEXT: .param .b32 param0;
90 ; CHECK-NEXT: st.param.f32 [param0+0], 0f40A00000;
91 ; CHECK-NEXT: call.uni
92 ; CHECK-NEXT: call_f32,
96 ; CHECK-NEXT: } // callseq 3
98 call void @call_f32(float 5.0)
102 define void @st_param_f64() {
103 ; CHECK-LABEL: st_param_f64(
107 ; CHECK-NEXT: // %bb.0:
108 ; CHECK-NEXT: { // callseq 4, 0
109 ; CHECK-NEXT: .param .b64 param0;
110 ; CHECK-NEXT: st.param.f64 [param0+0], 0d4018000000000000;
111 ; CHECK-NEXT: call.uni
112 ; CHECK-NEXT: call_f64,
116 ; CHECK-NEXT: } // callseq 4
118 call void @call_f64(double 6.0)
122 declare void @call_i8_i16(%struct.A)
123 declare void @call_i32(i32)
124 declare void @call_i64(i64)
125 declare void @call_f32(float)
126 declare void @call_f64(double)
128 define void @st_param_v2_i8_ii() {
129 ; CHECK-LABEL: st_param_v2_i8_ii(
133 ; CHECK-NEXT: // %bb.0:
134 ; CHECK-NEXT: { // callseq 5, 0
135 ; CHECK-NEXT: .param .align 2 .b8 param0[2];
136 ; CHECK-NEXT: st.param.v2.b8 [param0+0], {1, 2};
137 ; CHECK-NEXT: call.uni
138 ; CHECK-NEXT: call_v2_i8,
142 ; CHECK-NEXT: } // callseq 5
144 call void @call_v2_i8(%struct.char2 { i8 1, i8 2 })
147 define void @st_param_v2_i8_ir(i8 %val) {
148 ; CHECK-LABEL: st_param_v2_i8_ir(
150 ; CHECK-NEXT: .reg .b16 %rs<2>;
152 ; CHECK-NEXT: // %bb.0:
153 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v2_i8_ir_param_0];
154 ; CHECK-NEXT: { // callseq 6, 0
155 ; CHECK-NEXT: .param .align 2 .b8 param0[2];
156 ; CHECK-NEXT: st.param.v2.b8 [param0+0], {1, %rs1};
157 ; CHECK-NEXT: call.uni
158 ; CHECK-NEXT: call_v2_i8,
162 ; CHECK-NEXT: } // callseq 6
164 %struct.ir0 = insertvalue %struct.char2 poison, i8 1, 0
165 %struct.ir1 = insertvalue %struct.char2 %struct.ir0, i8 %val, 1
166 call void @call_v2_i8(%struct.char2 %struct.ir1)
169 define void @st_param_v2_i8_ri(i8 %val) {
170 ; CHECK-LABEL: st_param_v2_i8_ri(
172 ; CHECK-NEXT: .reg .b16 %rs<2>;
174 ; CHECK-NEXT: // %bb.0:
175 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v2_i8_ri_param_0];
176 ; CHECK-NEXT: { // callseq 7, 0
177 ; CHECK-NEXT: .param .align 2 .b8 param0[2];
178 ; CHECK-NEXT: st.param.v2.b8 [param0+0], {%rs1, 2};
179 ; CHECK-NEXT: call.uni
180 ; CHECK-NEXT: call_v2_i8,
184 ; CHECK-NEXT: } // callseq 7
186 %struct.ri0 = insertvalue %struct.char2 poison, i8 %val, 0
187 %struct.ri1 = insertvalue %struct.char2 %struct.ri0, i8 2, 1
188 call void @call_v2_i8(%struct.char2 %struct.ri1)
192 define void @st_param_v2_i16_ii() {
193 ; CHECK-LABEL: st_param_v2_i16_ii(
197 ; CHECK-NEXT: // %bb.0:
198 ; CHECK-NEXT: { // callseq 8, 0
199 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
200 ; CHECK-NEXT: st.param.v2.b16 [param0+0], {1, 2};
201 ; CHECK-NEXT: call.uni
202 ; CHECK-NEXT: call_v2_i16,
206 ; CHECK-NEXT: } // callseq 8
208 call void @call_v2_i16(%struct.short2 { i16 1, i16 2 })
211 define void @st_param_v2_i16_ir(i16 %val) {
212 ; CHECK-LABEL: st_param_v2_i16_ir(
214 ; CHECK-NEXT: .reg .b16 %rs<2>;
216 ; CHECK-NEXT: // %bb.0:
217 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v2_i16_ir_param_0];
218 ; CHECK-NEXT: { // callseq 9, 0
219 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
220 ; CHECK-NEXT: st.param.v2.b16 [param0+0], {1, %rs1};
221 ; CHECK-NEXT: call.uni
222 ; CHECK-NEXT: call_v2_i16,
226 ; CHECK-NEXT: } // callseq 9
228 %struct.ir0 = insertvalue %struct.short2 poison, i16 1, 0
229 %struct.ir1 = insertvalue %struct.short2 %struct.ir0, i16 %val, 1
230 call void @call_v2_i16(%struct.short2 %struct.ir1)
233 define void @st_param_v2_i16_ri(i16 %val) {
234 ; CHECK-LABEL: st_param_v2_i16_ri(
236 ; CHECK-NEXT: .reg .b16 %rs<2>;
238 ; CHECK-NEXT: // %bb.0:
239 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v2_i16_ri_param_0];
240 ; CHECK-NEXT: { // callseq 10, 0
241 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
242 ; CHECK-NEXT: st.param.v2.b16 [param0+0], {%rs1, 2};
243 ; CHECK-NEXT: call.uni
244 ; CHECK-NEXT: call_v2_i16,
248 ; CHECK-NEXT: } // callseq 10
250 %struct.ri0 = insertvalue %struct.short2 poison, i16 %val, 0
251 %struct.ri1 = insertvalue %struct.short2 %struct.ri0, i16 2, 1
252 call void @call_v2_i16(%struct.short2 %struct.ri1)
256 define void @st_param_v2_i32_ii() {
257 ; CHECK-LABEL: st_param_v2_i32_ii(
261 ; CHECK-NEXT: // %bb.0:
262 ; CHECK-NEXT: { // callseq 11, 0
263 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
264 ; CHECK-NEXT: st.param.v2.b32 [param0+0], {1, 2};
265 ; CHECK-NEXT: call.uni
266 ; CHECK-NEXT: call_v2_i32,
270 ; CHECK-NEXT: } // callseq 11
272 call void @call_v2_i32(%struct.int2 { i32 1, i32 2 })
275 define void @st_param_v2_i32_ir(i32 %val) {
276 ; CHECK-LABEL: st_param_v2_i32_ir(
278 ; CHECK-NEXT: .reg .b32 %r<2>;
280 ; CHECK-NEXT: // %bb.0:
281 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v2_i32_ir_param_0];
282 ; CHECK-NEXT: { // callseq 12, 0
283 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
284 ; CHECK-NEXT: st.param.v2.b32 [param0+0], {1, %r1};
285 ; CHECK-NEXT: call.uni
286 ; CHECK-NEXT: call_v2_i32,
290 ; CHECK-NEXT: } // callseq 12
292 %struct.ir0 = insertvalue %struct.int2 poison, i32 1, 0
293 %struct.ir1 = insertvalue %struct.int2 %struct.ir0, i32 %val, 1
294 call void @call_v2_i32(%struct.int2 %struct.ir1)
297 define void @st_param_v2_i32_ri(i32 %val) {
298 ; CHECK-LABEL: st_param_v2_i32_ri(
300 ; CHECK-NEXT: .reg .b32 %r<2>;
302 ; CHECK-NEXT: // %bb.0:
303 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v2_i32_ri_param_0];
304 ; CHECK-NEXT: { // callseq 13, 0
305 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
306 ; CHECK-NEXT: st.param.v2.b32 [param0+0], {%r1, 2};
307 ; CHECK-NEXT: call.uni
308 ; CHECK-NEXT: call_v2_i32,
312 ; CHECK-NEXT: } // callseq 13
314 %struct.ri0 = insertvalue %struct.int2 poison, i32 %val, 0
315 %struct.ri1 = insertvalue %struct.int2 %struct.ri0, i32 2, 1
316 call void @call_v2_i32(%struct.int2 %struct.ri1)
320 define void @st_param_v2_i64_ii() {
321 ; CHECK-LABEL: st_param_v2_i64_ii(
325 ; CHECK-NEXT: // %bb.0:
326 ; CHECK-NEXT: { // callseq 14, 0
327 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
328 ; CHECK-NEXT: st.param.v2.b64 [param0+0], {1, 2};
329 ; CHECK-NEXT: call.uni
330 ; CHECK-NEXT: call_v2_i64,
334 ; CHECK-NEXT: } // callseq 14
336 call void @call_v2_i64(%struct.longlong2 { i64 1, i64 2 })
339 define void @st_param_v2_i64_ir(i64 %val) {
340 ; CHECK-LABEL: st_param_v2_i64_ir(
342 ; CHECK-NEXT: .reg .b64 %rd<2>;
344 ; CHECK-NEXT: // %bb.0:
345 ; CHECK-NEXT: ld.param.u64 %rd1, [st_param_v2_i64_ir_param_0];
346 ; CHECK-NEXT: { // callseq 15, 0
347 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
348 ; CHECK-NEXT: st.param.v2.b64 [param0+0], {1, %rd1};
349 ; CHECK-NEXT: call.uni
350 ; CHECK-NEXT: call_v2_i64,
354 ; CHECK-NEXT: } // callseq 15
356 %struct.ir0 = insertvalue %struct.longlong2 poison, i64 1, 0
357 %struct.ir1 = insertvalue %struct.longlong2 %struct.ir0, i64 %val, 1
358 call void @call_v2_i64(%struct.longlong2 %struct.ir1)
361 define void @st_param_v2_i64_ri(i64 %val) {
362 ; CHECK-LABEL: st_param_v2_i64_ri(
364 ; CHECK-NEXT: .reg .b64 %rd<2>;
366 ; CHECK-NEXT: // %bb.0:
367 ; CHECK-NEXT: ld.param.u64 %rd1, [st_param_v2_i64_ri_param_0];
368 ; CHECK-NEXT: { // callseq 16, 0
369 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
370 ; CHECK-NEXT: st.param.v2.b64 [param0+0], {%rd1, 2};
371 ; CHECK-NEXT: call.uni
372 ; CHECK-NEXT: call_v2_i64,
376 ; CHECK-NEXT: } // callseq 16
378 %struct.ri0 = insertvalue %struct.longlong2 poison, i64 %val, 0
379 %struct.ri1 = insertvalue %struct.longlong2 %struct.ri0, i64 2, 1
380 call void @call_v2_i64(%struct.longlong2 %struct.ri1)
384 define void @st_param_v2_f32_ii(float %val) {
385 ; CHECK-LABEL: st_param_v2_f32_ii(
389 ; CHECK-NEXT: // %bb.0:
390 ; CHECK-NEXT: { // callseq 17, 0
391 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
392 ; CHECK-NEXT: st.param.v2.f32 [param0+0], {0f3F800000, 0f40000000};
393 ; CHECK-NEXT: call.uni
394 ; CHECK-NEXT: call_v2_f32,
398 ; CHECK-NEXT: } // callseq 17
400 call void @call_v2_f32(%struct.float2 { float 1.0, float 2.0 })
403 define void @st_param_v2_f32_ir(float %val) {
404 ; CHECK-LABEL: st_param_v2_f32_ir(
406 ; CHECK-NEXT: .reg .f32 %f<2>;
408 ; CHECK-NEXT: // %bb.0:
409 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v2_f32_ir_param_0];
410 ; CHECK-NEXT: { // callseq 18, 0
411 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
412 ; CHECK-NEXT: st.param.v2.f32 [param0+0], {0f3F800000, %f1};
413 ; CHECK-NEXT: call.uni
414 ; CHECK-NEXT: call_v2_f32,
418 ; CHECK-NEXT: } // callseq 18
420 %struct.ir0 = insertvalue %struct.float2 poison, float 1.0, 0
421 %struct.ir1 = insertvalue %struct.float2 %struct.ir0, float %val, 1
422 call void @call_v2_f32(%struct.float2 %struct.ir1)
425 define void @st_param_v2_f32_ri(float %val) {
426 ; CHECK-LABEL: st_param_v2_f32_ri(
428 ; CHECK-NEXT: .reg .f32 %f<2>;
430 ; CHECK-NEXT: // %bb.0:
431 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v2_f32_ri_param_0];
432 ; CHECK-NEXT: { // callseq 19, 0
433 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
434 ; CHECK-NEXT: st.param.v2.f32 [param0+0], {%f1, 0f40000000};
435 ; CHECK-NEXT: call.uni
436 ; CHECK-NEXT: call_v2_f32,
440 ; CHECK-NEXT: } // callseq 19
442 %struct.ri0 = insertvalue %struct.float2 poison, float %val, 0
443 %struct.ri1 = insertvalue %struct.float2 %struct.ri0, float 2.0, 1
444 call void @call_v2_f32(%struct.float2 %struct.ri1)
448 define void @st_param_v2_f64_ii(double %val) {
449 ; CHECK-LABEL: st_param_v2_f64_ii(
453 ; CHECK-NEXT: // %bb.0:
454 ; CHECK-NEXT: { // callseq 20, 0
455 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
456 ; CHECK-NEXT: st.param.v2.f64 [param0+0], {0d3FF0000000000000, 0d4000000000000000};
457 ; CHECK-NEXT: call.uni
458 ; CHECK-NEXT: call_v2_f64,
462 ; CHECK-NEXT: } // callseq 20
464 call void @call_v2_f64(%struct.double2 { double 1.0, double 2.0 })
467 define void @st_param_v2_f64_ir(double %val) {
468 ; CHECK-LABEL: st_param_v2_f64_ir(
470 ; CHECK-NEXT: .reg .f64 %fd<2>;
472 ; CHECK-NEXT: // %bb.0:
473 ; CHECK-NEXT: ld.param.f64 %fd1, [st_param_v2_f64_ir_param_0];
474 ; CHECK-NEXT: { // callseq 21, 0
475 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
476 ; CHECK-NEXT: st.param.v2.f64 [param0+0], {0d3FF0000000000000, %fd1};
477 ; CHECK-NEXT: call.uni
478 ; CHECK-NEXT: call_v2_f64,
482 ; CHECK-NEXT: } // callseq 21
484 %struct.ir0 = insertvalue %struct.double2 poison, double 1.0, 0
485 %struct.ir1 = insertvalue %struct.double2 %struct.ir0, double %val, 1
486 call void @call_v2_f64(%struct.double2 %struct.ir1)
489 define void @st_param_v2_f64_ri(double %val) {
490 ; CHECK-LABEL: st_param_v2_f64_ri(
492 ; CHECK-NEXT: .reg .f64 %fd<2>;
494 ; CHECK-NEXT: // %bb.0:
495 ; CHECK-NEXT: ld.param.f64 %fd1, [st_param_v2_f64_ri_param_0];
496 ; CHECK-NEXT: { // callseq 22, 0
497 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
498 ; CHECK-NEXT: st.param.v2.f64 [param0+0], {%fd1, 0d4000000000000000};
499 ; CHECK-NEXT: call.uni
500 ; CHECK-NEXT: call_v2_f64,
504 ; CHECK-NEXT: } // callseq 22
506 %struct.ri0 = insertvalue %struct.double2 poison, double %val, 0
507 %struct.ri1 = insertvalue %struct.double2 %struct.ri0, double 2.0, 1
508 call void @call_v2_f64(%struct.double2 %struct.ri1)
512 declare void @call_v2_i8(%struct.char2 alignstack(2))
513 declare void @call_v2_i16(%struct.short2 alignstack(4))
514 declare void @call_v2_i32(%struct.int2 alignstack(8))
515 declare void @call_v2_i64(%struct.longlong2 alignstack(16))
516 declare void @call_v2_f32(%struct.float2 alignstack(8))
517 declare void @call_v2_f64(%struct.double2 alignstack(16))
519 define void @st_param_v4_i8_iiii() {
520 ; CHECK-LABEL: st_param_v4_i8_iiii(
524 ; CHECK-NEXT: // %bb.0:
525 ; CHECK-NEXT: { // callseq 23, 0
526 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
527 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, 2, 3, 4};
528 ; CHECK-NEXT: call.uni
529 ; CHECK-NEXT: call_v4_i8,
533 ; CHECK-NEXT: } // callseq 23
535 call void @call_v4_i8(%struct.char4 { i8 1, i8 2, i8 3, i8 4 })
538 define void @st_param_v4_i8_irrr(i8 %b, i8 %c, i8 %d) {
539 ; CHECK-LABEL: st_param_v4_i8_irrr(
541 ; CHECK-NEXT: .reg .b16 %rs<4>;
543 ; CHECK-NEXT: // %bb.0:
544 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_irrr_param_0];
545 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_irrr_param_1];
546 ; CHECK-NEXT: ld.param.u8 %rs3, [st_param_v4_i8_irrr_param_2];
547 ; CHECK-NEXT: { // callseq 24, 0
548 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
549 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, %rs1, %rs2, %rs3};
550 ; CHECK-NEXT: call.uni
551 ; CHECK-NEXT: call_v4_i8,
555 ; CHECK-NEXT: } // callseq 24
557 %struct.irrr0 = insertvalue %struct.char4 poison, i8 1, 0
558 %struct.irrr1 = insertvalue %struct.char4 %struct.irrr0, i8 %b, 1
559 %struct.irrr2 = insertvalue %struct.char4 %struct.irrr1, i8 %c, 2
560 %struct.irrr3 = insertvalue %struct.char4 %struct.irrr2, i8 %d, 3
561 call void @call_v4_i8(%struct.char4 %struct.irrr3)
564 define void @st_param_v4_i8_rirr(i8 %a, i8 %c, i8 %d) {
565 ; CHECK-LABEL: st_param_v4_i8_rirr(
567 ; CHECK-NEXT: .reg .b16 %rs<4>;
569 ; CHECK-NEXT: // %bb.0:
570 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_rirr_param_0];
571 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_rirr_param_1];
572 ; CHECK-NEXT: ld.param.u8 %rs3, [st_param_v4_i8_rirr_param_2];
573 ; CHECK-NEXT: { // callseq 25, 0
574 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
575 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, 2, %rs2, %rs3};
576 ; CHECK-NEXT: call.uni
577 ; CHECK-NEXT: call_v4_i8,
581 ; CHECK-NEXT: } // callseq 25
583 %struct.rirr0 = insertvalue %struct.char4 poison, i8 %a, 0
584 %struct.rirr1 = insertvalue %struct.char4 %struct.rirr0, i8 2, 1
585 %struct.rirr2 = insertvalue %struct.char4 %struct.rirr1, i8 %c, 2
586 %struct.rirr3 = insertvalue %struct.char4 %struct.rirr2, i8 %d, 3
587 call void @call_v4_i8(%struct.char4 %struct.rirr3)
590 define void @st_param_v4_i8_rrir(i8 %a, i8 %b, i8 %d) {
591 ; CHECK-LABEL: st_param_v4_i8_rrir(
593 ; CHECK-NEXT: .reg .b16 %rs<4>;
595 ; CHECK-NEXT: // %bb.0:
596 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_rrir_param_0];
597 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_rrir_param_1];
598 ; CHECK-NEXT: ld.param.u8 %rs3, [st_param_v4_i8_rrir_param_2];
599 ; CHECK-NEXT: { // callseq 26, 0
600 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
601 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, %rs2, 3, %rs3};
602 ; CHECK-NEXT: call.uni
603 ; CHECK-NEXT: call_v4_i8,
607 ; CHECK-NEXT: } // callseq 26
609 %struct.rrir0 = insertvalue %struct.char4 poison, i8 %a, 0
610 %struct.rrir1 = insertvalue %struct.char4 %struct.rrir0, i8 %b, 1
611 %struct.rrir2 = insertvalue %struct.char4 %struct.rrir1, i8 3, 2
612 %struct.rrir3 = insertvalue %struct.char4 %struct.rrir2, i8 %d, 3
613 call void @call_v4_i8(%struct.char4 %struct.rrir3)
616 define void @st_param_v4_i8_rrri(i8 %a, i8 %b, i8 %c) {
617 ; CHECK-LABEL: st_param_v4_i8_rrri(
619 ; CHECK-NEXT: .reg .b16 %rs<4>;
621 ; CHECK-NEXT: // %bb.0:
622 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_rrri_param_0];
623 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_rrri_param_1];
624 ; CHECK-NEXT: ld.param.u8 %rs3, [st_param_v4_i8_rrri_param_2];
625 ; CHECK-NEXT: { // callseq 27, 0
626 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
627 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, %rs2, %rs3, 4};
628 ; CHECK-NEXT: call.uni
629 ; CHECK-NEXT: call_v4_i8,
633 ; CHECK-NEXT: } // callseq 27
635 %struct.rrri0 = insertvalue %struct.char4 poison, i8 %a, 0
636 %struct.rrri1 = insertvalue %struct.char4 %struct.rrri0, i8 %b, 1
637 %struct.rrri2 = insertvalue %struct.char4 %struct.rrri1, i8 %c, 2
638 %struct.rrri3 = insertvalue %struct.char4 %struct.rrri2, i8 4, 3
639 call void @call_v4_i8(%struct.char4 %struct.rrri3)
642 define void @st_param_v4_i8_iirr(i8 %c, i8 %d) {
643 ; CHECK-LABEL: st_param_v4_i8_iirr(
645 ; CHECK-NEXT: .reg .b16 %rs<3>;
647 ; CHECK-NEXT: // %bb.0:
648 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_iirr_param_0];
649 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_iirr_param_1];
650 ; CHECK-NEXT: { // callseq 28, 0
651 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
652 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, 2, %rs1, %rs2};
653 ; CHECK-NEXT: call.uni
654 ; CHECK-NEXT: call_v4_i8,
658 ; CHECK-NEXT: } // callseq 28
660 %struct.iirr0 = insertvalue %struct.char4 poison, i8 1, 0
661 %struct.iirr1 = insertvalue %struct.char4 %struct.iirr0, i8 2, 1
662 %struct.iirr2 = insertvalue %struct.char4 %struct.iirr1, i8 %c, 2
663 %struct.iirr3 = insertvalue %struct.char4 %struct.iirr2, i8 %d, 3
664 call void @call_v4_i8(%struct.char4 %struct.iirr3)
667 define void @st_param_v4_i8_irir(i8 %b, i8 %d) {
668 ; CHECK-LABEL: st_param_v4_i8_irir(
670 ; CHECK-NEXT: .reg .b16 %rs<3>;
672 ; CHECK-NEXT: // %bb.0:
673 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_irir_param_0];
674 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_irir_param_1];
675 ; CHECK-NEXT: { // callseq 29, 0
676 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
677 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, %rs1, 3, %rs2};
678 ; CHECK-NEXT: call.uni
679 ; CHECK-NEXT: call_v4_i8,
683 ; CHECK-NEXT: } // callseq 29
685 %struct.irir0 = insertvalue %struct.char4 poison, i8 1, 0
686 %struct.irir1 = insertvalue %struct.char4 %struct.irir0, i8 %b, 1
687 %struct.irir2 = insertvalue %struct.char4 %struct.irir1, i8 3, 2
688 %struct.irir3 = insertvalue %struct.char4 %struct.irir2, i8 %d, 3
689 call void @call_v4_i8(%struct.char4 %struct.irir3)
692 define void @st_param_v4_i8_irri(i8 %b, i8 %c) {
693 ; CHECK-LABEL: st_param_v4_i8_irri(
695 ; CHECK-NEXT: .reg .b16 %rs<3>;
697 ; CHECK-NEXT: // %bb.0:
698 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_irri_param_0];
699 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_irri_param_1];
700 ; CHECK-NEXT: { // callseq 30, 0
701 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
702 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, %rs1, %rs2, 4};
703 ; CHECK-NEXT: call.uni
704 ; CHECK-NEXT: call_v4_i8,
708 ; CHECK-NEXT: } // callseq 30
710 %struct.irri0 = insertvalue %struct.char4 poison, i8 1, 0
711 %struct.irri1 = insertvalue %struct.char4 %struct.irri0, i8 %b, 1
712 %struct.irri2 = insertvalue %struct.char4 %struct.irri1, i8 %c, 2
713 %struct.irri3 = insertvalue %struct.char4 %struct.irri2, i8 4, 3
714 call void @call_v4_i8(%struct.char4 %struct.irri3)
717 define void @st_param_v4_i8_riir(i8 %a, i8 %d) {
718 ; CHECK-LABEL: st_param_v4_i8_riir(
720 ; CHECK-NEXT: .reg .b16 %rs<3>;
722 ; CHECK-NEXT: // %bb.0:
723 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_riir_param_0];
724 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_riir_param_1];
725 ; CHECK-NEXT: { // callseq 31, 0
726 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
727 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, 2, 3, %rs2};
728 ; CHECK-NEXT: call.uni
729 ; CHECK-NEXT: call_v4_i8,
733 ; CHECK-NEXT: } // callseq 31
735 %struct.riir0 = insertvalue %struct.char4 poison, i8 %a, 0
736 %struct.riir1 = insertvalue %struct.char4 %struct.riir0, i8 2, 1
737 %struct.riir2 = insertvalue %struct.char4 %struct.riir1, i8 3, 2
738 %struct.riir3 = insertvalue %struct.char4 %struct.riir2, i8 %d, 3
739 call void @call_v4_i8(%struct.char4 %struct.riir3)
742 define void @st_param_v4_i8_riri(i8 %a, i8 %c) {
743 ; CHECK-LABEL: st_param_v4_i8_riri(
745 ; CHECK-NEXT: .reg .b16 %rs<3>;
747 ; CHECK-NEXT: // %bb.0:
748 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_riri_param_0];
749 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_riri_param_1];
750 ; CHECK-NEXT: { // callseq 32, 0
751 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
752 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, 2, %rs2, 4};
753 ; CHECK-NEXT: call.uni
754 ; CHECK-NEXT: call_v4_i8,
758 ; CHECK-NEXT: } // callseq 32
760 %struct.riri0 = insertvalue %struct.char4 poison, i8 %a, 0
761 %struct.riri1 = insertvalue %struct.char4 %struct.riri0, i8 2, 1
762 %struct.riri2 = insertvalue %struct.char4 %struct.riri1, i8 %c, 2
763 %struct.riri3 = insertvalue %struct.char4 %struct.riri2, i8 4, 3
764 call void @call_v4_i8(%struct.char4 %struct.riri3)
767 define void @st_param_v4_i8_rrii(i8 %a, i8 %b) {
768 ; CHECK-LABEL: st_param_v4_i8_rrii(
770 ; CHECK-NEXT: .reg .b16 %rs<3>;
772 ; CHECK-NEXT: // %bb.0:
773 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_rrii_param_0];
774 ; CHECK-NEXT: ld.param.u8 %rs2, [st_param_v4_i8_rrii_param_1];
775 ; CHECK-NEXT: { // callseq 33, 0
776 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
777 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, %rs2, 3, 4};
778 ; CHECK-NEXT: call.uni
779 ; CHECK-NEXT: call_v4_i8,
783 ; CHECK-NEXT: } // callseq 33
785 %struct.rrii0 = insertvalue %struct.char4 poison, i8 %a, 0
786 %struct.rrii1 = insertvalue %struct.char4 %struct.rrii0, i8 %b, 1
787 %struct.rrii2 = insertvalue %struct.char4 %struct.rrii1, i8 3, 2
788 %struct.rrii3 = insertvalue %struct.char4 %struct.rrii2, i8 4, 3
789 call void @call_v4_i8(%struct.char4 %struct.rrii3)
792 define void @st_param_v4_i8_iiir(i8 %d) {
793 ; CHECK-LABEL: st_param_v4_i8_iiir(
795 ; CHECK-NEXT: .reg .b16 %rs<2>;
797 ; CHECK-NEXT: // %bb.0:
798 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_iiir_param_0];
799 ; CHECK-NEXT: { // callseq 34, 0
800 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
801 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, 2, 3, %rs1};
802 ; CHECK-NEXT: call.uni
803 ; CHECK-NEXT: call_v4_i8,
807 ; CHECK-NEXT: } // callseq 34
809 %struct.iiir0 = insertvalue %struct.char4 poison, i8 1, 0
810 %struct.iiir1 = insertvalue %struct.char4 %struct.iiir0, i8 2, 1
811 %struct.iiir2 = insertvalue %struct.char4 %struct.iiir1, i8 3, 2
812 %struct.iiir3 = insertvalue %struct.char4 %struct.iiir2, i8 %d, 3
813 call void @call_v4_i8(%struct.char4 %struct.iiir3)
816 define void @st_param_v4_i8_iiri(i8 %c) {
817 ; CHECK-LABEL: st_param_v4_i8_iiri(
819 ; CHECK-NEXT: .reg .b16 %rs<2>;
821 ; CHECK-NEXT: // %bb.0:
822 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_iiri_param_0];
823 ; CHECK-NEXT: { // callseq 35, 0
824 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
825 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, 2, %rs1, 4};
826 ; CHECK-NEXT: call.uni
827 ; CHECK-NEXT: call_v4_i8,
831 ; CHECK-NEXT: } // callseq 35
833 %struct.iiri0 = insertvalue %struct.char4 poison, i8 1, 0
834 %struct.iiri1 = insertvalue %struct.char4 %struct.iiri0, i8 2, 1
835 %struct.iiri2 = insertvalue %struct.char4 %struct.iiri1, i8 %c, 2
836 %struct.iiri3 = insertvalue %struct.char4 %struct.iiri2, i8 4, 3
837 call void @call_v4_i8(%struct.char4 %struct.iiri3)
840 define void @st_param_v4_i8_irii(i8 %b) {
841 ; CHECK-LABEL: st_param_v4_i8_irii(
843 ; CHECK-NEXT: .reg .b16 %rs<2>;
845 ; CHECK-NEXT: // %bb.0:
846 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_irii_param_0];
847 ; CHECK-NEXT: { // callseq 36, 0
848 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
849 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {1, %rs1, 3, 4};
850 ; CHECK-NEXT: call.uni
851 ; CHECK-NEXT: call_v4_i8,
855 ; CHECK-NEXT: } // callseq 36
857 %struct.irii0 = insertvalue %struct.char4 poison, i8 1, 0
858 %struct.irii1 = insertvalue %struct.char4 %struct.irii0, i8 %b, 1
859 %struct.irii2 = insertvalue %struct.char4 %struct.irii1, i8 3, 2
860 %struct.irii3 = insertvalue %struct.char4 %struct.irii2, i8 4, 3
861 call void @call_v4_i8(%struct.char4 %struct.irii3)
864 define void @st_param_v4_i8_riii(i8 %a) {
865 ; CHECK-LABEL: st_param_v4_i8_riii(
867 ; CHECK-NEXT: .reg .b16 %rs<2>;
869 ; CHECK-NEXT: // %bb.0:
870 ; CHECK-NEXT: ld.param.u8 %rs1, [st_param_v4_i8_riii_param_0];
871 ; CHECK-NEXT: { // callseq 37, 0
872 ; CHECK-NEXT: .param .align 4 .b8 param0[4];
873 ; CHECK-NEXT: st.param.v4.b8 [param0+0], {%rs1, 2, 3, 4};
874 ; CHECK-NEXT: call.uni
875 ; CHECK-NEXT: call_v4_i8,
879 ; CHECK-NEXT: } // callseq 37
881 %struct.riii0 = insertvalue %struct.char4 poison, i8 %a, 0
882 %struct.riii1 = insertvalue %struct.char4 %struct.riii0, i8 2, 1
883 %struct.riii2 = insertvalue %struct.char4 %struct.riii1, i8 3, 2
884 %struct.riii3 = insertvalue %struct.char4 %struct.riii2, i8 4, 3
885 call void @call_v4_i8(%struct.char4 %struct.riii3)
889 define void @st_param_v4_i16_iiii() {
890 ; CHECK-LABEL: st_param_v4_i16_iiii(
894 ; CHECK-NEXT: // %bb.0:
895 ; CHECK-NEXT: { // callseq 38, 0
896 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
897 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, 2, 3, 4};
898 ; CHECK-NEXT: call.uni
899 ; CHECK-NEXT: call_v4_i16,
903 ; CHECK-NEXT: } // callseq 38
905 call void @call_v4_i16(%struct.short4 { i16 1, i16 2, i16 3, i16 4 })
908 define void @st_param_v4_i16_irrr(i16 %b, i16 %c, i16 %d) {
909 ; CHECK-LABEL: st_param_v4_i16_irrr(
911 ; CHECK-NEXT: .reg .b16 %rs<4>;
913 ; CHECK-NEXT: // %bb.0:
914 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_irrr_param_0];
915 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_irrr_param_1];
916 ; CHECK-NEXT: ld.param.u16 %rs3, [st_param_v4_i16_irrr_param_2];
917 ; CHECK-NEXT: { // callseq 39, 0
918 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
919 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, %rs1, %rs2, %rs3};
920 ; CHECK-NEXT: call.uni
921 ; CHECK-NEXT: call_v4_i16,
925 ; CHECK-NEXT: } // callseq 39
927 %struct.irrr0 = insertvalue %struct.short4 poison, i16 1, 0
928 %struct.irrr1 = insertvalue %struct.short4 %struct.irrr0, i16 %b, 1
929 %struct.irrr2 = insertvalue %struct.short4 %struct.irrr1, i16 %c, 2
930 %struct.irrr3 = insertvalue %struct.short4 %struct.irrr2, i16 %d, 3
931 call void @call_v4_i16(%struct.short4 %struct.irrr3)
934 define void @st_param_v4_i16_rirr(i16 %a, i16 %c, i16 %d) {
935 ; CHECK-LABEL: st_param_v4_i16_rirr(
937 ; CHECK-NEXT: .reg .b16 %rs<4>;
939 ; CHECK-NEXT: // %bb.0:
940 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_rirr_param_0];
941 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_rirr_param_1];
942 ; CHECK-NEXT: ld.param.u16 %rs3, [st_param_v4_i16_rirr_param_2];
943 ; CHECK-NEXT: { // callseq 40, 0
944 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
945 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, 2, %rs2, %rs3};
946 ; CHECK-NEXT: call.uni
947 ; CHECK-NEXT: call_v4_i16,
951 ; CHECK-NEXT: } // callseq 40
953 %struct.rirr0 = insertvalue %struct.short4 poison, i16 %a, 0
954 %struct.rirr1 = insertvalue %struct.short4 %struct.rirr0, i16 2, 1
955 %struct.rirr2 = insertvalue %struct.short4 %struct.rirr1, i16 %c, 2
956 %struct.rirr3 = insertvalue %struct.short4 %struct.rirr2, i16 %d, 3
957 call void @call_v4_i16(%struct.short4 %struct.rirr3)
960 define void @st_param_v4_i16_rrir(i16 %a, i16 %b, i16 %d) {
961 ; CHECK-LABEL: st_param_v4_i16_rrir(
963 ; CHECK-NEXT: .reg .b16 %rs<4>;
965 ; CHECK-NEXT: // %bb.0:
966 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_rrir_param_0];
967 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_rrir_param_1];
968 ; CHECK-NEXT: ld.param.u16 %rs3, [st_param_v4_i16_rrir_param_2];
969 ; CHECK-NEXT: { // callseq 41, 0
970 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
971 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, %rs2, 3, %rs3};
972 ; CHECK-NEXT: call.uni
973 ; CHECK-NEXT: call_v4_i16,
977 ; CHECK-NEXT: } // callseq 41
979 %struct.rrir0 = insertvalue %struct.short4 poison, i16 %a, 0
980 %struct.rrir1 = insertvalue %struct.short4 %struct.rrir0, i16 %b, 1
981 %struct.rrir2 = insertvalue %struct.short4 %struct.rrir1, i16 3, 2
982 %struct.rrir3 = insertvalue %struct.short4 %struct.rrir2, i16 %d, 3
983 call void @call_v4_i16(%struct.short4 %struct.rrir3)
986 define void @st_param_v4_i16_rrri(i16 %a, i16 %b, i16 %c) {
987 ; CHECK-LABEL: st_param_v4_i16_rrri(
989 ; CHECK-NEXT: .reg .b16 %rs<4>;
991 ; CHECK-NEXT: // %bb.0:
992 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_rrri_param_0];
993 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_rrri_param_1];
994 ; CHECK-NEXT: ld.param.u16 %rs3, [st_param_v4_i16_rrri_param_2];
995 ; CHECK-NEXT: { // callseq 42, 0
996 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
997 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, %rs2, %rs3, 4};
998 ; CHECK-NEXT: call.uni
999 ; CHECK-NEXT: call_v4_i16,
1001 ; CHECK-NEXT: param0
1003 ; CHECK-NEXT: } // callseq 42
1005 %struct.rrri0 = insertvalue %struct.short4 poison, i16 %a, 0
1006 %struct.rrri1 = insertvalue %struct.short4 %struct.rrri0, i16 %b, 1
1007 %struct.rrri2 = insertvalue %struct.short4 %struct.rrri1, i16 %c, 2
1008 %struct.rrri3 = insertvalue %struct.short4 %struct.rrri2, i16 4, 3
1009 call void @call_v4_i16(%struct.short4 %struct.rrri3)
1012 define void @st_param_v4_i16_iirr(i16 %c, i16 %d) {
1013 ; CHECK-LABEL: st_param_v4_i16_iirr(
1015 ; CHECK-NEXT: .reg .b16 %rs<3>;
1017 ; CHECK-NEXT: // %bb.0:
1018 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_iirr_param_0];
1019 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_iirr_param_1];
1020 ; CHECK-NEXT: { // callseq 43, 0
1021 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1022 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, 2, %rs1, %rs2};
1023 ; CHECK-NEXT: call.uni
1024 ; CHECK-NEXT: call_v4_i16,
1026 ; CHECK-NEXT: param0
1028 ; CHECK-NEXT: } // callseq 43
1030 %struct.iirr0 = insertvalue %struct.short4 poison, i16 1, 0
1031 %struct.iirr1 = insertvalue %struct.short4 %struct.iirr0, i16 2, 1
1032 %struct.iirr2 = insertvalue %struct.short4 %struct.iirr1, i16 %c, 2
1033 %struct.iirr3 = insertvalue %struct.short4 %struct.iirr2, i16 %d, 3
1034 call void @call_v4_i16(%struct.short4 %struct.iirr3)
1037 define void @st_param_v4_i16_irir(i16 %b, i16 %d) {
1038 ; CHECK-LABEL: st_param_v4_i16_irir(
1040 ; CHECK-NEXT: .reg .b16 %rs<3>;
1042 ; CHECK-NEXT: // %bb.0:
1043 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_irir_param_0];
1044 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_irir_param_1];
1045 ; CHECK-NEXT: { // callseq 44, 0
1046 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1047 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, %rs1, 3, %rs2};
1048 ; CHECK-NEXT: call.uni
1049 ; CHECK-NEXT: call_v4_i16,
1051 ; CHECK-NEXT: param0
1053 ; CHECK-NEXT: } // callseq 44
1055 %struct.irir0 = insertvalue %struct.short4 poison, i16 1, 0
1056 %struct.irir1 = insertvalue %struct.short4 %struct.irir0, i16 %b, 1
1057 %struct.irir2 = insertvalue %struct.short4 %struct.irir1, i16 3, 2
1058 %struct.irir3 = insertvalue %struct.short4 %struct.irir2, i16 %d, 3
1059 call void @call_v4_i16(%struct.short4 %struct.irir3)
1062 define void @st_param_v4_i16_irri(i16 %b, i16 %c) {
1063 ; CHECK-LABEL: st_param_v4_i16_irri(
1065 ; CHECK-NEXT: .reg .b16 %rs<3>;
1067 ; CHECK-NEXT: // %bb.0:
1068 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_irri_param_0];
1069 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_irri_param_1];
1070 ; CHECK-NEXT: { // callseq 45, 0
1071 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1072 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, %rs1, %rs2, 4};
1073 ; CHECK-NEXT: call.uni
1074 ; CHECK-NEXT: call_v4_i16,
1076 ; CHECK-NEXT: param0
1078 ; CHECK-NEXT: } // callseq 45
1080 %struct.irri0 = insertvalue %struct.short4 poison, i16 1, 0
1081 %struct.irri1 = insertvalue %struct.short4 %struct.irri0, i16 %b, 1
1082 %struct.irri2 = insertvalue %struct.short4 %struct.irri1, i16 %c, 2
1083 %struct.irri3 = insertvalue %struct.short4 %struct.irri2, i16 4, 3
1084 call void @call_v4_i16(%struct.short4 %struct.irri3)
1087 define void @st_param_v4_i16_riir(i16 %a, i16 %d) {
1088 ; CHECK-LABEL: st_param_v4_i16_riir(
1090 ; CHECK-NEXT: .reg .b16 %rs<3>;
1092 ; CHECK-NEXT: // %bb.0:
1093 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_riir_param_0];
1094 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_riir_param_1];
1095 ; CHECK-NEXT: { // callseq 46, 0
1096 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1097 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, 2, 3, %rs2};
1098 ; CHECK-NEXT: call.uni
1099 ; CHECK-NEXT: call_v4_i16,
1101 ; CHECK-NEXT: param0
1103 ; CHECK-NEXT: } // callseq 46
1105 %struct.riir0 = insertvalue %struct.short4 poison, i16 %a, 0
1106 %struct.riir1 = insertvalue %struct.short4 %struct.riir0, i16 2, 1
1107 %struct.riir2 = insertvalue %struct.short4 %struct.riir1, i16 3, 2
1108 %struct.riir3 = insertvalue %struct.short4 %struct.riir2, i16 %d, 3
1109 call void @call_v4_i16(%struct.short4 %struct.riir3)
1112 define void @st_param_v4_i16_riri(i16 %a, i16 %c) {
1113 ; CHECK-LABEL: st_param_v4_i16_riri(
1115 ; CHECK-NEXT: .reg .b16 %rs<3>;
1117 ; CHECK-NEXT: // %bb.0:
1118 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_riri_param_0];
1119 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_riri_param_1];
1120 ; CHECK-NEXT: { // callseq 47, 0
1121 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1122 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, 2, %rs2, 4};
1123 ; CHECK-NEXT: call.uni
1124 ; CHECK-NEXT: call_v4_i16,
1126 ; CHECK-NEXT: param0
1128 ; CHECK-NEXT: } // callseq 47
1130 %struct.riri0 = insertvalue %struct.short4 poison, i16 %a, 0
1131 %struct.riri1 = insertvalue %struct.short4 %struct.riri0, i16 2, 1
1132 %struct.riri2 = insertvalue %struct.short4 %struct.riri1, i16 %c, 2
1133 %struct.riri3 = insertvalue %struct.short4 %struct.riri2, i16 4, 3
1134 call void @call_v4_i16(%struct.short4 %struct.riri3)
1137 define void @st_param_v4_i16_rrii(i16 %a, i16 %b) {
1138 ; CHECK-LABEL: st_param_v4_i16_rrii(
1140 ; CHECK-NEXT: .reg .b16 %rs<3>;
1142 ; CHECK-NEXT: // %bb.0:
1143 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_rrii_param_0];
1144 ; CHECK-NEXT: ld.param.u16 %rs2, [st_param_v4_i16_rrii_param_1];
1145 ; CHECK-NEXT: { // callseq 48, 0
1146 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1147 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, %rs2, 3, 4};
1148 ; CHECK-NEXT: call.uni
1149 ; CHECK-NEXT: call_v4_i16,
1151 ; CHECK-NEXT: param0
1153 ; CHECK-NEXT: } // callseq 48
1155 %struct.rrii0 = insertvalue %struct.short4 poison, i16 %a, 0
1156 %struct.rrii1 = insertvalue %struct.short4 %struct.rrii0, i16 %b, 1
1157 %struct.rrii2 = insertvalue %struct.short4 %struct.rrii1, i16 3, 2
1158 %struct.rrii3 = insertvalue %struct.short4 %struct.rrii2, i16 4, 3
1159 call void @call_v4_i16(%struct.short4 %struct.rrii3)
1162 define void @st_param_v4_i16_iiir(i16 %d) {
1163 ; CHECK-LABEL: st_param_v4_i16_iiir(
1165 ; CHECK-NEXT: .reg .b16 %rs<2>;
1167 ; CHECK-NEXT: // %bb.0:
1168 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_iiir_param_0];
1169 ; CHECK-NEXT: { // callseq 49, 0
1170 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1171 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, 2, 3, %rs1};
1172 ; CHECK-NEXT: call.uni
1173 ; CHECK-NEXT: call_v4_i16,
1175 ; CHECK-NEXT: param0
1177 ; CHECK-NEXT: } // callseq 49
1179 %struct.iiir0 = insertvalue %struct.short4 poison, i16 1, 0
1180 %struct.iiir1 = insertvalue %struct.short4 %struct.iiir0, i16 2, 1
1181 %struct.iiir2 = insertvalue %struct.short4 %struct.iiir1, i16 3, 2
1182 %struct.iiir3 = insertvalue %struct.short4 %struct.iiir2, i16 %d, 3
1183 call void @call_v4_i16(%struct.short4 %struct.iiir3)
1186 define void @st_param_v4_i16_iiri(i16 %c) {
1187 ; CHECK-LABEL: st_param_v4_i16_iiri(
1189 ; CHECK-NEXT: .reg .b16 %rs<2>;
1191 ; CHECK-NEXT: // %bb.0:
1192 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_iiri_param_0];
1193 ; CHECK-NEXT: { // callseq 50, 0
1194 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1195 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, 2, %rs1, 4};
1196 ; CHECK-NEXT: call.uni
1197 ; CHECK-NEXT: call_v4_i16,
1199 ; CHECK-NEXT: param0
1201 ; CHECK-NEXT: } // callseq 50
1203 %struct.iiri0 = insertvalue %struct.short4 poison, i16 1, 0
1204 %struct.iiri1 = insertvalue %struct.short4 %struct.iiri0, i16 2, 1
1205 %struct.iiri2 = insertvalue %struct.short4 %struct.iiri1, i16 %c, 2
1206 %struct.iiri3 = insertvalue %struct.short4 %struct.iiri2, i16 4, 3
1207 call void @call_v4_i16(%struct.short4 %struct.iiri3)
1210 define void @st_param_v4_i16_irii(i16 %b) {
1211 ; CHECK-LABEL: st_param_v4_i16_irii(
1213 ; CHECK-NEXT: .reg .b16 %rs<2>;
1215 ; CHECK-NEXT: // %bb.0:
1216 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_irii_param_0];
1217 ; CHECK-NEXT: { // callseq 51, 0
1218 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1219 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {1, %rs1, 3, 4};
1220 ; CHECK-NEXT: call.uni
1221 ; CHECK-NEXT: call_v4_i16,
1223 ; CHECK-NEXT: param0
1225 ; CHECK-NEXT: } // callseq 51
1227 %struct.irii0 = insertvalue %struct.short4 poison, i16 1, 0
1228 %struct.irii1 = insertvalue %struct.short4 %struct.irii0, i16 %b, 1
1229 %struct.irii2 = insertvalue %struct.short4 %struct.irii1, i16 3, 2
1230 %struct.irii3 = insertvalue %struct.short4 %struct.irii2, i16 4, 3
1231 call void @call_v4_i16(%struct.short4 %struct.irii3)
1234 define void @st_param_v4_i16_riii(i16 %a) {
1235 ; CHECK-LABEL: st_param_v4_i16_riii(
1237 ; CHECK-NEXT: .reg .b16 %rs<2>;
1239 ; CHECK-NEXT: // %bb.0:
1240 ; CHECK-NEXT: ld.param.u16 %rs1, [st_param_v4_i16_riii_param_0];
1241 ; CHECK-NEXT: { // callseq 52, 0
1242 ; CHECK-NEXT: .param .align 8 .b8 param0[8];
1243 ; CHECK-NEXT: st.param.v4.b16 [param0+0], {%rs1, 2, 3, 4};
1244 ; CHECK-NEXT: call.uni
1245 ; CHECK-NEXT: call_v4_i16,
1247 ; CHECK-NEXT: param0
1249 ; CHECK-NEXT: } // callseq 52
1251 %struct.riii0 = insertvalue %struct.short4 poison, i16 %a, 0
1252 %struct.riii1 = insertvalue %struct.short4 %struct.riii0, i16 2, 1
1253 %struct.riii2 = insertvalue %struct.short4 %struct.riii1, i16 3, 2
1254 %struct.riii3 = insertvalue %struct.short4 %struct.riii2, i16 4, 3
1255 call void @call_v4_i16(%struct.short4 %struct.riii3)
1259 define void @st_param_v4_i32_iiii() {
1260 ; CHECK-LABEL: st_param_v4_i32_iiii(
1264 ; CHECK-NEXT: // %bb.0:
1265 ; CHECK-NEXT: { // callseq 53, 0
1266 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1267 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, 2, 3, 4};
1268 ; CHECK-NEXT: call.uni
1269 ; CHECK-NEXT: call_v4_i32,
1271 ; CHECK-NEXT: param0
1273 ; CHECK-NEXT: } // callseq 53
1275 call void @call_v4_i32(%struct.int4 { i32 1, i32 2, i32 3, i32 4 })
1278 define void @st_param_v4_i32_irrr(i32 %b, i32 %c, i32 %d) {
1279 ; CHECK-LABEL: st_param_v4_i32_irrr(
1281 ; CHECK-NEXT: .reg .b32 %r<4>;
1283 ; CHECK-NEXT: // %bb.0:
1284 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_irrr_param_0];
1285 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_irrr_param_1];
1286 ; CHECK-NEXT: ld.param.u32 %r3, [st_param_v4_i32_irrr_param_2];
1287 ; CHECK-NEXT: { // callseq 54, 0
1288 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1289 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, %r1, %r2, %r3};
1290 ; CHECK-NEXT: call.uni
1291 ; CHECK-NEXT: call_v4_i32,
1293 ; CHECK-NEXT: param0
1295 ; CHECK-NEXT: } // callseq 54
1297 %struct.irrr0 = insertvalue %struct.int4 poison, i32 1, 0
1298 %struct.irrr1 = insertvalue %struct.int4 %struct.irrr0, i32 %b, 1
1299 %struct.irrr2 = insertvalue %struct.int4 %struct.irrr1, i32 %c, 2
1300 %struct.irrr3 = insertvalue %struct.int4 %struct.irrr2, i32 %d, 3
1301 call void @call_v4_i32(%struct.int4 %struct.irrr3)
1304 define void @st_param_v4_i32_rirr(i32 %a, i32 %c, i32 %d) {
1305 ; CHECK-LABEL: st_param_v4_i32_rirr(
1307 ; CHECK-NEXT: .reg .b32 %r<4>;
1309 ; CHECK-NEXT: // %bb.0:
1310 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_rirr_param_0];
1311 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_rirr_param_1];
1312 ; CHECK-NEXT: ld.param.u32 %r3, [st_param_v4_i32_rirr_param_2];
1313 ; CHECK-NEXT: { // callseq 55, 0
1314 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1315 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, 2, %r2, %r3};
1316 ; CHECK-NEXT: call.uni
1317 ; CHECK-NEXT: call_v4_i32,
1319 ; CHECK-NEXT: param0
1321 ; CHECK-NEXT: } // callseq 55
1323 %struct.rirr0 = insertvalue %struct.int4 poison, i32 %a, 0
1324 %struct.rirr1 = insertvalue %struct.int4 %struct.rirr0, i32 2, 1
1325 %struct.rirr2 = insertvalue %struct.int4 %struct.rirr1, i32 %c, 2
1326 %struct.rirr3 = insertvalue %struct.int4 %struct.rirr2, i32 %d, 3
1327 call void @call_v4_i32(%struct.int4 %struct.rirr3)
1330 define void @st_param_v4_i32_rrir(i32 %a, i32 %b, i32 %d) {
1331 ; CHECK-LABEL: st_param_v4_i32_rrir(
1333 ; CHECK-NEXT: .reg .b32 %r<4>;
1335 ; CHECK-NEXT: // %bb.0:
1336 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_rrir_param_0];
1337 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_rrir_param_1];
1338 ; CHECK-NEXT: ld.param.u32 %r3, [st_param_v4_i32_rrir_param_2];
1339 ; CHECK-NEXT: { // callseq 56, 0
1340 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1341 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, %r2, 3, %r3};
1342 ; CHECK-NEXT: call.uni
1343 ; CHECK-NEXT: call_v4_i32,
1345 ; CHECK-NEXT: param0
1347 ; CHECK-NEXT: } // callseq 56
1349 %struct.rrir0 = insertvalue %struct.int4 poison, i32 %a, 0
1350 %struct.rrir1 = insertvalue %struct.int4 %struct.rrir0, i32 %b, 1
1351 %struct.rrir2 = insertvalue %struct.int4 %struct.rrir1, i32 3, 2
1352 %struct.rrir3 = insertvalue %struct.int4 %struct.rrir2, i32 %d, 3
1353 call void @call_v4_i32(%struct.int4 %struct.rrir3)
1356 define void @st_param_v4_i32_rrri(i32 %a, i32 %b, i32 %c) {
1357 ; CHECK-LABEL: st_param_v4_i32_rrri(
1359 ; CHECK-NEXT: .reg .b32 %r<4>;
1361 ; CHECK-NEXT: // %bb.0:
1362 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_rrri_param_0];
1363 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_rrri_param_1];
1364 ; CHECK-NEXT: ld.param.u32 %r3, [st_param_v4_i32_rrri_param_2];
1365 ; CHECK-NEXT: { // callseq 57, 0
1366 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1367 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, %r2, %r3, 4};
1368 ; CHECK-NEXT: call.uni
1369 ; CHECK-NEXT: call_v4_i32,
1371 ; CHECK-NEXT: param0
1373 ; CHECK-NEXT: } // callseq 57
1375 %struct.rrri0 = insertvalue %struct.int4 poison, i32 %a, 0
1376 %struct.rrri1 = insertvalue %struct.int4 %struct.rrri0, i32 %b, 1
1377 %struct.rrri2 = insertvalue %struct.int4 %struct.rrri1, i32 %c, 2
1378 %struct.rrri3 = insertvalue %struct.int4 %struct.rrri2, i32 4, 3
1379 call void @call_v4_i32(%struct.int4 %struct.rrri3)
1382 define void @st_param_v4_i32_iirr(i32 %c, i32 %d) {
1383 ; CHECK-LABEL: st_param_v4_i32_iirr(
1385 ; CHECK-NEXT: .reg .b32 %r<3>;
1387 ; CHECK-NEXT: // %bb.0:
1388 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_iirr_param_0];
1389 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_iirr_param_1];
1390 ; CHECK-NEXT: { // callseq 58, 0
1391 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1392 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, 2, %r1, %r2};
1393 ; CHECK-NEXT: call.uni
1394 ; CHECK-NEXT: call_v4_i32,
1396 ; CHECK-NEXT: param0
1398 ; CHECK-NEXT: } // callseq 58
1400 %struct.iirr0 = insertvalue %struct.int4 poison, i32 1, 0
1401 %struct.iirr1 = insertvalue %struct.int4 %struct.iirr0, i32 2, 1
1402 %struct.iirr2 = insertvalue %struct.int4 %struct.iirr1, i32 %c, 2
1403 %struct.iirr3 = insertvalue %struct.int4 %struct.iirr2, i32 %d, 3
1404 call void @call_v4_i32(%struct.int4 %struct.iirr3)
1407 define void @st_param_v4_i32_irir(i32 %b, i32 %d) {
1408 ; CHECK-LABEL: st_param_v4_i32_irir(
1410 ; CHECK-NEXT: .reg .b32 %r<3>;
1412 ; CHECK-NEXT: // %bb.0:
1413 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_irir_param_0];
1414 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_irir_param_1];
1415 ; CHECK-NEXT: { // callseq 59, 0
1416 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1417 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, %r1, 3, %r2};
1418 ; CHECK-NEXT: call.uni
1419 ; CHECK-NEXT: call_v4_i32,
1421 ; CHECK-NEXT: param0
1423 ; CHECK-NEXT: } // callseq 59
1425 %struct.irir0 = insertvalue %struct.int4 poison, i32 1, 0
1426 %struct.irir1 = insertvalue %struct.int4 %struct.irir0, i32 %b, 1
1427 %struct.irir2 = insertvalue %struct.int4 %struct.irir1, i32 3, 2
1428 %struct.irir3 = insertvalue %struct.int4 %struct.irir2, i32 %d, 3
1429 call void @call_v4_i32(%struct.int4 %struct.irir3)
1432 define void @st_param_v4_i32_irri(i32 %b, i32 %c) {
1433 ; CHECK-LABEL: st_param_v4_i32_irri(
1435 ; CHECK-NEXT: .reg .b32 %r<3>;
1437 ; CHECK-NEXT: // %bb.0:
1438 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_irri_param_0];
1439 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_irri_param_1];
1440 ; CHECK-NEXT: { // callseq 60, 0
1441 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1442 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, %r1, %r2, 4};
1443 ; CHECK-NEXT: call.uni
1444 ; CHECK-NEXT: call_v4_i32,
1446 ; CHECK-NEXT: param0
1448 ; CHECK-NEXT: } // callseq 60
1450 %struct.irri0 = insertvalue %struct.int4 poison, i32 1, 0
1451 %struct.irri1 = insertvalue %struct.int4 %struct.irri0, i32 %b, 1
1452 %struct.irri2 = insertvalue %struct.int4 %struct.irri1, i32 %c, 2
1453 %struct.irri3 = insertvalue %struct.int4 %struct.irri2, i32 4, 3
1454 call void @call_v4_i32(%struct.int4 %struct.irri3)
1457 define void @st_param_v4_i32_riir(i32 %a, i32 %d) {
1458 ; CHECK-LABEL: st_param_v4_i32_riir(
1460 ; CHECK-NEXT: .reg .b32 %r<3>;
1462 ; CHECK-NEXT: // %bb.0:
1463 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_riir_param_0];
1464 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_riir_param_1];
1465 ; CHECK-NEXT: { // callseq 61, 0
1466 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1467 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, 2, 3, %r2};
1468 ; CHECK-NEXT: call.uni
1469 ; CHECK-NEXT: call_v4_i32,
1471 ; CHECK-NEXT: param0
1473 ; CHECK-NEXT: } // callseq 61
1475 %struct.riir0 = insertvalue %struct.int4 poison, i32 %a, 0
1476 %struct.riir1 = insertvalue %struct.int4 %struct.riir0, i32 2, 1
1477 %struct.riir2 = insertvalue %struct.int4 %struct.riir1, i32 3, 2
1478 %struct.riir3 = insertvalue %struct.int4 %struct.riir2, i32 %d, 3
1479 call void @call_v4_i32(%struct.int4 %struct.riir3)
1482 define void @st_param_v4_i32_riri(i32 %a, i32 %c) {
1483 ; CHECK-LABEL: st_param_v4_i32_riri(
1485 ; CHECK-NEXT: .reg .b32 %r<3>;
1487 ; CHECK-NEXT: // %bb.0:
1488 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_riri_param_0];
1489 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_riri_param_1];
1490 ; CHECK-NEXT: { // callseq 62, 0
1491 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1492 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, 2, %r2, 4};
1493 ; CHECK-NEXT: call.uni
1494 ; CHECK-NEXT: call_v4_i32,
1496 ; CHECK-NEXT: param0
1498 ; CHECK-NEXT: } // callseq 62
1500 %struct.riri0 = insertvalue %struct.int4 poison, i32 %a, 0
1501 %struct.riri1 = insertvalue %struct.int4 %struct.riri0, i32 2, 1
1502 %struct.riri2 = insertvalue %struct.int4 %struct.riri1, i32 %c, 2
1503 %struct.riri3 = insertvalue %struct.int4 %struct.riri2, i32 4, 3
1504 call void @call_v4_i32(%struct.int4 %struct.riri3)
1507 define void @st_param_v4_i32_rrii(i32 %a, i32 %b) {
1508 ; CHECK-LABEL: st_param_v4_i32_rrii(
1510 ; CHECK-NEXT: .reg .b32 %r<3>;
1512 ; CHECK-NEXT: // %bb.0:
1513 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_rrii_param_0];
1514 ; CHECK-NEXT: ld.param.u32 %r2, [st_param_v4_i32_rrii_param_1];
1515 ; CHECK-NEXT: { // callseq 63, 0
1516 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1517 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, %r2, 3, 4};
1518 ; CHECK-NEXT: call.uni
1519 ; CHECK-NEXT: call_v4_i32,
1521 ; CHECK-NEXT: param0
1523 ; CHECK-NEXT: } // callseq 63
1525 %struct.rrii0 = insertvalue %struct.int4 poison, i32 %a, 0
1526 %struct.rrii1 = insertvalue %struct.int4 %struct.rrii0, i32 %b, 1
1527 %struct.rrii2 = insertvalue %struct.int4 %struct.rrii1, i32 3, 2
1528 %struct.rrii3 = insertvalue %struct.int4 %struct.rrii2, i32 4, 3
1529 call void @call_v4_i32(%struct.int4 %struct.rrii3)
1532 define void @st_param_v4_i32_iiir(i32 %d) {
1533 ; CHECK-LABEL: st_param_v4_i32_iiir(
1535 ; CHECK-NEXT: .reg .b32 %r<2>;
1537 ; CHECK-NEXT: // %bb.0:
1538 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_iiir_param_0];
1539 ; CHECK-NEXT: { // callseq 64, 0
1540 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1541 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, 2, 3, %r1};
1542 ; CHECK-NEXT: call.uni
1543 ; CHECK-NEXT: call_v4_i32,
1545 ; CHECK-NEXT: param0
1547 ; CHECK-NEXT: } // callseq 64
1549 %struct.iiir0 = insertvalue %struct.int4 poison, i32 1, 0
1550 %struct.iiir1 = insertvalue %struct.int4 %struct.iiir0, i32 2, 1
1551 %struct.iiir2 = insertvalue %struct.int4 %struct.iiir1, i32 3, 2
1552 %struct.iiir3 = insertvalue %struct.int4 %struct.iiir2, i32 %d, 3
1553 call void @call_v4_i32(%struct.int4 %struct.iiir3)
1556 define void @st_param_v4_i32_iiri(i32 %c) {
1557 ; CHECK-LABEL: st_param_v4_i32_iiri(
1559 ; CHECK-NEXT: .reg .b32 %r<2>;
1561 ; CHECK-NEXT: // %bb.0:
1562 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_iiri_param_0];
1563 ; CHECK-NEXT: { // callseq 65, 0
1564 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1565 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, 2, %r1, 4};
1566 ; CHECK-NEXT: call.uni
1567 ; CHECK-NEXT: call_v4_i32,
1569 ; CHECK-NEXT: param0
1571 ; CHECK-NEXT: } // callseq 65
1573 %struct.iiri0 = insertvalue %struct.int4 poison, i32 1, 0
1574 %struct.iiri1 = insertvalue %struct.int4 %struct.iiri0, i32 2, 1
1575 %struct.iiri2 = insertvalue %struct.int4 %struct.iiri1, i32 %c, 2
1576 %struct.iiri3 = insertvalue %struct.int4 %struct.iiri2, i32 4, 3
1577 call void @call_v4_i32(%struct.int4 %struct.iiri3)
1580 define void @st_param_v4_i32_irii(i32 %b) {
1581 ; CHECK-LABEL: st_param_v4_i32_irii(
1583 ; CHECK-NEXT: .reg .b32 %r<2>;
1585 ; CHECK-NEXT: // %bb.0:
1586 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_irii_param_0];
1587 ; CHECK-NEXT: { // callseq 66, 0
1588 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1589 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {1, %r1, 3, 4};
1590 ; CHECK-NEXT: call.uni
1591 ; CHECK-NEXT: call_v4_i32,
1593 ; CHECK-NEXT: param0
1595 ; CHECK-NEXT: } // callseq 66
1597 %struct.irii0 = insertvalue %struct.int4 poison, i32 1, 0
1598 %struct.irii1 = insertvalue %struct.int4 %struct.irii0, i32 %b, 1
1599 %struct.irii2 = insertvalue %struct.int4 %struct.irii1, i32 3, 2
1600 %struct.irii3 = insertvalue %struct.int4 %struct.irii2, i32 4, 3
1601 call void @call_v4_i32(%struct.int4 %struct.irii3)
1604 define void @st_param_v4_i32_riii(i32 %a) {
1605 ; CHECK-LABEL: st_param_v4_i32_riii(
1607 ; CHECK-NEXT: .reg .b32 %r<2>;
1609 ; CHECK-NEXT: // %bb.0:
1610 ; CHECK-NEXT: ld.param.u32 %r1, [st_param_v4_i32_riii_param_0];
1611 ; CHECK-NEXT: { // callseq 67, 0
1612 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1613 ; CHECK-NEXT: st.param.v4.b32 [param0+0], {%r1, 2, 3, 4};
1614 ; CHECK-NEXT: call.uni
1615 ; CHECK-NEXT: call_v4_i32,
1617 ; CHECK-NEXT: param0
1619 ; CHECK-NEXT: } // callseq 67
1621 %struct.riii0 = insertvalue %struct.int4 poison, i32 %a, 0
1622 %struct.riii1 = insertvalue %struct.int4 %struct.riii0, i32 2, 1
1623 %struct.riii2 = insertvalue %struct.int4 %struct.riii1, i32 3, 2
1624 %struct.riii3 = insertvalue %struct.int4 %struct.riii2, i32 4, 3
1625 call void @call_v4_i32(%struct.int4 %struct.riii3)
1629 define void @st_param_v4_f32_iiii() {
1630 ; CHECK-LABEL: st_param_v4_f32_iiii(
1634 ; CHECK-NEXT: // %bb.0:
1635 ; CHECK-NEXT: { // callseq 68, 0
1636 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1637 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, 0f40000000, 0f40400000, 0f40800000};
1638 ; CHECK-NEXT: call.uni
1639 ; CHECK-NEXT: call_v4_f32,
1641 ; CHECK-NEXT: param0
1643 ; CHECK-NEXT: } // callseq 68
1645 call void @call_v4_f32(%struct.float4 { float 1.0, float 2.0, float 3.0, float 4.0 })
1648 define void @st_param_v4_f32_irrr(float %b, float %c, float %d) {
1649 ; CHECK-LABEL: st_param_v4_f32_irrr(
1651 ; CHECK-NEXT: .reg .f32 %f<4>;
1653 ; CHECK-NEXT: // %bb.0:
1654 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_irrr_param_0];
1655 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_irrr_param_1];
1656 ; CHECK-NEXT: ld.param.f32 %f3, [st_param_v4_f32_irrr_param_2];
1657 ; CHECK-NEXT: { // callseq 69, 0
1658 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1659 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, %f1, %f2, %f3};
1660 ; CHECK-NEXT: call.uni
1661 ; CHECK-NEXT: call_v4_f32,
1663 ; CHECK-NEXT: param0
1665 ; CHECK-NEXT: } // callseq 69
1667 %struct.irrr0 = insertvalue %struct.float4 poison, float 1.0, 0
1668 %struct.irrr1 = insertvalue %struct.float4 %struct.irrr0, float %b, 1
1669 %struct.irrr2 = insertvalue %struct.float4 %struct.irrr1, float %c, 2
1670 %struct.irrr3 = insertvalue %struct.float4 %struct.irrr2, float %d, 3
1671 call void @call_v4_f32(%struct.float4 %struct.irrr3)
1674 define void @st_param_v4_f32_rirr(float %a, float %c, float %d) {
1675 ; CHECK-LABEL: st_param_v4_f32_rirr(
1677 ; CHECK-NEXT: .reg .f32 %f<4>;
1679 ; CHECK-NEXT: // %bb.0:
1680 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_rirr_param_0];
1681 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_rirr_param_1];
1682 ; CHECK-NEXT: ld.param.f32 %f3, [st_param_v4_f32_rirr_param_2];
1683 ; CHECK-NEXT: { // callseq 70, 0
1684 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1685 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, 0f40000000, %f2, %f3};
1686 ; CHECK-NEXT: call.uni
1687 ; CHECK-NEXT: call_v4_f32,
1689 ; CHECK-NEXT: param0
1691 ; CHECK-NEXT: } // callseq 70
1693 %struct.rirr0 = insertvalue %struct.float4 poison, float %a, 0
1694 %struct.rirr1 = insertvalue %struct.float4 %struct.rirr0, float 2.0, 1
1695 %struct.rirr2 = insertvalue %struct.float4 %struct.rirr1, float %c, 2
1696 %struct.rirr3 = insertvalue %struct.float4 %struct.rirr2, float %d, 3
1697 call void @call_v4_f32(%struct.float4 %struct.rirr3)
1700 define void @st_param_v4_f32_rrir(float %a, float %b, float %d) {
1701 ; CHECK-LABEL: st_param_v4_f32_rrir(
1703 ; CHECK-NEXT: .reg .f32 %f<4>;
1705 ; CHECK-NEXT: // %bb.0:
1706 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_rrir_param_0];
1707 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_rrir_param_1];
1708 ; CHECK-NEXT: ld.param.f32 %f3, [st_param_v4_f32_rrir_param_2];
1709 ; CHECK-NEXT: { // callseq 71, 0
1710 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1711 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, %f2, 0f40400000, %f3};
1712 ; CHECK-NEXT: call.uni
1713 ; CHECK-NEXT: call_v4_f32,
1715 ; CHECK-NEXT: param0
1717 ; CHECK-NEXT: } // callseq 71
1719 %struct.rrir0 = insertvalue %struct.float4 poison, float %a, 0
1720 %struct.rrir1 = insertvalue %struct.float4 %struct.rrir0, float %b, 1
1721 %struct.rrir2 = insertvalue %struct.float4 %struct.rrir1, float 3.0, 2
1722 %struct.rrir3 = insertvalue %struct.float4 %struct.rrir2, float %d, 3
1723 call void @call_v4_f32(%struct.float4 %struct.rrir3)
1726 define void @st_param_v4_f32_rrri(float %a, float %b, float %c) {
1727 ; CHECK-LABEL: st_param_v4_f32_rrri(
1729 ; CHECK-NEXT: .reg .f32 %f<4>;
1731 ; CHECK-NEXT: // %bb.0:
1732 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_rrri_param_0];
1733 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_rrri_param_1];
1734 ; CHECK-NEXT: ld.param.f32 %f3, [st_param_v4_f32_rrri_param_2];
1735 ; CHECK-NEXT: { // callseq 72, 0
1736 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1737 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, %f2, %f3, 0f40800000};
1738 ; CHECK-NEXT: call.uni
1739 ; CHECK-NEXT: call_v4_f32,
1741 ; CHECK-NEXT: param0
1743 ; CHECK-NEXT: } // callseq 72
1745 %struct.rrri0 = insertvalue %struct.float4 poison, float %a, 0
1746 %struct.rrri1 = insertvalue %struct.float4 %struct.rrri0, float %b, 1
1747 %struct.rrri2 = insertvalue %struct.float4 %struct.rrri1, float %c, 2
1748 %struct.rrri3 = insertvalue %struct.float4 %struct.rrri2, float 4.0, 3
1749 call void @call_v4_f32(%struct.float4 %struct.rrri3)
1752 define void @st_param_v4_f32_iirr(float %c, float %d) {
1753 ; CHECK-LABEL: st_param_v4_f32_iirr(
1755 ; CHECK-NEXT: .reg .f32 %f<3>;
1757 ; CHECK-NEXT: // %bb.0:
1758 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_iirr_param_0];
1759 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_iirr_param_1];
1760 ; CHECK-NEXT: { // callseq 73, 0
1761 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1762 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, 0f40000000, %f1, %f2};
1763 ; CHECK-NEXT: call.uni
1764 ; CHECK-NEXT: call_v4_f32,
1766 ; CHECK-NEXT: param0
1768 ; CHECK-NEXT: } // callseq 73
1770 %struct.iirr0 = insertvalue %struct.float4 poison, float 1.0, 0
1771 %struct.iirr1 = insertvalue %struct.float4 %struct.iirr0, float 2.0, 1
1772 %struct.iirr2 = insertvalue %struct.float4 %struct.iirr1, float %c, 2
1773 %struct.iirr3 = insertvalue %struct.float4 %struct.iirr2, float %d, 3
1774 call void @call_v4_f32(%struct.float4 %struct.iirr3)
1777 define void @st_param_v4_f32_irir(float %b, float %d) {
1778 ; CHECK-LABEL: st_param_v4_f32_irir(
1780 ; CHECK-NEXT: .reg .f32 %f<3>;
1782 ; CHECK-NEXT: // %bb.0:
1783 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_irir_param_0];
1784 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_irir_param_1];
1785 ; CHECK-NEXT: { // callseq 74, 0
1786 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1787 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, %f1, 0f40400000, %f2};
1788 ; CHECK-NEXT: call.uni
1789 ; CHECK-NEXT: call_v4_f32,
1791 ; CHECK-NEXT: param0
1793 ; CHECK-NEXT: } // callseq 74
1795 %struct.irir0 = insertvalue %struct.float4 poison, float 1.0, 0
1796 %struct.irir1 = insertvalue %struct.float4 %struct.irir0, float %b, 1
1797 %struct.irir2 = insertvalue %struct.float4 %struct.irir1, float 3.0, 2
1798 %struct.irir3 = insertvalue %struct.float4 %struct.irir2, float %d, 3
1799 call void @call_v4_f32(%struct.float4 %struct.irir3)
1802 define void @st_param_v4_f32_irri(float %b, float %c) {
1803 ; CHECK-LABEL: st_param_v4_f32_irri(
1805 ; CHECK-NEXT: .reg .f32 %f<3>;
1807 ; CHECK-NEXT: // %bb.0:
1808 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_irri_param_0];
1809 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_irri_param_1];
1810 ; CHECK-NEXT: { // callseq 75, 0
1811 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1812 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, %f1, %f2, 0f40800000};
1813 ; CHECK-NEXT: call.uni
1814 ; CHECK-NEXT: call_v4_f32,
1816 ; CHECK-NEXT: param0
1818 ; CHECK-NEXT: } // callseq 75
1820 %struct.irri0 = insertvalue %struct.float4 poison, float 1.0, 0
1821 %struct.irri1 = insertvalue %struct.float4 %struct.irri0, float %b, 1
1822 %struct.irri2 = insertvalue %struct.float4 %struct.irri1, float %c, 2
1823 %struct.irri3 = insertvalue %struct.float4 %struct.irri2, float 4.0, 3
1824 call void @call_v4_f32(%struct.float4 %struct.irri3)
1827 define void @st_param_v4_f32_riir(float %a, float %d) {
1828 ; CHECK-LABEL: st_param_v4_f32_riir(
1830 ; CHECK-NEXT: .reg .f32 %f<3>;
1832 ; CHECK-NEXT: // %bb.0:
1833 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_riir_param_0];
1834 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_riir_param_1];
1835 ; CHECK-NEXT: { // callseq 76, 0
1836 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1837 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, 0f40000000, 0f40400000, %f2};
1838 ; CHECK-NEXT: call.uni
1839 ; CHECK-NEXT: call_v4_f32,
1841 ; CHECK-NEXT: param0
1843 ; CHECK-NEXT: } // callseq 76
1845 %struct.riir0 = insertvalue %struct.float4 poison, float %a, 0
1846 %struct.riir1 = insertvalue %struct.float4 %struct.riir0, float 2.0, 1
1847 %struct.riir2 = insertvalue %struct.float4 %struct.riir1, float 3.0, 2
1848 %struct.riir3 = insertvalue %struct.float4 %struct.riir2, float %d, 3
1849 call void @call_v4_f32(%struct.float4 %struct.riir3)
1852 define void @st_param_v4_f32_riri(float %a, float %c) {
1853 ; CHECK-LABEL: st_param_v4_f32_riri(
1855 ; CHECK-NEXT: .reg .f32 %f<3>;
1857 ; CHECK-NEXT: // %bb.0:
1858 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_riri_param_0];
1859 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_riri_param_1];
1860 ; CHECK-NEXT: { // callseq 77, 0
1861 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1862 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, 0f40000000, %f2, 0f40800000};
1863 ; CHECK-NEXT: call.uni
1864 ; CHECK-NEXT: call_v4_f32,
1866 ; CHECK-NEXT: param0
1868 ; CHECK-NEXT: } // callseq 77
1870 %struct.riri0 = insertvalue %struct.float4 poison, float %a, 0
1871 %struct.riri1 = insertvalue %struct.float4 %struct.riri0, float 2.0, 1
1872 %struct.riri2 = insertvalue %struct.float4 %struct.riri1, float %c, 2
1873 %struct.riri3 = insertvalue %struct.float4 %struct.riri2, float 4.0, 3
1874 call void @call_v4_f32(%struct.float4 %struct.riri3)
1877 define void @st_param_v4_f32_rrii(float %a, float %b) {
1878 ; CHECK-LABEL: st_param_v4_f32_rrii(
1880 ; CHECK-NEXT: .reg .f32 %f<3>;
1882 ; CHECK-NEXT: // %bb.0:
1883 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_rrii_param_0];
1884 ; CHECK-NEXT: ld.param.f32 %f2, [st_param_v4_f32_rrii_param_1];
1885 ; CHECK-NEXT: { // callseq 78, 0
1886 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1887 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, %f2, 0f40400000, 0f40800000};
1888 ; CHECK-NEXT: call.uni
1889 ; CHECK-NEXT: call_v4_f32,
1891 ; CHECK-NEXT: param0
1893 ; CHECK-NEXT: } // callseq 78
1895 %struct.rrii0 = insertvalue %struct.float4 poison, float %a, 0
1896 %struct.rrii1 = insertvalue %struct.float4 %struct.rrii0, float %b, 1
1897 %struct.rrii2 = insertvalue %struct.float4 %struct.rrii1, float 3.0, 2
1898 %struct.rrii3 = insertvalue %struct.float4 %struct.rrii2, float 4.0, 3
1899 call void @call_v4_f32(%struct.float4 %struct.rrii3)
1902 define void @st_param_v4_f32_iiir(float %d) {
1903 ; CHECK-LABEL: st_param_v4_f32_iiir(
1905 ; CHECK-NEXT: .reg .f32 %f<2>;
1907 ; CHECK-NEXT: // %bb.0:
1908 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_iiir_param_0];
1909 ; CHECK-NEXT: { // callseq 79, 0
1910 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1911 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, 0f40000000, 0f40400000, %f1};
1912 ; CHECK-NEXT: call.uni
1913 ; CHECK-NEXT: call_v4_f32,
1915 ; CHECK-NEXT: param0
1917 ; CHECK-NEXT: } // callseq 79
1919 %struct.iiir0 = insertvalue %struct.float4 poison, float 1.0, 0
1920 %struct.iiir1 = insertvalue %struct.float4 %struct.iiir0, float 2.0, 1
1921 %struct.iiir2 = insertvalue %struct.float4 %struct.iiir1, float 3.0, 2
1922 %struct.iiir3 = insertvalue %struct.float4 %struct.iiir2, float %d, 3
1923 call void @call_v4_f32(%struct.float4 %struct.iiir3)
1926 define void @st_param_v4_f32_iiri(float %c) {
1927 ; CHECK-LABEL: st_param_v4_f32_iiri(
1929 ; CHECK-NEXT: .reg .f32 %f<2>;
1931 ; CHECK-NEXT: // %bb.0:
1932 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_iiri_param_0];
1933 ; CHECK-NEXT: { // callseq 80, 0
1934 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1935 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, 0f40000000, %f1, 0f40800000};
1936 ; CHECK-NEXT: call.uni
1937 ; CHECK-NEXT: call_v4_f32,
1939 ; CHECK-NEXT: param0
1941 ; CHECK-NEXT: } // callseq 80
1943 %struct.iiri0 = insertvalue %struct.float4 poison, float 1.0, 0
1944 %struct.iiri1 = insertvalue %struct.float4 %struct.iiri0, float 2.0, 1
1945 %struct.iiri2 = insertvalue %struct.float4 %struct.iiri1, float %c, 2
1946 %struct.iiri3 = insertvalue %struct.float4 %struct.iiri2, float 4.0, 3
1947 call void @call_v4_f32(%struct.float4 %struct.iiri3)
1950 define void @st_param_v4_f32_irii(float %b) {
1951 ; CHECK-LABEL: st_param_v4_f32_irii(
1953 ; CHECK-NEXT: .reg .f32 %f<2>;
1955 ; CHECK-NEXT: // %bb.0:
1956 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_irii_param_0];
1957 ; CHECK-NEXT: { // callseq 81, 0
1958 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1959 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {0f3F800000, %f1, 0f40400000, 0f40800000};
1960 ; CHECK-NEXT: call.uni
1961 ; CHECK-NEXT: call_v4_f32,
1963 ; CHECK-NEXT: param0
1965 ; CHECK-NEXT: } // callseq 81
1967 %struct.irii0 = insertvalue %struct.float4 poison, float 1.0, 0
1968 %struct.irii1 = insertvalue %struct.float4 %struct.irii0, float %b, 1
1969 %struct.irii2 = insertvalue %struct.float4 %struct.irii1, float 3.0, 2
1970 %struct.irii3 = insertvalue %struct.float4 %struct.irii2, float 4.0, 3
1971 call void @call_v4_f32(%struct.float4 %struct.irii3)
1974 define void @st_param_v4_f32_riii(float %a) {
1975 ; CHECK-LABEL: st_param_v4_f32_riii(
1977 ; CHECK-NEXT: .reg .f32 %f<2>;
1979 ; CHECK-NEXT: // %bb.0:
1980 ; CHECK-NEXT: ld.param.f32 %f1, [st_param_v4_f32_riii_param_0];
1981 ; CHECK-NEXT: { // callseq 82, 0
1982 ; CHECK-NEXT: .param .align 16 .b8 param0[16];
1983 ; CHECK-NEXT: st.param.v4.f32 [param0+0], {%f1, 0f40000000, 0f40400000, 0f40800000};
1984 ; CHECK-NEXT: call.uni
1985 ; CHECK-NEXT: call_v4_f32,
1987 ; CHECK-NEXT: param0
1989 ; CHECK-NEXT: } // callseq 82
1991 %struct.riii0 = insertvalue %struct.float4 poison, float %a, 0
1992 %struct.riii1 = insertvalue %struct.float4 %struct.riii0, float 2.0, 1
1993 %struct.riii2 = insertvalue %struct.float4 %struct.riii1, float 3.0, 2
1994 %struct.riii3 = insertvalue %struct.float4 %struct.riii2, float 4.0, 3
1995 call void @call_v4_f32(%struct.float4 %struct.riii3)
1999 declare void @call_v4_i8(%struct.char4 alignstack(4))
2000 declare void @call_v4_i16(%struct.short4 alignstack(8))
2001 declare void @call_v4_i32(%struct.int4 alignstack(16))
2002 declare void @call_v4_f32(%struct.float4 alignstack(16))