mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-01 08:47:42 +00:00
[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:
parent
ad6716d28f
commit
be65d88fdf
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user