Issue 171992
Summary [X86][GlobalIsel] GISEL does not have Post-Isel Register Constraining
Labels new issue
Assignees
Reporter mahesh-attarde
    While doing https://github.com/llvm/llvm-project/pull/165848 I encountered case which needs better engineering fix.

GISEL Input 
```
  bb.1.entry:
 %4:gpr(s32) = G_CONSTANT i8 0
    $al = COPY %4(sub_reg:gr32)
    RET 0, implicit $al
```
Exact GISEL Failure:
```
# After InstructionSelect
# Machine code for function isnone_f: IsSSA, TracksLiveness, Legalized, RegBankSelected, Selected
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

*** 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.
```

Idea here is since %4 is 8 bit use of %4 should be constraint to regclass with subregister index, e.g. GR32_ABCD in current case.
We could not constraint it before ISEL because pattern does not have constraint and it would fail to match. DAG did similar work post-isel, post-scheduling in Inst Emitter, All COPY instructions with SUB_REG nodes have imposed constraints. 

We done similar 
DAG Output - Post Isel
```
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
```

Since InstEmitter changes were in generic infra, I tried similar mechanism https://github.com/llvm/llvm-project/pull/165848/commits/daa40d0e09550919598aa8e0af0eb29fd01051bb 

Other solution of doing Pre-Isel Manual handing for G_CONSTANT is still no good considering we defer pattern tables for many tests.

We may need to revisit this problem again since gisel combiner also hits same error.


_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to