<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61881>61881</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MIPS] Incorrect expansion of sub-word signed atomic max
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Amanieu
</td>
</tr>
</table>
<pre>
## IR
```llvm
define void @foo(ptr %a, i32 %x) {
%val = trunc i32 %x to i8
%1 = atomicrmw max ptr %a, i8 %val seq_cst
ret void
}
```
## Asm (`-march=mipsel`)
```asm
foo: # @foo
sync
addiu $1, $zero, -4
and $1, $4, $1
andi $2, $4, 3
sll $2, $2, 3
ori $3, $zero, 255
sllv $3, $3, $2
nor $4, $zero, $3
sllv $5, $5, $2
$BB0_1: # =>This Inner Loop Header: Depth=1
ll $7, 0($1)
and $7, $7, $3 # <== WRONG, zero-extending
and $5, $5, $3 # <== WRONG, zero-extending
slt $10, $7, $5
move $8, $7
movn $8, $5, $10
and $8, $8, $3
and $9, $7, $4
or $9, $9, $8
sc $9, 0($1)
beqz $9, $BB0_1
nop
and $6, $7, $3
srlv $6, $6, $2
sll $6, $6, 16
sra $6, $6, 16
sync
jr $ra
nop
```
## The problem
The expansion of `i8` signed atomic max masks out all bits that are not involved, but fails to sign-extend the values before passing them to `slt` for a proper signed comparison.
Downstream bug: https://github.com/rust-lang/rust/issues/100650
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVl2PmzgU_TXOy1VGxgZCHnjIlM3uSPulbqV9rAzcJO4am9omM-2vX5mYNJCZUVEUkO_x8Tn3XmyEc_KoEUuSPZKsWonBn4wtd53QEodVbdpvJWGcMA5PHwmtCN3F_5xefkqdu8tQiwepEc5GtkBSejCGsKL3FgjLBGEfQHIWnl8I2wLZPF5mQRg6CwWEV-DtoJsrDrwBWdzAkhEkvOlkY7tn6MQLzBYoJjKHXz83zk9zLfpRV9S-qRYmZs4udneuA8IKktN1J2xzIrzqZO9QBTjbvpoL4WIqgne-g5-4wlIxWVHr5XLfdDMfEW0rh3FGmgSzhKXf0ZrwuE4XUN1G8is0jffkDikjkt0i-UKNUrCAsVuYsXKK84U2lmV3XOcFll85Z0ht7MSaLljHSW_RZhGRzWkJSx8f6eckVGZMO68I_-XTSTp40hot_G5MD7-haNEGTIW9D2VfpCymIhBvwgI0dMmY6NgUt-nfRAnTnceVP4yLV_Dvx7_-_DXEgrE1vnjUrdTHN8u5tPaTfLDMlb_2B10onKrVmTNGTHGFzFg6c9YLxCQroW86mKDF62W8QW4XyhZNHpvjFrm9cs_tNtfgfbHiVePX7wu2S7MsOrK_l0tYmi_LvBBgr705IfPXW_7mRZshkzzinBXvAyaiu_3jy498WRFDVz_v7YSfTgi9NbXC7jYahvGlF9pJo8EcgORUhv0SxiOljfv0uEl3wv3nwAwehFJQS-_An4QHYRG08SD12agztsFJPXg4CKlc2P4DVWxj8CeEs1ADOqjxYCxCH44vfQyRLqBJTp3yQcLBWBBBdY920tOYrhdWOqMfbn1U5lk7b1F0UA_H8OKfvO8d4TvC9oTtj9KfhvqhMR1hezs4v1ZCH-MzYXvp3ICOsH1CaZ7RVVvydsu3YoVlkheUM5YV2epUZgJTzjij6XaDBW_4Ic_SjBYo2IY1yFayZJRxmtKEpknOsofDNk-w5qJOWCrYJiEpxU5I9RDO3Adjj6tx7TJPiiJZKVGjcuNBzpjGZxiDhLFwrtsyzFnXw9GRlCrpvPvB4qVX4xfAH09__0OyCp50Y6zFxs8L7IZ6_Wxse1_g1WBV-U7axo-Ey23dW_MFm1nmRgP_BwAA__8edSyM">