From 46d353f8e8a2bbe02e8aa6a2292eae930dd3b7e6 Mon Sep 17 00:00:00 2001 From: Ahmed Bougacha Date: Wed, 21 Aug 2013 07:28:17 +0000 Subject: MC CFG: Add a few needed methods, mainly MCModule::findFirstAtomAfter. While there, do some minor cleanup. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188880 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCFunction.cpp | 5 +++-- lib/MC/MCModule.cpp | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/MC/MCFunction.cpp b/lib/MC/MCFunction.cpp index 5011d5f..300ab5b 100644 --- a/lib/MC/MCFunction.cpp +++ b/lib/MC/MCFunction.cpp @@ -26,8 +26,9 @@ MCFunction::~MCFunction() { } MCBasicBlock &MCFunction::createBlock(const MCTextAtom &TA) { - Blocks.push_back(new MCBasicBlock(TA, this)); - return *Blocks.back(); + MCBasicBlock *MCBB = new MCBasicBlock(TA, this); + Blocks.push_back(MCBB); + return *MCBB; } const MCBasicBlock *MCFunction::find(uint64_t StartAddr) const { diff --git a/lib/MC/MCModule.cpp b/lib/MC/MCModule.cpp index 9a9d90e..bdd5cc6 100644 --- a/lib/MC/MCModule.cpp +++ b/lib/MC/MCModule.cpp @@ -18,6 +18,10 @@ static bool AtomComp(const MCAtom *L, uint64_t Addr) { return L->getEndAddr() < Addr; } +static bool AtomCompInv(uint64_t Addr, const MCAtom *R) { + return Addr < R->getEndAddr(); +} + void MCModule::map(MCAtom *NewAtom) { uint64_t Begin = NewAtom->Begin; @@ -77,13 +81,23 @@ const MCAtom *MCModule::findAtomContaining(uint64_t Addr) const { } MCAtom *MCModule::findAtomContaining(uint64_t Addr) { - AtomListTy::iterator I = std::lower_bound(atom_begin(), atom_end(), - Addr, AtomComp); - if (I != atom_end() && (*I)->getBeginAddr() <= Addr) + return const_cast( + const_cast(this)->findAtomContaining(Addr)); +} + +const MCAtom *MCModule::findFirstAtomAfter(uint64_t Addr) const { + AtomListTy::const_iterator I = std::upper_bound(atom_begin(), atom_end(), + Addr, AtomCompInv); + if (I != atom_end()) return *I; return 0; } +MCAtom *MCModule::findFirstAtomAfter(uint64_t Addr) { + return const_cast( + const_cast(this)->findFirstAtomAfter(Addr)); +} + MCFunction *MCModule::createFunction(StringRef Name) { Functions.push_back(new MCFunction(Name, this)); return Functions.back(); -- cgit v1.1