Index: llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp +++ llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp @@ -191,6 +191,17 @@ 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 @@ 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,