<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/84432>84432</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: x*(x||(b&&c)) => x
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ZY546
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/sYzY84En5
```cpp
int a,b;
int c;
void func(int x){
a=x*(x||(b&&c));
}
```
Clang -O3:
```asm
func(int): # @func(int)
mov eax, 1
test edi, edi
je .LBB0_1
imul eax, edi
mov dword ptr [rip + a], eax
ret
.LBB0_1: # %lor.rhs
cmp dword ptr [rip + b], 0
setne al
cmp dword ptr [rip + c], 0
setne cl
and cl, al
movzx eax, cl
imul eax, edi
mov dword ptr [rip + a], eax
ret
```
Expected code (GCC -O3)
```asm
func(int):
mov DWORD PTR a[rip], edi
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVN1u2zoMfhr6RmigUP7LhS-SuDk356AHxYChuxlkSUlUyJZhKamXpx9kO83iYuhmGCLEn48fKYLcOX1olCog2UBSRvzkj7Yrvr0kcRpVVv4ogJZA10fvWwdsDbgD3B2srKzxC9sdAHcXwJ17ubzk8WOTjO7TmdLxF207anTjCQfcVsA2N414v52tlmR_agRgHiw94AqyyUg4sLIHXAPmPWTb8GNeAaaAqQieuHpHgqyckRivW8ObA3l4YqGYewfu6lFzIzAgrgkgIxDTe_3Iafpqex6k4j3glizvrV45T5TUwRTEnfFVjXLx72ZDv88idX0yv-Degq8J5ZvtJGl9RyDZdLolgBvCISkHd97fw3XKj4prsmtxmBjbLbqju_cXdfv7LNWUZeoscco3oRZu_gJEzECmb8QSMyTeyBHRhJB5ntqeL_2tV_PgoZUf-jh7vz9s53sfZ9M1no99q4RXkggrFQHM_9luh5G7Ts3nIzd75fLr03NJ_v_yHLgEXldG8zo-EotkweSKrXikimVGV3mWImJ0LOIqE5mIl0ruqaR8T2WWVhWyZaqyvRQs0gVSjCmjOU1YRnGxFFwiy7nM0yRlNIWYqpprszDmXIdlEGnnTqrI45hhZHiljBsWC2Kj3shgBMSwZ7oixDxUp4ODmBrtvLuheO2NKv7TzilJbOt1rS_ca9uEcf1kARBgJbBH0kenzhSztaX98VQthK0BdyHbJB7azr4q4QF3A0cHuBtq-BkAAP__ipBa2g">