diff options
author | Marcello Maggioni <hayarms@gmail.com> | 2020-03-22 19:08:29 -0700 |
---|---|---|
committer | Marcello Maggioni <hayarms@gmail.com> | 2020-04-10 11:26:21 -0700 |
commit | ea11f4726f2fb30ec319ca579234c620532d088b (patch) | |
tree | 48e758beabd4c6e4afeba35fc36e202057f39966 /llvm/lib/CodeGen/SplitKit.cpp | |
parent | 882ba484743763b8560b08f483ae21d26ab336f9 (diff) | |
download | llvm-ea11f4726f2fb30ec319ca579234c620532d088b.zip llvm-ea11f4726f2fb30ec319ca579234c620532d088b.tar.gz llvm-ea11f4726f2fb30ec319ca579234c620532d088b.tar.bz2 |
Split LiveRangeCalc in LiveRangeCalc/LiveIntervalCalc. NFC
Summary:
Refactor LiveRangeCalc such that it is now split into two classes
The objective is to split all the "register specific" logic away
from LiveRangeCalc.
The two new classes created are:
- LiveRangeCalc - is meant as a generic class to compute and modify
live ranges in a generic way. This class should deal only with
SlotIndices and VNInfo objects.
- LiveIntervalCals - is meant to be equivalent to the old LiveRangeCalc.
It computes the liveness virtual registers tracked by a LiveInterval
object.
With this refactoring LiveRangeCalc can be used to implement tracking of
liveness of LiveRanges that represent other things than just registers.
Subscribers: MatzeB, qcolombet, mgorny, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D76584
Diffstat (limited to 'llvm/lib/CodeGen/SplitKit.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SplitKit.cpp | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/llvm/lib/CodeGen/SplitKit.cpp b/llvm/lib/CodeGen/SplitKit.cpp index 0c1f122..a5d4e12 100644 --- a/llvm/lib/CodeGen/SplitKit.cpp +++ b/llvm/lib/CodeGen/SplitKit.cpp @@ -20,8 +20,8 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/CodeGen/LiveInterval.h" +#include "llvm/CodeGen/LiveIntervalCalc.h" #include "llvm/CodeGen/LiveIntervals.h" -#include "llvm/CodeGen/LiveRangeCalc.h" #include "llvm/CodeGen/LiveRangeEdit.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineBlockFrequencyInfo.h" @@ -379,11 +379,11 @@ void SplitEditor::reset(LiveRangeEdit &LRE, ComplementSpillMode SM) { RegAssign.clear(); Values.clear(); - // Reset the LiveRangeCalc instances needed for this spill mode. - LRCalc[0].reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, + // Reset the LiveIntervalCalc instances needed for this spill mode. + LICalc[0].reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, &LIS.getVNInfoAllocator()); if (SpillMode) - LRCalc[1].reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, + LICalc[1].reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, &LIS.getVNInfoAllocator()); // We don't need an AliasAnalysis since we will only be performing @@ -832,7 +832,7 @@ void SplitEditor::overlapIntv(SlotIndex Start, SlotIndex End) { assert(LIS.getMBBFromIndex(Start) == LIS.getMBBFromIndex(End) && "Range cannot span basic blocks"); - // The complement interval will be extended as needed by LRCalc.extend(). + // The complement interval will be extended as needed by LICalc.extend(). if (ParentVNI) forceRecompute(0, *ParentVNI); LLVM_DEBUG(dbgs() << " overlapIntv [" << Start << ';' << End << "):"); @@ -1118,7 +1118,7 @@ void SplitEditor::hoistCopies() { } /// transferValues - Transfer all possible values to the new live ranges. -/// Values that were rematerialized are left alone, they need LRCalc.extend(). +/// Values that were rematerialized are left alone, they need LICalc.extend(). bool SplitEditor::transferValues() { bool Skipped = false; RegAssignMap::const_iterator AssignI = RegAssign.begin(); @@ -1166,7 +1166,7 @@ bool SplitEditor::transferValues() { continue; } - LiveRangeCalc &LRC = getLRCalc(RegIdx); + LiveIntervalCalc &LIC = getLICalc(RegIdx); // This value has multiple defs in RegIdx, but it wasn't rematerialized, // so the live range is accurate. Add live-in blocks in [Start;End) to the @@ -1182,7 +1182,7 @@ bool SplitEditor::transferValues() { LLVM_DEBUG(dbgs() << ':' << VNI->id << "*" << printMBBReference(*MBB)); // MBB has its own def. Is it also live-out? if (BlockEnd <= End) - LRC.setLiveOutValue(&*MBB, VNI); + LIC.setLiveOutValue(&*MBB, VNI); // Skip to the next block for live-in. ++MBB; @@ -1200,16 +1200,16 @@ bool SplitEditor::transferValues() { VNInfo *VNI = LI.extendInBlock(BlockStart, std::min(BlockEnd, End)); assert(VNI && "Missing def for complex mapped parent PHI"); if (End >= BlockEnd) - LRC.setLiveOutValue(&*MBB, VNI); // Live-out as well. + LIC.setLiveOutValue(&*MBB, VNI); // Live-out as well. } else { // This block needs a live-in value. The last block covered may not // be live-out. if (End < BlockEnd) - LRC.addLiveInBlock(LI, MDT[&*MBB], End); + LIC.addLiveInBlock(LI, MDT[&*MBB], End); else { // Live-through, and we don't know the value. - LRC.addLiveInBlock(LI, MDT[&*MBB]); - LRC.setLiveOutValue(&*MBB, nullptr); + LIC.addLiveInBlock(LI, MDT[&*MBB]); + LIC.setLiveOutValue(&*MBB, nullptr); } } BlockStart = BlockEnd; @@ -1220,9 +1220,9 @@ bool SplitEditor::transferValues() { LLVM_DEBUG(dbgs() << '\n'); } - LRCalc[0].calculateValues(); + LICalc[0].calculateValues(); if (SpillMode) - LRCalc[1].calculateValues(); + LICalc[1].calculateValues(); return Skipped; } @@ -1238,7 +1238,7 @@ static bool removeDeadSegment(SlotIndex Def, LiveRange &LR) { return true; } -void SplitEditor::extendPHIRange(MachineBasicBlock &B, LiveRangeCalc &LRC, +void SplitEditor::extendPHIRange(MachineBasicBlock &B, LiveIntervalCalc &LIC, LiveRange &LR, LaneBitmask LM, ArrayRef<SlotIndex> Undefs) { for (MachineBasicBlock *P : B.predecessors()) { @@ -1252,7 +1252,7 @@ void SplitEditor::extendPHIRange(MachineBasicBlock &B, LiveRangeCalc &LRC, LiveRange &PSR = !LM.all() ? getSubRangeForMask(LM, PLI) : static_cast<LiveRange&>(PLI); if (PSR.liveAt(LastUse)) - LRC.extend(LR, End, /*PhysReg=*/0, Undefs); + LIC.extend(LR, End, /*PhysReg=*/0, Undefs); } } @@ -1270,14 +1270,14 @@ void SplitEditor::extendPHIKillRanges() { unsigned RegIdx = RegAssign.lookup(V->def); LiveInterval &LI = LIS.getInterval(Edit->get(RegIdx)); - LiveRangeCalc &LRC = getLRCalc(RegIdx); + LiveIntervalCalc &LIC = getLICalc(RegIdx); MachineBasicBlock &B = *LIS.getMBBFromIndex(V->def); if (!removeDeadSegment(V->def, LI)) - extendPHIRange(B, LRC, LI, LaneBitmask::getAll(), /*Undefs=*/{}); + extendPHIRange(B, LIC, LI, LaneBitmask::getAll(), /*Undefs=*/{}); } SmallVector<SlotIndex, 4> Undefs; - LiveRangeCalc SubLRC; + LiveIntervalCalc SubLIC; for (LiveInterval::SubRange &PS : ParentLI.subranges()) { for (const VNInfo *V : PS.valnos) { @@ -1290,11 +1290,11 @@ void SplitEditor::extendPHIKillRanges() { continue; MachineBasicBlock &B = *LIS.getMBBFromIndex(V->def); - SubLRC.reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, + SubLIC.reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, &LIS.getVNInfoAllocator()); Undefs.clear(); LI.computeSubRangeUndefs(Undefs, PS.LaneMask, MRI, *LIS.getSlotIndexes()); - extendPHIRange(B, SubLRC, S, PS.LaneMask, Undefs); + extendPHIRange(B, SubLIC, S, PS.LaneMask, Undefs); } } } @@ -1363,8 +1363,8 @@ void SplitEditor::rewriteAssigned(bool ExtendRanges) { if (MO.isUse()) ExtPoints.push_back(ExtPoint(MO, RegIdx, Next)); } else { - LiveRangeCalc &LRC = getLRCalc(RegIdx); - LRC.extend(LI, Next, 0, ArrayRef<SlotIndex>()); + LiveIntervalCalc &LIC = getLICalc(RegIdx); + LIC.extend(LI, Next, 0, ArrayRef<SlotIndex>()); } } @@ -1372,7 +1372,7 @@ void SplitEditor::rewriteAssigned(bool ExtendRanges) { LiveInterval &LI = LIS.getInterval(Edit->get(EP.RegIdx)); assert(LI.hasSubRanges()); - LiveRangeCalc SubLRC; + LiveIntervalCalc SubLIC; Register Reg = EP.MO.getReg(), Sub = EP.MO.getSubReg(); LaneBitmask LM = Sub != 0 ? TRI.getSubRegIndexLaneMask(Sub) : MRI.getMaxLaneMaskForVReg(Reg); @@ -1386,11 +1386,11 @@ void SplitEditor::rewriteAssigned(bool ExtendRanges) { // %1 = COPY %0 if (S.empty()) continue; - SubLRC.reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, + SubLIC.reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT, &LIS.getVNInfoAllocator()); SmallVector<SlotIndex, 4> Undefs; LI.computeSubRangeUndefs(Undefs, S.LaneMask, MRI, *LIS.getSlotIndexes()); - SubLRC.extend(S, EP.Next, 0, Undefs); + SubLIC.extend(S, EP.Next, 0, Undefs); } } |