<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55396>55396</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[riscv] Reload of vlenb during frame setup/teardown with scalable vector alloca
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:RISC-V,
llvm:codegen,
performance
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
preames
</td>
</tr>
</table>
<pre>
Noticed this while looking at something unrelated. We're reading vlenb twice whereas this should effectively be a constant for a given platform.
```
$ cat rvv-aligned-alloca.ll
declare void @callee(<vscale x 1 x i8>* %p)
define void @caller() {
%a = alloca <vscale x 1 x i8>
call void @callee(<vscale x 1 x i8>* %a)
ret void
}
$ ./opt -S -O3 rvv-aligned-alloca.ll | ./llc -O3 -march=riscv64 -mattr=+v
.text
.attribute 4, 16
.attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
.file "rvv-aligned-alloca.ll"
.globl caller # -- Begin function caller
.p2align 2
.type caller,@function
caller: # @caller
.cfi_startproc
# %bb.0:
addi sp, sp, -16
.cfi_def_cfa_offset 16
sd ra, 8(sp) # 8-byte Folded Spill
.cfi_offset ra, -8
csrr a0, vlenb
sub sp, sp, a0
addi a0, sp, 8
call callee@plt
csrr a0, vlenb
add sp, sp, a0
ld ra, 8(sp) # 8-byte Folded Reload
addi sp, sp, 16
ret
.Lfunc_end0:
.size caller, .Lfunc_end0-caller
.cfi_endproc
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVdFu6zYM_RrnhbBhy3ESP_ihbVZgwLABt8D2GMgSnWhXsQxJdtv79aNsx0mK9mLDilSmROockqKo2sj36nfjlUAJ_qQcvJ6URtDGfFftEbgHZ85IGpr0rUXNPcoE4C-M2NYiWOQy6AaNbQ3-lYAIAmnZTXjuZHotAZsGhVcD6neoETgI0zrPWw-NsTQ9kqqFjuBpfiaCKN1H6cM8btL5N03ZGgR5Zoch5lodW5T01UbwROt5o0ShOfk3GCUhWqeCDJB83kX50-BohvAGGf0rWvklYg8QsaKLWHnLK7FR7QcMGzBYCdH2cTKCsJNDlO9hcgI-p5iNA8h_84ovXgGl24-bZy-3-7s0UV6SiD2bzkP8AvEf-Vcp2j6NhlqL0So-cytOFIFVTgybdVjw3tJCxB6HC0WZeHzz11kwUXXvkSbriD1BtvlcWQRlxJglaMW69NCEQYZhyGj4MWDOmkV6m6XNWi5Ss0izVmdsV89izi7SZh0koro60lA503ek_yQXd7ZHbWpNwnTQ8OVfxChnMTziUbXQ9C0VtmlhLo8FrWMjG4k3FP69w4WB8kJFcAGYjGZN_vA1_Y0X16pcGESjDnSzrO-sEZfCyEMh1XWSEvBiyqVU9HFdOJ9pjG_PMCDRFTiIhh9M0ziqvRu1oyIsLQ-76ELswv7yJ57u4vrdIzwbLanVvHSKcn_HNDNMiPFuUQpnbXA2Detjm7m60Ncf_Ofpx-imfZP2BpTr5aCRkthp_28ICfNrQv1_EvINteHyZ0dzk3rqApOc_BaK54CtvDvYxKkfd1UGN4bxZwVDipty-dBux3Elq1yWeclXXnmNVVQ8jt0iKvaz82Ca-RmQvQ1vQmP5GYEOtacAnj1yK81rC6_KnyA0O15TvxvoWQgvwHghV73V1cn7zoVw2DP9jmTd14kw57FhDZdPTP7-TXtpqpzr0ZFQFHm5WZ2qdSYaJpqyyGXRFMU2lXlZy11e5Jt8y7bFiqhRuxAD3f-ai-8UPzF--_XlKf4ztISpYY10-YMwEo_YXtc7tOGV4q3AsFjsV6piKWNpkWWM5SnbJlleZiJPs7RBxK1gVGN45konATMx9riy1RhG3R8dKbVy3l2V3LnQqMY0B3ze-5OxVUfv6hndaoy4GsP9B2k-Ps8">