<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61538>61538</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] optimization of "(1 + 2 * a * b > 0) ? a : a * b"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Test code:
```c
int foo(int a, int b)
{
return (1 + 2 * a * b > 0) ? a : a * b ;
}
```
clang
```asm
foo(int, int): // @foo(int, int)
mul w8, w0, w1
mov w9, #1 // =0x1
orr w8, w9, w8, lsl #1
cmp w8, #1
csinc w8, w1, wzr, lt
mul w0, w8, w0
ret
```
gcc
```asm
foo(int, int):
mul w1, w0, w1
cmp w1, 0
csel w0, w1, w0, lt
ret
```
https://godbolt.org/z/b79ehqG77
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU1Fy2yAQPc3qh4kHFixLH_qw66oX6AUQwjYtEi6guM3pOyA5cTxOZqLRLAv72H1vmZUhmOOodQPrHaz3hZziyfnm95P03l1C0bn-X_NTh0iU6zXwLdA90C2UdP7VvDdjJAfnAKvkScBvJDkdYL1c2OxmhxBCvI6THwlgxQjgjiAB3BKZbUeAfycUsCbA23TIb0O7a7r9HZFlm62ycjzexWUY5pNXmgvJRJFvCWAL2BIQ9BHglXr6hsnm9VIlxIVmyxbM4J7nYJ2OATkjH37XmnxP_7L3NZz3tzVystm3wea07_FqON_gH8SDGdVbPpbti88J45X6VRd9q3ZZGpve7JOOH5X6Wr8_6Ch70NF7hRlD7-Vpe0P9Js2rus8FnGI8h8QrP8nR9Z2zceX8EbB9AWy7Ta1Pf35sNkXf8L7mtSx0w8pNzRkTTBSnpi8l7XjNDlUleSc62gsm1locqqpkTGNhGqTIKUfKGHIuVhQVyloJzRiiLnsQVA_S2JW1z0OqXZgQJt2UbM2rwspO23CdU98k0FM3HQMIak2I4e1aNNHmid5uvTqVAtZ74s7RDOZFRuNG4g4EEL88f4BYTN42d80y8TR1K-UGwDZxWJans3e_tIqAbdYRANss5X8AAAD__8N6IxY">