From 93f2e218e04462f23a1543ebe1a335d191c346dc Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 17 Jan 2019 21:42:36 +0000 Subject: [PATCH] [HotColdSplit] Relax requirement that the cold sink block be extractable Relaxing this requirement creates opportunities to split code dominated by an EH pad. Tested on LNT+externals. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351483 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/HotColdSplitting.cpp | 7 ++----- test/Transforms/HotColdSplit/eh-pads.ll | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/Transforms/IPO/HotColdSplitting.cpp b/lib/Transforms/IPO/HotColdSplitting.cpp index d0f3fdf0c60..2cf8af35401 100644 --- a/lib/Transforms/IPO/HotColdSplitting.cpp +++ b/lib/Transforms/IPO/HotColdSplitting.cpp @@ -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; diff --git a/test/Transforms/HotColdSplit/eh-pads.ll b/test/Transforms/HotColdSplit/eh-pads.ll index caf02e9002d..979d005c1ce 100644 --- a/test/Transforms/HotColdSplit/eh-pads.ll +++ b/test/Transforms/HotColdSplit/eh-pads.ll @@ -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 -- 2.50.1