<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58982>58982</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
optimize access of temporary array of 2 elements
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rotateright
</td>
</tr>
</table>
<pre>
I was curious if we could optimize code as suggested in https://reviews.llvm.org/D137688 .
I'm not sure which passes are responsible, but it's a mess on a reduced example:
```
int src(int i, int x, int y) {
if (i != 0 && i != 1)
__builtin_unreachable();
int a[2] = {x, y};
return a[1 - i];
}
int foo(int i, int x, int y) {
if (i != 0 && i != 1)
__builtin_unreachable();
int a[2] = {x, y};
return i ? a[0] : a[1];
}
```
Bad in IR:
https://alive2.llvm.org/ce/z/tqrgci
And that carries over to bad asm:
https://godbolt.org/z/exc56dW4z
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVVE2PmzAQ_TXmMtoIzGcOHJJGkXLtpceVMQO4Akz9kWz213dwstls1f6ACmPGw_N7M3iGRrfX-gQXYUF6o7S3oDq4IEjtxxb04tSk3tdli0Ag6_sercMW1AyDc4tl6Y7xIw2DZ4UXuxnH87TRpifXIUnLoqpgw-IDi3cnxssJZu2IxiBcBiUHWIS1aEGQw6Bd9GxVMyLj36DxDpSjPfQWJrQW9EyWwdZLCgDfxLQQkvQD-30u4vsISzWTmJGMV6ulVtrVePswroxvgZX7GxrW5FcsTQlLDxCTUdCAhyehDR9ggNfXxqvRqfnVzwaFHESIvVpB6f45LghyguV7zvIDrFQkG-K4svJAaIAPpEHnzRzACbxQ1Pnhk42wT7Qraaf1f5kfaabHsCW-bdndUv57ul_P9TbvRajD0_dHEXwtSTGqM_LnipQU_fGdbvfL9FI9k-3mFtwgHEhhjKKS1Gc04DQ0pCLs9A-NXreNHt2df6XGN5kX7Y_sPcI6KYoqS_OkTKO2TtttuhWRU27E-tFaQspQ2x04nBZthLlSNxhxXV0ccMQJZ2ch8mas_9BWbvDNRuqJFmuW98fLYvRPlNQ7R2WtR0tGXm0rHg01z4uuzOJuW6bZVmJTlLzLUWBbtl1XpWU0igZHW9NJMM5nvECgIJvOJVI1jzlPkiSji-fpJhN53okmzXicxnnbsSzGSajx8dEjU4eQGt9bejkq6z7_ERE1v-pnxCBH_MK7QZvaaCccGtUPLgrydQj_NwlRWyE">