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