[PATCH] D137542: [AMDGPU] Use aperture registers instead of S_GETREG
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 23 10:23:27 PST 2022
arsenm added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp:149-150
+ // register with a reference to its artificial HI 32 bits.
+ if (IsApertureRegister64(SrcReg))
+ return RBI.constrainGenericRegister(DstReg, AMDGPU::SGPR_64RegClass, *MRI);
+
----------------
Pierre-vh wrote:
> arsenm wrote:
> > Pierre-vh wrote:
> > > arsenm wrote:
> > > > You shouldn't need to special case this (also note there's no equivalent for the DAG). Either it needs to belong to a different class from SReg_64, or you need to reserve the high bits
> > > > or you need to reserve the high bits
> > > Aren't they reserved with `reserveRegisterTuples`?
> > >
> > > If I create a different class, do you mean I should exclude those aperture registers from SReg and create a superclass with both SReg and the apertures? I'm not sure I understand how the class will help if I shouldn't special-case the uses of those aperture registers
> > If the reserve didn't do it, then yes. Using different classes is the correct way to represent use restrictions. Really what we want is a class without the sub1 subregister, but has a hack we're trying to avoid that, so a class that excludes the aperture regs is the next best thing.
> >
> > Not sure if you really need the reserve after that.
> Do I need to do something similar to SRegOrLds, then?
>
> Also:
>
> - Do I need to do this for 32 bit apertures or 64 bit apertures only?
> - If I remove Aperture registers from SReg and create a superclass, won't I need to update instruction definitions to use that superclass instead of SReg? Won't that require a lot of changes?
>
> And I suppose all those changes should be in a separate patch, right?
>
> Do I need to do this for 32 bit apertures or 64 bit apertures only?
Well the 32-bit register cases are purely artificial. I'd assume these are included only by the broadest set of SGPRs (ideally wouldn't be in any allocatable set)
> If I remove Aperture registers from SReg and create a superclass, won't I need to update instruction definitions to use that superclass instead of SReg? Won't that require a lot of changes?
This is a question of naming. I'd probably lean towards leaving the SReg name/operands as-is, and introducing an allocatable subclass that excludes them (e.g. like SReg_64_XEXEC)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137542/new/
https://reviews.llvm.org/D137542
More information about the llvm-commits
mailing list