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