<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">