[PATCH] D49617: Early exit with cheaper checks

Aditya Kumar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 21 07:19:00 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL337643: Early exit with cheaper checks (authored by hiraditya, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D49617?vs=156621&id=156675#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D49617

Files:
  llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp


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<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 @@
       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,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49617.156675.patch
Type: text/x-patch
Size: 1771 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180721/d2f3bc99/attachment.bin>


More information about the llvm-commits mailing list