<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">