<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/135743>135743</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLVM][RISCV]when use -O1/O2/O3(inline) the early-clobber attribute will lose its effect, and cause compilation error
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hippyll123
</td>
</tr>
</table>
<pre>
The code is as follows:
`
#include <stdio.h>
#include <stdlib.h>
#include <riscv_vector.h>
//__attribute__((noinline))
//__attribute__((always_inline))
vfloat32m2_t __riscv_vfwcvt_f_f_v_f32m2(vfloat16m1_t src, size_t vl) {
int ret = 0;
__volatile__ vfloat32m2_t vz;
unsigned long vtypevl = 0;
asm volatile("vsetvli %1, %4, e16, m1, tu, mu\n\t"
"csrr %0, vtype\n\t"
"ori %0, %0, 1024\n\t"
"vsetvl %1, %4, %0\n\t"
"vfwcvt.f.f.v %2, %3\n\t"
: "=r"(vtypevl), "=r"(ret), "=&vr"(vz)
: "vr"(src), "r"(vl));
return vz;
}
int main() {
vfloat16m1_t aaa;
vfloat32m2_t bbb;
size_t l;
bbb = __riscv_vfwcvt_f_f_v_f32m2(aaa, l);
}
`
when compile in -O1, will report compile error
`
test.cpp:14:29: error: the destination vector register group cannot overlap the source vector register group
14 | "vsetvl %1, %4, %0\n\t"
| ^
<inline asm>:5:15: note: instantiated into assembly here
5 | vfwcvt.f.f.v v8, v8
| ^
1 error generated.
`
compile command is:
`
// pass
clang++ --target=riscv64-unknown-linux-gnu test.cpp -O0 -mrvv-vector-bits=2048 test.cpp -S --sysroot=/path/to/sysroot/riscv64-unknown-elf
// fail
clang++ --target=riscv64-unknown-linux-gnu test.cpp -O1 -mrvv-vector-bits=2048 test.cpp -S --sysroot=/path/to/sysroot/riscv64-unknown-elf
`
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VVGv4jYT_TXmZRSU2AmEBx648CF90lYrdat9jZwwAbeOHdmTUO6vr-wE7nJ77z60aoRilDnneOw5Y0vv1dkgblnxworDQg50sW57UX1_0zrjYlHb02372wWhsScE5UF6aK3W9uqZ2LF0x1ZpeHOhTKOHEwITe08nZZcXJv73UUir-uOYU74ZqxEbsu6BCKAj48eqkkRO1QNhVTFeMl4aq4xWBhnfhN9PkFJf5c1X7-Bjq60kwTteEVTVPH17bUaq2qqtxqoNQcbLCZmtuqwi8K5hfA9evWJFMGrGN8DWLyzdAQAoQ-CQgIkDpEzEz1U1Wi1JaawqeJp1fJ0hADCYWIwTaGvOMNKtx1E_6QCA9B3cxeLa-OiRRq2A8SILeTFe5GHEbBWGLn6kIf4fWLE3rNgT43wWDA_jvPHOBWoacHHuT6HWqQfyPmYpzz8lTBn-LcHI_ZQTy7Bsl-1yDEg-M8QnDLELLCYOLgy8nLcv1nr_HHJIT58ZX4131uvkjHey93Cs_J15p-jZT48SOaTBmUdp2fow-Tg4o5PKxLL9aJknd0kp36SevFLX9RyZraffgHVdR6f81MVBmu9BP7KdU4sdfL2ggcZ2vdIIykDyNRbrqrQGh7119Iiic9Y9iISelk3fM7HLciZ2QXw3Y8QO6IJwQk_KSFLWwNTe4PCsPKGDs7NDD400xhLYEZ2WfSR5O7gGP8ZPq85yYOs9_HOnBTYr4jEj9tPhEBosnDxiV4QFhRcYSxhGZTxJQ0oSnkKfW5DeY1frG1zQ4SxbRNkn_45l7KryaeIPnymbbNo-OKNBF2ZbPnb7XoPGdp00J1DvjuFwAEIvvQ9YLc2Z8RfGXyBJSLozUmiD4JBVngzmD2OvJtHKDH8mZzPAvZSQfE0h6dw4JtP2J7Uiz8SBp3n5A-obJIm_eWctxT469pIujB_JMn68B_jx_YSo27dcW6n0v8w1--9zXaWL01acNmIjF7jN1nm-Kjd5KhaXreSNzIu0bqQo8lSs62aTF2mDOaZZVvN2obY85UWaZ0UqilUulutT2tRlKddYbNKyaFmeYieVXmo9dkvrzgvl_YDbTBTrXCy0rFH7eEVzbvAKMRp8XBwWbhtIST2cPctTrTz5NxlSpOPd_uXL919YcWDFy6___7b_zopDbPfB49Tnx688vATj5eOOjE2I0ulb0mhb1-jgca9Ox4K2HkGRB2xbbCh4PFiykUF3MurU89HNi8Hp7YWoj46NxT8rugz1srEd48eQ9TwkvbO_R8VjXKtn_DhvxrjlfwUAAP__r5aTZw">