mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 14:20:29 +00:00
Early exit with cheaper checks
Reviewers: sebpop,davide,fhahn,trentxintong Differential Revision: https://reviews.llvm.org/D49617 llvm-svn: 337643
This commit is contained in:
parent
25ac3ae21d
commit
47d9e0be5b
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user