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

    <tr>
        <th>Summary</th>
        <td>
             [AArch64] a redundant mov instruction compare to gcc
        </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 case https://gcc.godbolt.org/z/5dTff475M
```
unsigned __int128 mul64 (unsigned __int128 mul0,
                         unsigned __int128 mul1)
{
    return (mul0 & 0xffffffffffffffff) * (mul1 & 0xffffffffffffffff);
}
```

* llvm has a redundant mov instruction, can be fold into **mul     x0, x2, x0** if issue the umulh one step first.
```
        mul     x8, x2, x0
        umulh   x1, x2, x0
        mov     x0, x8   -- redundant ?
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9U8mSmzAQ_Rpx6TIlCcRy4GDHNbe55T4lhDBKYcmlxePk69NgT2bGZYcSWujXr1-3mt4Nv7uoQwQlg4YpxlMgxZbwFxwHpfKDG3o3x9z5A375g68Yfo5jWYtXQveEbklFb2M9JhvMweoB3t6MjYw3cExzVQLhzUMTJfzH1ROePQ_9GOHtTUC9-yTwOiZvl2gLN64V0Mt496ArWrY3FHuOIsXuI8b-Yba3Gbnm-XyESQaQqGFIdpA2wtGdwdgQfVLROIupYpkt9BpGNw9oim4RggN1rLlelnrAha8zvdrAjGBCSBripCEhdAJnNYSoTzAaH2L-UNxH_f5xN9-4v2GurIhhzzFLNl80NrjdbL5kS4qXOx2Z7lhVVZRWtOXZ0BVDW7QyiybOugMidtutV1NVErH_X91AueNJeszfAfZklvzc3XWqiVPqc8ThYbmK27I5efdLq4jHtYJh6d-mpCKbulIJ3euilKJStCyaRsqasaLtRa9YzWU2y17PoUOZhHOr36-XgHuUm5mOU84ZZejDG8Zz1jZ1TVWhRinaWghSUn2UZs4XHcvvk_luldSnQ0DjbEIMn0YZ1ibXazjklylOznfncRjHbA3crcL_AueOEjs">