<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/90532>90532</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            miscompile of non-canonical IR by AArch64 global isel backend
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            llvm:codegen,
            miscompilation,
            llvm:globalisel
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          regehr
      </td>
    </tr>
</table>

<pre>
    here's an odd-looking little fellow:
```llvm
define i1 @f(i1 %V) {
  %C1 = fcmp false double 0.000000e+00, 0.000000e+00
  %brmerge = select i1 %C1, i1 true, i1 %V
  br i1 %brmerge, label %common.ret, label %SW_C

common.ret:    
  %common.ret.op = phi i1 [ %C, %SW_C ], [ false, %0 ]
  ret i1 %common.ret.op

SW_C:       
  %Y = icmp ult i1 false, false
  %C = icmp ule i1 %Y, false
  br label %common.ret
}
```
the SDAG backend (correctly) compiles it to this:
```
_f:            
        mov     w8, w0
        mov     w0, wzr
        cbnz    wzr, LBB0_3
        tbnz    w8, #0, LBB0_3
        mov     w0, #1 
LBB0_3:
        ret
```
but global isel gives:
```
_f: 
        movi    d0, #0000000000000000
        fcmp    d0, #0.0
        b.nv    LBB0_3
        tbnz    w0, #0, LBB0_3
        mov     w0, #1 
        ret
LBB0_3:
        mov     w0, wzr
        ret
```
which I believe is incorrect. to see this, I'll give Alive's work showing why the function should return 1 when invoked as `f(0)`:
```
i1 %C1 = #x0 (0)
i1 %brmerge = #x0 (0)
  >> Jump to %SW_C
i1 %Y = #x0 (0)
i1 %C = #x1 (1)
  >> Jump to %common.ret
i1 %common.ret.op = #x1 (1)
```
but on the other hand, if we use this driver:
```c
#include <stdio.h>

unsigned f(unsigned);

int main(void) {
 printf("%x\n", f(0));
}
```
then we get:
```
Johns-MacBook-Pro:reduce regehr$ ~/llvm-project/for-alive/bin/llc foo.ll
Johns-MacBook-Pro:reduce regehr$ clang foo.s driver.c && ./a.out
1
Johns-MacBook-Pro:reduce regehr$ ~/llvm-project/for-alive/bin/llc foo.ll -global-isel
Johns-MacBook-Pro:reduce regehr$ clang foo.s driver.c && ./a.out
0
Johns-MacBook-Pro:reduce regehr$ 
```

cc @DataCorrupted 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2P2zgP_jXKhYghS3ESH3LIR_OixbvAYgvsoqfClmhbO7IUyHLS6WF_-0KyJ-PMJF300GAwsEiKeviQIlV0naoN4oZkO5IdZkXvG-s2Dmts3Ky08nnToEPCVh0UBqyUc23tkzI1aOW9RqhQa3shfEvogdAtWdLhT-tzO4gkVsogqBTIglaErcMXy_4kLAey2g1GEET7FAg_QCXaE1SF7hCk7UuNQBMaf0jYjlLC9m8lrz5K16KrMTrqUKPwMJy3T8M-lYJ3PY6fEca4t3SjZPQQTHRRog4yYdvWmsShvxF__uvrfow7_p-Y8S0AwATYqy6xpwjv1Kh4ZLaL-ILn0SeQ7BCX2W4gYtTRqBh9OnwJ7cb1FE_ENyC5BfMlAlCB6F5HN9djho9JUqamOJ745Z1l6e6yNYBZHd5Ux7D0DcLnw_Z_UBbiCY0EwtbCOofC6-dQHsK2J6WxA-XBW_CN6t5X2rD8Wr0GOomW0Ly1Z0LzyzpAvtC34lhNl-_uKhel-R4U313Q_H-3o1_5VelH5XpICKd3bKaOCePpiGS0usKn-Ss_t6GUvYda27LQoDrUUKsz_kfc08MVobl8OZ2--V0NwyW7MUxedWViQggPYqc_H_s02Pc8PMrEI34ujRINfIQStcIzgupAmbFuklAnHeJQK2wPHwlb6YFD2Gp1HnrZxbon6Bp7CZ3s0jxDKMWqN8Ira4Ki1zJcsN4ZSOHSoAFlzvYJJRQdkGXsY5SwPIB6kJmXthPvD2H8G4WXTRP9tF_dMQIg_APhH-BT355CbDddZ7yMPz5hf1WH5Tr9oe-3V_dOg3nk7k4VWxOJtb5BB01hZOy7FVwQ-m7IEUinzujekyjGNePKCN3LQNG-81LZpAm4J22uN3GKSQhZeVkEXHw3NVPGQ1soQ9j6bJW8nT8np4wP-wljhGXfSLY38XMP11xPPT5uaSaEV8cRcNfkk21MN_-tEDtrn-a_O0v41qHsBcIwdwlbwD-EHcMInZ-c_RuFJ-xYWTcvhgo-liGKo9YCKmsTrX_Cs9CFqeO2F-4TAYQtCVtCQtixSGw_Jj_9dYBhPnS4eehwvwb9z9B9N1HjTBfh3XIofLG3zvUnjxJmcsNlzvNihpt0lS4WnK5SPms2GeNMCCqyoszXvOIZLrK1XK8ynhdpzuRMbRhlC7pgOWOLLOWJWC5X-QpZvpDlWlJOFhTbQukkkJlYV89U1_W4yWnG2SyO2C6-1hgbpybh2-3WiWa5GOqVMBYfX3wrrMQazVXcqm6YqEVoc2-th4TEfDAWHoNuExNa9nVHFlSrznevqLzyGjdXjwi2AmPNXBTGGiUKDR__gPIZRmg3A20EPuud3jTen-JwY0fCjrXyTV8mwrZjOb2vqkhHR9gxMvJvAAAA__-x5_-0">