<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80275>80275</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[PRE] reuse the value to avoid double loading
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vfdff
</td>
</tr>
</table>
<pre>
* test: https://gcc.godbolt.org/z/7eKGbndfK
```
void foo(dComplex* __restrict__ bb, bool flag) {
*aa = *bb;
//memcpy(aa, bb, sizeof(dComplex));
if (flag)
{
*aa = aa->conj();
// bb->neg();
}
}
void foo1(dComplex* __restrict__ bb, bool flag) {
aa->real = bb->real; aa->imag = bb->imag;
if (flag)
{
*aa = aa->conj();
}
}
```
* llvm of **foo**: ldr often has large cost because of long latency, so reuse of the part value of q0 will be more efficient, which is similar to **foo1**
```
foo(dComplex*, bool): // @foo(dComplex*, bool)
adrp x8, aa
ldr q0, [x0]
ldr x8, [x8, :lo12:aa]
str q0, [x8]
tbz w1, #0, .LBB0_2
ldr d0, [x8, #8] --- expect reuse the result of q0 (d0 is low part of q0)
fneg d0, d0
str d0, [x8, #8]
.LBB0_2:
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vc9u-jgQfprhMgKZMSHhkEMoZQ-_Paz2BZCTTIJ_MjGNndL26Vd20lIo2sNKG0XEZr755ps_cZRzuu2Yc0i2kOxmavBH2-evTd00s9LW7zlQgZ6dB1ng0fuzA1kA7YH2bVUtWluX1viF7Vug_QfQPuVff5Rd3fwCsQNRwFpMd9y-Wl1jYy1QVj_Z09nwWwhwOPTsfK8rfzhgWQI9YWmtwcaoFmiDkG4nOrEBKpRCkDsEKsoS5GRCRByFnfhUnd-BMqUiU-Rz-oNtcxN3E-7v7rpBoOwr6JU2_QYa43xqUGoO8rmy3W-g7J7vKgnLMuA6bh_AIN1N2X0tboq1_K_VCuSjwJ6ViXpHHWELcjsZ9Um134xh-7-W5UG-t1My_VKBxrye0Ib4YRsHJyzCMJq6R9t47vCoHBrVt4yVdR5LrtTgOLgZ27VolOeueo9DYLHnyeaPjGfVe3xVZoj_vAi8aGOwZDzZnpGbRleaOx9cL0ddHVE7dPqkjerR26uq5STrUTI_pv2zX7EsX7W7vaapgZX4V_eb6qu6P4fnWxYgSt1aQ7nC9SKCFZLtm4Bk9xgzMgTMuJCFsUsCWSj1w8f5e97sB8aXH_F5WUYMyYhd_LndigM9llCLWwkkA-0Ems_nyG9nrvzUztDLnt1g_NRHeN7D9gmyrBahZ8Zexl5H66fxrn5Nx-01dC0e5_lY2Ij9zEgWt749-7vRmNW5rDdyo2acL1OxTrOURDI75muuK05SauSmqUjwRqiU5Woj6mbVZBua6ZwErQSJ5XIpJSULqhQJSTJZy3WTKIKV4JPSZhHenXAwz7RzA-eZoDSZGVWycfG4J-r4gtEIROH07_PgMy-H1sFKGO28u7J47U38Tvz193NoxbXy4wvkLap4YtV2KA2jsarWXYuzoTf53ZdD--NQLip7AtqHANNjfu7tb6480D7KckD7KPufAAAA__-xJMmL">