diff options
author | Owen Anderson <resistor@mac.com> | 2008-05-29 18:15:49 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2008-05-29 18:15:49 +0000 |
commit | 0178e957913727e420cc6bb08ee82136f299f850 (patch) | |
tree | 1b442f9c8f009b9d4b86d87915361103650d7163 /llvm/lib | |
parent | e1a9c26b89c744a0ea97bdc4f8998e5550f6db2d (diff) | |
download | bcm5719-llvm-0178e957913727e420cc6bb08ee82136f299f850.tar.gz bcm5719-llvm-0178e957913727e420cc6bb08ee82136f299f850.zip |
Renumbering needs to account for instruction slot offsets when performing lookups in the index maps.
llvm-svn: 51691
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index 976aa5a9245..228c0a92a0e 100644 --- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -58,8 +58,6 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<LiveVariables>(); AU.addPreservedID(MachineLoopInfoID); AU.addPreservedID(MachineDominatorsID); - AU.addPreservedID(PHIEliminationID); - AU.addRequiredID(PHIEliminationID); AU.addRequiredID(TwoAddressInstructionPassID); MachineFunctionPass::getAnalysisUsage(AU); } @@ -75,6 +73,8 @@ void LiveIntervals::releaseMemory() { delete ClonedMIs[i]; } +#include <iostream> + void LiveIntervals::computeNumbering() { Index2MiMap OldI2MI = i2miMap_; @@ -112,14 +112,27 @@ void LiveIntervals::computeNumbering() { for (iterator I = begin(), E = end(); I != E; ++I) for (LiveInterval::iterator LI = I->second.begin(), LE = I->second.end(); LI != LE; ++LI) { - LI->start = mi2iMap_[OldI2MI[LI->start]]; - LI->end = mi2iMap_[OldI2MI[LI->end]]; + unsigned offset = LI->start % InstrSlots::NUM; + LI->start = mi2iMap_[OldI2MI[LI->start / InstrSlots::NUM]] + offset; + + if (LI->end / InstrSlots::NUM < OldI2MI.size()) { + // FIXME: Not correct when the instruction at LI->end has + // been removed + offset = LI->end % InstrSlots::NUM; + LI->end = mi2iMap_[OldI2MI[LI->end / InstrSlots::NUM]] + offset; + } else { + LI->end = i2miMap_.size() * InstrSlots::NUM; + } VNInfo* vni = LI->valno; - vni->def = mi2iMap_[OldI2MI[vni->def]]; + offset = vni->def % InstrSlots::NUM; + vni->def = mi2iMap_[OldI2MI[vni->def / InstrSlots::NUM]] + offset; - for (size_t i = 0; i < vni->kills.size(); ++i) - vni->kills[i] = mi2iMap_[OldI2MI[vni->kills[i]]]; + for (size_t i = 0; i < vni->kills.size(); ++i) { + offset = vni->kills[i] % InstrSlots::NUM; + vni->kills[i] = mi2iMap_[OldI2MI[vni->kills[i] / InstrSlots::NUM]] + + offset; + } } } |