@@ -2128,6 +2128,142 @@ entry:
21282128 ret void
21292129}
21302130
2131+ ; Check .cfi_offset of s11 is correct for Zcmp.
2132+ define void @bar () {
2133+ ; RV32I-LABEL: bar:
2134+ ; RV32I: # %bb.0: # %entry
2135+ ; RV32I-NEXT: addi sp, sp, -16
2136+ ; RV32I-NEXT: .cfi_def_cfa_offset 16
2137+ ; RV32I-NEXT: sw s11, 12(sp) # 4-byte Folded Spill
2138+ ; RV32I-NEXT: .cfi_offset s11, -4
2139+ ; RV32I-NEXT: #APP
2140+ ; RV32I-NEXT: li s11, 0
2141+ ; RV32I-NEXT: #NO_APP
2142+ ; RV32I-NEXT: lw s11, 12(sp) # 4-byte Folded Reload
2143+ ; RV32I-NEXT: addi sp, sp, 16
2144+ ; RV32I-NEXT: ret
2145+ ;
2146+ ; RV32I-WITH-FP-LABEL: bar:
2147+ ; RV32I-WITH-FP: # %bb.0: # %entry
2148+ ; RV32I-WITH-FP-NEXT: addi sp, sp, -16
2149+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa_offset 16
2150+ ; RV32I-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2151+ ; RV32I-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2152+ ; RV32I-WITH-FP-NEXT: sw s11, 4(sp) # 4-byte Folded Spill
2153+ ; RV32I-WITH-FP-NEXT: .cfi_offset ra, -4
2154+ ; RV32I-WITH-FP-NEXT: .cfi_offset s0, -8
2155+ ; RV32I-WITH-FP-NEXT: .cfi_offset s11, -12
2156+ ; RV32I-WITH-FP-NEXT: addi s0, sp, 16
2157+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2158+ ; RV32I-WITH-FP-NEXT: #APP
2159+ ; RV32I-WITH-FP-NEXT: li s11, 0
2160+ ; RV32I-WITH-FP-NEXT: #NO_APP
2161+ ; RV32I-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2162+ ; RV32I-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2163+ ; RV32I-WITH-FP-NEXT: lw s11, 4(sp) # 4-byte Folded Reload
2164+ ; RV32I-WITH-FP-NEXT: addi sp, sp, 16
2165+ ; RV32I-WITH-FP-NEXT: ret
2166+ ;
2167+ ; RV32IZCMP-LABEL: bar:
2168+ ; RV32IZCMP: # %bb.0: # %entry
2169+ ; RV32IZCMP-NEXT: cm.push {ra, s0-s11}, -64
2170+ ; RV32IZCMP-NEXT: .cfi_def_cfa_offset 64
2171+ ; RV32IZCMP-NEXT: .cfi_offset s11, -4
2172+ ; RV32IZCMP-NEXT: #APP
2173+ ; RV32IZCMP-NEXT: li s11, 0
2174+ ; RV32IZCMP-NEXT: #NO_APP
2175+ ; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 64
2176+ ;
2177+ ; RV32IZCMP-WITH-FP-LABEL: bar:
2178+ ; RV32IZCMP-WITH-FP: # %bb.0: # %entry
2179+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, -16
2180+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 16
2181+ ; RV32IZCMP-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2182+ ; RV32IZCMP-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2183+ ; RV32IZCMP-WITH-FP-NEXT: sw s11, 4(sp) # 4-byte Folded Spill
2184+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset ra, -4
2185+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset s0, -8
2186+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset s11, -12
2187+ ; RV32IZCMP-WITH-FP-NEXT: addi s0, sp, 16
2188+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2189+ ; RV32IZCMP-WITH-FP-NEXT: #APP
2190+ ; RV32IZCMP-WITH-FP-NEXT: li s11, 0
2191+ ; RV32IZCMP-WITH-FP-NEXT: #NO_APP
2192+ ; RV32IZCMP-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2193+ ; RV32IZCMP-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2194+ ; RV32IZCMP-WITH-FP-NEXT: lw s11, 4(sp) # 4-byte Folded Reload
2195+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, 16
2196+ ; RV32IZCMP-WITH-FP-NEXT: ret
2197+ ;
2198+ ; RV64I-LABEL: bar:
2199+ ; RV64I: # %bb.0: # %entry
2200+ ; RV64I-NEXT: addi sp, sp, -16
2201+ ; RV64I-NEXT: .cfi_def_cfa_offset 16
2202+ ; RV64I-NEXT: sd s11, 8(sp) # 8-byte Folded Spill
2203+ ; RV64I-NEXT: .cfi_offset s11, -8
2204+ ; RV64I-NEXT: #APP
2205+ ; RV64I-NEXT: li s11, 0
2206+ ; RV64I-NEXT: #NO_APP
2207+ ; RV64I-NEXT: ld s11, 8(sp) # 8-byte Folded Reload
2208+ ; RV64I-NEXT: addi sp, sp, 16
2209+ ; RV64I-NEXT: ret
2210+ ;
2211+ ; RV64I-WITH-FP-LABEL: bar:
2212+ ; RV64I-WITH-FP: # %bb.0: # %entry
2213+ ; RV64I-WITH-FP-NEXT: addi sp, sp, -32
2214+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa_offset 32
2215+ ; RV64I-WITH-FP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
2216+ ; RV64I-WITH-FP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
2217+ ; RV64I-WITH-FP-NEXT: sd s11, 8(sp) # 8-byte Folded Spill
2218+ ; RV64I-WITH-FP-NEXT: .cfi_offset ra, -8
2219+ ; RV64I-WITH-FP-NEXT: .cfi_offset s0, -16
2220+ ; RV64I-WITH-FP-NEXT: .cfi_offset s11, -24
2221+ ; RV64I-WITH-FP-NEXT: addi s0, sp, 32
2222+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2223+ ; RV64I-WITH-FP-NEXT: #APP
2224+ ; RV64I-WITH-FP-NEXT: li s11, 0
2225+ ; RV64I-WITH-FP-NEXT: #NO_APP
2226+ ; RV64I-WITH-FP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
2227+ ; RV64I-WITH-FP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
2228+ ; RV64I-WITH-FP-NEXT: ld s11, 8(sp) # 8-byte Folded Reload
2229+ ; RV64I-WITH-FP-NEXT: addi sp, sp, 32
2230+ ; RV64I-WITH-FP-NEXT: ret
2231+ ;
2232+ ; RV64IZCMP-LABEL: bar:
2233+ ; RV64IZCMP: # %bb.0: # %entry
2234+ ; RV64IZCMP-NEXT: cm.push {ra, s0-s11}, -112
2235+ ; RV64IZCMP-NEXT: .cfi_def_cfa_offset 112
2236+ ; RV64IZCMP-NEXT: .cfi_offset s11, -8
2237+ ; RV64IZCMP-NEXT: #APP
2238+ ; RV64IZCMP-NEXT: li s11, 0
2239+ ; RV64IZCMP-NEXT: #NO_APP
2240+ ; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 112
2241+ ;
2242+ ; RV64IZCMP-WITH-FP-LABEL: bar:
2243+ ; RV64IZCMP-WITH-FP: # %bb.0: # %entry
2244+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, -32
2245+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 32
2246+ ; RV64IZCMP-WITH-FP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
2247+ ; RV64IZCMP-WITH-FP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
2248+ ; RV64IZCMP-WITH-FP-NEXT: sd s11, 8(sp) # 8-byte Folded Spill
2249+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset ra, -8
2250+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset s0, -16
2251+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset s11, -24
2252+ ; RV64IZCMP-WITH-FP-NEXT: addi s0, sp, 32
2253+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2254+ ; RV64IZCMP-WITH-FP-NEXT: #APP
2255+ ; RV64IZCMP-WITH-FP-NEXT: li s11, 0
2256+ ; RV64IZCMP-WITH-FP-NEXT: #NO_APP
2257+ ; RV64IZCMP-WITH-FP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
2258+ ; RV64IZCMP-WITH-FP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
2259+ ; RV64IZCMP-WITH-FP-NEXT: ld s11, 8(sp) # 8-byte Folded Reload
2260+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, 32
2261+ ; RV64IZCMP-WITH-FP-NEXT: ret
2262+ entry:
2263+ tail call void asm sideeffect "li s11, 0" , "~{s11}" ()
2264+ ret void
2265+ }
2266+
21312267define void @varargs (...) {
21322268; RV32I-LABEL: varargs:
21332269; RV32I: # %bb.0:
0 commit comments