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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351491
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
--- /dev/null
+; 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
+}