diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-06-24 20:54:29 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-06-24 20:54:29 +0000 |
| commit | 2b87d44c5de111da0389f832e7311101f61e6a55 (patch) | |
| tree | 991b7477e3476d394ff490a3aa0f1f0dd69f563e /llvm/lib/CodeGen/Spiller.cpp | |
| parent | 4398fd7b836561635662f23ed77ed5786aafc8f2 (diff) | |
| download | bcm5719-llvm-2b87d44c5de111da0389f832e7311101f61e6a55.tar.gz bcm5719-llvm-2b87d44c5de111da0389f832e7311101f61e6a55.zip | |
Don't return a std::vector in the Spiller interface, but take a reference to a
vector instead. This avoids needless copying and allocation.
Add documentation.
llvm-svn: 106788
Diffstat (limited to 'llvm/lib/CodeGen/Spiller.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/Spiller.cpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/llvm/lib/CodeGen/Spiller.cpp b/llvm/lib/CodeGen/Spiller.cpp index a7b2efe1182..23912c10e7b 100644 --- a/llvm/lib/CodeGen/Spiller.cpp +++ b/llvm/lib/CodeGen/Spiller.cpp @@ -67,7 +67,8 @@ protected: /// Add spill ranges for every use/def of the live interval, inserting loads /// immediately before each use, and stores after each def. No folding or /// remat is attempted. - std::vector<LiveInterval*> trivialSpillEverywhere(LiveInterval *li) { + void trivialSpillEverywhere(LiveInterval *li, + std::vector<LiveInterval*> &newIntervals) { DEBUG(dbgs() << "Spilling everywhere " << *li << "\n"); assert(li->weight != HUGE_VALF && @@ -78,8 +79,6 @@ protected: DEBUG(dbgs() << "Trivial spill everywhere of reg" << li->reg << "\n"); - std::vector<LiveInterval*> added; - const TargetRegisterClass *trc = mri->getRegClass(li->reg); unsigned ss = vrm->assignVirt2StackSlot(li->reg); @@ -157,10 +156,8 @@ protected: newLI->addRange(LiveRange(beginIndex, storeIndex, storeVNI)); } - added.push_back(newLI); + newIntervals.push_back(newLI); } - - return added; } }; @@ -176,11 +173,12 @@ public: TrivialSpiller(MachineFunction *mf, LiveIntervals *lis, VirtRegMap *vrm) : SpillerBase(mf, lis, vrm) {} - std::vector<LiveInterval*> spill(LiveInterval *li, - SmallVectorImpl<LiveInterval*> &spillIs, - SlotIndex*) { + void spill(LiveInterval *li, + std::vector<LiveInterval*> &newIntervals, + SmallVectorImpl<LiveInterval*> &, + SlotIndex*) { // Ignore spillIs - we don't use it. - return trivialSpillEverywhere(li); + trivialSpillEverywhere(li, newIntervals); } }; @@ -200,10 +198,13 @@ public: : lis(lis), loopInfo(loopInfo), vrm(vrm) {} /// Falls back on LiveIntervals::addIntervalsForSpills. - std::vector<LiveInterval*> spill(LiveInterval *li, - SmallVectorImpl<LiveInterval*> &spillIs, - SlotIndex*) { - return lis->addIntervalsForSpills(*li, spillIs, loopInfo, *vrm); + void spill(LiveInterval *li, + std::vector<LiveInterval*> &newIntervals, + SmallVectorImpl<LiveInterval*> &spillIs, + SlotIndex*) { + std::vector<LiveInterval*> added = + lis->addIntervalsForSpills(*li, spillIs, loopInfo, *vrm); + newIntervals.insert(newIntervals.end(), added.begin(), added.end()); } }; @@ -226,15 +227,14 @@ public: tri = mf->getTarget().getRegisterInfo(); } - std::vector<LiveInterval*> spill(LiveInterval *li, - SmallVectorImpl<LiveInterval*> &spillIs, - SlotIndex *earliestStart) { - - if (worthTryingToSplit(li)) { - return tryVNISplit(li, earliestStart); - } - // else - return StandardSpiller::spill(li, spillIs, earliestStart); + void spill(LiveInterval *li, + std::vector<LiveInterval*> &newIntervals, + SmallVectorImpl<LiveInterval*> &spillIs, + SlotIndex *earliestStart) { + if (worthTryingToSplit(li)) + tryVNISplit(li, earliestStart); + else + StandardSpiller::spill(li, newIntervals, spillIs, earliestStart); } private: |

