<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76318>76318</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang is suboptimal for `(a != b) ? a + b : a + a`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Test case:
https://godbolt.org/z/8Tb1jrPaq
```cpp
int f(int a, int b) { return (a != b) ? a + b : a + a; }
```
This test case is based on the function `f_plus` in the following program:
https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-same-1.c
It is also interesting to note that GCC optimizations differ between `f_plus` and `g_plus`, as shown below.
https://godbolt.org/z/1hTx4jdxY
```cpp
int f_plus(int a, int b)
{
if (a != b) return a + b;
return a + a;
}
int g_plus(int a, int b)
{
if (b != a) return a + b;
return a + a;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVEGPmzwQ_TXDZUQEhuDkwGGzEZ--Ww-59FSNjQFvDaa2abb76ysnZLfdtqutKkWx582A3xu_gbzX_aRUDdsDbI8JLWGwrv6cknP27BNh22_1SfmAkryC4g6yI2R3QwizjxFrgDW9bYU1YWNdD6x5AtbsTiJ_cB_oy7Ucquz6k_N8RfQUsAO2iysBu8e4EcD2CPyAToXFTQhsRwgsh-K45ooGI3JAgVDcrXuC4oDAj6_OWsPL_2nQHsNNBmqPgrxq0U4YBoXdMsmg7YRQZd2n2Sweqgz1mrTG2LOeepyd7R2Nf-qCDsMiNtKOMZAyHbVz1l0DYI0wVgBrRvJBvaCRlF90UFdk08YWBqdU6j0Ba-ZBp3YOqadRpflG_qjq_xCVkPE2tk855UOkGSxONigMAwX87_4e7Rz0qJ8oSvTY6q5TDoUKZ6VeSaapjUB_A-LNkEc_2POEQhl73rzPAPlweiwf2sePbxrgesxvXLA-xQ_XDaLufnXD6pLVEFA8F_-UoOfEi0WeGfR_y0DcGNC_Mbj1I2nrot0Xe0pUnfOsKLMsr8pkqLngkvOuEpkUSsjtjnY5k5IR41VRcJHommWsyBkrs6pkZbmRW-Kct3vaMrkXagtlpkbSZmPM1zFeTaK9X1TNqyLfJYaEMv4y9oxJQ1MPjMUvgKtjfSqW3kOZGe2Df3lD0MGo-lIerecXcfEWGeysw4th3jmyVZYsztRvjFA8dF3S2dkHJQOw5qLBA2suMr4HAAD___IIY9U">