<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64394>64394</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64][GlobalISel] Cannot legalize G_ICMP for i192
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nitinjohnraj
</td>
</tr>
</table>
<pre>
The following code snippet crashes the legalizer, since G_ICMP cannot be legalized for s192. The legalizer first widens s192 to s256, after which it fails to legalize the code. Other instructions (like G_ADD) do get legalized for s192.
```
[nraj@host llvm-project]$ cat test.mir
---
name: cmp_sgt_i192
body: |
bb.0.entry:
; CHECK-LABEL: name: cmp_sgt_i64
; CHECK: %xhi:_(s64) = COPY $x10
; CHECK-NEXT: %xlo:_(s64) = COPY $x11
; CHECK-NEXT: %yhi:_(s64) = COPY $x12
; CHECK-NEXT: %ylo:_(s64) = COPY $x13
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(sgt), %xlo(s64), %ylo
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(eq), %xlo(s64), %ylo
; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s64) = G_ICMP intpred(ugt), %xhi(s64), %yhi
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ICMP1]], [[C]]
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[AND]](s64), [[ICMP2]], [[ICMP]]
; CHECK-NEXT: $x10 = COPY [[SELECT]](s64)
; CHECK-NEXT: PseudoRET implicit $x10
%x:_(s192) = G_IMPLICIT_DEF
%y:_(s192) = G_IMPLICIT_DEF
%z:_(s1) = G_ICMP intpred(sgt), %x, %y
%z0:_(s64) = G_ANYEXT %z
$x0 = COPY %z0(s64)
RET_ReallyLR implicit $x0
...
[nraj@sw06 llvm-project]$ /scratch/nraj/gisel/build/x64_riscv_release/bin/llc -mtriple=aarch64 -run-pass=legalizer test.mir -o - --debug
... (Some lines skipped)
=== New Iteration ===
Legalizing: %z:_(s1) = G_ICMP intpred(sgt), %x:_(s192), %y:_
Applying legalizer ruleset to: 132, Tys={s1, s192, }, Opcode=132, MMOs={}
.. no match
.. match
.. .. WidenScalar, 1, s256
.. Widen scalar
.. .. Changing MI: %z:_(s1) = G_ICMP intpred(sgt), %x:_(s192), %y:_
CSEInfo::Recording new MI G_SEXT
CSEInfo::Recording new MI G_SEXT
.. .. Changed MI: %z:_(s1) = G_ICMP intpred(sgt), %4:_(s256), %5:_
.. .. New MI: %4:_(s256) = G_SEXT %x:_(s192)
.. .. New MI: %5:_(s256) = G_SEXT %y:_(s192)
.. No debug info was present
Legalizing: %z:_(s1) = G_ICMP intpred(sgt), %4:_(s256), %5:_
Applying legalizer ruleset to: 132, Tys={s1, s256, }, Opcode=132, MMOs={}
.. no match
.. no match
.. no match
.. match
.. .. NarrowScalar, 1, s64
.. Narrow scalar
LLVM ERROR: unable to legalize instruction: %z:_(s1) = G_ICMP intpred(sgt), %4:_(s256), %5:_ (in function: cmp_sgt_i192)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /scratch/nraj/gisel/build/x64_riscv_release/bin/llc -mtriple=aarch64 -run-pass=legalizer test.mir -o - --debug
1. Running pass 'Function Pass Manager' on module 'test.mir'.
2. Running pass 'Legalizer' on function '@cmp_sgt_i192'
#0 0x0000000001a881a7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x1a881a7)
#1 0x0000000001a85ece llvm::sys::RunSignalHandlers() (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x1a85ece)
#2 0x0000000001a889bf SignalHandler(int) Signals.cpp:0:0
#3 0x00007fda7b5b1cf0 __restore_rt (/lib64/libpthread.so.0+0x12cf0)
#4 0x00007fda7a025aff raise (/lib64/libc.so.6+0x4eaff)
#5 0x00007fda79ff8ea5 abort (/lib64/libc.so.6+0x21ea5)
#6 0x0000000001a05e63 llvm::report_fatal_error(llvm::Twine const&, bool) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x1a05e63)
#7 0x0000000001ce2e94 (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x1ce2e94)
#8 0x0000000001ce3222 llvm::reportGISelFailure(llvm::MachineFunction&, llvm::TargetPassConfig const&, llvm::MachineOptimizationRemarkEmitter&, char const*, llvm::StringRef, llvm::MachineInstr const&) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc
+0x1ce3222)
#9 0x0000000001c7eb9f llvm::Legalizer::runOnMachineFunction(llvm::MachineFunction&) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x1c7eb9f)
#10 0x0000000000ee6e5c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0xee6e5c)
#11 0x00000000013f62b3 llvm::FPPassManager::runOnFunction(llvm::Function&) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x13f62b3)
#12 0x00000000013fdf31 llvm::FPPassManager::runOnModule(llvm::Module&) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x13fdf31)
#13 0x00000000013f6ab6 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x13f6ab6)
#14 0x00000000006a7a78 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#15 0x00000000006a554d main (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x6a554d)
#16 0x00007fda7a011d85 __libc_start_main (/lib64/libc.so.6+0x3ad85)
#17 0x00000000006a1eee _start (/scratch/nraj/gisel/build/x64_riscv_release/bin/llc+0x6a1eee)
Aborted
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWVtz2zoO_jXMC8YeiZJ8eciD48s5mc1tHM9uz5OHkiiLDUV6SapJ-ut3SF0s2WnStD67m3GbhAKBDx9AAIyI1mwnKL1E0RWKFhekNLlUl4IZJr7KXCjy9SKW6evlJqeQSc7lMxM7SGRKQQu231MDiSI6pxpMToHTHeHsO1UIz0EzkVD4Y3s9v32AhAghDcQHmRQyqUD7UzyETXcvZExpA88spUI7ATASNI5GVivJDFXwnLMkB2YgI4xr-7zZ7nBYgEO4NzlVwIQ2qkwMk0IDwhPOniyq2WKB8BRSCTtq3gKFvAXyZmjk1Z_q1-jKkoJCL5faAOffisFeya80MShaIBxCQgwYqs2wYKraMxgMqh8EKSgKZtD5Sor9Vu_MlvlTXAlZuq0QGs-rBYA4HnpDKoyyD5pFABRcwfzP5fwfg5vZ1fLGbmostGpHYS3fCjvdOHrJGQpmW4QnehRaIlCwgPn9w1-AcPjie2-ZuVt-2TTbuXxvu__B9tf3reOPtr9vPXh3u830K5uTlkwcoejKG0xd8OwRsJ8T1XUOM2H2iqb22c4gPLXpWHPRiNdLFuBPYfB_AwT993kw4N_AUPaIyNkJiJx9DGL-GQDz-7vHzexuA2wUwvt55pTP7hafUT-7W_TCUwlaZ2qo1cKHZh-XN8v55jOWqx0d1LXpLqGdmB0BcwndxfbWwbEHu3NWukCPjL3j34OmZSrXyw2wYs9ZwsxpycDRS-OiLWyH7Ll9uLmeX2-2i-WqJ_76OfHvrfhPHtEmHRtycPTdezv8fy2_bCoTHYPhS5c3t_mUqvVys11TwvnrzbrPTdM83P_D4fC4l-hnb_RWL0F4pRNFTJIjvHKyeLVjmnKEV3HJeIrw6mUUbhXTybetopwSTe0zJhBecZ7AoDCK7TlFwYIQleSjEAaqFIM90RoFi0PPbVoWDCQMYDBIaVzuWsC2bz7KggJngmrQT7b1p633KFhUH7ijz3BtqCK23UK7XondVNaY2NV1_PNh7GVJG1S76izM9nv-aieUg2Oq5FRTA8a2DPADbHdtXq33aHxlLc-h0jcHNHYn6n5v5wcULGrp29v7WtwK1JyAkFC40DQL_d-GQ_iXnWAeE8KJm4cqU3aMaWScAOhKorNxnhOxs27cXv9dTM0fl9cis5ygYLamiVSpNSjoM9xeu2r0ZfNZyQ54mv469rCRdxNfsxodsFd27hyA2sbRnrakVmf5mI0faYne1fL6Ay13EtxpASYyCc9Ew15RTYU5U9Z_yMevZn09Uf9e1n-8cHIu7ohS8vn4YDSjaivQOxg3N_-8heV6fb-2DpWCxJz2xv7OmH9-nm39YwKyUrQGepN7kw0PN8vZ4xJ0GRfMAAGbFYrupbKRgNyYvXYjwcoVcpOX8TCRhavV35pvbQ_AK6Z1STXCKyAiBSYSXqb1BcdeuiAmyZNRJKF1R3k0JHmCtCz27UXBG1YXjQcld4oUQNSuLKgwuiLp_6G_-DXEdSmEzWK7FxAer2q24cEu3BJBdvZiOQYpoJBpyamVau9aeFyzgH-g7-ZwOXU6mmjaZyj0-gEdt5NC4IH34jVfPplMfDJ23boqifpVVz88KCaMC8HGxsReNVshRZ63UhtFSYGwO3VMGJeWePLbUUD4ynupgR0mEoQD_wh5RBP6FvJ1KR7ZThD-JxEpp0o7VOcFZ233wOFjWqdxBj0Y7tA5lqplPUz2NrM9969VFNSKxllKxnEU-0nmwXarqDZS0a0ytR-cxXZis9_3JleUpEMth14FECeZ14MXdrUSD0cky0ARpumpusQqGjlFISVZ1lMUdRVNs2xCSQQklm_h6ijCPiVRT9GoT5gX0VHQiWZVZ7YZMYRvqVJS9TJw88wEhUQKbeoMjKXkZ46yw9QDPe6BTiim0_CMFiuFPYuTI4sBxviEpj-uHylfEcZL1T-otyTJmaBN7amp6tBI1I4aW5HmUmRs12P0RM393rCCfXfT8JoWRD0tC2aMTW23IcmJajTM-hoejWJit6bZm4qvbbfr2D5TFKtpvmbWEtdjdtpndkzjadaBdqivFdGluBcndH5A9TmzsQJ4uKTgwO-Vco_SEY2SU3IbRA-uibW-vOnE34W-wtYD36_mQTbCcff8rx4s3qZN_o9g17B6uPER7jQL_J_AfetafD9j6qWzY7aQepiDY65JPOpgtnNN8lq3_QP662LPWw_-O8gtsB7ysJfiIzIm4wkkstgzTltKbd1xFeeo6Ngpey6FoS9NWeE8Oe261k50ZCeKwhQKwsT53KuU9rwb9buy76eTCLZb2zq32hBlth0IbzfWgKSTqKd0fOSKTymFSt05nbFqW7szOwDQ9Oglw0V6GaTTYEou6KU_mvreZDKaRhf5ZRj7nhfRZJykeBphOskyn0SjaDzxs3AypRfsEns48CZe4E8iP4iGk6k39qMgmU6iYJxEExR6tCCMD220h1LtLtzt4nIUBtPwgpOYcu1eA2Fsr_buIcIYRYsLdenuJXG50yj0ONNGH7QYZrh7fzSbufnf_SXx6g8uY8Jtk0XRAubVy5_2rlbfwzKpwE7bF6Xil79-OXIe_CcAAP__zIGZFg">