summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorWei Mi <wmi@google.com>2016-05-23 19:39:19 +0000
committerWei Mi <wmi@google.com>2016-05-23 19:39:19 +0000
commitf3c8f532d2c998e6f93a9f30cbfca9e94f16ff3c (patch)
tree1687409e2b1ef19066d4348d0235edc14b83ff91 /llvm/lib/CodeGen
parente45207608c8fa02ef34b970c63150b21f8c0afb5 (diff)
downloadbcm5719-llvm-f3c8f532d2c998e6f93a9f30cbfca9e94f16ff3c.tar.gz
bcm5719-llvm-f3c8f532d2c998e6f93a9f30cbfca9e94f16ff3c.zip
InsertPointAnalysis: Move current live interval from being a class member
to query interfaces argument; NFC Differential Revision: http://reviews.llvm.org/D20532 llvm-svn: 270481
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/InlineSpiller.cpp6
-rw-r--r--llvm/lib/CodeGen/SplitKit.cpp16
-rw-r--r--llvm/lib/CodeGen/SplitKit.h24
3 files changed, 22 insertions, 24 deletions
diff --git a/llvm/lib/CodeGen/InlineSpiller.cpp b/llvm/lib/CodeGen/InlineSpiller.cpp
index 1a62cad9cbb..dc55398d18b 100644
--- a/llvm/lib/CodeGen/InlineSpiller.cpp
+++ b/llvm/lib/CodeGen/InlineSpiller.cpp
@@ -1079,7 +1079,8 @@ bool HoistSpillHelper::rmFromMergeableSpills(MachineInstr *Spill,
bool HoistSpillHelper::isSpillCandBB(unsigned OrigReg, VNInfo &OrigVNI,
MachineBasicBlock &BB, unsigned &LiveReg) {
SlotIndex Idx;
- MachineBasicBlock::iterator MI = IPA.getLastInsertPointIter(BB);
+ LiveInterval &OrigLI = LIS.getInterval(OrigReg);
+ MachineBasicBlock::iterator MI = IPA.getLastInsertPointIter(OrigLI, BB);
if (MI != BB.end())
Idx = LIS.getInstructionIndex(*MI);
else
@@ -1381,7 +1382,6 @@ void HoistSpillHelper::hoistAllSpills() {
int Slot = Ent.first.first;
unsigned OrigReg = SlotToOrigReg[Slot];
LiveInterval &OrigLI = LIS.getInterval(OrigReg);
- IPA.setInterval(&OrigLI);
VNInfo *OrigVNI = Ent.first.second;
SmallPtrSet<MachineInstr *, 16> &EqValSpills = Ent.second;
if (Ent.second.empty())
@@ -1422,7 +1422,7 @@ void HoistSpillHelper::hoistAllSpills() {
for (auto const Insert : SpillsToIns) {
MachineBasicBlock *BB = Insert.first;
unsigned LiveReg = Insert.second;
- MachineBasicBlock::iterator MI = IPA.getLastInsertPointIter(*BB);
+ MachineBasicBlock::iterator MI = IPA.getLastInsertPointIter(OrigLI, *BB);
TII.storeRegToStackSlot(*BB, MI, LiveReg, false, Slot,
MRI.getRegClass(LiveReg), &TRI);
LIS.InsertMachineInstrRangeInMaps(std::prev(MI), MI);
diff --git a/llvm/lib/CodeGen/SplitKit.cpp b/llvm/lib/CodeGen/SplitKit.cpp
index b63fef8c87c..c309971d2c6 100644
--- a/llvm/lib/CodeGen/SplitKit.cpp
+++ b/llvm/lib/CodeGen/SplitKit.cpp
@@ -43,10 +43,11 @@ STATISTIC(NumRepairs, "Number of invalid live ranges repaired");
InsertPointAnalysis::InsertPointAnalysis(const LiveIntervals &lis,
unsigned BBNum)
- : LIS(lis), CurLI(nullptr), LastInsertPoint(BBNum) {}
+ : LIS(lis), LastInsertPoint(BBNum) {}
SlotIndex
-InsertPointAnalysis::computeLastInsertPoint(const MachineBasicBlock &MBB) {
+InsertPointAnalysis::computeLastInsertPoint(const LiveInterval &CurLI,
+ const MachineBasicBlock &MBB) {
unsigned Num = MBB.getNumber();
std::pair<SlotIndex, SlotIndex> &LIP = LastInsertPoint[Num];
SlotIndex MBBEnd = LIS.getMBBEndIdx(&MBB);
@@ -85,14 +86,13 @@ InsertPointAnalysis::computeLastInsertPoint(const MachineBasicBlock &MBB) {
if (!LIP.second)
return LIP.first;
- assert(CurLI && "CurLI not being set");
if (none_of(EHPadSucessors, [&](const MachineBasicBlock *EHPad) {
- return LIS.isLiveInToMBB(*CurLI, EHPad);
+ return LIS.isLiveInToMBB(CurLI, EHPad);
}))
return LIP.first;
// Find the value leaving MBB.
- const VNInfo *VNI = CurLI->getVNInfoBefore(MBBEnd);
+ const VNInfo *VNI = CurLI.getVNInfoBefore(MBBEnd);
if (!VNI)
return LIP.first;
@@ -109,8 +109,9 @@ InsertPointAnalysis::computeLastInsertPoint(const MachineBasicBlock &MBB) {
}
MachineBasicBlock::iterator
-InsertPointAnalysis::getLastInsertPointIter(MachineBasicBlock &MBB) {
- SlotIndex LIP = getLastInsertPoint(MBB);
+InsertPointAnalysis::getLastInsertPointIter(const LiveInterval &CurLI,
+ MachineBasicBlock &MBB) {
+ SlotIndex LIP = getLastInsertPoint(CurLI, MBB);
if (LIP == LIS.getMBBEndIdx(&MBB))
return MBB.end();
return LIS.getInstructionFromIndex(LIP);
@@ -328,7 +329,6 @@ bool SplitAnalysis::isOriginalEndpoint(SlotIndex Idx) const {
void SplitAnalysis::analyze(const LiveInterval *li) {
clear();
CurLI = li;
- IPA.setInterval(li);
analyzeUses();
}
diff --git a/llvm/lib/CodeGen/SplitKit.h b/llvm/lib/CodeGen/SplitKit.h
index af97e4f8a9c..749019baeab 100644
--- a/llvm/lib/CodeGen/SplitKit.h
+++ b/llvm/lib/CodeGen/SplitKit.h
@@ -44,34 +44,32 @@ class LLVM_LIBRARY_VISIBILITY InsertPointAnalysis {
private:
const LiveIntervals &LIS;
- /// Current LiveInterval for which to insert split or spill.
- const LiveInterval *CurLI;
-
/// Last legal insert point in each basic block in the current function.
/// The first entry is the first terminator, the second entry is the
/// last valid point to insert a split or spill for a variable that is
/// live into a landing pad successor.
SmallVector<std::pair<SlotIndex, SlotIndex>, 8> LastInsertPoint;
- SlotIndex computeLastInsertPoint(const MachineBasicBlock &MBB);
+ SlotIndex computeLastInsertPoint(const LiveInterval &CurLI,
+ const MachineBasicBlock &MBB);
public:
InsertPointAnalysis(const LiveIntervals &lis, unsigned BBNum);
- void setInterval(const LiveInterval *LI) { CurLI = LI; }
-
- /// Return the base index of the last valid insert point in \pMBB.
- SlotIndex getLastInsertPoint(const MachineBasicBlock &MBB) {
+ /// Return the base index of the last valid insert point for \pCurLI in \pMBB.
+ SlotIndex getLastInsertPoint(const LiveInterval &CurLI,
+ const MachineBasicBlock &MBB) {
unsigned Num = MBB.getNumber();
// Inline the common simple case.
if (LastInsertPoint[Num].first.isValid() &&
!LastInsertPoint[Num].second.isValid())
return LastInsertPoint[Num].first;
- return computeLastInsertPoint(MBB);
+ return computeLastInsertPoint(CurLI, MBB);
}
- /// Returns the last insert point as an iterator.
- MachineBasicBlock::iterator getLastInsertPointIter(MachineBasicBlock &);
+ /// Returns the last insert point as an iterator for \pCurLI in \pMBB.
+ MachineBasicBlock::iterator getLastInsertPointIter(const LiveInterval &CurLI,
+ MachineBasicBlock &MBB);
};
/// SplitAnalysis - Analyze a LiveInterval, looking for live range splitting
@@ -215,11 +213,11 @@ public:
bool shouldSplitSingleBlock(const BlockInfo &BI, bool SingleInstrs) const;
SlotIndex getLastSplitPoint(unsigned Num) {
- return IPA.getLastInsertPoint(*MF.getBlockNumbered(Num));
+ return IPA.getLastInsertPoint(*CurLI, *MF.getBlockNumbered(Num));
}
MachineBasicBlock::iterator getLastSplitPointIter(MachineBasicBlock *BB) {
- return IPA.getLastInsertPointIter(*BB);
+ return IPA.getLastInsertPointIter(*CurLI, *BB);
}
};
OpenPOWER on IntegriCloud