<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55714>55714</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Failure to optimize pattern to x * 8
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
GabrielRavier
</td>
</tr>
</table>
<pre>
```cpp
int r3(int n, int q)
{
return n - q * -7;
}
```
This can be optimised to `return (n + q * 8) - q;` on architectures where `n + q * 8` can be done in a single instruction (which includes x86). This transformation is done by GCC, but not by LLVM.
See also <https://godbolt.org/z/4anx8846f> for a Godbolt comparison
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxdUMtu2zAQ_BrqsrDAUO-DDn40viSXtOidktYWC5pUSCp28vVdSjaKBqCo2Qdndqezw2fLSr6efpoYPzC-VSaAy5ioIzBM7CGCdyaatc6q3R3wxmGYnQEDG3gHJrawqVj2KFeHO3hIrOGvUXnopYEOwU5BXZTHAYIF6rjzkXi8dnfSmrSjQqQuOVgD0vWjCthTN3q4jugwPv__EbXeZQZrkLYACV6Zs47YBzf3QdlF7DqqfqRkr-eB-G51SYopLJMGJ40_WXeRSzdlFrbuE477fXSnm8kmG2Lm5eX3a_owJ94_EUFqT7tl-zGEybNsy8QznbMdOqtDat2Zoi_6cmludZ2XJ5b9ABKkaY9rE_T2MkmnPOknQ5sNTdbIJKigsX2WSpMJ0b_VzC-ESYaAZCPlbqsXkMxOt98mUGGcu5S4KdD64_HbTM7-IWspVN7P6AkURfWUJ2M79GUjioYjH7qsyQdeY1kKXsi-PJ2Kvki07FD7lhU7JoTBKywUhFlxSFQruKBuUT7xvBRlKmTO81NViRyzHLuB5RwvtFAa54jWJK5dRurms6eiVj74f0XpvTobxEWO-OUcRuvao-ycQv0mPxS6ZBmgXRb4Czg25qw">