<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/123029>123029</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assert triggered in AArch64ISelLowering::targetShrinkDemandedConstant when using half precision
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
WillFroom
</td>
</tr>
</table>
<pre>
I am emitting machine code using half precision for arm but I am hitting the following [assert](/github.com/llvm/llvm-project/blob/main/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp#L2376):
```cpp
assert((Size == 32 || Size == 64) &&
"i32 or i64 is expected after legalization.");
```
I have create a reproducible example: https://godbolt.org/z/d5aa5cxrK
I think it is possible that the assert is wrong, I believe it may just be there to check the following logic is correct:
```cpp
unsigned NewOpc;
switch (Op.getOpcode()) {
default:
return false;
case ISD::AND:
NewOpc = Size == 32 ? AArch64::ANDWri : AArch64::ANDXri;
break;
case ISD::OR:
NewOpc = Size == 32 ? AArch64::ORRWri : AArch64::ORRXri;
break;
case ISD::XOR:
NewOpc = Size == 32 ? AArch64::EORWri : AArch64::EORXri;
break;
}
```
which could be updated to check for `Size <= 32`: use `W` registers else use the `X` registers, I can create a PR for this change if someone can confirm I am correct, thanks!
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVd9vozgQ_mvMy-gisIGEBx5oskjVrTan9KT21ZgJ9tbYyDZNt3_9ydBcu71Kt9oIKcTz4xvPfPOFe68Gg1iT4oYUh4TPQVpX3yutW2ftmHS2_1HfAh8BRxWCMgOMXEhlEITtEWYfjyTXZ5gcCuWVNXC2DrgboZsDLLHyNTRIhLPV2l7iL1LccO_RBVIcCN0R2g4qyLnbCDsS2mr9dP36Y3L2O4pAaNtp2xHajlyZdz4qnv3N3YDRp2mckGX-9nZ7h_qrvaBTZtiIaSKUfaVsWxJaEdYASRtSpusTrWnzWlcsanenXhAIOxB2AEaBbPdku4f3pxGqAkLL-KQNXD-EUsUoWAeqzEF5wOcJRcAe-DmgA40D1-qFB2XNhlC6lHPzvpr4nja3IPkTgnDIAwIHh5Oz_SxUpxHwmY-TxngPGcLkCWsIbWMzbd9ZHTbWDYS2L4S2fcF5IZ7dn9e0QSrzCCrE2ibr_ZIwSB6WSa1NiLaLs2YgdA-30KFW-IQxaOQ_4PvsA3QxCB1CsCAkiscPg9Z2UCLmEda5OEbWrBV86DrAbBY-9vANL8dJrN0A8BcVhARCd8dpM2A4TpF8y3iqpfXbxa_HM5_1a_o4AIdhdgbOXHu85hLcI9zeHaIXa5pvhzf3FTROFT4OnbVwZdU17t4piF3_eP7g1BULoHPIHz-HPp5-C_l4On2KfDydfhX54Tehvxw_h_5yfAf9Ey7ZHv5L54tUQoKws-4jdeap53En_iVPlA9Spq_V7NdqYjRrYPYYbfekTMHhoHxA5wG1x8UUeUfK9OEn80pcwc3bBv11WlCCjKSU3AwI6gzejmijskVXa87Kjat-XXlL93E7zKMnNEv6mvUVq3iCdbZlZcVYlueJrPk523as60SfZwwxx5IJXpRFWfasKrI8UTVNaZFmWZFWtMjzTca7DHcMi92Od6LqSZ7iyJXeRHmL-5so72esM8pSWiWad6j9ItmUGrzAYo36URwSVy-C2c2DJ3mqlQ_-LU1QQWPdrHsdnBoGdNiDMvCJUK6zDYuo3kmnzOMBR2567PfW-MBNgItE8-lfQDI7XX-Qo__X9uUentD29aJPNf0nAAD__yrGBAo">