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