From b3a7cae045020674f40adfec2d1e3a7a7581031c Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 11 Dec 2018 18:05:31 +0000 Subject: [PATCH] [HotColdSplitting] Disable outlining landingpad instructions (PR39917) It's currently not safe to outline landingpad instructions (see llvm.org/PR39917). Like @llvm.eh.typeid.for, the order and content of previous landingpad instructions in a function alters the lowering of subsequent landingpads by renumbering type info ID's. Outlining a landingpad therefore breaks exception handling & unwinding. llvm-svn: 348870 --- llvm/lib/Transforms/IPO/HotColdSplitting.cpp | 2 +- llvm/test/Transforms/HotColdSplit/eh-pads.ll | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Transforms/IPO/HotColdSplitting.cpp b/llvm/lib/Transforms/IPO/HotColdSplitting.cpp index 704ddbe..5d989a4 100644 --- a/llvm/lib/Transforms/IPO/HotColdSplitting.cpp +++ b/llvm/lib/Transforms/IPO/HotColdSplitting.cpp @@ -125,7 +125,7 @@ bool unlikelyExecuted(BasicBlock &BB) { /// Check whether it's safe to outline \p BB. static bool mayExtractBlock(const BasicBlock &BB) { - return !BB.hasAddressTaken(); + return !BB.hasAddressTaken() && !BB.isEHPad(); } /// Check whether \p Region is profitable to outline. diff --git a/llvm/test/Transforms/HotColdSplit/eh-pads.ll b/llvm/test/Transforms/HotColdSplit/eh-pads.ll index f9b55f3..1197a54 100644 --- a/llvm/test/Transforms/HotColdSplit/eh-pads.ll +++ b/llvm/test/Transforms/HotColdSplit/eh-pads.ll @@ -26,8 +26,11 @@ normal: ret void } +; See llvm.org/PR39917. It's currently not safe to outline landingpad +; instructions. +; ; CHECK-LABEL: define {{.*}}@bar( -; CHECK-NOT: landingpad +; CHECK: landingpad define void @bar(i32 %cond) personality i8 0 { entry: br i1 undef, label %exit, label %continue @@ -54,10 +57,6 @@ normal: ; CHECK: sideeffect(i32 1) ; CHECK: sink -; CHECK-LABEL: define {{.*}}@bar.cold.1( -; CHECK: sideeffect(i32 0) -; CHECK: sideeffect(i32 1) - declare void @sideeffect(i32) declare void @sink() cold -- 2.7.4