<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/114736>114736</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] wrong folding of `lshr (mul ...)` to `(add (lshr ..)` for an undefined input
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bongjunj
</td>
</tr>
</table>
<pre>
https://github.com/llvm/llvm-project/blob/390300d9f41df6ad71f0f4196ef4885d4bd5dc48/llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp#L1550-L1558
Alive2 report: https://alive2.llvm.org/ce/z/nEyusM
```llvm
----------------------------------------
define i32 @mul_splat_fold_no_nuw.2(i32 %x, ptr %#0) {
#1:
%#2 = srem i32 %x, 2
%m = mul nsw i32 %#2, 65537
%t = lshr i32 %m, 16
ret i32 %t
}
=>
define i32 @mul_splat_fold_no_nuw.2(i32 %x, ptr %#0) {
#1:
%#2 = srem i32 %x, 2
%#3 = lshr i32 %#2, 16
%t = add nsw i32 %#2, %#3
ret i32 %t
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
i32 %x = undef
ptr %#0 = poison
Source:
i32 %#2 = #x00000000 (0) [based on undef value]
i32 %m = #x00000000 (0)
i32 %t = #x00000000 (0)
SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 > size: 0 align: 1 alloc type: 0 alive: false address: 0
Block 1 > size: 1 align: 1 alloc type: 0 alive: true address: 5
Target:
i32 %#2 = #x00000000 (0)
i32 %#3 = #x00000000 (0)
i32 %t = #xffffffff (4294967295, -1)
Source value: #x00000000 (0)
Target value: #xffffffff (4294967295, -1)
Summary:
0 correct transformations
1 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVl9v66gT_TTkBSXCg_8--CFtEumnX3sjtd2V9qnCBid0MViA0-Z--hWOkzq9u_e2-7QocgxzOMwZxgzMObnTQpQouUHJasZ6vze2rIzevfT6ZVYZfiz33ncO0SWCDYLNTvp9Xy1q0yLYKHU4_807a15E7RFsKmUqBBtaEEoIL5o44k3KeBY1pImjIhVNnOcJjyue8DrOJzwyzHuyTLvG2NYh2PxPO39r2kpqcd173MvGu0XddQjoXZQkZB6eOSIrRJan51LJgwBsRWesR3SJr6WwwbwIiy-M3SHY1GGR7wg2en3s3f2UC6Xk9Bt8HYbmn2wnNBeN1AJLChjFpO3Vs-sU88-NUfxZm2fdvy4AQT4AIHlDcIs7b8M7AkoQFBhlN6MzQKMgY-jgEQIY0RV2VrR4ygETVDtA2l5h7V7PqDA1ANMkodkE7Aewcnt7RrYBFqVnjBX-bPGjX9lqfKErRNf_HeEIKP1Bzln4u6KLasb534VoZPpEAC5JzLw0GnMjnEaQeXwQVjZHBNE0udYPD9uHkKC_M9UL3ErXMl_vryBvrO2UuIg_Kx3c7TUXzWl8ErnB1BnpjJ4yPZre1j8QXeKIgL6RsWEEedgARAqU3FTMCY6NPi2HD8FXlKyuaNqfcExg_hew0dPtbw-3a3y_vt8-_IEfn5ZP60l6_avfMP3b9tv8bnu7vMM3d9vb_z9eYnGjTP0nDoFbI1I4-T2ECRNECqbkTodONHSUqbE_dlPzYeg0TDkRBji3wrnR_s4dfeCOvsDtbf-BOplG64nZnfBf3NdrJP3q7jVjC7AYirhIMyiS8KnMo8usU8KN-UKXP-E_SbhGfmqJcaG-bZk9Tg4Igmtjrag99lcfpDsDIiz1LyAEN0wqwefehCJ3EP8MHAuOsNZY96FuzHhJeUELNhNllFGSFinE-WxfVinJMwY0IVFSVDk0DfAMYpFzRhqa05ksgUAcRSQmcZJBvkjigiURSxnQKOU1RzERLZPqUspm0rlelFEUZzSdKVYJ5YYaD6DFKx6sCCCUfFsO1bvqdw7FREnn3TuNl14Nl4NpGU5W-NUavcPhAJd6h02DQ10MJyuCPFSXxWIRtiYl2JtgQ5CHExVBPqAu1sZYzMbzRGrBsdRd72e9VV-_dQyiwpVhVH0o4a8AAAD___wpZlo">