diff options
author | Owen Anderson <resistor@mac.com> | 2008-05-28 20:54:50 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2008-05-28 20:54:50 +0000 |
commit | 80b3ce65e294a28b88c882d44a5e749a2924c9e3 (patch) | |
tree | 81be998eb6e57d5c073cf2f97519c3d33161850b /lib/CodeGen/LiveIntervalAnalysis.cpp | |
parent | d77d4f98fbdeaf3d1b0ba99b547b7ac4ec43b834 (diff) |
Factor the numbering computation into a separate method, and add the slightest attempt at some renumbering logic, which is currently unused.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51652 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 2558b09ad6..d49dfd058c 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -75,17 +75,14 @@ void LiveIntervals::releaseMemory() { delete ClonedMIs[i]; } -/// runOnMachineFunction - Register allocate the whole function -/// -bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { - mf_ = &fn; - mri_ = &mf_->getRegInfo(); - tm_ = &fn.getTarget(); - tri_ = tm_->getRegisterInfo(); - tii_ = tm_->getInstrInfo(); - lv_ = &getAnalysis<LiveVariables>(); - allocatableRegs_ = tri_->getAllocatableSet(fn); - +void LiveIntervals::computeNumbering() { + Index2MiMap OldI2MI = i2miMap_; + + Idx2MBBMap.clear(); + MBB2IdxMap.clear(); + mi2iMap_.clear(); + i2miMap_.clear(); + // Number MachineInstrs and MachineBasicBlocks. // Initialize MBB indexes to a sentinal. MBB2IdxMap.resize(mf_->getNumBlockIDs(), std::make_pair(~0U,~0U)); @@ -110,7 +107,28 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { Idx2MBBMap.push_back(std::make_pair(StartIdx, MBB)); } std::sort(Idx2MBBMap.begin(), Idx2MBBMap.end(), Idx2MBBCompare()); + + if (!OldI2MI.empty()) + 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]]; + } +} + +/// runOnMachineFunction - Register allocate the whole function +/// +bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { + mf_ = &fn; + mri_ = &mf_->getRegInfo(); + tm_ = &fn.getTarget(); + tri_ = tm_->getRegisterInfo(); + tii_ = tm_->getInstrInfo(); + lv_ = &getAnalysis<LiveVariables>(); + allocatableRegs_ = tri_->getAllocatableSet(fn); + computeNumbering(); computeIntervals(); numIntervals += getNumIntervals(); |