[llvm] [X86][GlobalIsel] Support G_IS_FPCLASS (PR #162232)

via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 15 10:05:03 PDT 2025


mahesh-attarde wrote:

> @mahesh-attarde please can you investigate the EXPENSIVE_CHECKS build failures?
Failure reported here is related to G_CONSTANT i8 0. GIR.
During ISEL it was selected with MOV32r0, further 8bit Reg EXTRACT using pattern `0:{ *:[i8] }  =>  (EXTRACT_SUBREG:{ *:[i8] } (MOV32r0:{ *:[i32] }:{ *:[i32] }), sub_8bit:{ *:[i32] })`. It is same pattern used from DAG. Change here is about regbank (gr32) that did not same as DAG(gr32_abcd).

GISEL LOG
```
# After InstructionSelect
# Machine code for function isnone_f: IsSSA, TracksLiveness, Legalized, RegBankSelected, Selected
Frame Objects:
  fi#-1: size=4, align=16, fixed, at location [SP+4]
save/restore points:
save points are empty
restore points are empty

bb.1.entry:
  %5:gr32 = MOV32r0 implicit-def dead $eflags
  %4:gr8 = COPY %5.sub_8bit:gr32
  $al = COPY %4:gr8
  RET 0, implicit $al

# End machine code for function isnone_f.

*** Bad machine code: Invalid register class for subregister index ***
- function:    isnone_f
- basic block: %bb.1 entry (0x5e1917110858)
- instruction: %4:gr8 = COPY %5.sub_8bit:gr32
- operand 1:   %5.sub_8bit:gr32
Register class GR32 does not fully support subreg index sub_8bit
LLVM ERROR: Found 1 machine code errors.
```
DAG LOG
```
bb.0.entry:
  %0:gr32_abcd = MOV32r0 implicit-def dead $eflags
  %1:gr8 = COPY %0.sub_8bit:gr32_abcd
  $al = COPY %1:gr8
  RET 0, $al
```
I tried few approaches to deal with same, those ended up with regressions on DAG. I this takes up more time, I will submit disabling for i686 RUN and continue fixing it. 


https://github.com/llvm/llvm-project/pull/162232


More information about the llvm-commits mailing list