<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/70658>70658</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [AArch64][neon] combine the (a -1)* b into fnmsub for fixed vector type
        </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/sr6Mevf9G
```
float test2_float (float a, float b) {
    return -b + a * b;
}

float32x4_t test2_float_vec (float32x4_t a, float32x4_t b) {
    return -b + a * b;
}
```

* now both gcc and clang can fold the `(a -1)* b` with scalar type into  fnmsub, while clang can't do that for fixed vector type
```
test2_float_vec:                        // @test2_float_vec
        fneg    v2.4s, v1.4s
        fmla    v2.4s, v1.4s, v0.4s
        mov     v0.16b, v2.16b
        ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycU8uOpDoM_RqzsQoF86hiwYK6Je5qvqGVF49RIC0SqO75-lEAdalqejYTIXIgts9xbHPnhm7SuoL8Cvkt4ovv7VytrWrbSFj1WQHV6LXzkNbYe__uIK2BGqCmkzLurBLW-NjOHVDzC6hxc_FDr235P7AbsBoKdjzbZ2ss91s8etsx0GUHHOg_3KEAKhHO190HEXHWfpknPAkEuiLHoEpAeljA-XaAB0lKH9nbE9XbquUX3XH8ID1-_Dv1c6LHm2qc7B2F9T12UiKfFErDpw4ln7C1RqHvNQY3unA8JUDlTlAwvA--Rye54TP6z3eNw-QtYjuNbhFB-L0fjH7EAzp7VBZ9zz22dsZ2-NAKVy293SN8K_XlikKh_7L2uiNk7NXn67bCaifdhX2lOHNB55oE8GwzGv6NTQDsD-PRrtu-sjgptsxX2tCT1az9S36RqlJVpiWPdJUU5aU4Z0nGor5iBaVESStEUVxyxVtSuj0LkVGWKc5UNFTEKE1YypI0zzMW61IxqQviorgkKS8hY3rkg4mNWcfQ_tHg3KKrMyvyS2S40MZtQ0U06Ttuh0AUZmyugs9JLJ2DjJnBefeI4gdvtmms61n2RQb5DfLrpO0E-Q2lHcUw6b1nnhtmb469N74vfrTMpnoZ4cH3i4ilHYGaoOHYTu-z_amlB2o25Q6o2TL7HQAA___j_zPG">