[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
This commit is contained in:
Vedant Kumar 2018-12-11 18:05:31 +00:00
parent 9569523ab2
commit b3a7cae045
2 changed files with 5 additions and 6 deletions

View File

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

View File

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