X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FMC%2FMCFunction.cpp;h=767e1e0f470f5e23015f92f0152a0611a0d393e8;hb=527d783837d7b9759d6c88057e26df606e3c45a9;hp=5011d5fd6b8ef022edbb01e7dc9451fe8b8567fa;hpb=f9e2348e948451d30e4e0593e0beb3bcc31da8da;p=oota-llvm.git diff --git a/lib/MC/MCFunction.cpp b/lib/MC/MCFunction.cpp index 5011d5fd6b8..767e1e0f470 100644 --- a/lib/MC/MCFunction.cpp +++ b/lib/MC/MCFunction.cpp @@ -26,27 +26,28 @@ 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 { +MCBasicBlock *MCFunction::find(uint64_t StartAddr) { for (const_iterator I = begin(), E = end(); I != E; ++I) if ((*I)->getInsts()->getBeginAddr() == StartAddr) - return (*I); + return *I; return 0; } -MCBasicBlock *MCFunction::find(uint64_t StartAddr) { - return const_cast( - const_cast(this)->find(StartAddr)); +const MCBasicBlock *MCFunction::find(uint64_t StartAddr) const { + return const_cast(this)->find(StartAddr); } // MCBasicBlock MCBasicBlock::MCBasicBlock(const MCTextAtom &Insts, MCFunction *Parent) - : Insts(&Insts), Parent(Parent) -{} + : Insts(&Insts), Parent(Parent) { + getParent()->getParent()->trackBBForAtom(&Insts, this); +} void MCBasicBlock::addSuccessor(const MCBasicBlock *MCBB) { if (!isSuccessor(MCBB)) @@ -67,3 +68,14 @@ bool MCBasicBlock::isPredecessor(const MCBasicBlock *MCBB) const { return std::find(Predecessors.begin(), Predecessors.end(), MCBB) != Predecessors.end(); } + +void MCBasicBlock::splitBasicBlock(MCBasicBlock *SplitBB) { + assert(Insts->getEndAddr() + 1 == SplitBB->Insts->getBeginAddr() && + "Splitting unrelated basic blocks!"); + SplitBB->addPredecessor(this); + assert(SplitBB->Successors.empty() && + "Split basic block shouldn't already have successors!"); + SplitBB->Successors = Successors; + Successors.clear(); + addSuccessor(SplitBB); +}