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

    <tr>
        <th>Summary</th>
        <td>
            [x86] Backend Bugs (emit different register)
        </td>
    </tr>

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

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

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

<pre>
    We observed that Clang (v 16.0.0) silently change a register into another one. Could you please investigate this? Thank you.

Assembly code (buggy1.s)
```
$ cat buggy1.s

.intel_syntax noprefix
    cmpbexadd [RAX+1], EBP, R9D
 cmpbxadd [RAX+1], EBP, R9D
    cmplexadd [RAX+1], EBP, R9D
 cmpbexadd [RAX+1], EBP, R9D
    cmplxadd [RAX+1], EBP, R9D
 cmpnbexadd [RAX+1], EBP, R9D
    cmpnbxadd [RAX+1], EBP, R9D
 cmpnlxadd [RAX+1], EBP, R9D
    cmpnoxadd [RAX+1], EBP, R9D
 cmpnpxadd [RAX+1], EBP, R9D
    cmpnsxadd [RAX+1], EBP, R9D
 cmpnzxadd [RAX+1], EBP, R9D
    cmppxadd [RAX+1], EBP, R9D
    cmpsxadd [RAX+1], EBP, R9D
    cmpzxadd [RAX+1], EBP, R9D
```

When I compile above code Clang assembler (v16.0.0) change second register as follows.
```
$ bin/clang -d -M intel buggy1.o
0000000000000000 <.text>:
   0:   c4 62 31 e6 68 01       cmpbexadd DWORD PTR [rax+0x1],r13d,r9d
   6:   c4 62 31 e2 68 01       cmpbxadd DWORD PTR [rax+0x1],r13d,r9d
   c:   c4 62 31 ee 68 01       cmplexadd DWORD PTR [rax+0x1],r13d,r9d
  12:   c4 62 31 e6 68 01       cmpbexadd DWORD PTR [rax+0x1],r13d,r9d
  18:   c4 62 31 ec 68 01       cmplxadd DWORD PTR [rax+0x1],r13d,r9d
  1e:   c4 62 31 e7 68 01       cmpnbexadd DWORD PTR [rax+0x1],r13d,r9d
  24:   c4 62 31 e3 68 01       cmpnbxadd DWORD PTR [rax+0x1],r13d,r9d
  2a:   c4 62 31 ed 68 01       cmpnlxadd DWORD PTR [rax+0x1],r13d,r9d
  30:   c4 62 31 e1 68 01       cmpnoxadd DWORD PTR [rax+0x1],r13d,r9d
  36:   c4 62 31 eb 68 01       cmpnpxadd DWORD PTR [rax+0x1],r13d,r9d
  3c:   c4 62 31 e9 68 01       cmpnsxadd DWORD PTR [rax+0x1],r13d,r9d
  42:   c4 62 31 e5 68 01       cmpnzxadd DWORD PTR [rax+0x1],r13d,r9d
  48:   c4 62 31 ea 68 01       cmppxadd DWORD PTR [rax+0x1],r13d,r9d
  4e:   c4 62 31 e8 68 01       cmpsxadd DWORD PTR [rax+0x1],r13d,r9d
  54:   c4 62 31 e4 68 01       cmpzxadd DWORD PTR [rax+0x1],r13d,r9d
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0ll-LqzgYxj9NvHkZMX909MKL6fQU9mLZw3Bg9m6J5q1mT5oUEzvtfPpF7XYWZaEVTikG69OfTx_ep0Z6rxuLWJJ0Q9JtJPvQuq780KHqtG2iyqlL-Y7gKo_dCRWEVgZ4NdI2QFh-AprFSZwQVoDXBm0wF6hbaRsECR022gfsQNvgQFoXWuzAWYzh1fVGwcX1cDQoPYK2J_RBNzIghFZ7wnfwo5X25yCKSbIlyct0fPEeD9VwH6dwMFH1TXOhsSesuOqy5PqeTpmAWga46f4Di7UNaP7yFxvkGaw7drjX5-kaAEB9OFZ4lkoBSTdvL38StqEk3RL2Ct8234flrdhe5YP2TulENo-Q79Ve0feT7YNoe--PHLT3-rii3QPo42No_wD68yH0Y0bu9TGp73Qyn_jx-N6ihd-gdoejNgiyciecSjP1V05Fwm5s8leRr_31WDurvkosPeydMe7Dx_9bs0pbwnb1iH9S8PQ7jP36t3puUiazFxD-Ggc8B8K_Ef5yCyAZT4paQMaAU8AMshwSOmQzfH5rxfb9j7ctfP_xNiTVyTNhm-R8zaqjXA1LoW7cbM5lC-4abD3H4hxr1til7NfEQPM5t174XYPFOfZ5jrWr_DIxB_MleA1XzrlqwV0TBF-ML11w3RruYnyrBfe4hruY32LB9Su4YjG_6YL7uYa7mF85566JQSzmN59j16SQLqZXzLGPh3D7B45UyVXBCxlhSZ8pKzjlQkRtiYVIs5qrvVJ5VlUFzwuepEgz5DLBXEW6ZAkTiaCMCpoKFkvxnOaMsaoWWVKgICLBg9QmNuZ0iF3XRNr7Hss8T2keGVmh8ePukTGLHzBeJIwNm8muHL7zVPWNJyIx2gf_RQk6mHHbec4zkm5hI-ufaBVs-sYPDyQ86ABK7_fYoQ23xxBhRdR3pmxDOPohUrYjbNfo0PZVXLsDYbvhFtfl6di5v7EOhO1GY56w3Wj8nwAAAP__NwDvTA">