diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-10 01:21:58 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-10 01:21:58 +0000 |
commit | 38f6bd0fc8095ef79a89b3db15ff6dc734ac90e7 (patch) | |
tree | efa693ceeb60b477df8d2442372b45a2e99f5edd /lib | |
parent | 581d535af91dd55326250986273eabb495e55119 (diff) | |
download | external_llvm-38f6bd0fc8095ef79a89b3db15ff6dc734ac90e7.zip external_llvm-38f6bd0fc8095ef79a89b3db15ff6dc734ac90e7.tar.gz external_llvm-38f6bd0fc8095ef79a89b3db15ff6dc734ac90e7.tar.bz2 |
Make SpillIs an optional pointer. Avoid creating a bunch of temporary SmallVectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127388 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/CalcSpillWeights.cpp | 3 | ||||
-rw-r--r-- | lib/CodeGen/InlineSpiller.cpp | 6 | ||||
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.cpp | 16 | ||||
-rw-r--r-- | lib/CodeGen/RegAllocBasic.cpp | 6 | ||||
-rw-r--r-- | lib/CodeGen/RegAllocGreedy.cpp | 3 | ||||
-rw-r--r-- | lib/CodeGen/RegAllocLinearScan.cpp | 6 | ||||
-rw-r--r-- | lib/CodeGen/RegAllocPBQP.cpp | 3 | ||||
-rw-r--r-- | lib/CodeGen/Spiller.cpp | 4 | ||||
-rw-r--r-- | lib/CodeGen/Spiller.h | 2 |
9 files changed, 22 insertions, 27 deletions
diff --git a/lib/CodeGen/CalcSpillWeights.cpp b/lib/CodeGen/CalcSpillWeights.cpp index 76bb3d1..5637f4e 100644 --- a/lib/CodeGen/CalcSpillWeights.cpp +++ b/lib/CodeGen/CalcSpillWeights.cpp @@ -166,8 +166,7 @@ void VirtRegAuxInfo::CalculateWeightAndHint(LiveInterval &li) { // FIXME: this gets much more complicated once we support non-trivial // re-materialization. bool isLoad = false; - SmallVector<LiveInterval*, 4> spillIs; - if (lis_.isReMaterializable(li, spillIs, isLoad)) { + if (lis_.isReMaterializable(li, 0, isLoad)) { if (isLoad) totalWeight *= 0.9F; else diff --git a/lib/CodeGen/InlineSpiller.cpp b/lib/CodeGen/InlineSpiller.cpp index ec15050..871fbea 100644 --- a/lib/CodeGen/InlineSpiller.cpp +++ b/lib/CodeGen/InlineSpiller.cpp @@ -75,7 +75,7 @@ public: void spill(LiveInterval *li, SmallVectorImpl<LiveInterval*> &newIntervals, - const SmallVectorImpl<LiveInterval*> &spillIs); + const SmallVectorImpl<LiveInterval*> *spillIs); void spill(LiveRangeEdit &); @@ -332,8 +332,8 @@ void InlineSpiller::insertSpill(LiveInterval &NewLI, void InlineSpiller::spill(LiveInterval *li, SmallVectorImpl<LiveInterval*> &newIntervals, - const SmallVectorImpl<LiveInterval*> &spillIs) { - LiveRangeEdit edit(*li, newIntervals, 0, &spillIs); + const SmallVectorImpl<LiveInterval*> *spillIs) { + LiveRangeEdit edit(*li, newIntervals, 0, spillIs); spill(edit); if (VerifySpills) mf_.verify(&pass_, "After inline spill"); diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 8a2db3e..8bdc8e3 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -956,7 +956,7 @@ bool LiveIntervals::isValNoAvailableAt(const LiveInterval &li, MachineInstr *MI, bool LiveIntervals::isReMaterializable(const LiveInterval &li, const VNInfo *ValNo, MachineInstr *MI, - const SmallVectorImpl<LiveInterval*> &SpillIs, + const SmallVectorImpl<LiveInterval*> *SpillIs, bool &isLoad) { if (DisableReMat) return false; @@ -983,9 +983,10 @@ LiveIntervals::isReMaterializable(const LiveInterval &li, // If a register operand of the re-materialized instruction is going to // be spilled next, then it's not legal to re-materialize this instruction. - for (unsigned i = 0, e = SpillIs.size(); i != e; ++i) - if (ImpUse == SpillIs[i]->reg) - return false; + if (SpillIs) + for (unsigned i = 0, e = SpillIs->size(); i != e; ++i) + if (ImpUse == (*SpillIs)[i]->reg) + return false; } return true; } @@ -994,16 +995,15 @@ LiveIntervals::isReMaterializable(const LiveInterval &li, /// val# of the specified interval is re-materializable. bool LiveIntervals::isReMaterializable(const LiveInterval &li, const VNInfo *ValNo, MachineInstr *MI) { - SmallVector<LiveInterval*, 4> Dummy1; bool Dummy2; - return isReMaterializable(li, ValNo, MI, Dummy1, Dummy2); + return isReMaterializable(li, ValNo, MI, 0, Dummy2); } /// isReMaterializable - Returns true if every definition of MI of every /// val# of the specified interval is re-materializable. bool LiveIntervals::isReMaterializable(const LiveInterval &li, - const SmallVectorImpl<LiveInterval*> &SpillIs, + const SmallVectorImpl<LiveInterval*> *SpillIs, bool &isLoad) { isLoad = false; for (LiveInterval::const_vni_iterator i = li.vni_begin(), e = li.vni_end(); @@ -1716,7 +1716,7 @@ static void normalizeSpillWeights(std::vector<LiveInterval*> &NewLIs) { std::vector<LiveInterval*> LiveIntervals:: addIntervalsForSpills(const LiveInterval &li, - const SmallVectorImpl<LiveInterval*> &SpillIs, + const SmallVectorImpl<LiveInterval*> *SpillIs, const MachineLoopInfo *loopInfo, VirtRegMap &vrm) { assert(li.isSpillable() && "attempt to spill already spilled interval!"); diff --git a/lib/CodeGen/RegAllocBasic.cpp b/lib/CodeGen/RegAllocBasic.cpp index 6923908..81a43d8 100644 --- a/lib/CodeGen/RegAllocBasic.cpp +++ b/lib/CodeGen/RegAllocBasic.cpp @@ -344,7 +344,7 @@ void RegAllocBase::spillReg(LiveInterval& VirtReg, unsigned PhysReg, unassign(SpilledVReg, PhysReg); // Spill the extracted interval. - spiller().spill(&SpilledVReg, SplitVRegs, PendingSpills); + spiller().spill(&SpilledVReg, SplitVRegs, &PendingSpills); } // After extracting segments, the query's results are invalid. But keep the // contents valid until we're done accessing pendingSpills. @@ -469,9 +469,7 @@ unsigned RABasic::selectOrSplit(LiveInterval &VirtReg, } // No other spill candidates were found, so spill the current VirtReg. DEBUG(dbgs() << "spilling: " << VirtReg << '\n'); - SmallVector<LiveInterval*, 1> pendingSpills; - - spiller().spill(&VirtReg, SplitVRegs, pendingSpills); + spiller().spill(&VirtReg, SplitVRegs, 0); // The live virtual register requesting allocation was spilled, so tell // the caller not to allocate anything during this round. diff --git a/lib/CodeGen/RegAllocGreedy.cpp b/lib/CodeGen/RegAllocGreedy.cpp index 4cd1604..4f1b811 100644 --- a/lib/CodeGen/RegAllocGreedy.cpp +++ b/lib/CodeGen/RegAllocGreedy.cpp @@ -1253,8 +1253,7 @@ unsigned RAGreedy::selectOrSplit(LiveInterval &VirtReg, // Finally spill VirtReg itself. NamedRegionTimer T("Spiller", TimerGroupName, TimePassesIsEnabled); - SmallVector<LiveInterval*, 1> pendingSpills; - spiller().spill(&VirtReg, NewVRegs, pendingSpills); + spiller().spill(&VirtReg, NewVRegs, 0); // The live virtual register requesting allocation was spilled, so tell // the caller not to allocate anything during this round. diff --git a/lib/CodeGen/RegAllocLinearScan.cpp b/lib/CodeGen/RegAllocLinearScan.cpp index a24fc80..4a9226c 100644 --- a/lib/CodeGen/RegAllocLinearScan.cpp +++ b/lib/CodeGen/RegAllocLinearScan.cpp @@ -1229,8 +1229,8 @@ void RALinScan::assignRegOrStackSlotAtInterval(LiveInterval* cur) { // linearscan. if (cur->weight != HUGE_VALF && cur->weight <= minWeight) { DEBUG(dbgs() << "\t\t\tspilling(c): " << *cur << '\n'); - SmallVector<LiveInterval*, 8> spillIs, added; - spiller_->spill(cur, added, spillIs); + SmallVector<LiveInterval*, 8> added; + spiller_->spill(cur, added, 0); std::sort(added.begin(), added.end(), LISorter()); if (added.empty()) @@ -1306,7 +1306,7 @@ void RALinScan::assignRegOrStackSlotAtInterval(LiveInterval* cur) { DEBUG(dbgs() << "\t\t\tspilling(a): " << *sli << '\n'); if (sli->beginIndex() < earliestStart) earliestStart = sli->beginIndex(); - spiller_->spill(sli, added, spillIs); + spiller_->spill(sli, added, &spillIs); spilled.insert(sli->reg); } diff --git a/lib/CodeGen/RegAllocPBQP.cpp b/lib/CodeGen/RegAllocPBQP.cpp index ea0d1fe..1e1f1e0 100644 --- a/lib/CodeGen/RegAllocPBQP.cpp +++ b/lib/CodeGen/RegAllocPBQP.cpp @@ -534,10 +534,9 @@ bool RegAllocPBQP::mapPBQPToRegAlloc(const PBQPRAProblem &problem, vregsToAlloc.erase(vreg); const LiveInterval* spillInterval = &lis->getInterval(vreg); double oldWeight = spillInterval->weight; - SmallVector<LiveInterval*, 8> spillIs; rmf->rememberUseDefs(spillInterval); std::vector<LiveInterval*> newSpills = - lis->addIntervalsForSpills(*spillInterval, spillIs, loopInfo, *vrm); + lis->addIntervalsForSpills(*spillInterval, 0, loopInfo, *vrm); addStackInterval(spillInterval, mri); rmf->rememberSpills(spillInterval, newSpills); diff --git a/lib/CodeGen/Spiller.cpp b/lib/CodeGen/Spiller.cpp index fd38582..d9801a6 100644 --- a/lib/CodeGen/Spiller.cpp +++ b/lib/CodeGen/Spiller.cpp @@ -182,7 +182,7 @@ public: void spill(LiveInterval *li, SmallVectorImpl<LiveInterval*> &newIntervals, - const SmallVectorImpl<LiveInterval*> &) { + const SmallVectorImpl<LiveInterval*>*) { // Ignore spillIs - we don't use it. trivialSpillEverywhere(li, newIntervals); } @@ -212,7 +212,7 @@ public: /// Falls back on LiveIntervals::addIntervalsForSpills. void spill(LiveInterval *li, SmallVectorImpl<LiveInterval*> &newIntervals, - const SmallVectorImpl<LiveInterval*> &spillIs) { + const SmallVectorImpl<LiveInterval*> *spillIs) { std::vector<LiveInterval*> added = lis->addIntervalsForSpills(*li, spillIs, loopInfo, *vrm); newIntervals.insert(newIntervals.end(), added.begin(), added.end()); diff --git a/lib/CodeGen/Spiller.h b/lib/CodeGen/Spiller.h index f017583..fc35075 100644 --- a/lib/CodeGen/Spiller.h +++ b/lib/CodeGen/Spiller.h @@ -36,7 +36,7 @@ namespace llvm { /// @param newIntervals The newly created intervals will be appended here. virtual void spill(LiveInterval *li, SmallVectorImpl<LiveInterval*> &newIntervals, - const SmallVectorImpl<LiveInterval*> &spillIs) = 0; + const SmallVectorImpl<LiveInterval*> *spillIs) = 0; }; |