aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2020-02-20 16:22:35 -0800
committerBill Wendling <isanbard@gmail.com>2020-02-20 16:24:42 -0800
commit2fe457690da0fc38bc7f9f1d0aee2ba6a6a16ada (patch)
tree93dc0634556d26cdcfbb26db6e07211bcf335c9a /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
parentd4ded05ba851304b26a437896bc3962ef56f62cb (diff)
downloadllvm-2fe457690da0fc38bc7f9f1d0aee2ba6a6a16ada.zip
llvm-2fe457690da0fc38bc7f9f1d0aee2ba6a6a16ada.tar.gz
llvm-2fe457690da0fc38bc7f9f1d0aee2ba6a6a16ada.tar.bz2
Filter callbr insts from critical edge splitting
Similarly to how splitting predecessors with an indirectbr isn't handled in the generic way, we also shouldn't split callbrs, for similar reasons.
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/BasicBlockUtils.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
index 19b926d..4ae94ce 100644
--- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
+++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
@@ -506,7 +506,8 @@ llvm::SplitAllCriticalEdges(Function &F,
unsigned NumBroken = 0;
for (BasicBlock &BB : F) {
Instruction *TI = BB.getTerminator();
- if (TI->getNumSuccessors() > 1 && !isa<IndirectBrInst>(TI))
+ if (TI->getNumSuccessors() > 1 && !isa<IndirectBrInst>(TI) &&
+ !isa<CallBrInst>(TI))
for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
if (SplitCriticalEdge(TI, i, Options))
++NumBroken;