[HotColdSplit] Simplify tests by lowering their splitting thresholds

This gets rid of the brittle/mysterious calls to @sink()/@sideeffect()
peppered throughout the test cases. They are no longer needed to force
splitting to occur.

llvm-svn: 351480
This commit is contained in:
Vedant Kumar 2019-01-17 21:29:34 +00:00
parent 48807d0d35
commit 32a014d048
25 changed files with 39 additions and 63 deletions

View File

@ -69,9 +69,9 @@ static cl::opt<bool> EnableStaticAnalyis("hot-cold-static-analysis",
cl::init(true), cl::Hidden);
static cl::opt<int>
MinOutliningThreshold("min-outlining-thresh", cl::init(3), cl::Hidden,
cl::desc("Code size threshold for outlining within a "
"single BB (as a multiple of TCC_Basic)"));
SplittingThreshold("hotcoldsplit-threshold", cl::init(3), cl::Hidden,
cl::desc("Code size threshold for splitting cold code "
"(as a multiple of TCC_Basic)"));
namespace {
@ -131,6 +131,11 @@ static bool mayExtractBlock(const BasicBlock &BB) {
/// Check whether \p Region is profitable to outline.
static bool isProfitableToOutline(const BlockSequence &Region,
TargetTransformInfo &TTI) {
// If the splitting threshold is set at or below zero, skip the usual
// profitability check.
if (SplittingThreshold <= 0)
return true;
if (Region.size() > 1)
return true;
@ -142,7 +147,7 @@ static bool isProfitableToOutline(const BlockSequence &Region,
Cost += TTI.getInstructionCost(&I, TargetTransformInfo::TCK_CodeSize);
if (Cost >= (MinOutliningThreshold * TargetTransformInfo::TCC_Basic))
if (Cost >= (SplittingThreshold * TargetTransformInfo::TCC_Basic))
return true;
}
return false;

View File

@ -1,5 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; RUN: opt -passes=hotcoldsplit -S < %s | FileCheck %s
; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=2 -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"
@ -29,7 +28,6 @@ entry:
br i1 undef, label %if.then, label %if.end
if.then: ; preds = %entry
call void @sink()
call void @sink()
ret void
@ -59,8 +57,6 @@ entry:
br label %loop
loop:
call void @sink()
call void @sink()
call void @sink()
br label %loop
}

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=1 < %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"

View File

@ -1,5 +1,5 @@
; The magic number 6 comes from (1 * TCC_Expensive) + (1 * CostOfCallX86).
; RUN: opt -hotcoldsplit -min-outlining-thresh=6 -S < %s | FileCheck %s
; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=6 -S < %s | FileCheck %s
; Test that we outline even though there are only two cold instructions. TTI
; should determine that they are expensive in terms of code size.

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"
@ -20,8 +20,6 @@ if.end: ; preds = %entry
; We expect this block to be outlined. That kills the definition of %var.
%var = add i32 0, 0, !dbg !11
call void @sink()
call void @sink()
call void @sink()
br label %cleanup
cleanup:

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %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"

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %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"
@ -17,7 +17,6 @@ exception:
continue_exception:
call void @sideeffect(i32 0)
call void @sideeffect(i32 1)
call void @sink()
ret void
@ -44,17 +43,19 @@ continue:
exception:
; Note: EH pads are not candidates for region entry points.
%cleanup = landingpad i8 cleanup
ret void
br label %trivial-eh-handler
trivial-eh-handler:
call void @sideeffect(i32 1)
br label %normal
normal:
call void @sideeffect(i32 0)
call void @sideeffect(i32 1)
ret void
}
; CHECK-LABEL: define {{.*}}@foo.cold.1(
; CHECK: sideeffect(i32 0)
; CHECK: sideeffect(i32 1)
; CHECK: sink
declare void @sideeffect(i32)

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s
; Do not outline calls to @llvm.eh.typeid.for. See llvm.org/PR39545.
@ -16,8 +16,6 @@ if.then:
if.else:
%t = call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIi to i8*))
call void @sink()
call void @sink()
call void @sink()
ret void
}

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s 2>&1 | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s 2>&1 | FileCheck %s
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
; Source:
;

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"
@ -13,8 +13,6 @@ if.then:
ret void
if.else:
call void @sink()
call void @sink()
call void @sink()
ret void
}

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
; Source:
;
@ -55,7 +55,6 @@ return: ; preds = %exit2, %exit1
}
; CHECK-LABEL: define {{.*}}@foo.cold.1(
; TODO: Eliminate this unnecessary unconditional branch.
; CHECK: br
; CHECK: [[exit1Stub:.*]]:
; CHECK-NEXT: ret i1 true

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"
@ -33,8 +33,6 @@ define void @bar(i32) {
br i1 %2, label %sink, label %exit
sink:
tail call void @_Z10sideeffectv()
tail call void @_Z10sideeffectv()
tail call void @_Z10sideeffectv()
call void @llvm.trap()
unreachable

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"
@ -19,8 +19,6 @@ if.then:
if.else:
call void asm "", ""()
call void @sink()
call void @sink()
call void @sink()
ret void
}

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s 2>&1 | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s 2>&1 | FileCheck %s
; CHECK-LABEL: define {{.*}}@fun
; CHECK: call {{.*}}@fun.cold.2(

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
; Source:
;

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
; Source:
;
@ -26,11 +26,9 @@ target triple = "x86_64-apple-macosx10.14.0"
; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.1
; CHECK: call void @_Z10sideeffecti(i32 1)
; CHECK: call void @_Z10sideeffecti(i32 11)
; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.2
; CHECK: call void @_Z10sideeffecti(i32 0)
; CHECK: call void @_Z10sideeffecti(i32 10)
; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.3
; CHECK: call void @_Z4sinkv
@ -50,7 +48,6 @@ define void @_Z3fooii(i32, i32) {
; <label>:8: ; preds = %5
call void @_Z10sideeffecti(i32 0)
call void @_Z10sideeffecti(i32 10)
br label %14
; <label>:9: ; preds = %5
@ -60,7 +57,6 @@ define void @_Z3fooii(i32, i32) {
; <label>:12: ; preds = %9
call void @_Z10sideeffecti(i32 1)
call void @_Z10sideeffecti(i32 11)
br label %14
; <label>:13: ; preds = %9

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
; Source:
;

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %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"
@ -19,7 +19,6 @@ entry:
coldbb:
call void @sink()
call void @sideeffect()
call void @sideeffect()
br i1 undef, label %if.end, label %coldbb2
coldbb2:

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
; Source:
;
@ -8,14 +8,12 @@
; if (cond1) {
; if (cond2) { // This is the first cold region we visit.
; sideeffect(0);
; sideeffect(10);
; sink(0);
; }
;
; // There's a larger, overlapping cold region here. But we ignore it.
; // This could be improved.
; sideeffect(1);
; sideeffect(11);
; sink(1);
; }
; }
@ -42,13 +40,11 @@ define void @_Z3fooii(i32, i32) {
; <label>:10: ; preds = %7
call void @_Z10sideeffecti(i32 0)
call void @_Z10sideeffecti(i32 10)
call void @_Z4sinki(i32 0) #3
br label %11
; <label>:11: ; preds = %10, %7
call void @_Z10sideeffecti(i32 1)
call void @_Z10sideeffecti(i32 11)
call void @_Z4sinki(i32 1) #3
br label %12
@ -58,7 +54,6 @@ define void @_Z3fooii(i32, i32) {
; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.1
; CHECK: call void @_Z10sideeffecti(i32 0)
; CHECK: call void @_Z10sideeffecti(i32 10)
declare void @_Z10sideeffecti(i32)

View File

@ -1,5 +1,5 @@
; RUN: opt -hotcoldsplit -pass-remarks=hotcoldsplit -S < %s 2>&1 | FileCheck %s
; RUN: opt -passes=hotcoldsplit -pass-remarks=hotcoldsplit -S < %s 2>&1 | FileCheck %s
; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=0 -pass-remarks=hotcoldsplit -S < %s 2>&1 | FileCheck %s
; RUN: opt -hotcoldsplit-threshold=0 -passes=hotcoldsplit -pass-remarks=hotcoldsplit -S < %s 2>&1 | FileCheck %s
; Make sure this compiles. This test used to fail with an invalid phi node: the
; two predecessors were outlined and the SSA representation was invalid.

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"
@ -17,8 +17,6 @@ if.then: ; preds = %entry
if.end: ; preds = %entry
call void @llvm.dbg.value(metadata i32 %arg1, metadata !9, metadata !DIExpression()), !dbg !11
call void @sink()
call void @sink()
call void @sink()
ret void
}

View File

@ -1,4 +1,4 @@
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %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"
@ -15,7 +15,6 @@ entry:
coldbb:
call void @sink()
call void @sideeffect()
call void @sideeffect()
br i1 undef, label %if.end, label %coldbb2
coldbb2:
@ -39,7 +38,6 @@ entry:
coldbb:
call void @sink()
call void @sideeffect()
call void @sideeffect()
br i1 undef, label %if.end, label %coldbb2
coldbb2:

View File

@ -1,4 +1,4 @@
; RUN: opt -hotcoldsplit -S < %s | FileCheck %s
; 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"
@ -18,7 +18,6 @@ exception:
continue_exception:
call void @sideeffect(i32 0)
call void @sideeffect(i32 1)
call void @sink()
resume i32 undef