From c275dd02676dd88a4db1877c8e10cef1089808fc Mon Sep 17 00:00:00 2001 From: Sergei Barannikov Date: Thu, 13 Nov 2025 18:11:31 +0300 Subject: [PATCH 1/2] [AMDGPU] Use VirtRegOrUnit (NFC) This synchronizes the copy & paste with recent changes to RPTracker. --- llvm/lib/Target/AMDGPU/GCNRegPressure.cpp | 19 ++++++++++--------- llvm/lib/Target/AMDGPU/GCNRegPressure.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp b/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp index 0c5e3d08378006..7f6257b32e483e 100644 --- a/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp +++ b/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp @@ -313,11 +313,11 @@ collectVirtualRegUses(SmallVectorImpl &VRegMaskOrUnits, /// Mostly copy/paste from CodeGen/RegisterPressure.cpp static LaneBitmask getLanesWithProperty( const LiveIntervals &LIS, const MachineRegisterInfo &MRI, - bool TrackLaneMasks, Register RegUnit, SlotIndex Pos, + bool TrackLaneMasks, VirtRegOrUnit VRegOrUnit, SlotIndex Pos, LaneBitmask SafeDefault, function_ref Property) { - if (RegUnit.isVirtual()) { - const LiveInterval &LI = LIS.getInterval(RegUnit); + if (VRegOrUnit.isVirtualReg()) { + const LiveInterval &LI = LIS.getInterval(VRegOrUnit.asVirtualReg()); LaneBitmask Result; if (TrackLaneMasks && LI.hasSubRanges()) { for (const LiveInterval::SubRange &SR : LI.subranges()) { @@ -325,14 +325,15 @@ static LaneBitmask getLanesWithProperty( Result |= SR.LaneMask; } } else if (Property(LI, Pos)) { - Result = TrackLaneMasks ? MRI.getMaxLaneMaskForVReg(RegUnit) - : LaneBitmask::getAll(); + Result = TrackLaneMasks + ? MRI.getMaxLaneMaskForVReg(VRegOrUnit.asVirtualReg()) + : LaneBitmask::getAll(); } return Result; } - const LiveRange *LR = LIS.getCachedRegUnit(RegUnit); + const LiveRange *LR = LIS.getCachedRegUnit(VRegOrUnit.asMCRegUnit()); if (LR == nullptr) return SafeDefault; return Property(*LR, Pos) ? LaneBitmask::getAll() : LaneBitmask::getNone(); @@ -503,10 +504,10 @@ void GCNRPTracker::reset(const MachineRegisterInfo &MRI_, } /// Mostly copy/paste from CodeGen/RegisterPressure.cpp -LaneBitmask GCNRPTracker::getLastUsedLanes(Register RegUnit, +LaneBitmask GCNRPTracker::getLastUsedLanes(VirtRegOrUnit VRegOrUnit, SlotIndex Pos) const { return getLanesWithProperty( - LIS, *MRI, true, RegUnit, Pos.getBaseIndex(), LaneBitmask::getNone(), + LIS, *MRI, true, VRegOrUnit, Pos.getBaseIndex(), LaneBitmask::getNone(), [](const LiveRange &LR, SlotIndex Pos) { const LiveRange::Segment *S = LR.getSegmentContaining(Pos); return S != nullptr && S->end == Pos.getRegSlot(); @@ -752,7 +753,7 @@ GCNDownwardRPTracker::bumpDownwardPressure(const MachineInstr *MI, if (!Use.VRegOrUnit.isVirtualReg()) continue; Register Reg = Use.VRegOrUnit.asVirtualReg(); - LaneBitmask LastUseMask = getLastUsedLanes(Reg, SlotIdx); + LaneBitmask LastUseMask = getLastUsedLanes(Use.VRegOrUnit, SlotIdx); if (LastUseMask.none()) continue; // The LastUseMask is queried from the liveness information of instruction diff --git a/llvm/lib/Target/AMDGPU/GCNRegPressure.h b/llvm/lib/Target/AMDGPU/GCNRegPressure.h index 4b22c68ef01c59..ea0e2bdcb71229 100644 --- a/llvm/lib/Target/AMDGPU/GCNRegPressure.h +++ b/llvm/lib/Target/AMDGPU/GCNRegPressure.h @@ -292,7 +292,7 @@ class GCNRPTracker { /// Mostly copy/paste from CodeGen/RegisterPressure.cpp void bumpDeadDefs(ArrayRef DeadDefs); - LaneBitmask getLastUsedLanes(Register RegUnit, SlotIndex Pos) const; + LaneBitmask getLastUsedLanes(VirtRegOrUnit VRegOrUnit, SlotIndex Pos) const; public: // reset tracker and set live register set to the specified value. From 4e1c05fe7e71284139fa39e90b12bdb75d35e1cd Mon Sep 17 00:00:00 2001 From: Sergei Barannikov Date: Fri, 14 Nov 2025 03:13:46 +0300 Subject: [PATCH 2/2] Delete dead code instead --- llvm/lib/Target/AMDGPU/GCNRegPressure.cpp | 39 +++++++++-------------- llvm/lib/Target/AMDGPU/GCNRegPressure.h | 2 +- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp b/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp index 7f6257b32e483e..88477bbd7480f7 100644 --- a/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp +++ b/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp @@ -313,30 +313,22 @@ collectVirtualRegUses(SmallVectorImpl &VRegMaskOrUnits, /// Mostly copy/paste from CodeGen/RegisterPressure.cpp static LaneBitmask getLanesWithProperty( const LiveIntervals &LIS, const MachineRegisterInfo &MRI, - bool TrackLaneMasks, VirtRegOrUnit VRegOrUnit, SlotIndex Pos, - LaneBitmask SafeDefault, + bool TrackLaneMasks, Register Reg, SlotIndex Pos, function_ref Property) { - if (VRegOrUnit.isVirtualReg()) { - const LiveInterval &LI = LIS.getInterval(VRegOrUnit.asVirtualReg()); - LaneBitmask Result; - if (TrackLaneMasks && LI.hasSubRanges()) { - for (const LiveInterval::SubRange &SR : LI.subranges()) { - if (Property(SR, Pos)) - Result |= SR.LaneMask; - } - } else if (Property(LI, Pos)) { - Result = TrackLaneMasks - ? MRI.getMaxLaneMaskForVReg(VRegOrUnit.asVirtualReg()) - : LaneBitmask::getAll(); + assert(Reg.isVirtual()); + const LiveInterval &LI = LIS.getInterval(Reg); + LaneBitmask Result; + if (TrackLaneMasks && LI.hasSubRanges()) { + for (const LiveInterval::SubRange &SR : LI.subranges()) { + if (Property(SR, Pos)) + Result |= SR.LaneMask; } - - return Result; + } else if (Property(LI, Pos)) { + Result = + TrackLaneMasks ? MRI.getMaxLaneMaskForVReg(Reg) : LaneBitmask::getAll(); } - const LiveRange *LR = LIS.getCachedRegUnit(VRegOrUnit.asMCRegUnit()); - if (LR == nullptr) - return SafeDefault; - return Property(*LR, Pos) ? LaneBitmask::getAll() : LaneBitmask::getNone(); + return Result; } /// Mostly copy/paste from CodeGen/RegisterPressure.cpp @@ -504,10 +496,9 @@ void GCNRPTracker::reset(const MachineRegisterInfo &MRI_, } /// Mostly copy/paste from CodeGen/RegisterPressure.cpp -LaneBitmask GCNRPTracker::getLastUsedLanes(VirtRegOrUnit VRegOrUnit, - SlotIndex Pos) const { +LaneBitmask GCNRPTracker::getLastUsedLanes(Register Reg, SlotIndex Pos) const { return getLanesWithProperty( - LIS, *MRI, true, VRegOrUnit, Pos.getBaseIndex(), LaneBitmask::getNone(), + LIS, *MRI, true, Reg, Pos.getBaseIndex(), [](const LiveRange &LR, SlotIndex Pos) { const LiveRange::Segment *S = LR.getSegmentContaining(Pos); return S != nullptr && S->end == Pos.getRegSlot(); @@ -753,7 +744,7 @@ GCNDownwardRPTracker::bumpDownwardPressure(const MachineInstr *MI, if (!Use.VRegOrUnit.isVirtualReg()) continue; Register Reg = Use.VRegOrUnit.asVirtualReg(); - LaneBitmask LastUseMask = getLastUsedLanes(Use.VRegOrUnit, SlotIdx); + LaneBitmask LastUseMask = getLastUsedLanes(Reg, SlotIdx); if (LastUseMask.none()) continue; // The LastUseMask is queried from the liveness information of instruction diff --git a/llvm/lib/Target/AMDGPU/GCNRegPressure.h b/llvm/lib/Target/AMDGPU/GCNRegPressure.h index ea0e2bdcb71229..222e81d5f8935f 100644 --- a/llvm/lib/Target/AMDGPU/GCNRegPressure.h +++ b/llvm/lib/Target/AMDGPU/GCNRegPressure.h @@ -292,7 +292,7 @@ class GCNRPTracker { /// Mostly copy/paste from CodeGen/RegisterPressure.cpp void bumpDeadDefs(ArrayRef DeadDefs); - LaneBitmask getLastUsedLanes(VirtRegOrUnit VRegOrUnit, SlotIndex Pos) const; + LaneBitmask getLastUsedLanes(Register Reg, SlotIndex Pos) const; public: // reset tracker and set live register set to the specified value.