<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57320>57320</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
RISCV32gc code gen for if (a > b && c > d) has too many xori
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
apinski-cavium
</td>
</tr>
</table>
<pre>
```
int g(void);
int f(int a, int b, int c, int d)
{
if (a > b && c > d)
return g();
return 1;
}
```
Produces:
```
f: # @f
slt a0, a1, a0
xori a0, a0, 1
slt a1, a3, a2
xori a1, a1, 1
or a0, a0, a1
bnez a0, .LBB0_2
tail g
.LBB0_2:
li a0, 1
ret
```
But the xori is not needed if beqz is used instead. Even if it was needed, there should have been only one as it can be gone after the or instead.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNUk1v2zAM_TXyhahhy1_xwYemaYEBOwwbsOsgW7KtTbEySU6X_vpRSjynQVtMEESKfHwkJbaanxpSJped7EhyLycHA6Gbo5ac0Jpk27N99fbo9ZIR-gBeaRelW5QQeQ6rLvEAsgeMZECyR2hRLXFDF64rHnAZ4WYzhSquK_jnSNeiqt1Fed3EF6P53AlLsvs3_T064L8WoRmQPOnX6vyyygXJEt8xS8OZvMb80UZeYcKZvkNzJsjCSd-hSddUNzTaANxmYjeYdhIvKyb-vN0mP24yOSaVl8PZvGCWJ1xgSl5nu0mDP_Tmg29nB24U526khUk7mITggvuxaMXvF2-drb9P1gnGY3g8isl7pYNnZi9wnxOJjAA76llxGNlRIAFC9aROeAhAMMZ0bEI7DMHSO2FCAfhWS4JINGlZpnST50UV8SbjdVazyEmnRPP107eH7xkdOug0Rxbk733sxzOM1VhwWsOeTafQbDQb1YzOHcIs0ifcg3Tj3Mad3uNFqeMi7g5G_xSdw6u0dsbppU9FldEkGpu-LGhedZzWKU9yWvvddqISCc843ZSRYq1QtiHFllA6iWcIFKiTYhfJhiaUJhuapXWRp1Xci1z09aZgacVZXjKccLHH7499HbE2Q2SaUFI7DxadSlpnVyezVg74HyEd8rPZjdo07IBP-0vedewo530UKmhCB38BV8wv3w">