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 | 8dd25288f9c79596e531b32c1b0bdfadcee7ffb9 (patch) | |
| tree | 608e0fc82961a393705e4a57814ac64b9c9947a4 /include/llvm/CodeGen | |
| parent | 5aa4f2a0857563b4ad9115c614afed9501aa58f4 (diff) | |
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 440ae6ec5b..2861ac80f6 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); |
