<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/140025>140025</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed constant folding through control flow
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
GINN-Imp
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/K5K6f9918
https://alive2.llvm.org/ce/z/SicZdr
For the following code, through control flow, it can be deduced that %1 is always false in block %6, but LLVM fails to leverage this fact to optimize `store i1 %1, ptr %0, align 4`
```llvm
define noundef i32 @Abc_NtkOrchSA(ptr %0, i1 %1, i1 %2) local_unnamed_addr {
br i1 %2, label %4, label %5
4:
br i1 %1, label %common.ret, label %5
5:
br i1 %2, label %6, label %common.ret
common.ret:
ret i32 0
6:
store i1 %1, ptr %0, align 4
br label %common.ret
}
```
opt -O3:
```llvm
define noundef i32 @src(ptr writeonly captures(none) %0, i1 %1, i1 %2) local_unnamed_addr #0 {
%.not = xor i1 %2, true
%4 = select i1 %2, i1 %1, i1 false
%brmerge3 = or i1 %4, %.not
br i1 %brmerge3, label %common.ret, label %5
common.ret:
ret i32 0
5:
store i1 %1, ptr %0, align 4
br label %common.ret
}
```
expected:
```llvm
define noundef i32 @src(ptr writeonly captures(none) %0, i1 %1, i1 %2) local_unnamed_addr #0 {
%.not = xor i1 %2, true
%4 = select i1 %2, i1 %1, i1 false
%brmerge3 = or i1 %4, %.not
br i1 %brmerge3, label %common.ret, label %5
common.ret:
ret i32 0
5:
store i1 false, ptr %0, align 4
br label %common.ret
}
```
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzclUGr2zgQxz-NfBlekGU7sQ8-pH1kKW1fD4U97OUhS2NbW1kK0vilr59-kZO08W5LW9iFpRDISJ7_zEg_wV_GaAaH2LLqBavuMznT6EP726uHh7tX0zHrvH5uR6JjZMWeiQMTh8Hrzlva-DAwcfjExOF19XrbN01eM75f50prnlBsrH2aLvkKL6L3Rv2hA-N7xvcHH4BGhN5b60_GDaC8RiZeAo3Bz8MIyjsK3kJv_SntGwIlHXQIGvWsUAONkoCJKgcTQdqTfI7QSxsRjIPOevUhfd0mcTcTvHnz-1vopbERyIPFJwxyQKDRJJmitOuPZCbzCYFteSQfEEy-tEhFjhRSzFMsrRkclGzLz-dJwfJLB2d8r7E3DsH52WnswRQCWMn3nXp8oA_vghrf75mobyveNDqHgokGrFfSPs7OyQn1o9Q6ANu9YHwP0IUviS_Byg5tWpWrVXUer0x8VqJ8lab8NHm3CUhfU1f_UK9bbr9Va1HfrC9lAtJyI5e72173f-jGL3N8o93u_hbGub4_Ety9K85dfgxUDOqC5xQMoXf2GZQ80hwwMlE77zDR-Xl2ouBXgExUG-cJWHEPH_3qZinMuBw08VwSIlpUdJuz7rm8-6ukCxOGAYtF-bny8jAuTdc0r_k_8SS-C7X6j6HixyMqQv1_o_qLYf0u1fOE_xLWa5zpttBN0cgM23xX7kRTF1Wdja2se1WJqtyWsih2vNt1O1nmomiaQvOmVJlpBRcVr_KK10WT15uuEGJX60ZXed7LrWAlx0ka-9mhMhPjjG1eci6qbBk1Lt4ohMMTLF-ZEMkqQ5tEd908RFZyayLFL2XIkMX2rYkRdTKvSNJR8jed3O1rrpbNwf7daQ2Nc7dRfmLisLzl89_dMfg_URETh2WgyMThMvFTK_4KAAD__yAGQVU">