summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCFunction.cpp
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2013-08-21 07:28:24 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2013-08-21 07:28:24 +0000
commitff12d02d5107f9e10a3879beab3ba91c4da66061 (patch)
tree2bfe2e9415ef56d9db8c80989319446463f820b4 /llvm/lib/MC/MCFunction.cpp
parentd3fc5b96481e2f769f1e83ea53c3fafe057f5582 (diff)
downloadbcm5719-llvm-ff12d02d5107f9e10a3879beab3ba91c4da66061.tar.gz
bcm5719-llvm-ff12d02d5107f9e10a3879beab3ba91c4da66061.zip
MC CFG: Split MCBasicBlocks to mirror atom splitting.
When an MCTextAtom is split, all MCBasicBlocks backed by it are automatically split, with a fallthrough between both blocks, and the successors moved to the second block. llvm-svn: 188881
Diffstat (limited to 'llvm/lib/MC/MCFunction.cpp')
-rw-r--r--llvm/lib/MC/MCFunction.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/MC/MCFunction.cpp b/llvm/lib/MC/MCFunction.cpp
index 300ab5b1a0e..85e88e5852d 100644
--- a/llvm/lib/MC/MCFunction.cpp
+++ b/llvm/lib/MC/MCFunction.cpp
@@ -46,8 +46,9 @@ MCBasicBlock *MCFunction::find(uint64_t 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))
@@ -68,3 +69,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);
+}
OpenPOWER on IntegriCloud