xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/lower-args-vararg.ll (revision 3c5b42acd3e2022da40f6e4b50f5035279b8b93a)
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2; RUN: llc -mtriple=riscv32 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \
3; RUN:   | FileCheck -check-prefixes=RV32 %s
4; RUN: llc -mtriple=riscv64 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \
5; RUN:   | FileCheck -check-prefixes=RV64 %s
6
7define void @va1arg(ptr %a, ...) {
8  ; RV32-LABEL: name: va1arg
9  ; RV32: bb.1 (%ir-block.0):
10  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
11  ; RV32-NEXT: {{  $}}
12  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
13  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
14  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
15  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
16  ; RV32-NEXT:   G_STORE [[COPY1]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.1)
17  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
18  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
19  ; RV32-NEXT:   G_STORE [[COPY2]](s32), [[PTR_ADD]](p0) :: (store (s32) into %fixed-stack.1 + 4)
20  ; RV32-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s32)
21  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
22  ; RV32-NEXT:   G_STORE [[COPY3]](s32), [[PTR_ADD1]](p0) :: (store (s32) into %fixed-stack.1 + 8)
23  ; RV32-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
24  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
25  ; RV32-NEXT:   G_STORE [[COPY4]](s32), [[PTR_ADD2]](p0) :: (store (s32) into %fixed-stack.1 + 12)
26  ; RV32-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s32)
27  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x15
28  ; RV32-NEXT:   G_STORE [[COPY5]](s32), [[PTR_ADD3]](p0) :: (store (s32) into %fixed-stack.1 + 16)
29  ; RV32-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s32)
30  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
31  ; RV32-NEXT:   G_STORE [[COPY6]](s32), [[PTR_ADD4]](p0) :: (store (s32) into %fixed-stack.1 + 20)
32  ; RV32-NEXT:   [[PTR_ADD5:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD4]], [[C]](s32)
33  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
34  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[PTR_ADD5]](p0) :: (store (s32) into %fixed-stack.1 + 24)
35  ; RV32-NEXT:   [[PTR_ADD6:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD5]], [[C]](s32)
36  ; RV32-NEXT:   PseudoRET
37  ;
38  ; RV64-LABEL: name: va1arg
39  ; RV64: bb.1 (%ir-block.0):
40  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
41  ; RV64-NEXT: {{  $}}
42  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
43  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
44  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
45  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11
46  ; RV64-NEXT:   G_STORE [[COPY1]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.1)
47  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
48  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x12
49  ; RV64-NEXT:   G_STORE [[COPY2]](s64), [[PTR_ADD]](p0) :: (store (s64) into %fixed-stack.1 + 8)
50  ; RV64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
51  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x13
52  ; RV64-NEXT:   G_STORE [[COPY3]](s64), [[PTR_ADD1]](p0) :: (store (s64) into %fixed-stack.1 + 16)
53  ; RV64-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s64)
54  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14
55  ; RV64-NEXT:   G_STORE [[COPY4]](s64), [[PTR_ADD2]](p0) :: (store (s64) into %fixed-stack.1 + 24)
56  ; RV64-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s64)
57  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15
58  ; RV64-NEXT:   G_STORE [[COPY5]](s64), [[PTR_ADD3]](p0) :: (store (s64) into %fixed-stack.1 + 32)
59  ; RV64-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s64)
60  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16
61  ; RV64-NEXT:   G_STORE [[COPY6]](s64), [[PTR_ADD4]](p0) :: (store (s64) into %fixed-stack.1 + 40)
62  ; RV64-NEXT:   [[PTR_ADD5:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD4]], [[C]](s64)
63  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
64  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[PTR_ADD5]](p0) :: (store (s64) into %fixed-stack.1 + 48)
65  ; RV64-NEXT:   [[PTR_ADD6:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD5]], [[C]](s64)
66  ; RV64-NEXT:   PseudoRET
67  ret void
68}
69
70define void @va2arg(ptr %a, ptr %b, ...) {
71  ; RV32-LABEL: name: va2arg
72  ; RV32: bb.1 (%ir-block.0):
73  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
74  ; RV32-NEXT: {{  $}}
75  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
76  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
77  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
78  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
79  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
80  ; RV32-NEXT:   G_STORE [[COPY2]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.0, align 8)
81  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
82  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
83  ; RV32-NEXT:   G_STORE [[COPY3]](s32), [[PTR_ADD]](p0) :: (store (s32) into %fixed-stack.0 + 4)
84  ; RV32-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s32)
85  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
86  ; RV32-NEXT:   G_STORE [[COPY4]](s32), [[PTR_ADD1]](p0) :: (store (s32) into %fixed-stack.0 + 8, align 8)
87  ; RV32-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
88  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x15
89  ; RV32-NEXT:   G_STORE [[COPY5]](s32), [[PTR_ADD2]](p0) :: (store (s32) into %fixed-stack.0 + 12)
90  ; RV32-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s32)
91  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
92  ; RV32-NEXT:   G_STORE [[COPY6]](s32), [[PTR_ADD3]](p0) :: (store (s32) into %fixed-stack.0 + 16, align 8)
93  ; RV32-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s32)
94  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
95  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[PTR_ADD4]](p0) :: (store (s32) into %fixed-stack.0 + 20)
96  ; RV32-NEXT:   [[PTR_ADD5:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD4]], [[C]](s32)
97  ; RV32-NEXT:   PseudoRET
98  ;
99  ; RV64-LABEL: name: va2arg
100  ; RV64: bb.1 (%ir-block.0):
101  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
102  ; RV64-NEXT: {{  $}}
103  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
104  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
105  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
106  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
107  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x12
108  ; RV64-NEXT:   G_STORE [[COPY2]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.0, align 16)
109  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
110  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x13
111  ; RV64-NEXT:   G_STORE [[COPY3]](s64), [[PTR_ADD]](p0) :: (store (s64) into %fixed-stack.0 + 8)
112  ; RV64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
113  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14
114  ; RV64-NEXT:   G_STORE [[COPY4]](s64), [[PTR_ADD1]](p0) :: (store (s64) into %fixed-stack.0 + 16, align 16)
115  ; RV64-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s64)
116  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15
117  ; RV64-NEXT:   G_STORE [[COPY5]](s64), [[PTR_ADD2]](p0) :: (store (s64) into %fixed-stack.0 + 24)
118  ; RV64-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s64)
119  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16
120  ; RV64-NEXT:   G_STORE [[COPY6]](s64), [[PTR_ADD3]](p0) :: (store (s64) into %fixed-stack.0 + 32, align 16)
121  ; RV64-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s64)
122  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
123  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[PTR_ADD4]](p0) :: (store (s64) into %fixed-stack.0 + 40)
124  ; RV64-NEXT:   [[PTR_ADD5:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD4]], [[C]](s64)
125  ; RV64-NEXT:   PseudoRET
126  ret void
127}
128
129define void @va3arg(ptr %a, ptr %b, ptr %c, ...) {
130  ; RV32-LABEL: name: va3arg
131  ; RV32: bb.1 (%ir-block.0):
132  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
133  ; RV32-NEXT: {{  $}}
134  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
135  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
136  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
137  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
138  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
139  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
140  ; RV32-NEXT:   G_STORE [[COPY3]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.1)
141  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
142  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
143  ; RV32-NEXT:   G_STORE [[COPY4]](s32), [[PTR_ADD]](p0) :: (store (s32) into %fixed-stack.1 + 4)
144  ; RV32-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s32)
145  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x15
146  ; RV32-NEXT:   G_STORE [[COPY5]](s32), [[PTR_ADD1]](p0) :: (store (s32) into %fixed-stack.1 + 8)
147  ; RV32-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
148  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
149  ; RV32-NEXT:   G_STORE [[COPY6]](s32), [[PTR_ADD2]](p0) :: (store (s32) into %fixed-stack.1 + 12)
150  ; RV32-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s32)
151  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
152  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[PTR_ADD3]](p0) :: (store (s32) into %fixed-stack.1 + 16)
153  ; RV32-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s32)
154  ; RV32-NEXT:   PseudoRET
155  ;
156  ; RV64-LABEL: name: va3arg
157  ; RV64: bb.1 (%ir-block.0):
158  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
159  ; RV64-NEXT: {{  $}}
160  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
161  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
162  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
163  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
164  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
165  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x13
166  ; RV64-NEXT:   G_STORE [[COPY3]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.1)
167  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
168  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14
169  ; RV64-NEXT:   G_STORE [[COPY4]](s64), [[PTR_ADD]](p0) :: (store (s64) into %fixed-stack.1 + 8)
170  ; RV64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
171  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15
172  ; RV64-NEXT:   G_STORE [[COPY5]](s64), [[PTR_ADD1]](p0) :: (store (s64) into %fixed-stack.1 + 16)
173  ; RV64-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s64)
174  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16
175  ; RV64-NEXT:   G_STORE [[COPY6]](s64), [[PTR_ADD2]](p0) :: (store (s64) into %fixed-stack.1 + 24)
176  ; RV64-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s64)
177  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
178  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[PTR_ADD3]](p0) :: (store (s64) into %fixed-stack.1 + 32)
179  ; RV64-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s64)
180  ; RV64-NEXT:   PseudoRET
181  ret void
182}
183
184define void @va4arg(ptr %a, ptr %b, ptr %c, ptr %d, ...) {
185  ; RV32-LABEL: name: va4arg
186  ; RV32: bb.1 (%ir-block.0):
187  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
188  ; RV32-NEXT: {{  $}}
189  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
190  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
191  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
192  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
193  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
194  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
195  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
196  ; RV32-NEXT:   G_STORE [[COPY4]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.0, align 16)
197  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
198  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x15
199  ; RV32-NEXT:   G_STORE [[COPY5]](s32), [[PTR_ADD]](p0) :: (store (s32) into %fixed-stack.0 + 4)
200  ; RV32-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s32)
201  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
202  ; RV32-NEXT:   G_STORE [[COPY6]](s32), [[PTR_ADD1]](p0) :: (store (s32) into %fixed-stack.0 + 8, align 8)
203  ; RV32-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
204  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
205  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[PTR_ADD2]](p0) :: (store (s32) into %fixed-stack.0 + 12)
206  ; RV32-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s32)
207  ; RV32-NEXT:   PseudoRET
208  ;
209  ; RV64-LABEL: name: va4arg
210  ; RV64: bb.1 (%ir-block.0):
211  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
212  ; RV64-NEXT: {{  $}}
213  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
214  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
215  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
216  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
217  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
218  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
219  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x14
220  ; RV64-NEXT:   G_STORE [[COPY4]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.0, align 16)
221  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
222  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15
223  ; RV64-NEXT:   G_STORE [[COPY5]](s64), [[PTR_ADD]](p0) :: (store (s64) into %fixed-stack.0 + 8)
224  ; RV64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
225  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16
226  ; RV64-NEXT:   G_STORE [[COPY6]](s64), [[PTR_ADD1]](p0) :: (store (s64) into %fixed-stack.0 + 16, align 16)
227  ; RV64-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s64)
228  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
229  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[PTR_ADD2]](p0) :: (store (s64) into %fixed-stack.0 + 24)
230  ; RV64-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD2]], [[C]](s64)
231  ; RV64-NEXT:   PseudoRET
232  ret void
233}
234
235define void @va5arg(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ...) {
236  ; RV32-LABEL: name: va5arg
237  ; RV32: bb.1 (%ir-block.0):
238  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
239  ; RV32-NEXT: {{  $}}
240  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
241  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
242  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
243  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
244  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
245  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
246  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
247  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x15
248  ; RV32-NEXT:   G_STORE [[COPY5]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.1)
249  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
250  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
251  ; RV32-NEXT:   G_STORE [[COPY6]](s32), [[PTR_ADD]](p0) :: (store (s32) into %fixed-stack.1 + 4)
252  ; RV32-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s32)
253  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
254  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[PTR_ADD1]](p0) :: (store (s32) into %fixed-stack.1 + 8)
255  ; RV32-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
256  ; RV32-NEXT:   PseudoRET
257  ;
258  ; RV64-LABEL: name: va5arg
259  ; RV64: bb.1 (%ir-block.0):
260  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
261  ; RV64-NEXT: {{  $}}
262  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
263  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
264  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
265  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
266  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
267  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
268  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
269  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x15
270  ; RV64-NEXT:   G_STORE [[COPY5]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.1)
271  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
272  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16
273  ; RV64-NEXT:   G_STORE [[COPY6]](s64), [[PTR_ADD]](p0) :: (store (s64) into %fixed-stack.1 + 8)
274  ; RV64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
275  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
276  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[PTR_ADD1]](p0) :: (store (s64) into %fixed-stack.1 + 16)
277  ; RV64-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s64)
278  ; RV64-NEXT:   PseudoRET
279  ret void
280}
281
282define void @va6arg(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ...) {
283  ; RV32-LABEL: name: va6arg
284  ; RV32: bb.1 (%ir-block.0):
285  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
286  ; RV32-NEXT: {{  $}}
287  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
288  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
289  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
290  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
291  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
292  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $x15
293  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
294  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
295  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
296  ; RV32-NEXT:   G_STORE [[COPY6]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.0, align 8)
297  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
298  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
299  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[PTR_ADD]](p0) :: (store (s32) into %fixed-stack.0 + 4)
300  ; RV32-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s32)
301  ; RV32-NEXT:   PseudoRET
302  ;
303  ; RV64-LABEL: name: va6arg
304  ; RV64: bb.1 (%ir-block.0):
305  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
306  ; RV64-NEXT: {{  $}}
307  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
308  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
309  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
310  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
311  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
312  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $x15
313  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
314  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
315  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x16
316  ; RV64-NEXT:   G_STORE [[COPY6]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.0, align 16)
317  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
318  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
319  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[PTR_ADD]](p0) :: (store (s64) into %fixed-stack.0 + 8)
320  ; RV64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
321  ; RV64-NEXT:   PseudoRET
322  ret void
323}
324
325define void @va7arg(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ptr %g, ...) {
326  ; RV32-LABEL: name: va7arg
327  ; RV32: bb.1 (%ir-block.0):
328  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
329  ; RV32-NEXT: {{  $}}
330  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
331  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
332  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
333  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
334  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
335  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $x15
336  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(p0) = COPY $x16
337  ; RV32-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
338  ; RV32-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
339  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
340  ; RV32-NEXT:   G_STORE [[COPY7]](s32), [[FRAME_INDEX]](p0) :: (store (s32) into %fixed-stack.1)
341  ; RV32-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s32)
342  ; RV32-NEXT:   PseudoRET
343  ;
344  ; RV64-LABEL: name: va7arg
345  ; RV64: bb.1 (%ir-block.0):
346  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
347  ; RV64-NEXT: {{  $}}
348  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
349  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
350  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
351  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
352  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
353  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $x15
354  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(p0) = COPY $x16
355  ; RV64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
356  ; RV64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
357  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x17
358  ; RV64-NEXT:   G_STORE [[COPY7]](s64), [[FRAME_INDEX]](p0) :: (store (s64) into %fixed-stack.1)
359  ; RV64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
360  ; RV64-NEXT:   PseudoRET
361  ret void
362}
363
364define void @va8arg(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ptr %g, ptr %h, ...) {
365  ; RV32-LABEL: name: va8arg
366  ; RV32: bb.1 (%ir-block.0):
367  ; RV32-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
368  ; RV32-NEXT: {{  $}}
369  ; RV32-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
370  ; RV32-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
371  ; RV32-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
372  ; RV32-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
373  ; RV32-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
374  ; RV32-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $x15
375  ; RV32-NEXT:   [[COPY6:%[0-9]+]]:_(p0) = COPY $x16
376  ; RV32-NEXT:   [[COPY7:%[0-9]+]]:_(p0) = COPY $x17
377  ; RV32-NEXT:   PseudoRET
378  ;
379  ; RV64-LABEL: name: va8arg
380  ; RV64: bb.1 (%ir-block.0):
381  ; RV64-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
382  ; RV64-NEXT: {{  $}}
383  ; RV64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
384  ; RV64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
385  ; RV64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
386  ; RV64-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $x13
387  ; RV64-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $x14
388  ; RV64-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $x15
389  ; RV64-NEXT:   [[COPY6:%[0-9]+]]:_(p0) = COPY $x16
390  ; RV64-NEXT:   [[COPY7:%[0-9]+]]:_(p0) = COPY $x17
391  ; RV64-NEXT:   PseudoRET
392  ret void
393}
394