diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h index 2e238085734..89c72377a84 100644 --- a/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -24,6 +24,7 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include +#include #include namespace llvm { @@ -83,7 +84,7 @@ namespace llvm { } }; - typedef std::vector Intervals; + typedef std::list Intervals; typedef std::vector MachineBasicBlockPtrs; private: @@ -100,7 +101,7 @@ namespace llvm { typedef std::map Mi2IndexMap; Mi2IndexMap mi2iMap_; - typedef std::map Reg2IntervalMap; + typedef std::map Reg2IntervalMap; Reg2IntervalMap r2iMap_; Intervals intervals_; diff --git a/include/llvm/CodeGen/LiveIntervals.h b/include/llvm/CodeGen/LiveIntervals.h index 2e238085734..89c72377a84 100644 --- a/include/llvm/CodeGen/LiveIntervals.h +++ b/include/llvm/CodeGen/LiveIntervals.h @@ -24,6 +24,7 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include +#include #include namespace llvm { @@ -83,7 +84,7 @@ namespace llvm { } }; - typedef std::vector Intervals; + typedef std::list Intervals; typedef std::vector MachineBasicBlockPtrs; private: @@ -100,7 +101,7 @@ namespace llvm { typedef std::map Mi2IndexMap; Mi2IndexMap mi2iMap_; - typedef std::map Reg2IntervalMap; + typedef std::map Reg2IntervalMap; Reg2IntervalMap r2iMap_; Intervals intervals_; diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 6826b4d6492..212bc6f1eb5 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -114,7 +114,7 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { unsigned reg = mop.getAllocatedRegNum(); Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg); assert(r2iit != r2iMap_.end()); - intervals_[r2iit->second].weight += pow(10.0F, loopDepth); + r2iit->second->weight += pow(10.0F, loopDepth); } } } @@ -148,11 +148,11 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock* mbb, // add new interval intervals_.push_back(Interval(reg)); // update interval index for this register - r2iMap_[reg] = intervals_.size() - 1; + r2iMap_.insert(std::make_pair(reg, --intervals_.end())); interval = &intervals_.back(); } else { - interval = &intervals_[r2iit->second]; + interval = &*r2iit->second; } for (MbbIndex2MbbMap::iterator @@ -241,15 +241,14 @@ exit: Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg); if (r2iit != r2iMap_.end()) { - unsigned ii = r2iit->second; - Interval& interval = intervals_[ii]; + Interval& interval = *r2iit->second; interval.addRange(start, end); } else { intervals_.push_back(Interval(reg)); Interval& interval = intervals_.back(); // update interval index for this register - r2iMap_[reg] = intervals_.size() - 1; + r2iMap_.insert(std::make_pair(reg, --intervals_.end())); interval.addRange(start, end); } } @@ -318,7 +317,7 @@ void LiveIntervals::computeIntervals() } } - std::sort(intervals_.begin(), intervals_.end(), StartPointComp()); + intervals_.sort(StartPointComp()); DEBUG(std::copy(intervals_.begin(), intervals_.end(), std::ostream_iterator(std::cerr, "\n"))); } diff --git a/lib/CodeGen/LiveIntervalAnalysis.h b/lib/CodeGen/LiveIntervalAnalysis.h index 2e238085734..89c72377a84 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.h +++ b/lib/CodeGen/LiveIntervalAnalysis.h @@ -24,6 +24,7 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include +#include #include namespace llvm { @@ -83,7 +84,7 @@ namespace llvm { } }; - typedef std::vector Intervals; + typedef std::list Intervals; typedef std::vector MachineBasicBlockPtrs; private: @@ -100,7 +101,7 @@ namespace llvm { typedef std::map Mi2IndexMap; Mi2IndexMap mi2iMap_; - typedef std::map Reg2IntervalMap; + typedef std::map Reg2IntervalMap; Reg2IntervalMap r2iMap_; Intervals intervals_;