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