@@ -2128,6 +2128,142 @@ entry:
2128
2128
ret void
2129
2129
}
2130
2130
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
+
2131
2267
define void @varargs (...) {
2132
2268
; RV32I-LABEL: varargs:
2133
2269
; RV32I: # %bb.0:
0 commit comments