mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-13 00:10:37 +00:00
[HotColdSplit] Consider resume instructions to be cold
Resuming exception unwinding is roughly as unlikely as throwing an exception. Tested on LNT+externals (in particular, the C++ EH regression tests provide end-to-end test coverage), as well as with a full build of iOS. llvm-svn: 351491
This commit is contained in:
parent
e467c341aa
commit
47f2b63f8c
@ -101,7 +101,7 @@ bool blockEndsInUnreachable(const BasicBlock &BB) {
|
||||
|
||||
bool unlikelyExecuted(BasicBlock &BB) {
|
||||
// Exception handling blocks are unlikely executed.
|
||||
if (BB.isEHPad())
|
||||
if (BB.isEHPad() || isa<ResumeInst>(BB.getTerminator()))
|
||||
return true;
|
||||
|
||||
// The block is cold if it calls/invokes a cold function.
|
||||
|
20
test/Transforms/HotColdSplit/resume.ll
Normal file
20
test/Transforms/HotColdSplit/resume.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-apple-macosx10.14.0"
|
||||
|
||||
; Consider `resume` to be cold.
|
||||
|
||||
; CHECK-LABEL: define {{.*}}@foo.cold.1(
|
||||
; CHECK: resume i32 undef
|
||||
|
||||
define i32 @foo(i32 %cond) personality i8 0 {
|
||||
entry:
|
||||
br i1 undef, label %resume-eh, label %normal
|
||||
|
||||
resume-eh:
|
||||
resume i32 undef
|
||||
|
||||
normal:
|
||||
ret i32 0
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user