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