[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:
Vedant Kumar 2019-01-17 22:35:47 +00:00
parent e467c341aa
commit 47f2b63f8c
2 changed files with 21 additions and 1 deletions

View File

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

View 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
}