diff options
author | Aditya Kumar <hiraditya@msn.com> | 2018-07-21 14:13:44 +0000 |
---|---|---|
committer | Aditya Kumar <hiraditya@msn.com> | 2018-07-21 14:13:44 +0000 |
commit | 373ce7eca592bcba03458dde55b657a4d0def743 (patch) | |
tree | 8fded7b172e8044fd46d88d8f3e6a75102e8256c /llvm/lib | |
parent | 69bb064539612120250539afb1ee961c698b182b (diff) | |
download | bcm5719-llvm-373ce7eca592bcba03458dde55b657a4d0def743.tar.gz bcm5719-llvm-373ce7eca592bcba03458dde55b657a4d0def743.zip |
Early exit with cheaper checks
Reviewers: sebpop,davide,fhahn,trentxintong
Differential Revision: https://reviews.llvm.org/D49617
llvm-svn: 337643
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp b/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp index 20bfe458fc6..5ebfbf8a879 100644 --- a/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp +++ b/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp @@ -191,6 +191,17 @@ static bool canSplitCallSite(CallSite CS, TargetTransformInfo &TTI) { return false; BasicBlock *CallSiteBB = Instr->getParent(); + // Need 2 predecessors and cannot split an edge from an IndirectBrInst. + SmallVector<BasicBlock *, 2> Preds(predecessors(CallSiteBB)); + if (Preds.size() != 2 || isa<IndirectBrInst>(Preds[0]->getTerminator()) || + isa<IndirectBrInst>(Preds[1]->getTerminator())) + return false; + + // BasicBlock::canSplitPredecessors is more agressive, so checking for + // BasicBlock::isEHPad as well. + if (!CallSiteBB->canSplitPredecessors() || CallSiteBB->isEHPad()) + return false; + // Allow splitting a call-site only when the CodeSize cost of the // instructions before the call is less then DuplicationThreshold. The // instructions before the call will be duplicated in the split blocks and @@ -204,19 +215,7 @@ static bool canSplitCallSite(CallSite CS, TargetTransformInfo &TTI) { return false; } - // Need 2 predecessors and cannot split an edge from an IndirectBrInst. - SmallVector<BasicBlock *, 2> Preds(predecessors(CallSiteBB)); - if (Preds.size() != 2 || isa<IndirectBrInst>(Preds[0]->getTerminator()) || - isa<IndirectBrInst>(Preds[1]->getTerminator())) - return false; - - // Do not split a call-site in an exception handling block. This check - // prevents triggering an assertion in SplitEdge used via - // DuplicateInstructionsInSplitBetween. - if (CallSiteBB->isEHPad()) - return false; - - return CallSiteBB->canSplitPredecessors(); + return true; } static Instruction *cloneInstForMustTail(Instruction *I, Instruction *Before, |