<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylU02P0zAQ_TXOZbRVajdpe8hhtxWckIALZzueJF45duWPUvj1TJIWlu1KgLD89fxGozfjGeX1t2ZI6RSZeGT8Hc3ea-VtWvnQE_pOS7pL-7Grq4qVR1Y-LvunbBKChGjGk0XosmuT8W5ys1jV5TLbBRuXIGbFq5rx3QQc43tg26eFBhoBUw4OHDzAZCauFNseX7lc4BeTBiD0MKYhj4pucApe5xYjpMFE8DmdcgLv4GCl6--lyTguL1dhNwO4jtGf4yxszfgBGBf8loOfFmf3woL231ip9cKWM1u-ZaMuy2nD20EOGFBGeH84vIwOSVtAiOiiURb_PTR6vpNGAa7_yuouDX8MwrQDKE__FeWZApAOjIsp5LlmCGqqpIC9iQnDqtCN0Huxl4XMafCh6dCay7N3GIsc7Ot6pTLIatX6kYC159vxQOl6xjYRNDFmjHSpxL6ui6HZyK7aKL3r9p3o1G7baWxl16luV3NR67KwUqGNDaueGOcOv8Lsgu6sOhb_r8A0vOTTXJflphZipTdyq7ZC1JVqS4nINiWO0tjV5GdqxSI0s0uV-0ikpUzFX6SM0fQOcRZMCpNJlgDfPX7-MLXZ3CDrevrPFCQl3fVTi4Hz6VpV04s_JTNK-_JrYjErb2bZPwCRfTRG>53966</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            (ARM) thumb16 subtracting 256 not producing optimal instructions
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          felixjones
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/anxcPf655

Quite a simple function:
```c
int sub256(int n) {
    return n - 256;
}
```
With `-mthumb` produces this output on Clang:
```asm
sub256:
        movs    r1, #255
        mvns    r1, r1
        adds    r0, r0, r1
        bx      lr
```
Whereas GCC produces the more sensible:
```asm
sub256:
        subs    r0, r0, #1
        subs    r0, r0, #255
        bx      lr
```
Which both saves an instruction and a register.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVU02P2yAQ_TX4ghJhHOP44EM20e6pUttLz2BPbFYYIj7StL--Yztp081K2yIMPN54eDMMynU_miHGUyDFjvBn7L3rlDNx7XyP6Cd-0l7az0dRloQdCNst45ekI1BJgx5PBugx2TZqZyc3i5VgS28XrG2kISleCsK3E7CE15RUTwtNsXmIyVtq6YpOZsWVItXhjcsFftNxoIhWYxzSqHBFT951qYVA46ADdSmeUqTO0r2Rtn-UJsO47FyF3QzotY3uHGZhOeF7SnjBbzn4bXG2dxY4_sXKrltYNrPsPRt1WWbj3w9yAA8y0Jf9_j46QG0eaAAbtDLw_6Hh9oM0DDD_J6uHNHwYhG4HqhzeV5BnDEBaqm2IPs01g7DDSvLQ6xDBr7OuKbq6qGUWdTTQYMHsvn6aymW-6FxMuqKX-LPtp1Kh1sVrdqYdd4p6lOb-iJAlb94WOtZPUuvWjQiMOd-mFXp6hTYi1CEkCLgoi1qIbGggFzUTWziKtqo5wLblou5kXW2ZEHXOMyMVmNCQ8olwbuE7nV3gmpSHTDec8annjG1EUay7jaxUVRSiVC2TAGTDYJTarCcd0wvMfDNLUqkPSBpMUPhDyhB0bwHm49C_THFwvjmC0ZdXZyFk8-nNrP4XIVQdKQ">