<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98441>98441</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Wrong constant fold for ICmp by InstCombine
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bonjune
</td>
</tr>
</table>
<pre>
https://github.com/llvm/llvm-project/blob/ce92b2f594809c39c37bf3ef3d881f2b33bd6730/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp#L7345-L7346
https://github.com/llvm/llvm-project/blob/ce92b2f594809c39c37bf3ef3d881f2b33bd6730/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp#L1310-L1325
`NewPhi->addIncoming(V, Pred);` in the loop `for (auto [V, Pred] : zip(Ops, Phi->blocks())) ` is executed.
Alive2 report: https://alive2.llvm.org/ce/z/5IfYQ9
```ll
----------------------------------------
define <2 x i1> @fun0(i1 %val0) {
entry:
br i1 %val0, label %if.true, label %if.false
if.false:
br label %merge
if.true:
br label %merge
merge:
%val1 = phi <2 x i32> [ { 4294967295, poison }, %if.true ], [ { poison, 0 }, %if.false ]
br label %exit
exit:
%val2 = icmp eq <2 x i32> %val1, { undef, 4294967295 }
ret <2 x i1> %val2
}
=>
define <2 x i1> @fun0(i1 %val0) {
entry:
br i1 %val0, label %if.true, label %if.false
if.false:
br label %merge
if.true:
br label %merge
merge:
br label %exit
exit:
ret <2 x i1> { poison, 0 }
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source
Example:
i1 %val0 = #x1 (1)
Source:
>> Jump to %if.true
>> Jump to %merge
<2 x i32> %val1 = < #xffffffff (4294967295, -1), poison >
>> Jump to %exit
<2 x i1> %val2 = < #x0 (0) [based on undef value], poison >
Target:
>> Jump to %if.true
>> Jump to %merge
>> Jump to %exit
Source value: < #x0 (0), poison >
Target value: < poison, #x0 (0) >
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/eJzkVs2O2zYQfhr6MrBBkfo9-LD22sAWQZMmQYseKWlkM5VIlaSc3Tx9QcprS67TboFeihqCDI7m5_tmhuQIa-VBIa5JsiHJ40IM7qjNutTqy6BwUer6ZX10rreEPxC2J2x_kO44lKtKd4Tt2_b0-rfsjf6ClSNsX7a6JGxfYcFK1iRFnNOi4kXFs7Lh2PA6z6OGlZyXdZpxOvEjvd1nI5RttOksYfsnZd1Wd6VUOF9tddcLg3ZV9T1h_F3G42Tp3ymhj4Q-jO__BvaIR3T5LuIsmWInKf0Rv344yiXhO1HXT6rSnVQHwvKfCdvCB4M1YQXhG5JSkArcEaHVugeS0kYbICwXg9NAks3VIHkEwh_gm-wJy9_3NnwYY5Strn6zhOXea3ggeLaAz1gNDuvVDF94P7TyhAwM9to473mechE-r3ySVtocQmoJ238jbJ88Nb_-VPzZI0np-LTtKFi-8Tdq19hIhUD4lsEzyIjwHZCYNoOihOUyAsKSk2hpoJdtRiNUzrx40GEFUBqYam6hFSW2XiCblTMD3soa0VqcsrjIZk4vJh2aw61-8PtG9VFwVR6hRkD4I_RHeaHPWeCfbDxXiFkRF2nGisTj77W0WgHJHv3qyg1IMkrOVqOel9C5ciAYtO9AxmfppojD-gJ4xMsCXll1PeDvt5hHRiFatoFB1dj4xZVDAHOObNDdlHwMcEbwqkj4I-G7_3OjvL1Ed3J6pxnm-b2cf8JJraDWaBVhmYMTGtm8EBZN4-0-fnz_0Z8Zn4U5oPMnTacNnmPowYI7CgVWD6aakdo9i65vr7SuJQgNRRh_9pI88sfYxO7T6GmybfjOE_th6HrwJ-W1bN9VmGb4XsOOCPg2oGjOPw9mvvmWAdtkF7625b2Yk0Ld6fFZROpD0cC7IMmmFBZr0GrcP3AS7YDn7X0b-FzBUIp_LUV_zWasxxkVf7hD4g7Oc7PMjK5dOTO_Jfdp6Dox278UKm0MVg7crHXtq0IEUv2NCoVGyBbrpdN-kjjh9xXPtyUao429ue4W9ZrXBS_EAtdRxmiax3FaLI7rokqR15QmWCaUYR3TqoloXbOqqmIsqoVcM8pimkURzZKYFSuasrLhtBF5muUoKhJT7IRsL_fwQlo74LrI4zhahPPAhhGQMYVfIXwkjPmJ0KzDhFQOB0ti2krr7NWLk67F9S9GqwNUWlknlINGtzX4-eNp2_VQvsBk8lkMpv3nA2XA4yeqEe9pzf4IAAD__1ciBhc">