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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64][SVE] Suboptimal code-gen for saba etc
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          stevesuzuki-arm
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/v5v3bd5jj
```
define <vscale x 16 x i8> @saba_nxv8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c) #0 {
  %1 = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
  %2 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sabd.nxv16i8(<vscale x 16 x i1> %1, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c)
  %3 = add <vscale x 16 x i8> %2, %a
  ret <vscale x 16 x i8> %3
}
```
More instructions are generated with SVE2 than with Neon which `saba` is used instead of `sabd` + `add`.

The same goes to other patterns such as:

1. `saba`,`uaba`
1. `srsra`, `ursra`
2. `ssra`, `usra`


Option : `-mattr=+sve2 -O3`
```
saba_nxv8:                              // @saba_nxv8
        ptrue   p0.b
        sabd    z1.b, p0/m, z1.b, z2.b
        add     z0.b, z1.b, z0.b
        ret
saba_v8:                                // @saba_v8
        saba    v0.16b, v1.16b, v2.16b
        ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVM1y2yAQfhp0YawBZMnSQQcnTm5tDun02kECW6SS8ABSUj99F6wksmN7OlOPzO6yP3y7LFtp8adsnNtblKwRe4Rvp0WlWxdrswPpAP8xHZNKpC8viGwQWaOMTF8QhdyqXmKU3I-25q3Eb5hmsKgcJQ8YLYnlFf_Vv405Yvk1K5ZyxO6vBmFpdVtdI1YATQhGq7sjLuz3KfhsMLi0F5zpBLBtxy7m3NRNtoztKOO9M4OMATLNwIjlKmE4AaaYRWYhsuOqvRY-vxYeCiKm6JdrQqes6H_XZAY4CYC5EDdcWIjoL2PyM9LdME-mhlhtLnbGN20kVr2FatZO6d5iDhs72UvDnRT4VbkGP_98YNg1vD-K36UGrlF1gyGObx0gWFk8WPDwwSQXWG8nrfBaxO68CKnBGk9QwvqjkdjyDg7V0mKnsXaNNHjPnZMG8NgBzuGh92deNJ6dDRWBdZiEud5YMxl4cXgXgwk7mpxazA3m69PeVwfqvPZmiw7QGbgrSAu6heHFU_Lpdlrhz6cFvjd_x7d9-hynOz7-Qs97SuLqVOPL7OmBxqHj9pDQY-e5950DO_fxbRZ8yGTxbvklOnTYLJd_yORLLueZ-E1PRxLTLJw60g-OBe4ygo_iRqJMRJEUPHLKtbJE6d16Hd4vSjcgQM8Cg5-HSsPVdRxGgBZyAZ2Nt9ocAUhXR4Npz4cr9PhQxbWG-j36wTCRxd7oF1k7EJW1g7TApBnJi6gpV5LmteBcbCWpRbpKq6LI-ZbQpah4Louo5ZVsrUeJGOvlKw4hgAeQkSoZYYxkdEWXpCCreJvmpKiTQtS0qjhMiSWRHYyxOMwpmPqRKQOkathZP76UdfZTya1Vu16Govj4fHCNNiW8y1Ha4TD8VgtuuihAKEMKfwGCwsFt">