[PATCH] D152832: [AMDGPU] Fix register class for a subreg in GCNRewritePartialRegUses.

Valery Pykhtin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 4 15:09:10 PDT 2023


vpykhtin added inline comments.


================
Comment at: llvm/lib/Target/AMDGPU/GCNRewritePartialRegUses.cpp:317
   if (CoverSubreg != AMDGPU::NoSubRegister)
-    return getRegClassWithShiftedSubregs(RC, Offset, CoverSubreg, SubRegs);
+    return getRegClassWithShiftedSubregs(RC, Offset, End - Offset, CoverSubreg,
+                                         SubRegs);
----------------
barannikov88 wrote:
> vpykhtin wrote:
> > arsenm wrote:
> > > Why do you need the size? In the unknown case you still have a class from the vreg 
> > I had the following problem with that, given a test:
> > ```
> > name: test_subregs_unknown_regclass_from_instructions_sgpr_1024_to_sgpr_64
> > tracksRegLiveness: true
> > registers:
> >   - { id: 0, class: sgpr_1024 }
> > body:             |
> >   bb.0:
> >     %1:vreg_64 = COPY undef %0.sub4_sub5
> > ```
> > %0.sub4_sub5 doesn't have known regclass and getSubRegisterClass returns 
> >   sgpr_1024 : sub4_sub5 -> SReg_1_with_sub0_and_SReg_1_with_lo16_in_SGPR_LO16
> > 
> > //SReg_1_with_sub0_and_SReg_1_with_lo16_in_SGPR_LO16// has the following subclasses (in tablegen generated order):
> >    VReg_1
> >    SGPR_64
> >    CCR_SGPR_64
> >    Gfx_CCR_SGPR_64
> > 
> > If I don't check the size it would select VReg_1 which is invalid.
> > 
> > I haven't followed all the consequences why tablegen generated this artificial subclass, but I know that if a class contains registers of different size tablegen puts subclass with smaller registers first, that is why VReg_1 precedes SGPR_64.
> FWIW all registers in a register class must have the same (spill) size.
> But VReg_1 shouldn't be a sublass of any class at all. This looks like a peculiar effect of a class containing no registers on tablegen.
> 
This sounds like tablegen should be fixed instead.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D152832/new/

https://reviews.llvm.org/D152832



More information about the llvm-commits mailing list