@@ -2127,3 +2127,179 @@ entry:
21272127 tail call void asm sideeffect "li s4, 0" , "~{s4}" ()
21282128 ret void
21292129}
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