<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/65459>65459</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Let big shift return poison lead to diff result for O0 and O2
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hstk30
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/9W71xdhnq
```
#include<stdio.h>
int main() {
unsigned long long xM0;
unsigned long long xM1;
xM0 = ( 4294967295ULL );
xM1 = ( ( 1ULL + 1ULL ) );
xM0 >>= ( xM1 + 4294967295ULL );
printf("%llu\n", xM0);
return 0;
}
```
`4294967295ULL = 0xffffffff`
`xM1 + 4294967295ULL = 4294967297ULL = 0x100000001`
and in x86-64 `shr` or arm `lsr` , the
> is a register holding a shift value to apply to the value in Rm. Only the least significant byte is used.
`64 = 2 ^ 6` , so `0x100000001 => 0x1`,
and the right output should be `4294967295 >> 1 = 2147483647`.
And when apply `O2`, the output is `140735712106328`.
Ahead, the diff `O0` and `O2` caused by `EarlyCSEPass` for `ConstantFold`, see below:
https://github.com/llvm/llvm-project/blob/b027ce0ab93060bc6cb79d5402d21520e8b93fb7/llvm/lib/IR/ConstantFold.cpp#L1102C1-L1105C75
--
Can we fix it by trunc the `C2` to the width value bits like arm assemble’ behavior?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVVGP4yYQ_jXkZbQRBoPNQx5unViqtKutrqr6DAbH9AikBu9m--srHOc2yd61RYmxh-Gbb4bPYxmj3XtjNog9IrZdySkNYdwMMX2jeKWCft8MKR0jol8QaRFp90Gr4NI6jHtE2r8RacUfVXHSg_8L4S3CX5Yrx8vv_Eio9Z2btEG0iUnbsB4Q3V3vsD7BQVqPSI2IAFQ9nu2wjMnPTDW44Pfny-kZI_p_3IrvbrfOp2cMiG4BkRpKIkrBKyLY709PgIj4BH16Lr57539xdny83Iif7MoxdvPvvHfGIY__EvEW4Than_q5LgQR5tyEWOPnh2auwQ-ijiZNo4eP-qBq--OTuRjv2NAt4FO_jM_eP8mBbj8s1QdOgc-juAOSXoP1cKr5Ay8BcRyHEXEMYQQ5HrLBxdmQM02DgRsWdAc2goTR7G1MZoQhOG39HiTEwfYJXqWbDKQA8nh07_kmY5yt1sPXwxpefF4YDDgjY4KsHdvbTvoE6j2ZHGCKRq_v0s9s6RYIILYDfmEYQ6Z8lW52yjTxac5816LHBtUNfGSfQ492PyQIUzpOCeIQJqdBGbg5k0VCcFYgKcqqrCkvK8TxDbcvXsPbYPySMuL4heTQS_2WIDbmlaLEFWVVQQrMKak_QQ1G6stGbft-RsvKgcz8Ag2dzBUCNUfbydG9N7_tfpUx5sU-jNncBB-T9KkNTi90ojGgjAtvubVchb1rNzYNk1p34YBI69zrZXo4juFP0yVEWuWCyhMmVWewVIJijlXHO1UJzUpMNCkYwaZWgvaqusKxed8vXxFpr_mtu-MREfpUFJg0xUOeWVOxa44PDzdKbKSHNwO9PYHNuoE0Tr47C5bjZq7SIr43q9OwSFDZFMHZb2YWu4zRHJQzaEdQjZEQoMwgX20YEW1vwq30hmpBhVyZTcEFFaLEZbkaNp3QjPeaKsxxWbJa0ZpWipmCqZrznq3shmBCscAcC1bicq0473VJ64zHdFWjEpuDtG6dS5R7_MrGOJkNZyUTKyeVcXH-VBDizRvMi7kRse1q3MznoqZ9RCV2Nqb4gZJscmbzZBIou1_ezqVFHYONwef3T-cizUIbTZxcmsXzclbbC1lNo7v_Fv23OGaGEZF2zuCfAAAA__8j0elG">