xref: /llvm-project/llvm/test/CodeGen/NVPTX/st-param-imm.ll (revision b279f6b098d3849f7f1c1f539b108307d5f8ae2d)
1c5b11a71SAlex MacLean; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2*b279f6b0SFangrui Song; RUN: llc < %s -mtriple=nvptx64 | FileCheck %s
3*b279f6b0SFangrui Song; RUN: llc < %s -mtriple=nvptx | FileCheck %s
4*b279f6b0SFangrui Song; RUN: %if ptxas && !ptxas-12.0 %{ llc < %s -mtriple=nvptx -verify-machineinstrs | %ptxas-verify %}
5*b279f6b0SFangrui Song; RUN: %if ptxas %{ llc < %s -mtriple=nvptx64 -verify-machineinstrs | %ptxas-verify %}
6c5b11a71SAlex MacLean
7c5b11a71SAlex MacLeantarget triple = "nvptx64-nvidia-cuda"
8c5b11a71SAlex MacLean
9c5b11a71SAlex MacLean%struct.A = type { i8, i16 }
10c5b11a71SAlex MacLean%struct.char2 = type { i8, i8 }
11c5b11a71SAlex MacLean%struct.char4 = type { i8, i8, i8, i8 }
12c5b11a71SAlex MacLean%struct.short2 = type { i16, i16 }
13c5b11a71SAlex MacLean%struct.short4 = type { i16, i16, i16, i16 }
14c5b11a71SAlex MacLean%struct.int2 = type { i32, i32 }
15c5b11a71SAlex MacLean%struct.int4 = type { i32, i32, i32, i32 }
16c5b11a71SAlex MacLean%struct.longlong2 = type { i64, i64 }
17c5b11a71SAlex MacLean%struct.float2 = type { float, float }
18c5b11a71SAlex MacLean%struct.float4 = type { float, float, float, float }
19c5b11a71SAlex MacLean%struct.double2 = type { double, double }
20c5b11a71SAlex MacLean
21c5b11a71SAlex MacLeandefine void @st_param_i8_i16() {
22c5b11a71SAlex MacLean; CHECK-LABEL: st_param_i8_i16(
23c5b11a71SAlex MacLean; CHECK:       {
24c5b11a71SAlex MacLean; CHECK-EMPTY:
25c5b11a71SAlex MacLean; CHECK-EMPTY:
26c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
27c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 0, 0
28c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 2 .b8 param0[4];
290f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.b8 [param0], 1;
30c5b11a71SAlex MacLean; CHECK-NEXT:    st.param.b16 [param0+2], 2;
31c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
32c5b11a71SAlex MacLean; CHECK-NEXT:    call_i8_i16,
33c5b11a71SAlex MacLean; CHECK-NEXT:    (
34c5b11a71SAlex MacLean; CHECK-NEXT:    param0
35c5b11a71SAlex MacLean; CHECK-NEXT:    );
36c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 0
37c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
38c5b11a71SAlex MacLean  call void @call_i8_i16(%struct.A { i8 1, i16 2 })
39c5b11a71SAlex MacLean  ret void
40c5b11a71SAlex MacLean}
41c5b11a71SAlex MacLean
42c5b11a71SAlex MacLeandefine void @st_param_i32() {
43c5b11a71SAlex MacLean; CHECK-LABEL: st_param_i32(
44c5b11a71SAlex MacLean; CHECK:       {
45c5b11a71SAlex MacLean; CHECK-EMPTY:
46c5b11a71SAlex MacLean; CHECK-EMPTY:
47c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
48c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 1, 0
49c5b11a71SAlex MacLean; CHECK-NEXT:    .param .b32 param0;
500f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.b32 [param0], 3;
51c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
52c5b11a71SAlex MacLean; CHECK-NEXT:    call_i32,
53c5b11a71SAlex MacLean; CHECK-NEXT:    (
54c5b11a71SAlex MacLean; CHECK-NEXT:    param0
55c5b11a71SAlex MacLean; CHECK-NEXT:    );
56c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 1
57c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
58c5b11a71SAlex MacLean  call void @call_i32(i32 3)
59c5b11a71SAlex MacLean  ret void
60c5b11a71SAlex MacLean}
61c5b11a71SAlex MacLean
62c5b11a71SAlex MacLeandefine void @st_param_i64() {
63c5b11a71SAlex MacLean; CHECK-LABEL: st_param_i64(
64c5b11a71SAlex MacLean; CHECK:       {
65c5b11a71SAlex MacLean; CHECK-EMPTY:
66c5b11a71SAlex MacLean; CHECK-EMPTY:
67c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
68c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 2, 0
69c5b11a71SAlex MacLean; CHECK-NEXT:    .param .b64 param0;
700f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.b64 [param0], 4;
71c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
72c5b11a71SAlex MacLean; CHECK-NEXT:    call_i64,
73c5b11a71SAlex MacLean; CHECK-NEXT:    (
74c5b11a71SAlex MacLean; CHECK-NEXT:    param0
75c5b11a71SAlex MacLean; CHECK-NEXT:    );
76c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 2
77c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
78c5b11a71SAlex MacLean  call void @call_i64(i64 4)
79c5b11a71SAlex MacLean  ret void
80c5b11a71SAlex MacLean}
81c5b11a71SAlex MacLean
82c5b11a71SAlex MacLeandefine void @st_param_f32() {
83c5b11a71SAlex MacLean; CHECK-LABEL: st_param_f32(
84c5b11a71SAlex MacLean; CHECK:       {
85c5b11a71SAlex MacLean; CHECK-EMPTY:
86c5b11a71SAlex MacLean; CHECK-EMPTY:
87c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
88c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 3, 0
89c5b11a71SAlex MacLean; CHECK-NEXT:    .param .b32 param0;
900f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.f32 [param0], 0f40A00000;
91c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
92c5b11a71SAlex MacLean; CHECK-NEXT:    call_f32,
93c5b11a71SAlex MacLean; CHECK-NEXT:    (
94c5b11a71SAlex MacLean; CHECK-NEXT:    param0
95c5b11a71SAlex MacLean; CHECK-NEXT:    );
96c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 3
97c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
98c5b11a71SAlex MacLean  call void @call_f32(float 5.0)
99c5b11a71SAlex MacLean  ret void
100c5b11a71SAlex MacLean}
101c5b11a71SAlex MacLean
102c5b11a71SAlex MacLeandefine void @st_param_f64() {
103c5b11a71SAlex MacLean; CHECK-LABEL: st_param_f64(
104c5b11a71SAlex MacLean; CHECK:       {
105c5b11a71SAlex MacLean; CHECK-EMPTY:
106c5b11a71SAlex MacLean; CHECK-EMPTY:
107c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
108c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 4, 0
109c5b11a71SAlex MacLean; CHECK-NEXT:    .param .b64 param0;
1100f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.f64 [param0], 0d4018000000000000;
111c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
112c5b11a71SAlex MacLean; CHECK-NEXT:    call_f64,
113c5b11a71SAlex MacLean; CHECK-NEXT:    (
114c5b11a71SAlex MacLean; CHECK-NEXT:    param0
115c5b11a71SAlex MacLean; CHECK-NEXT:    );
116c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 4
117c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
118c5b11a71SAlex MacLean  call void @call_f64(double 6.0)
119c5b11a71SAlex MacLean  ret void
120c5b11a71SAlex MacLean}
121c5b11a71SAlex MacLean
122c5b11a71SAlex MacLeandeclare void @call_i8_i16(%struct.A)
123c5b11a71SAlex MacLeandeclare void @call_i32(i32)
124c5b11a71SAlex MacLeandeclare void @call_i64(i64)
125c5b11a71SAlex MacLeandeclare void @call_f32(float)
126c5b11a71SAlex MacLeandeclare void @call_f64(double)
127c5b11a71SAlex MacLean
128c5b11a71SAlex MacLeandefine void @st_param_v2_i8_ii() {
129c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i8_ii(
130c5b11a71SAlex MacLean; CHECK:       {
131c5b11a71SAlex MacLean; CHECK-EMPTY:
132c5b11a71SAlex MacLean; CHECK-EMPTY:
133c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
134c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 5, 0
135c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 2 .b8 param0[2];
1360f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b8 [param0], {1, 2};
137c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
138c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i8,
139c5b11a71SAlex MacLean; CHECK-NEXT:    (
140c5b11a71SAlex MacLean; CHECK-NEXT:    param0
141c5b11a71SAlex MacLean; CHECK-NEXT:    );
142c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 5
143c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
144c5b11a71SAlex MacLean  call void @call_v2_i8(%struct.char2 { i8 1, i8 2 })
145c5b11a71SAlex MacLean  ret void
146c5b11a71SAlex MacLean}
147c5b11a71SAlex MacLeandefine void @st_param_v2_i8_ir(i8 %val) {
148c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i8_ir(
149c5b11a71SAlex MacLean; CHECK:       {
150c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
151c5b11a71SAlex MacLean; CHECK-EMPTY:
152c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
153c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v2_i8_ir_param_0];
154c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 6, 0
155c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 2 .b8 param0[2];
1560f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b8 [param0], {1, %rs1};
157c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
158c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i8,
159c5b11a71SAlex MacLean; CHECK-NEXT:    (
160c5b11a71SAlex MacLean; CHECK-NEXT:    param0
161c5b11a71SAlex MacLean; CHECK-NEXT:    );
162c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 6
163c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
164c5b11a71SAlex MacLean  %struct.ir0 = insertvalue %struct.char2 poison, i8 1, 0
165c5b11a71SAlex MacLean  %struct.ir1 = insertvalue %struct.char2 %struct.ir0, i8 %val, 1
166c5b11a71SAlex MacLean  call void @call_v2_i8(%struct.char2 %struct.ir1)
167c5b11a71SAlex MacLean  ret void
168c5b11a71SAlex MacLean}
169c5b11a71SAlex MacLeandefine void @st_param_v2_i8_ri(i8 %val) {
170c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i8_ri(
171c5b11a71SAlex MacLean; CHECK:       {
172c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
173c5b11a71SAlex MacLean; CHECK-EMPTY:
174c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
175c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v2_i8_ri_param_0];
176c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 7, 0
177c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 2 .b8 param0[2];
1780f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b8 [param0], {%rs1, 2};
179c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
180c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i8,
181c5b11a71SAlex MacLean; CHECK-NEXT:    (
182c5b11a71SAlex MacLean; CHECK-NEXT:    param0
183c5b11a71SAlex MacLean; CHECK-NEXT:    );
184c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 7
185c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
186c5b11a71SAlex MacLean  %struct.ri0 = insertvalue %struct.char2 poison, i8 %val, 0
187c5b11a71SAlex MacLean  %struct.ri1 = insertvalue %struct.char2 %struct.ri0, i8 2, 1
188c5b11a71SAlex MacLean  call void @call_v2_i8(%struct.char2 %struct.ri1)
189c5b11a71SAlex MacLean  ret void
190c5b11a71SAlex MacLean}
191c5b11a71SAlex MacLean
192c5b11a71SAlex MacLeandefine void @st_param_v2_i16_ii() {
193c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i16_ii(
194c5b11a71SAlex MacLean; CHECK:       {
195c5b11a71SAlex MacLean; CHECK-EMPTY:
196c5b11a71SAlex MacLean; CHECK-EMPTY:
197c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
198c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 8, 0
199c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
2000f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b16 [param0], {1, 2};
201c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
202c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i16,
203c5b11a71SAlex MacLean; CHECK-NEXT:    (
204c5b11a71SAlex MacLean; CHECK-NEXT:    param0
205c5b11a71SAlex MacLean; CHECK-NEXT:    );
206c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 8
207c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
208c5b11a71SAlex MacLean  call void @call_v2_i16(%struct.short2 { i16 1, i16 2 })
209c5b11a71SAlex MacLean  ret void
210c5b11a71SAlex MacLean}
211c5b11a71SAlex MacLeandefine void @st_param_v2_i16_ir(i16 %val) {
212c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i16_ir(
213c5b11a71SAlex MacLean; CHECK:       {
214c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
215c5b11a71SAlex MacLean; CHECK-EMPTY:
216c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
217c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v2_i16_ir_param_0];
218c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 9, 0
219c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
2200f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b16 [param0], {1, %rs1};
221c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
222c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i16,
223c5b11a71SAlex MacLean; CHECK-NEXT:    (
224c5b11a71SAlex MacLean; CHECK-NEXT:    param0
225c5b11a71SAlex MacLean; CHECK-NEXT:    );
226c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 9
227c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
228c5b11a71SAlex MacLean  %struct.ir0 = insertvalue %struct.short2 poison, i16 1, 0
229c5b11a71SAlex MacLean  %struct.ir1 = insertvalue %struct.short2 %struct.ir0, i16 %val, 1
230c5b11a71SAlex MacLean  call void @call_v2_i16(%struct.short2 %struct.ir1)
231c5b11a71SAlex MacLean  ret void
232c5b11a71SAlex MacLean}
233c5b11a71SAlex MacLeandefine void @st_param_v2_i16_ri(i16 %val) {
234c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i16_ri(
235c5b11a71SAlex MacLean; CHECK:       {
236c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
237c5b11a71SAlex MacLean; CHECK-EMPTY:
238c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
239c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v2_i16_ri_param_0];
240c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 10, 0
241c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
2420f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b16 [param0], {%rs1, 2};
243c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
244c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i16,
245c5b11a71SAlex MacLean; CHECK-NEXT:    (
246c5b11a71SAlex MacLean; CHECK-NEXT:    param0
247c5b11a71SAlex MacLean; CHECK-NEXT:    );
248c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 10
249c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
250c5b11a71SAlex MacLean  %struct.ri0 = insertvalue %struct.short2 poison, i16 %val, 0
251c5b11a71SAlex MacLean  %struct.ri1 = insertvalue %struct.short2 %struct.ri0, i16 2, 1
252c5b11a71SAlex MacLean  call void @call_v2_i16(%struct.short2 %struct.ri1)
253c5b11a71SAlex MacLean  ret void
254c5b11a71SAlex MacLean}
255c5b11a71SAlex MacLean
256c5b11a71SAlex MacLeandefine void @st_param_v2_i32_ii() {
257c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i32_ii(
258c5b11a71SAlex MacLean; CHECK:       {
259c5b11a71SAlex MacLean; CHECK-EMPTY:
260c5b11a71SAlex MacLean; CHECK-EMPTY:
261c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
262c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 11, 0
263c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
2640f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b32 [param0], {1, 2};
265c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
266c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i32,
267c5b11a71SAlex MacLean; CHECK-NEXT:    (
268c5b11a71SAlex MacLean; CHECK-NEXT:    param0
269c5b11a71SAlex MacLean; CHECK-NEXT:    );
270c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 11
271c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
272c5b11a71SAlex MacLean  call void @call_v2_i32(%struct.int2 { i32 1, i32 2 })
273c5b11a71SAlex MacLean  ret void
274c5b11a71SAlex MacLean}
275c5b11a71SAlex MacLeandefine void @st_param_v2_i32_ir(i32 %val) {
276c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i32_ir(
277c5b11a71SAlex MacLean; CHECK:       {
278c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<2>;
279c5b11a71SAlex MacLean; CHECK-EMPTY:
280c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
281c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v2_i32_ir_param_0];
282c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 12, 0
283c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
2840f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b32 [param0], {1, %r1};
285c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
286c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i32,
287c5b11a71SAlex MacLean; CHECK-NEXT:    (
288c5b11a71SAlex MacLean; CHECK-NEXT:    param0
289c5b11a71SAlex MacLean; CHECK-NEXT:    );
290c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 12
291c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
292c5b11a71SAlex MacLean  %struct.ir0 = insertvalue %struct.int2 poison, i32 1, 0
293c5b11a71SAlex MacLean  %struct.ir1 = insertvalue %struct.int2 %struct.ir0, i32 %val, 1
294c5b11a71SAlex MacLean  call void @call_v2_i32(%struct.int2 %struct.ir1)
295c5b11a71SAlex MacLean  ret void
296c5b11a71SAlex MacLean}
297c5b11a71SAlex MacLeandefine void @st_param_v2_i32_ri(i32 %val) {
298c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i32_ri(
299c5b11a71SAlex MacLean; CHECK:       {
300c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<2>;
301c5b11a71SAlex MacLean; CHECK-EMPTY:
302c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
303c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v2_i32_ri_param_0];
304c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 13, 0
305c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
3060f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b32 [param0], {%r1, 2};
307c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
308c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i32,
309c5b11a71SAlex MacLean; CHECK-NEXT:    (
310c5b11a71SAlex MacLean; CHECK-NEXT:    param0
311c5b11a71SAlex MacLean; CHECK-NEXT:    );
312c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 13
313c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
314c5b11a71SAlex MacLean  %struct.ri0 = insertvalue %struct.int2 poison, i32 %val, 0
315c5b11a71SAlex MacLean  %struct.ri1 = insertvalue %struct.int2 %struct.ri0, i32 2, 1
316c5b11a71SAlex MacLean  call void @call_v2_i32(%struct.int2 %struct.ri1)
317c5b11a71SAlex MacLean  ret void
318c5b11a71SAlex MacLean}
319c5b11a71SAlex MacLean
320c5b11a71SAlex MacLeandefine void @st_param_v2_i64_ii() {
321c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i64_ii(
322c5b11a71SAlex MacLean; CHECK:       {
323c5b11a71SAlex MacLean; CHECK-EMPTY:
324c5b11a71SAlex MacLean; CHECK-EMPTY:
325c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
326c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 14, 0
327c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
3280f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b64 [param0], {1, 2};
329c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
330c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i64,
331c5b11a71SAlex MacLean; CHECK-NEXT:    (
332c5b11a71SAlex MacLean; CHECK-NEXT:    param0
333c5b11a71SAlex MacLean; CHECK-NEXT:    );
334c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 14
335c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
336c5b11a71SAlex MacLean  call void @call_v2_i64(%struct.longlong2 { i64 1, i64 2 })
337c5b11a71SAlex MacLean  ret void
338c5b11a71SAlex MacLean}
339c5b11a71SAlex MacLeandefine void @st_param_v2_i64_ir(i64 %val) {
340c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i64_ir(
341c5b11a71SAlex MacLean; CHECK:       {
342c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b64 %rd<2>;
343c5b11a71SAlex MacLean; CHECK-EMPTY:
344c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
345c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u64 %rd1, [st_param_v2_i64_ir_param_0];
346c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 15, 0
347c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
3480f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b64 [param0], {1, %rd1};
349c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
350c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i64,
351c5b11a71SAlex MacLean; CHECK-NEXT:    (
352c5b11a71SAlex MacLean; CHECK-NEXT:    param0
353c5b11a71SAlex MacLean; CHECK-NEXT:    );
354c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 15
355c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
356c5b11a71SAlex MacLean  %struct.ir0 = insertvalue %struct.longlong2 poison, i64 1, 0
357c5b11a71SAlex MacLean  %struct.ir1 = insertvalue %struct.longlong2 %struct.ir0, i64 %val, 1
358c5b11a71SAlex MacLean  call void @call_v2_i64(%struct.longlong2 %struct.ir1)
359c5b11a71SAlex MacLean  ret void
360c5b11a71SAlex MacLean}
361c5b11a71SAlex MacLeandefine void @st_param_v2_i64_ri(i64 %val) {
362c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_i64_ri(
363c5b11a71SAlex MacLean; CHECK:       {
364c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b64 %rd<2>;
365c5b11a71SAlex MacLean; CHECK-EMPTY:
366c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
367c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u64 %rd1, [st_param_v2_i64_ri_param_0];
368c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 16, 0
369c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
3700f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.b64 [param0], {%rd1, 2};
371c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
372c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_i64,
373c5b11a71SAlex MacLean; CHECK-NEXT:    (
374c5b11a71SAlex MacLean; CHECK-NEXT:    param0
375c5b11a71SAlex MacLean; CHECK-NEXT:    );
376c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 16
377c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
378c5b11a71SAlex MacLean  %struct.ri0 = insertvalue %struct.longlong2 poison, i64 %val, 0
379c5b11a71SAlex MacLean  %struct.ri1 = insertvalue %struct.longlong2 %struct.ri0, i64 2, 1
380c5b11a71SAlex MacLean  call void @call_v2_i64(%struct.longlong2 %struct.ri1)
381c5b11a71SAlex MacLean  ret void
382c5b11a71SAlex MacLean}
383c5b11a71SAlex MacLean
384c5b11a71SAlex MacLeandefine void @st_param_v2_f32_ii(float %val) {
385c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_f32_ii(
386c5b11a71SAlex MacLean; CHECK:       {
387c5b11a71SAlex MacLean; CHECK-EMPTY:
388c5b11a71SAlex MacLean; CHECK-EMPTY:
389c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
390c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 17, 0
391c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
3920f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.f32 [param0], {0f3F800000, 0f40000000};
393c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
394c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_f32,
395c5b11a71SAlex MacLean; CHECK-NEXT:    (
396c5b11a71SAlex MacLean; CHECK-NEXT:    param0
397c5b11a71SAlex MacLean; CHECK-NEXT:    );
398c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 17
399c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
400c5b11a71SAlex MacLean  call void @call_v2_f32(%struct.float2 { float 1.0, float 2.0 })
401c5b11a71SAlex MacLean  ret void
402c5b11a71SAlex MacLean}
403c5b11a71SAlex MacLeandefine void @st_param_v2_f32_ir(float %val) {
404c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_f32_ir(
405c5b11a71SAlex MacLean; CHECK:       {
406c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<2>;
407c5b11a71SAlex MacLean; CHECK-EMPTY:
408c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
409c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v2_f32_ir_param_0];
410c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 18, 0
411c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
4120f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.f32 [param0], {0f3F800000, %f1};
413c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
414c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_f32,
415c5b11a71SAlex MacLean; CHECK-NEXT:    (
416c5b11a71SAlex MacLean; CHECK-NEXT:    param0
417c5b11a71SAlex MacLean; CHECK-NEXT:    );
418c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 18
419c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
420c5b11a71SAlex MacLean  %struct.ir0 = insertvalue %struct.float2 poison, float 1.0, 0
421c5b11a71SAlex MacLean  %struct.ir1 = insertvalue %struct.float2 %struct.ir0, float %val, 1
422c5b11a71SAlex MacLean  call void @call_v2_f32(%struct.float2 %struct.ir1)
423c5b11a71SAlex MacLean  ret void
424c5b11a71SAlex MacLean}
425c5b11a71SAlex MacLeandefine void @st_param_v2_f32_ri(float %val) {
426c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_f32_ri(
427c5b11a71SAlex MacLean; CHECK:       {
428c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<2>;
429c5b11a71SAlex MacLean; CHECK-EMPTY:
430c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
431c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v2_f32_ri_param_0];
432c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 19, 0
433c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
4340f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.f32 [param0], {%f1, 0f40000000};
435c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
436c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_f32,
437c5b11a71SAlex MacLean; CHECK-NEXT:    (
438c5b11a71SAlex MacLean; CHECK-NEXT:    param0
439c5b11a71SAlex MacLean; CHECK-NEXT:    );
440c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 19
441c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
442c5b11a71SAlex MacLean  %struct.ri0 = insertvalue %struct.float2 poison, float %val, 0
443c5b11a71SAlex MacLean  %struct.ri1 = insertvalue %struct.float2 %struct.ri0, float 2.0, 1
444c5b11a71SAlex MacLean  call void @call_v2_f32(%struct.float2 %struct.ri1)
445c5b11a71SAlex MacLean  ret void
446c5b11a71SAlex MacLean}
447c5b11a71SAlex MacLean
448c5b11a71SAlex MacLeandefine void @st_param_v2_f64_ii(double %val) {
449c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_f64_ii(
450c5b11a71SAlex MacLean; CHECK:       {
451c5b11a71SAlex MacLean; CHECK-EMPTY:
452c5b11a71SAlex MacLean; CHECK-EMPTY:
453c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
454c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 20, 0
455c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
4560f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.f64 [param0], {0d3FF0000000000000, 0d4000000000000000};
457c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
458c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_f64,
459c5b11a71SAlex MacLean; CHECK-NEXT:    (
460c5b11a71SAlex MacLean; CHECK-NEXT:    param0
461c5b11a71SAlex MacLean; CHECK-NEXT:    );
462c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 20
463c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
464c5b11a71SAlex MacLean  call void @call_v2_f64(%struct.double2 { double 1.0, double 2.0 })
465c5b11a71SAlex MacLean  ret void
466c5b11a71SAlex MacLean}
467c5b11a71SAlex MacLeandefine void @st_param_v2_f64_ir(double %val) {
468c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_f64_ir(
469c5b11a71SAlex MacLean; CHECK:       {
470c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f64 %fd<2>;
471c5b11a71SAlex MacLean; CHECK-EMPTY:
472c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
473c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f64 %fd1, [st_param_v2_f64_ir_param_0];
474c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 21, 0
475c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
4760f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.f64 [param0], {0d3FF0000000000000, %fd1};
477c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
478c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_f64,
479c5b11a71SAlex MacLean; CHECK-NEXT:    (
480c5b11a71SAlex MacLean; CHECK-NEXT:    param0
481c5b11a71SAlex MacLean; CHECK-NEXT:    );
482c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 21
483c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
484c5b11a71SAlex MacLean  %struct.ir0 = insertvalue %struct.double2 poison, double 1.0, 0
485c5b11a71SAlex MacLean  %struct.ir1 = insertvalue %struct.double2 %struct.ir0, double %val, 1
486c5b11a71SAlex MacLean  call void @call_v2_f64(%struct.double2 %struct.ir1)
487c5b11a71SAlex MacLean  ret void
488c5b11a71SAlex MacLean}
489c5b11a71SAlex MacLeandefine void @st_param_v2_f64_ri(double %val) {
490c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v2_f64_ri(
491c5b11a71SAlex MacLean; CHECK:       {
492c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f64 %fd<2>;
493c5b11a71SAlex MacLean; CHECK-EMPTY:
494c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
495c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f64 %fd1, [st_param_v2_f64_ri_param_0];
496c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 22, 0
497c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
4980f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v2.f64 [param0], {%fd1, 0d4000000000000000};
499c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
500c5b11a71SAlex MacLean; CHECK-NEXT:    call_v2_f64,
501c5b11a71SAlex MacLean; CHECK-NEXT:    (
502c5b11a71SAlex MacLean; CHECK-NEXT:    param0
503c5b11a71SAlex MacLean; CHECK-NEXT:    );
504c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 22
505c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
506c5b11a71SAlex MacLean  %struct.ri0 = insertvalue %struct.double2 poison, double %val, 0
507c5b11a71SAlex MacLean  %struct.ri1 = insertvalue %struct.double2 %struct.ri0, double 2.0, 1
508c5b11a71SAlex MacLean  call void @call_v2_f64(%struct.double2 %struct.ri1)
509c5b11a71SAlex MacLean  ret void
510c5b11a71SAlex MacLean}
511c5b11a71SAlex MacLean
512c5b11a71SAlex MacLeandeclare void @call_v2_i8(%struct.char2 alignstack(2))
513c5b11a71SAlex MacLeandeclare void @call_v2_i16(%struct.short2 alignstack(4))
514c5b11a71SAlex MacLeandeclare void @call_v2_i32(%struct.int2 alignstack(8))
515c5b11a71SAlex MacLeandeclare void @call_v2_i64(%struct.longlong2 alignstack(16))
516c5b11a71SAlex MacLeandeclare void @call_v2_f32(%struct.float2 alignstack(8))
517c5b11a71SAlex MacLeandeclare void @call_v2_f64(%struct.double2 alignstack(16))
518c5b11a71SAlex MacLean
519c5b11a71SAlex MacLeandefine void @st_param_v4_i8_iiii() {
520c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_iiii(
521c5b11a71SAlex MacLean; CHECK:       {
522c5b11a71SAlex MacLean; CHECK-EMPTY:
523c5b11a71SAlex MacLean; CHECK-EMPTY:
524c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
525c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 23, 0
526c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
5270f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, 2, 3, 4};
528c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
529c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
530c5b11a71SAlex MacLean; CHECK-NEXT:    (
531c5b11a71SAlex MacLean; CHECK-NEXT:    param0
532c5b11a71SAlex MacLean; CHECK-NEXT:    );
533c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 23
534c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
535c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 { i8 1, i8 2, i8 3, i8 4 })
536c5b11a71SAlex MacLean  ret void
537c5b11a71SAlex MacLean}
538c5b11a71SAlex MacLeandefine void @st_param_v4_i8_irrr(i8 %b, i8 %c, i8 %d) {
539c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_irrr(
540c5b11a71SAlex MacLean; CHECK:       {
541c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
542c5b11a71SAlex MacLean; CHECK-EMPTY:
543c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
544c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_irrr_param_0];
545c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_irrr_param_1];
546c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs3, [st_param_v4_i8_irrr_param_2];
547c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 24, 0
548c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
5490f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, %rs1, %rs2, %rs3};
550c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
551c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
552c5b11a71SAlex MacLean; CHECK-NEXT:    (
553c5b11a71SAlex MacLean; CHECK-NEXT:    param0
554c5b11a71SAlex MacLean; CHECK-NEXT:    );
555c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 24
556c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
557c5b11a71SAlex MacLean  %struct.irrr0 = insertvalue %struct.char4 poison, i8 1, 0
558c5b11a71SAlex MacLean  %struct.irrr1 = insertvalue %struct.char4 %struct.irrr0, i8 %b, 1
559c5b11a71SAlex MacLean  %struct.irrr2 = insertvalue %struct.char4 %struct.irrr1, i8 %c, 2
560c5b11a71SAlex MacLean  %struct.irrr3 = insertvalue %struct.char4 %struct.irrr2, i8 %d, 3
561c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.irrr3)
562c5b11a71SAlex MacLean  ret void
563c5b11a71SAlex MacLean}
564c5b11a71SAlex MacLeandefine void @st_param_v4_i8_rirr(i8 %a, i8 %c, i8 %d) {
565c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_rirr(
566c5b11a71SAlex MacLean; CHECK:       {
567c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
568c5b11a71SAlex MacLean; CHECK-EMPTY:
569c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
570c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_rirr_param_0];
571c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_rirr_param_1];
572c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs3, [st_param_v4_i8_rirr_param_2];
573c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 25, 0
574c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
5750f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, 2, %rs2, %rs3};
576c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
577c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
578c5b11a71SAlex MacLean; CHECK-NEXT:    (
579c5b11a71SAlex MacLean; CHECK-NEXT:    param0
580c5b11a71SAlex MacLean; CHECK-NEXT:    );
581c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 25
582c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
583c5b11a71SAlex MacLean  %struct.rirr0 = insertvalue %struct.char4 poison, i8 %a, 0
584c5b11a71SAlex MacLean  %struct.rirr1 = insertvalue %struct.char4 %struct.rirr0, i8 2, 1
585c5b11a71SAlex MacLean  %struct.rirr2 = insertvalue %struct.char4 %struct.rirr1, i8 %c, 2
586c5b11a71SAlex MacLean  %struct.rirr3 = insertvalue %struct.char4 %struct.rirr2, i8 %d, 3
587c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.rirr3)
588c5b11a71SAlex MacLean  ret void
589c5b11a71SAlex MacLean}
590c5b11a71SAlex MacLeandefine void @st_param_v4_i8_rrir(i8 %a, i8 %b, i8 %d) {
591c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_rrir(
592c5b11a71SAlex MacLean; CHECK:       {
593c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
594c5b11a71SAlex MacLean; CHECK-EMPTY:
595c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
596c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_rrir_param_0];
597c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_rrir_param_1];
598c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs3, [st_param_v4_i8_rrir_param_2];
599c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 26, 0
600c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
6010f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, %rs2, 3, %rs3};
602c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
603c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
604c5b11a71SAlex MacLean; CHECK-NEXT:    (
605c5b11a71SAlex MacLean; CHECK-NEXT:    param0
606c5b11a71SAlex MacLean; CHECK-NEXT:    );
607c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 26
608c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
609c5b11a71SAlex MacLean  %struct.rrir0 = insertvalue %struct.char4 poison, i8 %a, 0
610c5b11a71SAlex MacLean  %struct.rrir1 = insertvalue %struct.char4 %struct.rrir0, i8 %b, 1
611c5b11a71SAlex MacLean  %struct.rrir2 = insertvalue %struct.char4 %struct.rrir1, i8 3, 2
612c5b11a71SAlex MacLean  %struct.rrir3 = insertvalue %struct.char4 %struct.rrir2, i8 %d, 3
613c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.rrir3)
614c5b11a71SAlex MacLean  ret void
615c5b11a71SAlex MacLean}
616c5b11a71SAlex MacLeandefine void @st_param_v4_i8_rrri(i8 %a, i8 %b, i8 %c) {
617c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_rrri(
618c5b11a71SAlex MacLean; CHECK:       {
619c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
620c5b11a71SAlex MacLean; CHECK-EMPTY:
621c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
622c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_rrri_param_0];
623c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_rrri_param_1];
624c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs3, [st_param_v4_i8_rrri_param_2];
625c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 27, 0
626c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
6270f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, %rs2, %rs3, 4};
628c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
629c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
630c5b11a71SAlex MacLean; CHECK-NEXT:    (
631c5b11a71SAlex MacLean; CHECK-NEXT:    param0
632c5b11a71SAlex MacLean; CHECK-NEXT:    );
633c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 27
634c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
635c5b11a71SAlex MacLean  %struct.rrri0 = insertvalue %struct.char4 poison, i8 %a, 0
636c5b11a71SAlex MacLean  %struct.rrri1 = insertvalue %struct.char4 %struct.rrri0, i8 %b, 1
637c5b11a71SAlex MacLean  %struct.rrri2 = insertvalue %struct.char4 %struct.rrri1, i8 %c, 2
638c5b11a71SAlex MacLean  %struct.rrri3 = insertvalue %struct.char4 %struct.rrri2, i8 4, 3
639c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.rrri3)
640c5b11a71SAlex MacLean  ret void
641c5b11a71SAlex MacLean}
642c5b11a71SAlex MacLeandefine void @st_param_v4_i8_iirr(i8 %c, i8 %d) {
643c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_iirr(
644c5b11a71SAlex MacLean; CHECK:       {
645c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
646c5b11a71SAlex MacLean; CHECK-EMPTY:
647c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
648c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_iirr_param_0];
649c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_iirr_param_1];
650c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 28, 0
651c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
6520f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, 2, %rs1, %rs2};
653c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
654c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
655c5b11a71SAlex MacLean; CHECK-NEXT:    (
656c5b11a71SAlex MacLean; CHECK-NEXT:    param0
657c5b11a71SAlex MacLean; CHECK-NEXT:    );
658c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 28
659c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
660c5b11a71SAlex MacLean  %struct.iirr0 = insertvalue %struct.char4 poison, i8 1, 0
661c5b11a71SAlex MacLean  %struct.iirr1 = insertvalue %struct.char4 %struct.iirr0, i8 2, 1
662c5b11a71SAlex MacLean  %struct.iirr2 = insertvalue %struct.char4 %struct.iirr1, i8 %c, 2
663c5b11a71SAlex MacLean  %struct.iirr3 = insertvalue %struct.char4 %struct.iirr2, i8 %d, 3
664c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.iirr3)
665c5b11a71SAlex MacLean  ret void
666c5b11a71SAlex MacLean}
667c5b11a71SAlex MacLeandefine void @st_param_v4_i8_irir(i8 %b, i8 %d) {
668c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_irir(
669c5b11a71SAlex MacLean; CHECK:       {
670c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
671c5b11a71SAlex MacLean; CHECK-EMPTY:
672c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
673c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_irir_param_0];
674c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_irir_param_1];
675c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 29, 0
676c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
6770f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, %rs1, 3, %rs2};
678c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
679c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
680c5b11a71SAlex MacLean; CHECK-NEXT:    (
681c5b11a71SAlex MacLean; CHECK-NEXT:    param0
682c5b11a71SAlex MacLean; CHECK-NEXT:    );
683c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 29
684c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
685c5b11a71SAlex MacLean  %struct.irir0 = insertvalue %struct.char4 poison, i8 1, 0
686c5b11a71SAlex MacLean  %struct.irir1 = insertvalue %struct.char4 %struct.irir0, i8 %b, 1
687c5b11a71SAlex MacLean  %struct.irir2 = insertvalue %struct.char4 %struct.irir1, i8 3, 2
688c5b11a71SAlex MacLean  %struct.irir3 = insertvalue %struct.char4 %struct.irir2, i8 %d, 3
689c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.irir3)
690c5b11a71SAlex MacLean  ret void
691c5b11a71SAlex MacLean}
692c5b11a71SAlex MacLeandefine void @st_param_v4_i8_irri(i8 %b, i8 %c) {
693c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_irri(
694c5b11a71SAlex MacLean; CHECK:       {
695c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
696c5b11a71SAlex MacLean; CHECK-EMPTY:
697c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
698c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_irri_param_0];
699c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_irri_param_1];
700c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 30, 0
701c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
7020f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, %rs1, %rs2, 4};
703c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
704c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
705c5b11a71SAlex MacLean; CHECK-NEXT:    (
706c5b11a71SAlex MacLean; CHECK-NEXT:    param0
707c5b11a71SAlex MacLean; CHECK-NEXT:    );
708c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 30
709c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
710c5b11a71SAlex MacLean  %struct.irri0 = insertvalue %struct.char4 poison, i8 1, 0
711c5b11a71SAlex MacLean  %struct.irri1 = insertvalue %struct.char4 %struct.irri0, i8 %b, 1
712c5b11a71SAlex MacLean  %struct.irri2 = insertvalue %struct.char4 %struct.irri1, i8 %c, 2
713c5b11a71SAlex MacLean  %struct.irri3 = insertvalue %struct.char4 %struct.irri2, i8 4, 3
714c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.irri3)
715c5b11a71SAlex MacLean  ret void
716c5b11a71SAlex MacLean}
717c5b11a71SAlex MacLeandefine void @st_param_v4_i8_riir(i8 %a, i8 %d) {
718c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_riir(
719c5b11a71SAlex MacLean; CHECK:       {
720c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
721c5b11a71SAlex MacLean; CHECK-EMPTY:
722c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
723c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_riir_param_0];
724c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_riir_param_1];
725c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 31, 0
726c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
7270f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, 2, 3, %rs2};
728c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
729c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
730c5b11a71SAlex MacLean; CHECK-NEXT:    (
731c5b11a71SAlex MacLean; CHECK-NEXT:    param0
732c5b11a71SAlex MacLean; CHECK-NEXT:    );
733c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 31
734c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
735c5b11a71SAlex MacLean  %struct.riir0 = insertvalue %struct.char4 poison, i8 %a, 0
736c5b11a71SAlex MacLean  %struct.riir1 = insertvalue %struct.char4 %struct.riir0, i8 2, 1
737c5b11a71SAlex MacLean  %struct.riir2 = insertvalue %struct.char4 %struct.riir1, i8 3, 2
738c5b11a71SAlex MacLean  %struct.riir3 = insertvalue %struct.char4 %struct.riir2, i8 %d, 3
739c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.riir3)
740c5b11a71SAlex MacLean  ret void
741c5b11a71SAlex MacLean}
742c5b11a71SAlex MacLeandefine void @st_param_v4_i8_riri(i8 %a, i8 %c) {
743c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_riri(
744c5b11a71SAlex MacLean; CHECK:       {
745c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
746c5b11a71SAlex MacLean; CHECK-EMPTY:
747c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
748c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_riri_param_0];
749c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_riri_param_1];
750c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 32, 0
751c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
7520f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, 2, %rs2, 4};
753c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
754c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
755c5b11a71SAlex MacLean; CHECK-NEXT:    (
756c5b11a71SAlex MacLean; CHECK-NEXT:    param0
757c5b11a71SAlex MacLean; CHECK-NEXT:    );
758c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 32
759c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
760c5b11a71SAlex MacLean  %struct.riri0 = insertvalue %struct.char4 poison, i8 %a, 0
761c5b11a71SAlex MacLean  %struct.riri1 = insertvalue %struct.char4 %struct.riri0, i8 2, 1
762c5b11a71SAlex MacLean  %struct.riri2 = insertvalue %struct.char4 %struct.riri1, i8 %c, 2
763c5b11a71SAlex MacLean  %struct.riri3 = insertvalue %struct.char4 %struct.riri2, i8 4, 3
764c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.riri3)
765c5b11a71SAlex MacLean  ret void
766c5b11a71SAlex MacLean}
767c5b11a71SAlex MacLeandefine void @st_param_v4_i8_rrii(i8 %a, i8 %b) {
768c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_rrii(
769c5b11a71SAlex MacLean; CHECK:       {
770c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
771c5b11a71SAlex MacLean; CHECK-EMPTY:
772c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
773c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_rrii_param_0];
774c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs2, [st_param_v4_i8_rrii_param_1];
775c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 33, 0
776c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
7770f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, %rs2, 3, 4};
778c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
779c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
780c5b11a71SAlex MacLean; CHECK-NEXT:    (
781c5b11a71SAlex MacLean; CHECK-NEXT:    param0
782c5b11a71SAlex MacLean; CHECK-NEXT:    );
783c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 33
784c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
785c5b11a71SAlex MacLean  %struct.rrii0 = insertvalue %struct.char4 poison, i8 %a, 0
786c5b11a71SAlex MacLean  %struct.rrii1 = insertvalue %struct.char4 %struct.rrii0, i8 %b, 1
787c5b11a71SAlex MacLean  %struct.rrii2 = insertvalue %struct.char4 %struct.rrii1, i8 3, 2
788c5b11a71SAlex MacLean  %struct.rrii3 = insertvalue %struct.char4 %struct.rrii2, i8 4, 3
789c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.rrii3)
790c5b11a71SAlex MacLean  ret void
791c5b11a71SAlex MacLean}
792c5b11a71SAlex MacLeandefine void @st_param_v4_i8_iiir(i8 %d) {
793c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_iiir(
794c5b11a71SAlex MacLean; CHECK:       {
795c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
796c5b11a71SAlex MacLean; CHECK-EMPTY:
797c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
798c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_iiir_param_0];
799c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 34, 0
800c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
8010f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, 2, 3, %rs1};
802c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
803c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
804c5b11a71SAlex MacLean; CHECK-NEXT:    (
805c5b11a71SAlex MacLean; CHECK-NEXT:    param0
806c5b11a71SAlex MacLean; CHECK-NEXT:    );
807c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 34
808c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
809c5b11a71SAlex MacLean  %struct.iiir0 = insertvalue %struct.char4 poison, i8 1, 0
810c5b11a71SAlex MacLean  %struct.iiir1 = insertvalue %struct.char4 %struct.iiir0, i8 2, 1
811c5b11a71SAlex MacLean  %struct.iiir2 = insertvalue %struct.char4 %struct.iiir1, i8 3, 2
812c5b11a71SAlex MacLean  %struct.iiir3 = insertvalue %struct.char4 %struct.iiir2, i8 %d, 3
813c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.iiir3)
814c5b11a71SAlex MacLean  ret void
815c5b11a71SAlex MacLean}
816c5b11a71SAlex MacLeandefine void @st_param_v4_i8_iiri(i8 %c) {
817c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_iiri(
818c5b11a71SAlex MacLean; CHECK:       {
819c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
820c5b11a71SAlex MacLean; CHECK-EMPTY:
821c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
822c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_iiri_param_0];
823c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 35, 0
824c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
8250f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, 2, %rs1, 4};
826c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
827c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
828c5b11a71SAlex MacLean; CHECK-NEXT:    (
829c5b11a71SAlex MacLean; CHECK-NEXT:    param0
830c5b11a71SAlex MacLean; CHECK-NEXT:    );
831c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 35
832c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
833c5b11a71SAlex MacLean  %struct.iiri0 = insertvalue %struct.char4 poison, i8 1, 0
834c5b11a71SAlex MacLean  %struct.iiri1 = insertvalue %struct.char4 %struct.iiri0, i8 2, 1
835c5b11a71SAlex MacLean  %struct.iiri2 = insertvalue %struct.char4 %struct.iiri1, i8 %c, 2
836c5b11a71SAlex MacLean  %struct.iiri3 = insertvalue %struct.char4 %struct.iiri2, i8 4, 3
837c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.iiri3)
838c5b11a71SAlex MacLean  ret void
839c5b11a71SAlex MacLean}
840c5b11a71SAlex MacLeandefine void @st_param_v4_i8_irii(i8 %b) {
841c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_irii(
842c5b11a71SAlex MacLean; CHECK:       {
843c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
844c5b11a71SAlex MacLean; CHECK-EMPTY:
845c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
846c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_irii_param_0];
847c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 36, 0
848c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
8490f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {1, %rs1, 3, 4};
850c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
851c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
852c5b11a71SAlex MacLean; CHECK-NEXT:    (
853c5b11a71SAlex MacLean; CHECK-NEXT:    param0
854c5b11a71SAlex MacLean; CHECK-NEXT:    );
855c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 36
856c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
857c5b11a71SAlex MacLean  %struct.irii0 = insertvalue %struct.char4 poison, i8 1, 0
858c5b11a71SAlex MacLean  %struct.irii1 = insertvalue %struct.char4 %struct.irii0, i8 %b, 1
859c5b11a71SAlex MacLean  %struct.irii2 = insertvalue %struct.char4 %struct.irii1, i8 3, 2
860c5b11a71SAlex MacLean  %struct.irii3 = insertvalue %struct.char4 %struct.irii2, i8 4, 3
861c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.irii3)
862c5b11a71SAlex MacLean  ret void
863c5b11a71SAlex MacLean}
864c5b11a71SAlex MacLeandefine void @st_param_v4_i8_riii(i8 %a) {
865c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i8_riii(
866c5b11a71SAlex MacLean; CHECK:       {
867c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
868c5b11a71SAlex MacLean; CHECK-EMPTY:
869c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
870c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u8 %rs1, [st_param_v4_i8_riii_param_0];
871c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 37, 0
872c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 4 .b8 param0[4];
8730f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b8 [param0], {%rs1, 2, 3, 4};
874c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
875c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i8,
876c5b11a71SAlex MacLean; CHECK-NEXT:    (
877c5b11a71SAlex MacLean; CHECK-NEXT:    param0
878c5b11a71SAlex MacLean; CHECK-NEXT:    );
879c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 37
880c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
881c5b11a71SAlex MacLean  %struct.riii0 = insertvalue %struct.char4 poison, i8 %a, 0
882c5b11a71SAlex MacLean  %struct.riii1 = insertvalue %struct.char4 %struct.riii0, i8 2, 1
883c5b11a71SAlex MacLean  %struct.riii2 = insertvalue %struct.char4 %struct.riii1, i8 3, 2
884c5b11a71SAlex MacLean  %struct.riii3 = insertvalue %struct.char4 %struct.riii2, i8 4, 3
885c5b11a71SAlex MacLean  call void @call_v4_i8(%struct.char4 %struct.riii3)
886c5b11a71SAlex MacLean  ret void
887c5b11a71SAlex MacLean}
888c5b11a71SAlex MacLean
889c5b11a71SAlex MacLeandefine void @st_param_v4_i16_iiii() {
890c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_iiii(
891c5b11a71SAlex MacLean; CHECK:       {
892c5b11a71SAlex MacLean; CHECK-EMPTY:
893c5b11a71SAlex MacLean; CHECK-EMPTY:
894c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
895c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 38, 0
896c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
8970f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, 2, 3, 4};
898c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
899c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
900c5b11a71SAlex MacLean; CHECK-NEXT:    (
901c5b11a71SAlex MacLean; CHECK-NEXT:    param0
902c5b11a71SAlex MacLean; CHECK-NEXT:    );
903c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 38
904c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
905c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 { i16 1, i16 2, i16 3, i16 4 })
906c5b11a71SAlex MacLean  ret void
907c5b11a71SAlex MacLean}
908c5b11a71SAlex MacLeandefine void @st_param_v4_i16_irrr(i16 %b, i16 %c, i16 %d) {
909c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_irrr(
910c5b11a71SAlex MacLean; CHECK:       {
911c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
912c5b11a71SAlex MacLean; CHECK-EMPTY:
913c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
914c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_irrr_param_0];
915c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_irrr_param_1];
916c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs3, [st_param_v4_i16_irrr_param_2];
917c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 39, 0
918c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
9190f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, %rs1, %rs2, %rs3};
920c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
921c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
922c5b11a71SAlex MacLean; CHECK-NEXT:    (
923c5b11a71SAlex MacLean; CHECK-NEXT:    param0
924c5b11a71SAlex MacLean; CHECK-NEXT:    );
925c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 39
926c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
927c5b11a71SAlex MacLean  %struct.irrr0 = insertvalue %struct.short4 poison, i16 1, 0
928c5b11a71SAlex MacLean  %struct.irrr1 = insertvalue %struct.short4 %struct.irrr0, i16 %b, 1
929c5b11a71SAlex MacLean  %struct.irrr2 = insertvalue %struct.short4 %struct.irrr1, i16 %c, 2
930c5b11a71SAlex MacLean  %struct.irrr3 = insertvalue %struct.short4 %struct.irrr2, i16 %d, 3
931c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.irrr3)
932c5b11a71SAlex MacLean  ret void
933c5b11a71SAlex MacLean}
934c5b11a71SAlex MacLeandefine void @st_param_v4_i16_rirr(i16 %a, i16 %c, i16 %d) {
935c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_rirr(
936c5b11a71SAlex MacLean; CHECK:       {
937c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
938c5b11a71SAlex MacLean; CHECK-EMPTY:
939c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
940c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_rirr_param_0];
941c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_rirr_param_1];
942c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs3, [st_param_v4_i16_rirr_param_2];
943c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 40, 0
944c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
9450f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, 2, %rs2, %rs3};
946c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
947c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
948c5b11a71SAlex MacLean; CHECK-NEXT:    (
949c5b11a71SAlex MacLean; CHECK-NEXT:    param0
950c5b11a71SAlex MacLean; CHECK-NEXT:    );
951c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 40
952c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
953c5b11a71SAlex MacLean  %struct.rirr0 = insertvalue %struct.short4 poison, i16 %a, 0
954c5b11a71SAlex MacLean  %struct.rirr1 = insertvalue %struct.short4 %struct.rirr0, i16 2, 1
955c5b11a71SAlex MacLean  %struct.rirr2 = insertvalue %struct.short4 %struct.rirr1, i16 %c, 2
956c5b11a71SAlex MacLean  %struct.rirr3 = insertvalue %struct.short4 %struct.rirr2, i16 %d, 3
957c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.rirr3)
958c5b11a71SAlex MacLean  ret void
959c5b11a71SAlex MacLean}
960c5b11a71SAlex MacLeandefine void @st_param_v4_i16_rrir(i16 %a, i16 %b, i16 %d) {
961c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_rrir(
962c5b11a71SAlex MacLean; CHECK:       {
963c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
964c5b11a71SAlex MacLean; CHECK-EMPTY:
965c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
966c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_rrir_param_0];
967c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_rrir_param_1];
968c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs3, [st_param_v4_i16_rrir_param_2];
969c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 41, 0
970c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
9710f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, %rs2, 3, %rs3};
972c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
973c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
974c5b11a71SAlex MacLean; CHECK-NEXT:    (
975c5b11a71SAlex MacLean; CHECK-NEXT:    param0
976c5b11a71SAlex MacLean; CHECK-NEXT:    );
977c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 41
978c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
979c5b11a71SAlex MacLean  %struct.rrir0 = insertvalue %struct.short4 poison, i16 %a, 0
980c5b11a71SAlex MacLean  %struct.rrir1 = insertvalue %struct.short4 %struct.rrir0, i16 %b, 1
981c5b11a71SAlex MacLean  %struct.rrir2 = insertvalue %struct.short4 %struct.rrir1, i16 3, 2
982c5b11a71SAlex MacLean  %struct.rrir3 = insertvalue %struct.short4 %struct.rrir2, i16 %d, 3
983c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.rrir3)
984c5b11a71SAlex MacLean  ret void
985c5b11a71SAlex MacLean}
986c5b11a71SAlex MacLeandefine void @st_param_v4_i16_rrri(i16 %a, i16 %b, i16 %c) {
987c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_rrri(
988c5b11a71SAlex MacLean; CHECK:       {
989c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<4>;
990c5b11a71SAlex MacLean; CHECK-EMPTY:
991c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
992c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_rrri_param_0];
993c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_rrri_param_1];
994c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs3, [st_param_v4_i16_rrri_param_2];
995c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 42, 0
996c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
9970f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, %rs2, %rs3, 4};
998c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
999c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1000c5b11a71SAlex MacLean; CHECK-NEXT:    (
1001c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1002c5b11a71SAlex MacLean; CHECK-NEXT:    );
1003c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 42
1004c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1005c5b11a71SAlex MacLean  %struct.rrri0 = insertvalue %struct.short4 poison, i16 %a, 0
1006c5b11a71SAlex MacLean  %struct.rrri1 = insertvalue %struct.short4 %struct.rrri0, i16 %b, 1
1007c5b11a71SAlex MacLean  %struct.rrri2 = insertvalue %struct.short4 %struct.rrri1, i16 %c, 2
1008c5b11a71SAlex MacLean  %struct.rrri3 = insertvalue %struct.short4 %struct.rrri2, i16 4, 3
1009c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.rrri3)
1010c5b11a71SAlex MacLean  ret void
1011c5b11a71SAlex MacLean}
1012c5b11a71SAlex MacLeandefine void @st_param_v4_i16_iirr(i16 %c, i16 %d) {
1013c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_iirr(
1014c5b11a71SAlex MacLean; CHECK:       {
1015c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
1016c5b11a71SAlex MacLean; CHECK-EMPTY:
1017c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1018c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_iirr_param_0];
1019c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_iirr_param_1];
1020c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 43, 0
1021c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
10220f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, 2, %rs1, %rs2};
1023c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1024c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1025c5b11a71SAlex MacLean; CHECK-NEXT:    (
1026c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1027c5b11a71SAlex MacLean; CHECK-NEXT:    );
1028c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 43
1029c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1030c5b11a71SAlex MacLean  %struct.iirr0 = insertvalue %struct.short4 poison, i16 1, 0
1031c5b11a71SAlex MacLean  %struct.iirr1 = insertvalue %struct.short4 %struct.iirr0, i16 2, 1
1032c5b11a71SAlex MacLean  %struct.iirr2 = insertvalue %struct.short4 %struct.iirr1, i16 %c, 2
1033c5b11a71SAlex MacLean  %struct.iirr3 = insertvalue %struct.short4 %struct.iirr2, i16 %d, 3
1034c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.iirr3)
1035c5b11a71SAlex MacLean  ret void
1036c5b11a71SAlex MacLean}
1037c5b11a71SAlex MacLeandefine void @st_param_v4_i16_irir(i16 %b, i16 %d) {
1038c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_irir(
1039c5b11a71SAlex MacLean; CHECK:       {
1040c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
1041c5b11a71SAlex MacLean; CHECK-EMPTY:
1042c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1043c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_irir_param_0];
1044c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_irir_param_1];
1045c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 44, 0
1046c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
10470f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, %rs1, 3, %rs2};
1048c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1049c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1050c5b11a71SAlex MacLean; CHECK-NEXT:    (
1051c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1052c5b11a71SAlex MacLean; CHECK-NEXT:    );
1053c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 44
1054c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1055c5b11a71SAlex MacLean  %struct.irir0 = insertvalue %struct.short4 poison, i16 1, 0
1056c5b11a71SAlex MacLean  %struct.irir1 = insertvalue %struct.short4 %struct.irir0, i16 %b, 1
1057c5b11a71SAlex MacLean  %struct.irir2 = insertvalue %struct.short4 %struct.irir1, i16 3, 2
1058c5b11a71SAlex MacLean  %struct.irir3 = insertvalue %struct.short4 %struct.irir2, i16 %d, 3
1059c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.irir3)
1060c5b11a71SAlex MacLean  ret void
1061c5b11a71SAlex MacLean}
1062c5b11a71SAlex MacLeandefine void @st_param_v4_i16_irri(i16 %b, i16 %c) {
1063c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_irri(
1064c5b11a71SAlex MacLean; CHECK:       {
1065c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
1066c5b11a71SAlex MacLean; CHECK-EMPTY:
1067c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1068c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_irri_param_0];
1069c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_irri_param_1];
1070c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 45, 0
1071c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
10720f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, %rs1, %rs2, 4};
1073c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1074c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1075c5b11a71SAlex MacLean; CHECK-NEXT:    (
1076c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1077c5b11a71SAlex MacLean; CHECK-NEXT:    );
1078c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 45
1079c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1080c5b11a71SAlex MacLean  %struct.irri0 = insertvalue %struct.short4 poison, i16 1, 0
1081c5b11a71SAlex MacLean  %struct.irri1 = insertvalue %struct.short4 %struct.irri0, i16 %b, 1
1082c5b11a71SAlex MacLean  %struct.irri2 = insertvalue %struct.short4 %struct.irri1, i16 %c, 2
1083c5b11a71SAlex MacLean  %struct.irri3 = insertvalue %struct.short4 %struct.irri2, i16 4, 3
1084c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.irri3)
1085c5b11a71SAlex MacLean  ret void
1086c5b11a71SAlex MacLean}
1087c5b11a71SAlex MacLeandefine void @st_param_v4_i16_riir(i16 %a, i16 %d) {
1088c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_riir(
1089c5b11a71SAlex MacLean; CHECK:       {
1090c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
1091c5b11a71SAlex MacLean; CHECK-EMPTY:
1092c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1093c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_riir_param_0];
1094c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_riir_param_1];
1095c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 46, 0
1096c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
10970f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, 2, 3, %rs2};
1098c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1099c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1100c5b11a71SAlex MacLean; CHECK-NEXT:    (
1101c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1102c5b11a71SAlex MacLean; CHECK-NEXT:    );
1103c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 46
1104c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1105c5b11a71SAlex MacLean  %struct.riir0 = insertvalue %struct.short4 poison, i16 %a, 0
1106c5b11a71SAlex MacLean  %struct.riir1 = insertvalue %struct.short4 %struct.riir0, i16 2, 1
1107c5b11a71SAlex MacLean  %struct.riir2 = insertvalue %struct.short4 %struct.riir1, i16 3, 2
1108c5b11a71SAlex MacLean  %struct.riir3 = insertvalue %struct.short4 %struct.riir2, i16 %d, 3
1109c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.riir3)
1110c5b11a71SAlex MacLean  ret void
1111c5b11a71SAlex MacLean}
1112c5b11a71SAlex MacLeandefine void @st_param_v4_i16_riri(i16 %a, i16 %c) {
1113c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_riri(
1114c5b11a71SAlex MacLean; CHECK:       {
1115c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
1116c5b11a71SAlex MacLean; CHECK-EMPTY:
1117c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1118c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_riri_param_0];
1119c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_riri_param_1];
1120c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 47, 0
1121c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
11220f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, 2, %rs2, 4};
1123c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1124c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1125c5b11a71SAlex MacLean; CHECK-NEXT:    (
1126c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1127c5b11a71SAlex MacLean; CHECK-NEXT:    );
1128c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 47
1129c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1130c5b11a71SAlex MacLean  %struct.riri0 = insertvalue %struct.short4 poison, i16 %a, 0
1131c5b11a71SAlex MacLean  %struct.riri1 = insertvalue %struct.short4 %struct.riri0, i16 2, 1
1132c5b11a71SAlex MacLean  %struct.riri2 = insertvalue %struct.short4 %struct.riri1, i16 %c, 2
1133c5b11a71SAlex MacLean  %struct.riri3 = insertvalue %struct.short4 %struct.riri2, i16 4, 3
1134c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.riri3)
1135c5b11a71SAlex MacLean  ret void
1136c5b11a71SAlex MacLean}
1137c5b11a71SAlex MacLeandefine void @st_param_v4_i16_rrii(i16 %a, i16 %b) {
1138c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_rrii(
1139c5b11a71SAlex MacLean; CHECK:       {
1140c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<3>;
1141c5b11a71SAlex MacLean; CHECK-EMPTY:
1142c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1143c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_rrii_param_0];
1144c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs2, [st_param_v4_i16_rrii_param_1];
1145c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 48, 0
1146c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
11470f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, %rs2, 3, 4};
1148c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1149c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1150c5b11a71SAlex MacLean; CHECK-NEXT:    (
1151c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1152c5b11a71SAlex MacLean; CHECK-NEXT:    );
1153c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 48
1154c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1155c5b11a71SAlex MacLean  %struct.rrii0 = insertvalue %struct.short4 poison, i16 %a, 0
1156c5b11a71SAlex MacLean  %struct.rrii1 = insertvalue %struct.short4 %struct.rrii0, i16 %b, 1
1157c5b11a71SAlex MacLean  %struct.rrii2 = insertvalue %struct.short4 %struct.rrii1, i16 3, 2
1158c5b11a71SAlex MacLean  %struct.rrii3 = insertvalue %struct.short4 %struct.rrii2, i16 4, 3
1159c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.rrii3)
1160c5b11a71SAlex MacLean  ret void
1161c5b11a71SAlex MacLean}
1162c5b11a71SAlex MacLeandefine void @st_param_v4_i16_iiir(i16 %d) {
1163c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_iiir(
1164c5b11a71SAlex MacLean; CHECK:       {
1165c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
1166c5b11a71SAlex MacLean; CHECK-EMPTY:
1167c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1168c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_iiir_param_0];
1169c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 49, 0
1170c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
11710f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, 2, 3, %rs1};
1172c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1173c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1174c5b11a71SAlex MacLean; CHECK-NEXT:    (
1175c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1176c5b11a71SAlex MacLean; CHECK-NEXT:    );
1177c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 49
1178c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1179c5b11a71SAlex MacLean  %struct.iiir0 = insertvalue %struct.short4 poison, i16 1, 0
1180c5b11a71SAlex MacLean  %struct.iiir1 = insertvalue %struct.short4 %struct.iiir0, i16 2, 1
1181c5b11a71SAlex MacLean  %struct.iiir2 = insertvalue %struct.short4 %struct.iiir1, i16 3, 2
1182c5b11a71SAlex MacLean  %struct.iiir3 = insertvalue %struct.short4 %struct.iiir2, i16 %d, 3
1183c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.iiir3)
1184c5b11a71SAlex MacLean  ret void
1185c5b11a71SAlex MacLean}
1186c5b11a71SAlex MacLeandefine void @st_param_v4_i16_iiri(i16 %c) {
1187c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_iiri(
1188c5b11a71SAlex MacLean; CHECK:       {
1189c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
1190c5b11a71SAlex MacLean; CHECK-EMPTY:
1191c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1192c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_iiri_param_0];
1193c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 50, 0
1194c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
11950f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, 2, %rs1, 4};
1196c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1197c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1198c5b11a71SAlex MacLean; CHECK-NEXT:    (
1199c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1200c5b11a71SAlex MacLean; CHECK-NEXT:    );
1201c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 50
1202c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1203c5b11a71SAlex MacLean  %struct.iiri0 = insertvalue %struct.short4 poison, i16 1, 0
1204c5b11a71SAlex MacLean  %struct.iiri1 = insertvalue %struct.short4 %struct.iiri0, i16 2, 1
1205c5b11a71SAlex MacLean  %struct.iiri2 = insertvalue %struct.short4 %struct.iiri1, i16 %c, 2
1206c5b11a71SAlex MacLean  %struct.iiri3 = insertvalue %struct.short4 %struct.iiri2, i16 4, 3
1207c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.iiri3)
1208c5b11a71SAlex MacLean  ret void
1209c5b11a71SAlex MacLean}
1210c5b11a71SAlex MacLeandefine void @st_param_v4_i16_irii(i16 %b) {
1211c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_irii(
1212c5b11a71SAlex MacLean; CHECK:       {
1213c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
1214c5b11a71SAlex MacLean; CHECK-EMPTY:
1215c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1216c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_irii_param_0];
1217c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 51, 0
1218c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
12190f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {1, %rs1, 3, 4};
1220c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1221c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1222c5b11a71SAlex MacLean; CHECK-NEXT:    (
1223c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1224c5b11a71SAlex MacLean; CHECK-NEXT:    );
1225c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 51
1226c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1227c5b11a71SAlex MacLean  %struct.irii0 = insertvalue %struct.short4 poison, i16 1, 0
1228c5b11a71SAlex MacLean  %struct.irii1 = insertvalue %struct.short4 %struct.irii0, i16 %b, 1
1229c5b11a71SAlex MacLean  %struct.irii2 = insertvalue %struct.short4 %struct.irii1, i16 3, 2
1230c5b11a71SAlex MacLean  %struct.irii3 = insertvalue %struct.short4 %struct.irii2, i16 4, 3
1231c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.irii3)
1232c5b11a71SAlex MacLean  ret void
1233c5b11a71SAlex MacLean}
1234c5b11a71SAlex MacLeandefine void @st_param_v4_i16_riii(i16 %a) {
1235c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i16_riii(
1236c5b11a71SAlex MacLean; CHECK:       {
1237c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b16 %rs<2>;
1238c5b11a71SAlex MacLean; CHECK-EMPTY:
1239c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1240c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u16 %rs1, [st_param_v4_i16_riii_param_0];
1241c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 52, 0
1242c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 8 .b8 param0[8];
12430f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b16 [param0], {%rs1, 2, 3, 4};
1244c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1245c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i16,
1246c5b11a71SAlex MacLean; CHECK-NEXT:    (
1247c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1248c5b11a71SAlex MacLean; CHECK-NEXT:    );
1249c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 52
1250c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1251c5b11a71SAlex MacLean  %struct.riii0 = insertvalue %struct.short4 poison, i16 %a, 0
1252c5b11a71SAlex MacLean  %struct.riii1 = insertvalue %struct.short4 %struct.riii0, i16 2, 1
1253c5b11a71SAlex MacLean  %struct.riii2 = insertvalue %struct.short4 %struct.riii1, i16 3, 2
1254c5b11a71SAlex MacLean  %struct.riii3 = insertvalue %struct.short4 %struct.riii2, i16 4, 3
1255c5b11a71SAlex MacLean  call void @call_v4_i16(%struct.short4 %struct.riii3)
1256c5b11a71SAlex MacLean  ret void
1257c5b11a71SAlex MacLean}
1258c5b11a71SAlex MacLean
1259c5b11a71SAlex MacLeandefine void @st_param_v4_i32_iiii() {
1260c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_iiii(
1261c5b11a71SAlex MacLean; CHECK:       {
1262c5b11a71SAlex MacLean; CHECK-EMPTY:
1263c5b11a71SAlex MacLean; CHECK-EMPTY:
1264c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1265c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 53, 0
1266c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
12670f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, 2, 3, 4};
1268c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1269c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1270c5b11a71SAlex MacLean; CHECK-NEXT:    (
1271c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1272c5b11a71SAlex MacLean; CHECK-NEXT:    );
1273c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 53
1274c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1275c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 { i32 1, i32 2, i32 3, i32 4 })
1276c5b11a71SAlex MacLean  ret void
1277c5b11a71SAlex MacLean}
1278c5b11a71SAlex MacLeandefine void @st_param_v4_i32_irrr(i32 %b, i32 %c, i32 %d) {
1279c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_irrr(
1280c5b11a71SAlex MacLean; CHECK:       {
1281c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<4>;
1282c5b11a71SAlex MacLean; CHECK-EMPTY:
1283c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1284c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_irrr_param_0];
1285c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_irrr_param_1];
1286c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r3, [st_param_v4_i32_irrr_param_2];
1287c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 54, 0
1288c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
12890f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, %r1, %r2, %r3};
1290c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1291c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1292c5b11a71SAlex MacLean; CHECK-NEXT:    (
1293c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1294c5b11a71SAlex MacLean; CHECK-NEXT:    );
1295c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 54
1296c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1297c5b11a71SAlex MacLean  %struct.irrr0 = insertvalue %struct.int4 poison, i32 1, 0
1298c5b11a71SAlex MacLean  %struct.irrr1 = insertvalue %struct.int4 %struct.irrr0, i32 %b, 1
1299c5b11a71SAlex MacLean  %struct.irrr2 = insertvalue %struct.int4 %struct.irrr1, i32 %c, 2
1300c5b11a71SAlex MacLean  %struct.irrr3 = insertvalue %struct.int4 %struct.irrr2, i32 %d, 3
1301c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.irrr3)
1302c5b11a71SAlex MacLean  ret void
1303c5b11a71SAlex MacLean}
1304c5b11a71SAlex MacLeandefine void @st_param_v4_i32_rirr(i32 %a, i32 %c, i32 %d) {
1305c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_rirr(
1306c5b11a71SAlex MacLean; CHECK:       {
1307c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<4>;
1308c5b11a71SAlex MacLean; CHECK-EMPTY:
1309c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1310c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_rirr_param_0];
1311c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_rirr_param_1];
1312c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r3, [st_param_v4_i32_rirr_param_2];
1313c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 55, 0
1314c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
13150f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, 2, %r2, %r3};
1316c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1317c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1318c5b11a71SAlex MacLean; CHECK-NEXT:    (
1319c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1320c5b11a71SAlex MacLean; CHECK-NEXT:    );
1321c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 55
1322c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1323c5b11a71SAlex MacLean  %struct.rirr0 = insertvalue %struct.int4 poison, i32 %a, 0
1324c5b11a71SAlex MacLean  %struct.rirr1 = insertvalue %struct.int4 %struct.rirr0, i32 2, 1
1325c5b11a71SAlex MacLean  %struct.rirr2 = insertvalue %struct.int4 %struct.rirr1, i32 %c, 2
1326c5b11a71SAlex MacLean  %struct.rirr3 = insertvalue %struct.int4 %struct.rirr2, i32 %d, 3
1327c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.rirr3)
1328c5b11a71SAlex MacLean  ret void
1329c5b11a71SAlex MacLean}
1330c5b11a71SAlex MacLeandefine void @st_param_v4_i32_rrir(i32 %a, i32 %b, i32 %d) {
1331c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_rrir(
1332c5b11a71SAlex MacLean; CHECK:       {
1333c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<4>;
1334c5b11a71SAlex MacLean; CHECK-EMPTY:
1335c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1336c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_rrir_param_0];
1337c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_rrir_param_1];
1338c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r3, [st_param_v4_i32_rrir_param_2];
1339c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 56, 0
1340c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
13410f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, %r2, 3, %r3};
1342c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1343c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1344c5b11a71SAlex MacLean; CHECK-NEXT:    (
1345c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1346c5b11a71SAlex MacLean; CHECK-NEXT:    );
1347c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 56
1348c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1349c5b11a71SAlex MacLean  %struct.rrir0 = insertvalue %struct.int4 poison, i32 %a, 0
1350c5b11a71SAlex MacLean  %struct.rrir1 = insertvalue %struct.int4 %struct.rrir0, i32 %b, 1
1351c5b11a71SAlex MacLean  %struct.rrir2 = insertvalue %struct.int4 %struct.rrir1, i32 3, 2
1352c5b11a71SAlex MacLean  %struct.rrir3 = insertvalue %struct.int4 %struct.rrir2, i32 %d, 3
1353c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.rrir3)
1354c5b11a71SAlex MacLean  ret void
1355c5b11a71SAlex MacLean}
1356c5b11a71SAlex MacLeandefine void @st_param_v4_i32_rrri(i32 %a, i32 %b, i32 %c) {
1357c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_rrri(
1358c5b11a71SAlex MacLean; CHECK:       {
1359c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<4>;
1360c5b11a71SAlex MacLean; CHECK-EMPTY:
1361c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1362c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_rrri_param_0];
1363c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_rrri_param_1];
1364c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r3, [st_param_v4_i32_rrri_param_2];
1365c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 57, 0
1366c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
13670f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, %r2, %r3, 4};
1368c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1369c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1370c5b11a71SAlex MacLean; CHECK-NEXT:    (
1371c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1372c5b11a71SAlex MacLean; CHECK-NEXT:    );
1373c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 57
1374c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1375c5b11a71SAlex MacLean  %struct.rrri0 = insertvalue %struct.int4 poison, i32 %a, 0
1376c5b11a71SAlex MacLean  %struct.rrri1 = insertvalue %struct.int4 %struct.rrri0, i32 %b, 1
1377c5b11a71SAlex MacLean  %struct.rrri2 = insertvalue %struct.int4 %struct.rrri1, i32 %c, 2
1378c5b11a71SAlex MacLean  %struct.rrri3 = insertvalue %struct.int4 %struct.rrri2, i32 4, 3
1379c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.rrri3)
1380c5b11a71SAlex MacLean  ret void
1381c5b11a71SAlex MacLean}
1382c5b11a71SAlex MacLeandefine void @st_param_v4_i32_iirr(i32 %c, i32 %d) {
1383c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_iirr(
1384c5b11a71SAlex MacLean; CHECK:       {
1385c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<3>;
1386c5b11a71SAlex MacLean; CHECK-EMPTY:
1387c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1388c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_iirr_param_0];
1389c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_iirr_param_1];
1390c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 58, 0
1391c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
13920f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, 2, %r1, %r2};
1393c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1394c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1395c5b11a71SAlex MacLean; CHECK-NEXT:    (
1396c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1397c5b11a71SAlex MacLean; CHECK-NEXT:    );
1398c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 58
1399c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1400c5b11a71SAlex MacLean  %struct.iirr0 = insertvalue %struct.int4 poison, i32 1, 0
1401c5b11a71SAlex MacLean  %struct.iirr1 = insertvalue %struct.int4 %struct.iirr0, i32 2, 1
1402c5b11a71SAlex MacLean  %struct.iirr2 = insertvalue %struct.int4 %struct.iirr1, i32 %c, 2
1403c5b11a71SAlex MacLean  %struct.iirr3 = insertvalue %struct.int4 %struct.iirr2, i32 %d, 3
1404c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.iirr3)
1405c5b11a71SAlex MacLean  ret void
1406c5b11a71SAlex MacLean}
1407c5b11a71SAlex MacLeandefine void @st_param_v4_i32_irir(i32 %b, i32 %d) {
1408c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_irir(
1409c5b11a71SAlex MacLean; CHECK:       {
1410c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<3>;
1411c5b11a71SAlex MacLean; CHECK-EMPTY:
1412c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1413c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_irir_param_0];
1414c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_irir_param_1];
1415c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 59, 0
1416c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
14170f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, %r1, 3, %r2};
1418c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1419c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1420c5b11a71SAlex MacLean; CHECK-NEXT:    (
1421c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1422c5b11a71SAlex MacLean; CHECK-NEXT:    );
1423c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 59
1424c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1425c5b11a71SAlex MacLean  %struct.irir0 = insertvalue %struct.int4 poison, i32 1, 0
1426c5b11a71SAlex MacLean  %struct.irir1 = insertvalue %struct.int4 %struct.irir0, i32 %b, 1
1427c5b11a71SAlex MacLean  %struct.irir2 = insertvalue %struct.int4 %struct.irir1, i32 3, 2
1428c5b11a71SAlex MacLean  %struct.irir3 = insertvalue %struct.int4 %struct.irir2, i32 %d, 3
1429c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.irir3)
1430c5b11a71SAlex MacLean  ret void
1431c5b11a71SAlex MacLean}
1432c5b11a71SAlex MacLeandefine void @st_param_v4_i32_irri(i32 %b, i32 %c) {
1433c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_irri(
1434c5b11a71SAlex MacLean; CHECK:       {
1435c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<3>;
1436c5b11a71SAlex MacLean; CHECK-EMPTY:
1437c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1438c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_irri_param_0];
1439c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_irri_param_1];
1440c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 60, 0
1441c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
14420f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, %r1, %r2, 4};
1443c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1444c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1445c5b11a71SAlex MacLean; CHECK-NEXT:    (
1446c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1447c5b11a71SAlex MacLean; CHECK-NEXT:    );
1448c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 60
1449c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1450c5b11a71SAlex MacLean  %struct.irri0 = insertvalue %struct.int4 poison, i32 1, 0
1451c5b11a71SAlex MacLean  %struct.irri1 = insertvalue %struct.int4 %struct.irri0, i32 %b, 1
1452c5b11a71SAlex MacLean  %struct.irri2 = insertvalue %struct.int4 %struct.irri1, i32 %c, 2
1453c5b11a71SAlex MacLean  %struct.irri3 = insertvalue %struct.int4 %struct.irri2, i32 4, 3
1454c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.irri3)
1455c5b11a71SAlex MacLean  ret void
1456c5b11a71SAlex MacLean}
1457c5b11a71SAlex MacLeandefine void @st_param_v4_i32_riir(i32 %a, i32 %d) {
1458c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_riir(
1459c5b11a71SAlex MacLean; CHECK:       {
1460c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<3>;
1461c5b11a71SAlex MacLean; CHECK-EMPTY:
1462c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1463c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_riir_param_0];
1464c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_riir_param_1];
1465c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 61, 0
1466c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
14670f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, 2, 3, %r2};
1468c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1469c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1470c5b11a71SAlex MacLean; CHECK-NEXT:    (
1471c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1472c5b11a71SAlex MacLean; CHECK-NEXT:    );
1473c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 61
1474c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1475c5b11a71SAlex MacLean  %struct.riir0 = insertvalue %struct.int4 poison, i32 %a, 0
1476c5b11a71SAlex MacLean  %struct.riir1 = insertvalue %struct.int4 %struct.riir0, i32 2, 1
1477c5b11a71SAlex MacLean  %struct.riir2 = insertvalue %struct.int4 %struct.riir1, i32 3, 2
1478c5b11a71SAlex MacLean  %struct.riir3 = insertvalue %struct.int4 %struct.riir2, i32 %d, 3
1479c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.riir3)
1480c5b11a71SAlex MacLean  ret void
1481c5b11a71SAlex MacLean}
1482c5b11a71SAlex MacLeandefine void @st_param_v4_i32_riri(i32 %a, i32 %c) {
1483c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_riri(
1484c5b11a71SAlex MacLean; CHECK:       {
1485c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<3>;
1486c5b11a71SAlex MacLean; CHECK-EMPTY:
1487c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1488c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_riri_param_0];
1489c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_riri_param_1];
1490c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 62, 0
1491c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
14920f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, 2, %r2, 4};
1493c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1494c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1495c5b11a71SAlex MacLean; CHECK-NEXT:    (
1496c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1497c5b11a71SAlex MacLean; CHECK-NEXT:    );
1498c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 62
1499c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1500c5b11a71SAlex MacLean  %struct.riri0 = insertvalue %struct.int4 poison, i32 %a, 0
1501c5b11a71SAlex MacLean  %struct.riri1 = insertvalue %struct.int4 %struct.riri0, i32 2, 1
1502c5b11a71SAlex MacLean  %struct.riri2 = insertvalue %struct.int4 %struct.riri1, i32 %c, 2
1503c5b11a71SAlex MacLean  %struct.riri3 = insertvalue %struct.int4 %struct.riri2, i32 4, 3
1504c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.riri3)
1505c5b11a71SAlex MacLean  ret void
1506c5b11a71SAlex MacLean}
1507c5b11a71SAlex MacLeandefine void @st_param_v4_i32_rrii(i32 %a, i32 %b) {
1508c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_rrii(
1509c5b11a71SAlex MacLean; CHECK:       {
1510c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<3>;
1511c5b11a71SAlex MacLean; CHECK-EMPTY:
1512c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1513c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_rrii_param_0];
1514c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r2, [st_param_v4_i32_rrii_param_1];
1515c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 63, 0
1516c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
15170f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, %r2, 3, 4};
1518c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1519c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1520c5b11a71SAlex MacLean; CHECK-NEXT:    (
1521c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1522c5b11a71SAlex MacLean; CHECK-NEXT:    );
1523c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 63
1524c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1525c5b11a71SAlex MacLean  %struct.rrii0 = insertvalue %struct.int4 poison, i32 %a, 0
1526c5b11a71SAlex MacLean  %struct.rrii1 = insertvalue %struct.int4 %struct.rrii0, i32 %b, 1
1527c5b11a71SAlex MacLean  %struct.rrii2 = insertvalue %struct.int4 %struct.rrii1, i32 3, 2
1528c5b11a71SAlex MacLean  %struct.rrii3 = insertvalue %struct.int4 %struct.rrii2, i32 4, 3
1529c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.rrii3)
1530c5b11a71SAlex MacLean  ret void
1531c5b11a71SAlex MacLean}
1532c5b11a71SAlex MacLeandefine void @st_param_v4_i32_iiir(i32 %d) {
1533c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_iiir(
1534c5b11a71SAlex MacLean; CHECK:       {
1535c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<2>;
1536c5b11a71SAlex MacLean; CHECK-EMPTY:
1537c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1538c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_iiir_param_0];
1539c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 64, 0
1540c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
15410f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, 2, 3, %r1};
1542c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1543c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1544c5b11a71SAlex MacLean; CHECK-NEXT:    (
1545c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1546c5b11a71SAlex MacLean; CHECK-NEXT:    );
1547c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 64
1548c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1549c5b11a71SAlex MacLean  %struct.iiir0 = insertvalue %struct.int4 poison, i32 1, 0
1550c5b11a71SAlex MacLean  %struct.iiir1 = insertvalue %struct.int4 %struct.iiir0, i32 2, 1
1551c5b11a71SAlex MacLean  %struct.iiir2 = insertvalue %struct.int4 %struct.iiir1, i32 3, 2
1552c5b11a71SAlex MacLean  %struct.iiir3 = insertvalue %struct.int4 %struct.iiir2, i32 %d, 3
1553c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.iiir3)
1554c5b11a71SAlex MacLean  ret void
1555c5b11a71SAlex MacLean}
1556c5b11a71SAlex MacLeandefine void @st_param_v4_i32_iiri(i32 %c) {
1557c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_iiri(
1558c5b11a71SAlex MacLean; CHECK:       {
1559c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<2>;
1560c5b11a71SAlex MacLean; CHECK-EMPTY:
1561c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1562c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_iiri_param_0];
1563c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 65, 0
1564c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
15650f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, 2, %r1, 4};
1566c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1567c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1568c5b11a71SAlex MacLean; CHECK-NEXT:    (
1569c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1570c5b11a71SAlex MacLean; CHECK-NEXT:    );
1571c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 65
1572c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1573c5b11a71SAlex MacLean  %struct.iiri0 = insertvalue %struct.int4 poison, i32 1, 0
1574c5b11a71SAlex MacLean  %struct.iiri1 = insertvalue %struct.int4 %struct.iiri0, i32 2, 1
1575c5b11a71SAlex MacLean  %struct.iiri2 = insertvalue %struct.int4 %struct.iiri1, i32 %c, 2
1576c5b11a71SAlex MacLean  %struct.iiri3 = insertvalue %struct.int4 %struct.iiri2, i32 4, 3
1577c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.iiri3)
1578c5b11a71SAlex MacLean  ret void
1579c5b11a71SAlex MacLean}
1580c5b11a71SAlex MacLeandefine void @st_param_v4_i32_irii(i32 %b) {
1581c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_irii(
1582c5b11a71SAlex MacLean; CHECK:       {
1583c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<2>;
1584c5b11a71SAlex MacLean; CHECK-EMPTY:
1585c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1586c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_irii_param_0];
1587c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 66, 0
1588c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
15890f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {1, %r1, 3, 4};
1590c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1591c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1592c5b11a71SAlex MacLean; CHECK-NEXT:    (
1593c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1594c5b11a71SAlex MacLean; CHECK-NEXT:    );
1595c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 66
1596c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1597c5b11a71SAlex MacLean  %struct.irii0 = insertvalue %struct.int4 poison, i32 1, 0
1598c5b11a71SAlex MacLean  %struct.irii1 = insertvalue %struct.int4 %struct.irii0, i32 %b, 1
1599c5b11a71SAlex MacLean  %struct.irii2 = insertvalue %struct.int4 %struct.irii1, i32 3, 2
1600c5b11a71SAlex MacLean  %struct.irii3 = insertvalue %struct.int4 %struct.irii2, i32 4, 3
1601c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.irii3)
1602c5b11a71SAlex MacLean  ret void
1603c5b11a71SAlex MacLean}
1604c5b11a71SAlex MacLeandefine void @st_param_v4_i32_riii(i32 %a) {
1605c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_i32_riii(
1606c5b11a71SAlex MacLean; CHECK:       {
1607c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .b32 %r<2>;
1608c5b11a71SAlex MacLean; CHECK-EMPTY:
1609c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1610c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.u32 %r1, [st_param_v4_i32_riii_param_0];
1611c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 67, 0
1612c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
16130f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.b32 [param0], {%r1, 2, 3, 4};
1614c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1615c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_i32,
1616c5b11a71SAlex MacLean; CHECK-NEXT:    (
1617c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1618c5b11a71SAlex MacLean; CHECK-NEXT:    );
1619c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 67
1620c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1621c5b11a71SAlex MacLean  %struct.riii0 = insertvalue %struct.int4 poison, i32 %a, 0
1622c5b11a71SAlex MacLean  %struct.riii1 = insertvalue %struct.int4 %struct.riii0, i32 2, 1
1623c5b11a71SAlex MacLean  %struct.riii2 = insertvalue %struct.int4 %struct.riii1, i32 3, 2
1624c5b11a71SAlex MacLean  %struct.riii3 = insertvalue %struct.int4 %struct.riii2, i32 4, 3
1625c5b11a71SAlex MacLean  call void @call_v4_i32(%struct.int4 %struct.riii3)
1626c5b11a71SAlex MacLean  ret void
1627c5b11a71SAlex MacLean}
1628c5b11a71SAlex MacLean
1629c5b11a71SAlex MacLeandefine void @st_param_v4_f32_iiii() {
1630c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_iiii(
1631c5b11a71SAlex MacLean; CHECK:       {
1632c5b11a71SAlex MacLean; CHECK-EMPTY:
1633c5b11a71SAlex MacLean; CHECK-EMPTY:
1634c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1635c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 68, 0
1636c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
16370f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, 0f40000000, 0f40400000, 0f40800000};
1638c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1639c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1640c5b11a71SAlex MacLean; CHECK-NEXT:    (
1641c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1642c5b11a71SAlex MacLean; CHECK-NEXT:    );
1643c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 68
1644c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1645c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 { float 1.0, float 2.0, float 3.0, float 4.0 })
1646c5b11a71SAlex MacLean  ret void
1647c5b11a71SAlex MacLean}
1648c5b11a71SAlex MacLeandefine void @st_param_v4_f32_irrr(float %b, float %c, float %d) {
1649c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_irrr(
1650c5b11a71SAlex MacLean; CHECK:       {
1651c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<4>;
1652c5b11a71SAlex MacLean; CHECK-EMPTY:
1653c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1654c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_irrr_param_0];
1655c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_irrr_param_1];
1656c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f3, [st_param_v4_f32_irrr_param_2];
1657c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 69, 0
1658c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
16590f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, %f1, %f2, %f3};
1660c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1661c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1662c5b11a71SAlex MacLean; CHECK-NEXT:    (
1663c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1664c5b11a71SAlex MacLean; CHECK-NEXT:    );
1665c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 69
1666c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1667c5b11a71SAlex MacLean  %struct.irrr0 = insertvalue %struct.float4 poison, float 1.0, 0
1668c5b11a71SAlex MacLean  %struct.irrr1 = insertvalue %struct.float4 %struct.irrr0, float %b, 1
1669c5b11a71SAlex MacLean  %struct.irrr2 = insertvalue %struct.float4 %struct.irrr1, float %c, 2
1670c5b11a71SAlex MacLean  %struct.irrr3 = insertvalue %struct.float4 %struct.irrr2, float %d, 3
1671c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.irrr3)
1672c5b11a71SAlex MacLean  ret void
1673c5b11a71SAlex MacLean}
1674c5b11a71SAlex MacLeandefine void @st_param_v4_f32_rirr(float %a, float %c, float %d) {
1675c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_rirr(
1676c5b11a71SAlex MacLean; CHECK:       {
1677c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<4>;
1678c5b11a71SAlex MacLean; CHECK-EMPTY:
1679c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1680c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_rirr_param_0];
1681c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_rirr_param_1];
1682c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f3, [st_param_v4_f32_rirr_param_2];
1683c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 70, 0
1684c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
16850f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, 0f40000000, %f2, %f3};
1686c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1687c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1688c5b11a71SAlex MacLean; CHECK-NEXT:    (
1689c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1690c5b11a71SAlex MacLean; CHECK-NEXT:    );
1691c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 70
1692c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1693c5b11a71SAlex MacLean  %struct.rirr0 = insertvalue %struct.float4 poison, float %a, 0
1694c5b11a71SAlex MacLean  %struct.rirr1 = insertvalue %struct.float4 %struct.rirr0, float 2.0, 1
1695c5b11a71SAlex MacLean  %struct.rirr2 = insertvalue %struct.float4 %struct.rirr1, float %c, 2
1696c5b11a71SAlex MacLean  %struct.rirr3 = insertvalue %struct.float4 %struct.rirr2, float %d, 3
1697c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.rirr3)
1698c5b11a71SAlex MacLean  ret void
1699c5b11a71SAlex MacLean}
1700c5b11a71SAlex MacLeandefine void @st_param_v4_f32_rrir(float %a, float %b, float %d) {
1701c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_rrir(
1702c5b11a71SAlex MacLean; CHECK:       {
1703c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<4>;
1704c5b11a71SAlex MacLean; CHECK-EMPTY:
1705c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1706c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_rrir_param_0];
1707c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_rrir_param_1];
1708c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f3, [st_param_v4_f32_rrir_param_2];
1709c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 71, 0
1710c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
17110f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, %f2, 0f40400000, %f3};
1712c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1713c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1714c5b11a71SAlex MacLean; CHECK-NEXT:    (
1715c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1716c5b11a71SAlex MacLean; CHECK-NEXT:    );
1717c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 71
1718c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1719c5b11a71SAlex MacLean  %struct.rrir0 = insertvalue %struct.float4 poison, float %a, 0
1720c5b11a71SAlex MacLean  %struct.rrir1 = insertvalue %struct.float4 %struct.rrir0, float %b, 1
1721c5b11a71SAlex MacLean  %struct.rrir2 = insertvalue %struct.float4 %struct.rrir1, float 3.0, 2
1722c5b11a71SAlex MacLean  %struct.rrir3 = insertvalue %struct.float4 %struct.rrir2, float %d, 3
1723c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.rrir3)
1724c5b11a71SAlex MacLean  ret void
1725c5b11a71SAlex MacLean}
1726c5b11a71SAlex MacLeandefine void @st_param_v4_f32_rrri(float %a, float %b, float %c) {
1727c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_rrri(
1728c5b11a71SAlex MacLean; CHECK:       {
1729c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<4>;
1730c5b11a71SAlex MacLean; CHECK-EMPTY:
1731c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1732c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_rrri_param_0];
1733c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_rrri_param_1];
1734c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f3, [st_param_v4_f32_rrri_param_2];
1735c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 72, 0
1736c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
17370f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, %f2, %f3, 0f40800000};
1738c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1739c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1740c5b11a71SAlex MacLean; CHECK-NEXT:    (
1741c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1742c5b11a71SAlex MacLean; CHECK-NEXT:    );
1743c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 72
1744c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1745c5b11a71SAlex MacLean  %struct.rrri0 = insertvalue %struct.float4 poison, float %a, 0
1746c5b11a71SAlex MacLean  %struct.rrri1 = insertvalue %struct.float4 %struct.rrri0, float %b, 1
1747c5b11a71SAlex MacLean  %struct.rrri2 = insertvalue %struct.float4 %struct.rrri1, float %c, 2
1748c5b11a71SAlex MacLean  %struct.rrri3 = insertvalue %struct.float4 %struct.rrri2, float 4.0, 3
1749c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.rrri3)
1750c5b11a71SAlex MacLean  ret void
1751c5b11a71SAlex MacLean}
1752c5b11a71SAlex MacLeandefine void @st_param_v4_f32_iirr(float %c, float %d) {
1753c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_iirr(
1754c5b11a71SAlex MacLean; CHECK:       {
1755c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<3>;
1756c5b11a71SAlex MacLean; CHECK-EMPTY:
1757c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1758c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_iirr_param_0];
1759c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_iirr_param_1];
1760c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 73, 0
1761c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
17620f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, 0f40000000, %f1, %f2};
1763c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1764c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1765c5b11a71SAlex MacLean; CHECK-NEXT:    (
1766c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1767c5b11a71SAlex MacLean; CHECK-NEXT:    );
1768c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 73
1769c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1770c5b11a71SAlex MacLean  %struct.iirr0 = insertvalue %struct.float4 poison, float 1.0, 0
1771c5b11a71SAlex MacLean  %struct.iirr1 = insertvalue %struct.float4 %struct.iirr0, float 2.0, 1
1772c5b11a71SAlex MacLean  %struct.iirr2 = insertvalue %struct.float4 %struct.iirr1, float %c, 2
1773c5b11a71SAlex MacLean  %struct.iirr3 = insertvalue %struct.float4 %struct.iirr2, float %d, 3
1774c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.iirr3)
1775c5b11a71SAlex MacLean  ret void
1776c5b11a71SAlex MacLean}
1777c5b11a71SAlex MacLeandefine void @st_param_v4_f32_irir(float %b, float %d) {
1778c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_irir(
1779c5b11a71SAlex MacLean; CHECK:       {
1780c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<3>;
1781c5b11a71SAlex MacLean; CHECK-EMPTY:
1782c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1783c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_irir_param_0];
1784c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_irir_param_1];
1785c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 74, 0
1786c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
17870f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, %f1, 0f40400000, %f2};
1788c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1789c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1790c5b11a71SAlex MacLean; CHECK-NEXT:    (
1791c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1792c5b11a71SAlex MacLean; CHECK-NEXT:    );
1793c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 74
1794c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1795c5b11a71SAlex MacLean  %struct.irir0 = insertvalue %struct.float4 poison, float 1.0, 0
1796c5b11a71SAlex MacLean  %struct.irir1 = insertvalue %struct.float4 %struct.irir0, float %b, 1
1797c5b11a71SAlex MacLean  %struct.irir2 = insertvalue %struct.float4 %struct.irir1, float 3.0, 2
1798c5b11a71SAlex MacLean  %struct.irir3 = insertvalue %struct.float4 %struct.irir2, float %d, 3
1799c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.irir3)
1800c5b11a71SAlex MacLean  ret void
1801c5b11a71SAlex MacLean}
1802c5b11a71SAlex MacLeandefine void @st_param_v4_f32_irri(float %b, float %c) {
1803c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_irri(
1804c5b11a71SAlex MacLean; CHECK:       {
1805c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<3>;
1806c5b11a71SAlex MacLean; CHECK-EMPTY:
1807c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1808c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_irri_param_0];
1809c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_irri_param_1];
1810c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 75, 0
1811c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
18120f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, %f1, %f2, 0f40800000};
1813c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1814c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1815c5b11a71SAlex MacLean; CHECK-NEXT:    (
1816c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1817c5b11a71SAlex MacLean; CHECK-NEXT:    );
1818c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 75
1819c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1820c5b11a71SAlex MacLean  %struct.irri0 = insertvalue %struct.float4 poison, float 1.0, 0
1821c5b11a71SAlex MacLean  %struct.irri1 = insertvalue %struct.float4 %struct.irri0, float %b, 1
1822c5b11a71SAlex MacLean  %struct.irri2 = insertvalue %struct.float4 %struct.irri1, float %c, 2
1823c5b11a71SAlex MacLean  %struct.irri3 = insertvalue %struct.float4 %struct.irri2, float 4.0, 3
1824c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.irri3)
1825c5b11a71SAlex MacLean  ret void
1826c5b11a71SAlex MacLean}
1827c5b11a71SAlex MacLeandefine void @st_param_v4_f32_riir(float %a, float %d) {
1828c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_riir(
1829c5b11a71SAlex MacLean; CHECK:       {
1830c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<3>;
1831c5b11a71SAlex MacLean; CHECK-EMPTY:
1832c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1833c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_riir_param_0];
1834c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_riir_param_1];
1835c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 76, 0
1836c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
18370f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, 0f40000000, 0f40400000, %f2};
1838c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1839c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1840c5b11a71SAlex MacLean; CHECK-NEXT:    (
1841c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1842c5b11a71SAlex MacLean; CHECK-NEXT:    );
1843c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 76
1844c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1845c5b11a71SAlex MacLean  %struct.riir0 = insertvalue %struct.float4 poison, float %a, 0
1846c5b11a71SAlex MacLean  %struct.riir1 = insertvalue %struct.float4 %struct.riir0, float 2.0, 1
1847c5b11a71SAlex MacLean  %struct.riir2 = insertvalue %struct.float4 %struct.riir1, float 3.0, 2
1848c5b11a71SAlex MacLean  %struct.riir3 = insertvalue %struct.float4 %struct.riir2, float %d, 3
1849c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.riir3)
1850c5b11a71SAlex MacLean  ret void
1851c5b11a71SAlex MacLean}
1852c5b11a71SAlex MacLeandefine void @st_param_v4_f32_riri(float %a, float %c) {
1853c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_riri(
1854c5b11a71SAlex MacLean; CHECK:       {
1855c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<3>;
1856c5b11a71SAlex MacLean; CHECK-EMPTY:
1857c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1858c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_riri_param_0];
1859c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_riri_param_1];
1860c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 77, 0
1861c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
18620f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, 0f40000000, %f2, 0f40800000};
1863c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1864c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1865c5b11a71SAlex MacLean; CHECK-NEXT:    (
1866c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1867c5b11a71SAlex MacLean; CHECK-NEXT:    );
1868c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 77
1869c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1870c5b11a71SAlex MacLean  %struct.riri0 = insertvalue %struct.float4 poison, float %a, 0
1871c5b11a71SAlex MacLean  %struct.riri1 = insertvalue %struct.float4 %struct.riri0, float 2.0, 1
1872c5b11a71SAlex MacLean  %struct.riri2 = insertvalue %struct.float4 %struct.riri1, float %c, 2
1873c5b11a71SAlex MacLean  %struct.riri3 = insertvalue %struct.float4 %struct.riri2, float 4.0, 3
1874c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.riri3)
1875c5b11a71SAlex MacLean  ret void
1876c5b11a71SAlex MacLean}
1877c5b11a71SAlex MacLeandefine void @st_param_v4_f32_rrii(float %a, float %b) {
1878c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_rrii(
1879c5b11a71SAlex MacLean; CHECK:       {
1880c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<3>;
1881c5b11a71SAlex MacLean; CHECK-EMPTY:
1882c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1883c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_rrii_param_0];
1884c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f2, [st_param_v4_f32_rrii_param_1];
1885c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 78, 0
1886c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
18870f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, %f2, 0f40400000, 0f40800000};
1888c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1889c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1890c5b11a71SAlex MacLean; CHECK-NEXT:    (
1891c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1892c5b11a71SAlex MacLean; CHECK-NEXT:    );
1893c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 78
1894c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1895c5b11a71SAlex MacLean  %struct.rrii0 = insertvalue %struct.float4 poison, float %a, 0
1896c5b11a71SAlex MacLean  %struct.rrii1 = insertvalue %struct.float4 %struct.rrii0, float %b, 1
1897c5b11a71SAlex MacLean  %struct.rrii2 = insertvalue %struct.float4 %struct.rrii1, float 3.0, 2
1898c5b11a71SAlex MacLean  %struct.rrii3 = insertvalue %struct.float4 %struct.rrii2, float 4.0, 3
1899c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.rrii3)
1900c5b11a71SAlex MacLean  ret void
1901c5b11a71SAlex MacLean}
1902c5b11a71SAlex MacLeandefine void @st_param_v4_f32_iiir(float %d) {
1903c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_iiir(
1904c5b11a71SAlex MacLean; CHECK:       {
1905c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<2>;
1906c5b11a71SAlex MacLean; CHECK-EMPTY:
1907c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1908c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_iiir_param_0];
1909c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 79, 0
1910c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
19110f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, 0f40000000, 0f40400000, %f1};
1912c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1913c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1914c5b11a71SAlex MacLean; CHECK-NEXT:    (
1915c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1916c5b11a71SAlex MacLean; CHECK-NEXT:    );
1917c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 79
1918c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1919c5b11a71SAlex MacLean  %struct.iiir0 = insertvalue %struct.float4 poison, float 1.0, 0
1920c5b11a71SAlex MacLean  %struct.iiir1 = insertvalue %struct.float4 %struct.iiir0, float 2.0, 1
1921c5b11a71SAlex MacLean  %struct.iiir2 = insertvalue %struct.float4 %struct.iiir1, float 3.0, 2
1922c5b11a71SAlex MacLean  %struct.iiir3 = insertvalue %struct.float4 %struct.iiir2, float %d, 3
1923c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.iiir3)
1924c5b11a71SAlex MacLean  ret void
1925c5b11a71SAlex MacLean}
1926c5b11a71SAlex MacLeandefine void @st_param_v4_f32_iiri(float %c) {
1927c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_iiri(
1928c5b11a71SAlex MacLean; CHECK:       {
1929c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<2>;
1930c5b11a71SAlex MacLean; CHECK-EMPTY:
1931c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1932c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_iiri_param_0];
1933c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 80, 0
1934c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
19350f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, 0f40000000, %f1, 0f40800000};
1936c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1937c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1938c5b11a71SAlex MacLean; CHECK-NEXT:    (
1939c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1940c5b11a71SAlex MacLean; CHECK-NEXT:    );
1941c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 80
1942c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1943c5b11a71SAlex MacLean  %struct.iiri0 = insertvalue %struct.float4 poison, float 1.0, 0
1944c5b11a71SAlex MacLean  %struct.iiri1 = insertvalue %struct.float4 %struct.iiri0, float 2.0, 1
1945c5b11a71SAlex MacLean  %struct.iiri2 = insertvalue %struct.float4 %struct.iiri1, float %c, 2
1946c5b11a71SAlex MacLean  %struct.iiri3 = insertvalue %struct.float4 %struct.iiri2, float 4.0, 3
1947c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.iiri3)
1948c5b11a71SAlex MacLean  ret void
1949c5b11a71SAlex MacLean}
1950c5b11a71SAlex MacLeandefine void @st_param_v4_f32_irii(float %b) {
1951c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_irii(
1952c5b11a71SAlex MacLean; CHECK:       {
1953c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<2>;
1954c5b11a71SAlex MacLean; CHECK-EMPTY:
1955c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1956c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_irii_param_0];
1957c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 81, 0
1958c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
19590f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {0f3F800000, %f1, 0f40400000, 0f40800000};
1960c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1961c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1962c5b11a71SAlex MacLean; CHECK-NEXT:    (
1963c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1964c5b11a71SAlex MacLean; CHECK-NEXT:    );
1965c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 81
1966c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1967c5b11a71SAlex MacLean  %struct.irii0 = insertvalue %struct.float4 poison, float 1.0, 0
1968c5b11a71SAlex MacLean  %struct.irii1 = insertvalue %struct.float4 %struct.irii0, float %b, 1
1969c5b11a71SAlex MacLean  %struct.irii2 = insertvalue %struct.float4 %struct.irii1, float 3.0, 2
1970c5b11a71SAlex MacLean  %struct.irii3 = insertvalue %struct.float4 %struct.irii2, float 4.0, 3
1971c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.irii3)
1972c5b11a71SAlex MacLean  ret void
1973c5b11a71SAlex MacLean}
1974c5b11a71SAlex MacLeandefine void @st_param_v4_f32_riii(float %a) {
1975c5b11a71SAlex MacLean; CHECK-LABEL: st_param_v4_f32_riii(
1976c5b11a71SAlex MacLean; CHECK:       {
1977c5b11a71SAlex MacLean; CHECK-NEXT:    .reg .f32 %f<2>;
1978c5b11a71SAlex MacLean; CHECK-EMPTY:
1979c5b11a71SAlex MacLean; CHECK-NEXT:  // %bb.0:
1980c5b11a71SAlex MacLean; CHECK-NEXT:    ld.param.f32 %f1, [st_param_v4_f32_riii_param_0];
1981c5b11a71SAlex MacLean; CHECK-NEXT:    { // callseq 82, 0
1982c5b11a71SAlex MacLean; CHECK-NEXT:    .param .align 16 .b8 param0[16];
19830f0a96b8SYoungsuk Kim; CHECK-NEXT:    st.param.v4.f32 [param0], {%f1, 0f40000000, 0f40400000, 0f40800000};
1984c5b11a71SAlex MacLean; CHECK-NEXT:    call.uni
1985c5b11a71SAlex MacLean; CHECK-NEXT:    call_v4_f32,
1986c5b11a71SAlex MacLean; CHECK-NEXT:    (
1987c5b11a71SAlex MacLean; CHECK-NEXT:    param0
1988c5b11a71SAlex MacLean; CHECK-NEXT:    );
1989c5b11a71SAlex MacLean; CHECK-NEXT:    } // callseq 82
1990c5b11a71SAlex MacLean; CHECK-NEXT:    ret;
1991c5b11a71SAlex MacLean  %struct.riii0 = insertvalue %struct.float4 poison, float %a, 0
1992c5b11a71SAlex MacLean  %struct.riii1 = insertvalue %struct.float4 %struct.riii0, float 2.0, 1
1993c5b11a71SAlex MacLean  %struct.riii2 = insertvalue %struct.float4 %struct.riii1, float 3.0, 2
1994c5b11a71SAlex MacLean  %struct.riii3 = insertvalue %struct.float4 %struct.riii2, float 4.0, 3
1995c5b11a71SAlex MacLean  call void @call_v4_f32(%struct.float4 %struct.riii3)
1996c5b11a71SAlex MacLean  ret void
1997c5b11a71SAlex MacLean}
1998c5b11a71SAlex MacLean
1999c5b11a71SAlex MacLeandeclare void @call_v4_i8(%struct.char4 alignstack(4))
2000c5b11a71SAlex MacLeandeclare void @call_v4_i16(%struct.short4 alignstack(8))
2001c5b11a71SAlex MacLeandeclare void @call_v4_i32(%struct.int4 alignstack(16))
2002c5b11a71SAlex MacLeandeclare void @call_v4_f32(%struct.float4 alignstack(16))
2003