[HotColdSplit] Relax requirement that the cold sink block be extractable
authorVedant Kumar <vsk@apple.com>
Thu, 17 Jan 2019 21:42:36 +0000 (21:42 +0000)
committerVedant Kumar <vsk@apple.com>
Thu, 17 Jan 2019 21:42:36 +0000 (21:42 +0000)
Relaxing this requirement creates opportunities to split code dominated
by an EH pad.

Tested on LNT+externals.

llvm-svn: 351483

llvm/lib/Transforms/IPO/HotColdSplitting.cpp
llvm/test/Transforms/HotColdSplit/eh-pads.ll

index d0f3fdf..2cf8af3 100644 (file)
@@ -391,7 +391,8 @@ public:
 
     // Add SinkBB to the cold region. It's considered as an entry point before
     // any sink-successor blocks.
-    addBlockToRegion(&SinkBB, SinkScore);
+    if (mayExtractBlock(SinkBB))
+      addBlockToRegion(&SinkBB, SinkScore);
 
     // Find all successors of SinkBB dominated by SinkBB using DFS.
     auto SuccIt = ++df_begin(&SinkBB);
@@ -486,10 +487,6 @@ bool HotColdSplitting::outlineColdRegions(Function &F, ProfileSummaryInfo &PSI,
 
   // Find all cold regions.
   for (BasicBlock *BB : RPOT) {
-    // Skip blocks which can't be outlined.
-    if (!mayExtractBlock(*BB))
-      continue;
-
     // This block is already part of some outlining region.
     if (ColdBlocks.count(BB))
       continue;
index caf02e9..979d005 100644 (file)
@@ -58,6 +58,9 @@ normal:
 ; CHECK: sideeffect(i32 0)
 ; CHECK: sink
 
+; CHECK-LABEL: define {{.*}}@bar.cold.1(
+; CHECK: sideeffect(i32 1)
+
 declare void @sideeffect(i32)
 
 declare void @sink() cold