<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58286>58286</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV]
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
SixWeining
</td>
</tr>
</table>
<pre>
# Problem
For this test (similar to `llvm/test/CodeGen/Mips/emergency-spill-slot-near-fp.ll`), RISCV generates a `sd s0, 0(sp)` as the first instruction of prologue which may ruin caller's frame.
# Testcase
`$ cat emergency-spill-slot.ll`
```
@var = external global i32
define void @func() {
%space = alloca i32, align 4
%stackspace = alloca[1024 x i32], align 4
;; Load values to increase register pressure.
%v0 = load volatile i32, i32* @var
%v1 = load volatile i32, i32* @var
%v2 = load volatile i32, i32* @var
%v3 = load volatile i32, i32* @var
%v4 = load volatile i32, i32* @var
%v5 = load volatile i32, i32* @var
%v6 = load volatile i32, i32* @var
%v7 = load volatile i32, i32* @var
%v8 = load volatile i32, i32* @var
%v9 = load volatile i32, i32* @var
%v10 = load volatile i32, i32* @var
%v11 = load volatile i32, i32* @var
%v12 = load volatile i32, i32* @var
%v13 = load volatile i32, i32* @var
store volatile i32 %v0, i32* %space
;; store values so they are used.
store volatile i32 %v0, i32* @var
store volatile i32 %v1, i32* @var
store volatile i32 %v2, i32* @var
store volatile i32 %v3, i32* @var
store volatile i32 %v4, i32* @var
store volatile i32 %v5, i32* @var
store volatile i32 %v6, i32* @var
store volatile i32 %v7, i32* @var
store volatile i32 %v8, i32* @var
store volatile i32 %v9, i32* @var
store volatile i32 %v10, i32* @var
store volatile i32 %v11, i32* @var
store volatile i32 %v12, i32* @var
store volatile i32 %v13, i32* @var
ret void
}
```
# Result
```
$ llc --mtriple=riscv64 emergency-spill-slot.ll -O0 -o -
.text
.attribute 4, 16
.attribute 5, "rv64i2p0"
.file "emergency-spill-slot.ll"
.globl func # -- Begin function func
.p2align 2
.type func,@function
func: # @func
.cfi_startproc
# %bb.0:
sd s0, 0(sp) ### <---- This may ruin caller's frame.
lui a0, 1
addiw a0, a0, 16
sub sp, sp, a0
.cfi_def_cfa_offset 4112
lui a1, %hi(var)
lw t6, %lo(var)(a1)
lw t5, %lo(var)(a1)
lw t4, %lo(var)(a1)
lw t3, %lo(var)(a1)
lw t2, %lo(var)(a1)
lw t1, %lo(var)(a1)
lw t0, %lo(var)(a1)
lw a7, %lo(var)(a1)
lw a6, %lo(var)(a1)
lw a5, %lo(var)(a1)
lw a4, %lo(var)(a1)
lw a3, %lo(var)(a1)
lw a2, %lo(var)(a1)
lw a0, %lo(var)(a1)
lui s0, 1
addiw s0, s0, 12
add s0, sp, s0
sw t6, 0(s0)
ld s0, 0(sp)
sw t6, %lo(var)(a1)
sw t5, %lo(var)(a1)
sw t4, %lo(var)(a1)
sw t3, %lo(var)(a1)
sw t2, %lo(var)(a1)
sw t1, %lo(var)(a1)
sw t0, %lo(var)(a1)
sw a7, %lo(var)(a1)
sw a6, %lo(var)(a1)
sw a5, %lo(var)(a1)
sw a4, %lo(var)(a1)
sw a3, %lo(var)(a1)
sw a2, %lo(var)(a1)
sw a0, %lo(var)(a1)
lui a0, 1
addiw a0, a0, 16
add sp, sp, a0
ret
.Lfunc_end0:
.size func, .Lfunc_end0-func
.cfi_endproc
# -- End function
.section ".note.GNU-stack","",@progbits
```
Do you have any ideas? Thanks. @llvm/issue-subscribers-backend-risc-v
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydWNuOozgQ_RryUgKBuSR5yMN0Z3u00uxFM7O7jy0DJvGOA5HLpCf79Vs2JJ10d3rGIIQTu05dXfiIsquPqyBeB_GHgKXwp-5KJXbDxEOnwWwlghFoIGALlDupOE12EBSxUoddwB7sIg33XS0-ipZ-_Sb3SIPYCb0RbXUMcS-VClF1JmwF12Gzj5QiBQFbBuwePv_65f5vIFGhOSkDbpVjDYCxXY6t4b2VLWLg5MxWQCM1eSRbNLqvjOxa6BrY6051m17A01ZWW9jxI-hetlBxpYQO2Byh0XwnojHcc9BfKYKKoxhnrGMZoQy8FcLo-ll0uIe_WXyg7ATpGsR3I3TLFWxUV9IgU3ZptRaNbAUcOlkDoZq-rShKihGC-d0gApTwHPe8Ek4hxdBV3OmhnHAlNy1kl5KGV99eigf5XRJTLN8dLl-_gp4VpHd0w6eO13DgqqcqUI1lW2lBeQEtNhIpIEqxQOz1KYXO8iF2FpXDdoobqcTJTzd8gCExl5hkAoZNwKQTMNkETD4BU0zAzCdgFhMwyyk1nbQRpuyEZMpWSPz2wgmKptPiCjBs-kvY2Khv9tSIH5oKO_v6OgKnqR5FHflYuYroBiDxBdzO2Q1A6gvIfAG5L6DwBcx9AQtfwNK7cP6l9q514l3s5Fa1TzgtjDvFxtn5-u2D8XzUfhbYK_O2EB1USlUQhjuj5V4J6lYtsToU2a2DGMI_Ygg7CE_uDFdk6Ph9McUNKS17I4b_blMmxftCbiMGjGlyQbI9VYi9ADQ2Wfb1wm5RhVcQSwgUgD3y4Z3LJisM4Y5O3tYJO5bjiMK1vj0bTvTxemnOHPfWw4Fh3I9cw-oa5Nx8-gF-fFmHTlTl2kTVyEeiH9oQAaueS037pyyjmLRfy1tm58ZrducsDDe9Ou9DuuCrJZ8_4nEnvaqXbuROb3K9yOtaPp0XR5EX5ce-HMa9XR2ePH4jWGJvj1XDH7umQdr_WZKwG64kww7Kt5LCtM1DLPZa8mkYTTFKqu5Zki2sgluI3BuReSNSbwTzRiTeiNgXwefeCO96cO96cO96cO96cO968J_P7rjL8b2GGxZHEfZK5kLB2HYvGg6vGsS9LeLXnrz9SnlP088EiN6tht6tht6tht6tht6tht6tht6tht6tht6tht6tht6tht6thpNbbfLZdm61d8424nLDRPTJnvKPoq1fn94Ryv8uCAVcyIY3uAGtPTMD-Mlr5D-_tDVcM5ZnR8TAic4AFrWdEdHH3_8K3dcQy72I8tgnG7gPubEppcF3SOq6g2PXw5YfBPD2CLIWHIP0gbgIb79hZDnQ-OFLIvYiJNaAFbFGoTEsySpFG1raGh5gJlZJUeTZYhknyaxepfUyXfKZkUaJVZDfuQ9fQb6GWa_VamvMHm2-2QPdG2m2fRlVnbU0GrRDSDH8S5Gf7NsvbfmCLYrZdhVnRSOqgrM44wmf58VykSbFIqnKdJEuymKmeCkUWtOUklY8gVNh05OvZ3LFYsYScjVJcnpGyXIuqmq54E3GFgnLKHKx41JF1o-o05uZXjmXyn6DNi0SDT4vckTipcJFavXz3mw7vfoiv_8jZCvbzcxZXznv_wepQlZS">