diff options
author | Roman Levenstein <romix.llvm@googlemail.com> | 2008-02-18 09:35:30 +0000 |
---|---|---|
committer | Roman Levenstein <romix.llvm@googlemail.com> | 2008-02-18 09:35:30 +0000 |
commit | 7b197ee2b5ab508b1d3e800ba04f0aabd1757608 (patch) | |
tree | 608e0fc82961a393705e4a57814ac64b9c9947a4 /include/llvm/CodeGen | |
parent | 282dd32458a4387a91b1a2a412d48e44436036db (diff) | |
download | external_llvm-7b197ee2b5ab508b1d3e800ba04f0aabd1757608.zip external_llvm-7b197ee2b5ab508b1d3e800ba04f0aabd1757608.tar.gz external_llvm-7b197ee2b5ab508b1d3e800ba04f0aabd1757608.tar.bz2 |
New helper function getMBBFromIndex() that given an index in any instruction of an MBB returns a pointer the MBB. Reviewed by Evan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47267 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen')
-rw-r--r-- | include/llvm/CodeGen/LiveIntervalAnalysis.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h index 440ae6e..2861ac8 100644 --- a/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -40,6 +40,20 @@ namespace llvm { class VirtRegMap; typedef std::pair<unsigned, MachineBasicBlock*> IdxMBBPair; + inline bool operator<(unsigned V, const IdxMBBPair &IM) { + return V < IM.first; + } + + inline bool operator<(const IdxMBBPair &IM, unsigned V) { + return IM.first < V; + } + + struct Idx2MBBCompare { + bool operator()(const IdxMBBPair &LHS, const IdxMBBPair &RHS) const { + return LHS.first < RHS.first; + } + }; + class LiveIntervals : public MachineFunctionPass { MachineFunction* mf_; const TargetMachine* tm_; @@ -153,6 +167,22 @@ namespace llvm { return MBB2IdxMap[MBBNo].second; } + /// getMBBFromIndex - given an index in any instruction of an + /// MBB return a pointer the MBB + MachineBasicBlock* getMBBFromIndex(unsigned index) const { + std::vector<IdxMBBPair>::const_iterator I = + std::lower_bound(Idx2MBBMap.begin(), Idx2MBBMap.end(), index); + // Take the pair containing the index + std::vector<IdxMBBPair>::const_iterator J = + ((I != Idx2MBBMap.end() && I->first > index) || + (I == Idx2MBBMap.end() && Idx2MBBMap.size()>0)) ? (I-1): I; + + assert(J != Idx2MBBMap.end() && J->first < index+1 && + index <= getMBBEndIdx(J->second) && + "index does not correspond to an MBB"); + return J->second; + } + /// getInstructionIndex - returns the base index of instr unsigned getInstructionIndex(MachineInstr* instr) const { Mi2IndexMap::const_iterator it = mi2iMap_.find(instr); |