From: Aditya Kumar Date: Sat, 21 Jul 2018 14:13:44 +0000 (+0000) Subject: Early exit with cheaper checks X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed64ebdb3f60543bd301b9fe6f8460e7966766e4;p=llvm Early exit with cheaper checks Reviewers: sebpop,davide,fhahn,trentxintong Differential Revision: https://reviews.llvm.org/D49617 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337643 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/CallSiteSplitting.cpp b/lib/Transforms/Scalar/CallSiteSplitting.cpp index 20bfe458fc6..5ebfbf8a879 100644 --- a/lib/Transforms/Scalar/CallSiteSplitting.cpp +++ b/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 Preds(predecessors(CallSiteBB)); + if (Preds.size() != 2 || isa(Preds[0]->getTerminator()) || + isa(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 Preds(predecessors(CallSiteBB)); - if (Preds.size() != 2 || isa(Preds[0]->getTerminator()) || - isa(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,