diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-10 01:51:42 +0000 | 
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-10 01:51:42 +0000 | 
| commit | 4d6eafa138730e6fde5b6cccb3e37f89e5913a5c (patch) | |
| tree | d84e5014b07728054d71016f43ea14d1eb6e7074 /llvm/lib/CodeGen/Spiller.cpp | |
| parent | c6cc4850515bb3b430838a1a238827eea827a1bb (diff) | |
| download | llvm-4d6eafa138730e6fde5b6cccb3e37f89e5913a5c.zip llvm-4d6eafa138730e6fde5b6cccb3e37f89e5913a5c.tar.gz llvm-4d6eafa138730e6fde5b6cccb3e37f89e5913a5c.tar.bz2  | |
Change the Spiller interface to take a LiveRangeEdit reference.
This makes it possible to register delegates and get callbacks when the spiller
edits live ranges.
llvm-svn: 127389
Diffstat (limited to 'llvm/lib/CodeGen/Spiller.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/Spiller.cpp | 23 | 
1 files changed, 11 insertions, 12 deletions
diff --git a/llvm/lib/CodeGen/Spiller.cpp b/llvm/lib/CodeGen/Spiller.cpp index d9801a6..b89139f 100644 --- a/llvm/lib/CodeGen/Spiller.cpp +++ b/llvm/lib/CodeGen/Spiller.cpp @@ -11,6 +11,7 @@  #include "Spiller.h"  #include "VirtRegMap.h" +#include "LiveRangeEdit.h"  #include "llvm/CodeGen/LiveIntervalAnalysis.h"  #include "llvm/CodeGen/LiveStackAnalysis.h"  #include "llvm/CodeGen/MachineFrameInfo.h" @@ -180,11 +181,9 @@ public:                   VirtRegMap &vrm)      : SpillerBase(pass, mf, vrm) {} -  void spill(LiveInterval *li, -             SmallVectorImpl<LiveInterval*> &newIntervals, -             const SmallVectorImpl<LiveInterval*>*) { +  void spill(LiveRangeEdit &LRE) {      // Ignore spillIs - we don't use it. -    trivialSpillEverywhere(li, newIntervals); +    trivialSpillEverywhere(&LRE.getParent(), *LRE.getNewVRegs());    }  }; @@ -210,22 +209,22 @@ public:        vrm(&vrm) {}    /// Falls back on LiveIntervals::addIntervalsForSpills. -  void spill(LiveInterval *li, -             SmallVectorImpl<LiveInterval*> &newIntervals, -             const SmallVectorImpl<LiveInterval*> *spillIs) { +  void spill(LiveRangeEdit &LRE) {      std::vector<LiveInterval*> added = -      lis->addIntervalsForSpills(*li, spillIs, loopInfo, *vrm); -    newIntervals.insert(newIntervals.end(), added.begin(), added.end()); +      lis->addIntervalsForSpills(LRE.getParent(), LRE.getUselessVRegs(), +                                 loopInfo, *vrm); +    LRE.getNewVRegs()->insert(LRE.getNewVRegs()->end(), +                              added.begin(), added.end());      // Update LiveStacks. -    int SS = vrm->getStackSlot(li->reg); +    int SS = vrm->getStackSlot(LRE.getReg());      if (SS == VirtRegMap::NO_STACK_SLOT)        return; -    const TargetRegisterClass *RC = mf->getRegInfo().getRegClass(li->reg); +    const TargetRegisterClass *RC = mf->getRegInfo().getRegClass(LRE.getReg());      LiveInterval &SI = lss->getOrCreateInterval(SS, RC);      if (!SI.hasAtLeastOneValue())        SI.getNextValue(SlotIndex(), 0, lss->getVNInfoAllocator()); -    SI.MergeRangesInAsValue(*li, SI.getValNumInfo(0)); +    SI.MergeRangesInAsValue(LRE.getParent(), SI.getValNumInfo(0));    }  };  | 
