mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-28 06:27:16 +00:00
Exclusively use SplitAnalysis::getLastSplitPoint().
Delete the alternative implementation in LiveIntervalAnalysis. These functions computed the same thing, but SplitAnalysis caches the result. llvm-svn: 147911
This commit is contained in:
parent
f7f94542fc
commit
63258fcd99
@ -269,12 +269,6 @@ namespace llvm {
|
||||
/// within a single basic block.
|
||||
bool intervalIsInOneMBB(const LiveInterval &li) const;
|
||||
|
||||
/// getLastSplitPoint - Return the last possible insertion point in mbb for
|
||||
/// spilling and splitting code. This is the first terminator, or the call
|
||||
/// instruction if li is live into a landing pad successor.
|
||||
MachineBasicBlock::iterator getLastSplitPoint(const LiveInterval &li,
|
||||
MachineBasicBlock *mbb) const;
|
||||
|
||||
/// addKillFlags - Add kill flags to any instruction that kills a virtual
|
||||
/// register.
|
||||
void addKillFlags();
|
||||
|
@ -779,28 +779,6 @@ bool LiveIntervals::shrinkToUses(LiveInterval *li,
|
||||
// Register allocator hooks.
|
||||
//
|
||||
|
||||
MachineBasicBlock::iterator
|
||||
LiveIntervals::getLastSplitPoint(const LiveInterval &li,
|
||||
MachineBasicBlock *mbb) const {
|
||||
const MachineBasicBlock *lpad = mbb->getLandingPadSuccessor();
|
||||
|
||||
// If li is not live into a landing pad, we can insert spill code before the
|
||||
// first terminator.
|
||||
if (!lpad || !isLiveInToMBB(li, lpad))
|
||||
return mbb->getFirstTerminator();
|
||||
|
||||
// When there is a landing pad, spill code must go before the call instruction
|
||||
// that can throw.
|
||||
MachineBasicBlock::iterator I = mbb->end(), B = mbb->begin();
|
||||
while (I != B) {
|
||||
--I;
|
||||
if (I->isCall())
|
||||
return I;
|
||||
}
|
||||
// The block contains no calls that can throw, so use the first terminator.
|
||||
return mbb->getFirstTerminator();
|
||||
}
|
||||
|
||||
void LiveIntervals::addKillFlags() {
|
||||
for (iterator I = begin(), E = end(); I != E; ++I) {
|
||||
unsigned Reg = I->first;
|
||||
|
@ -95,6 +95,14 @@ SlotIndex SplitAnalysis::computeLastSplitPoint(unsigned Num) {
|
||||
return LSP.first;
|
||||
}
|
||||
|
||||
MachineBasicBlock::iterator
|
||||
SplitAnalysis::getLastSplitPointIter(MachineBasicBlock *MBB) {
|
||||
SlotIndex LSP = getLastSplitPoint(MBB->getNumber());
|
||||
if (LSP == LIS.getMBBEndIdx(MBB))
|
||||
return MBB->end();
|
||||
return LIS.getInstructionFromIndex(LSP);
|
||||
}
|
||||
|
||||
/// analyzeUses - Count instructions, basic blocks, and loops using CurLI.
|
||||
void SplitAnalysis::analyzeUses() {
|
||||
assert(UseSlots.empty() && "Call clear first");
|
||||
@ -497,7 +505,7 @@ SlotIndex SplitEditor::enterIntvAtEnd(MachineBasicBlock &MBB) {
|
||||
}
|
||||
DEBUG(dbgs() << ": valno " << ParentVNI->id);
|
||||
VNInfo *VNI = defFromParent(OpenIdx, ParentVNI, Last, MBB,
|
||||
LIS.getLastSplitPoint(Edit->getParent(), &MBB));
|
||||
SA.getLastSplitPointIter(&MBB));
|
||||
RegAssign.insert(VNI->def, End, OpenIdx);
|
||||
DEBUG(dump());
|
||||
return VNI->def;
|
||||
@ -780,7 +788,7 @@ void SplitEditor::hoistCopiesForSize() {
|
||||
SlotIndex Last = LIS.getMBBEndIdx(Dom.first).getPrevSlot();
|
||||
Dom.second =
|
||||
defFromParent(0, ParentVNI, Last, *Dom.first,
|
||||
LIS.getLastSplitPoint(Edit->getParent(), Dom.first))->def;
|
||||
SA.getLastSplitPointIter(Dom.first))->def;
|
||||
}
|
||||
|
||||
// Remove redundant back-copies that are now known to be dominated by another
|
||||
|
@ -135,7 +135,7 @@ public:
|
||||
/// getParent - Return the last analyzed interval.
|
||||
const LiveInterval &getParent() const { return *CurLI; }
|
||||
|
||||
/// getLastSplitPoint - Return that base index of the last valid split point
|
||||
/// getLastSplitPoint - Return the base index of the last valid split point
|
||||
/// in the basic block numbered Num.
|
||||
SlotIndex getLastSplitPoint(unsigned Num) {
|
||||
// Inline the common simple case.
|
||||
@ -145,6 +145,9 @@ public:
|
||||
return computeLastSplitPoint(Num);
|
||||
}
|
||||
|
||||
/// getLastSplitPointIter - Returns the last split point as an iterator.
|
||||
MachineBasicBlock::iterator getLastSplitPointIter(MachineBasicBlock*);
|
||||
|
||||
/// isOriginalEndpoint - Return true if the original live range was killed or
|
||||
/// (re-)defined at Idx. Idx should be the 'def' slot for a normal kill/def,
|
||||
/// and 'use' for an early-clobber def.
|
||||
|
Loading…
Reference in New Issue
Block a user