[llvm] r351491 - [HotColdSplit] Consider resume instructions to be cold

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 17 14:35:47 PST 2019


Author: vedantk
Date: Thu Jan 17 14:35:47 2019
New Revision: 351491

URL: http://llvm.org/viewvc/llvm-project?rev=351491&view=rev
Log:
[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.

Added:
    llvm/trunk/test/Transforms/HotColdSplit/resume.ll
Modified:
    llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp

Modified: llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp?rev=351491&r1=351490&r2=351491&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp Thu Jan 17 14:35:47 2019
@@ -101,7 +101,7 @@ bool blockEndsInUnreachable(const BasicB
 
 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.

Added: llvm/trunk/test/Transforms/HotColdSplit/resume.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/HotColdSplit/resume.ll?rev=351491&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/HotColdSplit/resume.ll (added)
+++ llvm/trunk/test/Transforms/HotColdSplit/resume.ll Thu Jan 17 14:35:47 2019
@@ -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
+}




More information about the llvm-commits mailing list