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

    <tr>
        <th>Summary</th>
        <td>
            funnel shift related miscompile by ARM64 backend with global isel
        </td>
    </tr>

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

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

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

<pre>
    this function is getting miscompiled:
```
declare i9 @llvm.fshr.i9(i9, i9, i9) #0

define i9 @rotr_zero_shift_guard_swapped(i9 %0, i9 %1) {
  %3 = icmp ne i9 %1, 0
  %4 = call i9 @llvm.fshr.i9(i9 %0, i9 %0, i9 %1)
  %5 = select i1 %3, i9 %4, i9 %0
  ret i9 %5
}

attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
```

we can illustrate using this driver:
```
unsigned rotr_zero_shift_guard_swapped(unsigned, unsigned);

#include <stdio.h>

int main(void) {
  printf("%u\n", 511 & rotr_zero_shift_guard_swapped(50, 273));
}
```

result:
```
Johns-MacBook-Pro:~ regehr$ llc foo.ll && clang foo.c foo.s && ./a.out
134
Johns-MacBook-Pro:~ regehr$ llc -global-isel foo.ll && clang foo.c foo.s && ./a.out
268
Johns-MacBook-Pro:~ regehr$ 
```

cc @ornata @nunoplopes @ryan-berger @nbushehri @aemerson 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydVNuOmzAQ_Rp4sYKIgZA88JDL7kOlSlV_IDJmAHcdG_myUfr1HTukSVfa3bYSwmN7fObMtdXdpXGjsKT3ijuhFUF5AOeEGshJWK5Pk5DQJcU2yQ9Jvk1W-fzFbQdcMgNEbEhS5lK-nrLejiYTm4Suw29P7n_UocX88Pa8F-r22mhnjj_B6KMdRe-Og2emO9ozmyYkEODwfZVf0YK4jJD17opFwlFBkuJABD9NZMaNanuSPyiVUYkzKd_j_cbQG5sPUFWEsiCBOyKWkcJduXyEmB8ZcPNRNUeiPjyGhDlnROsd2BitiI8-EqUD4ZbxFxR7A4CLvSiOi1dnoTpEZp3S6LadgHvJHGslkLOQEm16o8jd0p9JvP7PgCHB_EvprTPMAfE2VEEsj86IVzDvVYFXVgwKkMInKbwphrjc5U1S7B6ZoN9Ccek7QO_31nVCZ2NSPD3qCOXIiQmFoK9adG8qYTJ43-NdQilG2ifVXkVxT6plyNLqU6rXpNO6CPweKX4YRAPWS_denL7oUdnFV8Z3Wr8svhkdFOsnzNwAo0loSaTkpNc6w9JEkoEn9hcmIZxdb-ztIkvoM8u0d1fsZVH-i5HFIHXL5EJg7f6nRbpa_63FDyLGeehAbRTWa5CUV3qSegr1jzPhwtSiBTOAiZettyNiirBhcAJjcWSlXVN0m2LDUiechAZnmUKvYl6RBHYCluZ9mJH2Qrbfv65KEroJsHPOwo3kGhASApJ6I5vRuckGT-gzfgOq-DZDCNyEeTEvi8noH9j8uBXWerAoVKvVqkzHZt1VNWXA6brf9EVVrMuOl5u6Z3nbdrxfp5K1IG2TVDsszpkMWtxuDR9X5VywuER7xZbrDiOq7ue_fWJhdIfz6pCKhuaU5jVdUopFUWdtX1YAbcsqWq-LJcXQAbaOzOLY02ZITRNdaf1gwzQU1tn7JbOxTyHSRHzm3ahNc01uGp1uose_AKKt2x0">