@@ -2127,3 +2127,179 @@ entry:
2127
2127
tail call void asm sideeffect "li s4, 0" , "~{s4}" ()
2128
2128
ret void
2129
2129
}
2130
+
2131
+ define void @varargs (...) {
2132
+ ; RV32I-LABEL: varargs:
2133
+ ; RV32I: # %bb.0:
2134
+ ; RV32I-NEXT: addi sp, sp, -48
2135
+ ; RV32I-NEXT: .cfi_def_cfa_offset 48
2136
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2137
+ ; RV32I-NEXT: .cfi_offset ra, -36
2138
+ ; RV32I-NEXT: sw a7, 44(sp)
2139
+ ; RV32I-NEXT: sw a6, 40(sp)
2140
+ ; RV32I-NEXT: sw a5, 36(sp)
2141
+ ; RV32I-NEXT: sw a4, 32(sp)
2142
+ ; RV32I-NEXT: sw a3, 28(sp)
2143
+ ; RV32I-NEXT: sw a2, 24(sp)
2144
+ ; RV32I-NEXT: sw a1, 20(sp)
2145
+ ; RV32I-NEXT: sw a0, 16(sp)
2146
+ ; RV32I-NEXT: call callee@plt
2147
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2148
+ ; RV32I-NEXT: addi sp, sp, 48
2149
+ ; RV32I-NEXT: ret
2150
+ ;
2151
+ ; RV32I-WITH-FP-LABEL: varargs:
2152
+ ; RV32I-WITH-FP: # %bb.0:
2153
+ ; RV32I-WITH-FP-NEXT: addi sp, sp, -48
2154
+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa_offset 48
2155
+ ; RV32I-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2156
+ ; RV32I-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2157
+ ; RV32I-WITH-FP-NEXT: .cfi_offset ra, -36
2158
+ ; RV32I-WITH-FP-NEXT: .cfi_offset s0, -40
2159
+ ; RV32I-WITH-FP-NEXT: addi s0, sp, 16
2160
+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa s0, 32
2161
+ ; RV32I-WITH-FP-NEXT: sw a7, 28(s0)
2162
+ ; RV32I-WITH-FP-NEXT: sw a6, 24(s0)
2163
+ ; RV32I-WITH-FP-NEXT: sw a5, 20(s0)
2164
+ ; RV32I-WITH-FP-NEXT: sw a4, 16(s0)
2165
+ ; RV32I-WITH-FP-NEXT: sw a3, 12(s0)
2166
+ ; RV32I-WITH-FP-NEXT: sw a2, 8(s0)
2167
+ ; RV32I-WITH-FP-NEXT: sw a1, 4(s0)
2168
+ ; RV32I-WITH-FP-NEXT: sw a0, 0(s0)
2169
+ ; RV32I-WITH-FP-NEXT: call callee@plt
2170
+ ; RV32I-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2171
+ ; RV32I-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2172
+ ; RV32I-WITH-FP-NEXT: addi sp, sp, 48
2173
+ ; RV32I-WITH-FP-NEXT: ret
2174
+ ;
2175
+ ; RV32IZCMP-LABEL: varargs:
2176
+ ; RV32IZCMP: # %bb.0:
2177
+ ; RV32IZCMP-NEXT: addi sp, sp, -48
2178
+ ; RV32IZCMP-NEXT: .cfi_def_cfa_offset 48
2179
+ ; RV32IZCMP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2180
+ ; RV32IZCMP-NEXT: .cfi_offset ra, -36
2181
+ ; RV32IZCMP-NEXT: sw a7, 44(sp)
2182
+ ; RV32IZCMP-NEXT: sw a6, 40(sp)
2183
+ ; RV32IZCMP-NEXT: sw a5, 36(sp)
2184
+ ; RV32IZCMP-NEXT: sw a4, 32(sp)
2185
+ ; RV32IZCMP-NEXT: sw a3, 28(sp)
2186
+ ; RV32IZCMP-NEXT: sw a2, 24(sp)
2187
+ ; RV32IZCMP-NEXT: sw a1, 20(sp)
2188
+ ; RV32IZCMP-NEXT: sw a0, 16(sp)
2189
+ ; RV32IZCMP-NEXT: call callee@plt
2190
+ ; RV32IZCMP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2191
+ ; RV32IZCMP-NEXT: addi sp, sp, 48
2192
+ ; RV32IZCMP-NEXT: ret
2193
+ ;
2194
+ ; RV32IZCMP-WITH-FP-LABEL: varargs:
2195
+ ; RV32IZCMP-WITH-FP: # %bb.0:
2196
+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, -48
2197
+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 48
2198
+ ; RV32IZCMP-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2199
+ ; RV32IZCMP-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2200
+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset ra, -36
2201
+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset s0, -40
2202
+ ; RV32IZCMP-WITH-FP-NEXT: addi s0, sp, 16
2203
+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 32
2204
+ ; RV32IZCMP-WITH-FP-NEXT: sw a7, 28(s0)
2205
+ ; RV32IZCMP-WITH-FP-NEXT: sw a6, 24(s0)
2206
+ ; RV32IZCMP-WITH-FP-NEXT: sw a5, 20(s0)
2207
+ ; RV32IZCMP-WITH-FP-NEXT: sw a4, 16(s0)
2208
+ ; RV32IZCMP-WITH-FP-NEXT: sw a3, 12(s0)
2209
+ ; RV32IZCMP-WITH-FP-NEXT: sw a2, 8(s0)
2210
+ ; RV32IZCMP-WITH-FP-NEXT: sw a1, 4(s0)
2211
+ ; RV32IZCMP-WITH-FP-NEXT: sw a0, 0(s0)
2212
+ ; RV32IZCMP-WITH-FP-NEXT: call callee@plt
2213
+ ; RV32IZCMP-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2214
+ ; RV32IZCMP-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2215
+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, 48
2216
+ ; RV32IZCMP-WITH-FP-NEXT: ret
2217
+ ;
2218
+ ; RV64I-LABEL: varargs:
2219
+ ; RV64I: # %bb.0:
2220
+ ; RV64I-NEXT: addi sp, sp, -80
2221
+ ; RV64I-NEXT: .cfi_def_cfa_offset 80
2222
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2223
+ ; RV64I-NEXT: .cfi_offset ra, -72
2224
+ ; RV64I-NEXT: sd a7, 72(sp)
2225
+ ; RV64I-NEXT: sd a6, 64(sp)
2226
+ ; RV64I-NEXT: sd a5, 56(sp)
2227
+ ; RV64I-NEXT: sd a4, 48(sp)
2228
+ ; RV64I-NEXT: sd a3, 40(sp)
2229
+ ; RV64I-NEXT: sd a2, 32(sp)
2230
+ ; RV64I-NEXT: sd a1, 24(sp)
2231
+ ; RV64I-NEXT: sd a0, 16(sp)
2232
+ ; RV64I-NEXT: call callee@plt
2233
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2234
+ ; RV64I-NEXT: addi sp, sp, 80
2235
+ ; RV64I-NEXT: ret
2236
+ ;
2237
+ ; RV64I-WITH-FP-LABEL: varargs:
2238
+ ; RV64I-WITH-FP: # %bb.0:
2239
+ ; RV64I-WITH-FP-NEXT: addi sp, sp, -80
2240
+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa_offset 80
2241
+ ; RV64I-WITH-FP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2242
+ ; RV64I-WITH-FP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
2243
+ ; RV64I-WITH-FP-NEXT: .cfi_offset ra, -72
2244
+ ; RV64I-WITH-FP-NEXT: .cfi_offset s0, -80
2245
+ ; RV64I-WITH-FP-NEXT: addi s0, sp, 16
2246
+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa s0, 64
2247
+ ; RV64I-WITH-FP-NEXT: sd a7, 56(s0)
2248
+ ; RV64I-WITH-FP-NEXT: sd a6, 48(s0)
2249
+ ; RV64I-WITH-FP-NEXT: sd a5, 40(s0)
2250
+ ; RV64I-WITH-FP-NEXT: sd a4, 32(s0)
2251
+ ; RV64I-WITH-FP-NEXT: sd a3, 24(s0)
2252
+ ; RV64I-WITH-FP-NEXT: sd a2, 16(s0)
2253
+ ; RV64I-WITH-FP-NEXT: sd a1, 8(s0)
2254
+ ; RV64I-WITH-FP-NEXT: sd a0, 0(s0)
2255
+ ; RV64I-WITH-FP-NEXT: call callee@plt
2256
+ ; RV64I-WITH-FP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2257
+ ; RV64I-WITH-FP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
2258
+ ; RV64I-WITH-FP-NEXT: addi sp, sp, 80
2259
+ ; RV64I-WITH-FP-NEXT: ret
2260
+ ;
2261
+ ; RV64IZCMP-LABEL: varargs:
2262
+ ; RV64IZCMP: # %bb.0:
2263
+ ; RV64IZCMP-NEXT: addi sp, sp, -80
2264
+ ; RV64IZCMP-NEXT: .cfi_def_cfa_offset 80
2265
+ ; RV64IZCMP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2266
+ ; RV64IZCMP-NEXT: .cfi_offset ra, -72
2267
+ ; RV64IZCMP-NEXT: sd a7, 72(sp)
2268
+ ; RV64IZCMP-NEXT: sd a6, 64(sp)
2269
+ ; RV64IZCMP-NEXT: sd a5, 56(sp)
2270
+ ; RV64IZCMP-NEXT: sd a4, 48(sp)
2271
+ ; RV64IZCMP-NEXT: sd a3, 40(sp)
2272
+ ; RV64IZCMP-NEXT: sd a2, 32(sp)
2273
+ ; RV64IZCMP-NEXT: sd a1, 24(sp)
2274
+ ; RV64IZCMP-NEXT: sd a0, 16(sp)
2275
+ ; RV64IZCMP-NEXT: call callee@plt
2276
+ ; RV64IZCMP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2277
+ ; RV64IZCMP-NEXT: addi sp, sp, 80
2278
+ ; RV64IZCMP-NEXT: ret
2279
+ ;
2280
+ ; RV64IZCMP-WITH-FP-LABEL: varargs:
2281
+ ; RV64IZCMP-WITH-FP: # %bb.0:
2282
+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, -80
2283
+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 80
2284
+ ; RV64IZCMP-WITH-FP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2285
+ ; RV64IZCMP-WITH-FP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
2286
+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset ra, -72
2287
+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset s0, -80
2288
+ ; RV64IZCMP-WITH-FP-NEXT: addi s0, sp, 16
2289
+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 64
2290
+ ; RV64IZCMP-WITH-FP-NEXT: sd a7, 56(s0)
2291
+ ; RV64IZCMP-WITH-FP-NEXT: sd a6, 48(s0)
2292
+ ; RV64IZCMP-WITH-FP-NEXT: sd a5, 40(s0)
2293
+ ; RV64IZCMP-WITH-FP-NEXT: sd a4, 32(s0)
2294
+ ; RV64IZCMP-WITH-FP-NEXT: sd a3, 24(s0)
2295
+ ; RV64IZCMP-WITH-FP-NEXT: sd a2, 16(s0)
2296
+ ; RV64IZCMP-WITH-FP-NEXT: sd a1, 8(s0)
2297
+ ; RV64IZCMP-WITH-FP-NEXT: sd a0, 0(s0)
2298
+ ; RV64IZCMP-WITH-FP-NEXT: call callee@plt
2299
+ ; RV64IZCMP-WITH-FP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2300
+ ; RV64IZCMP-WITH-FP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
2301
+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, 80
2302
+ ; RV64IZCMP-WITH-FP-NEXT: ret
2303
+ call void @callee ()
2304
+ ret void
2305
+ }
0 commit comments