forked from OSchip/llvm-project
[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:
parent
48807d0d35
commit
32a014d048
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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"
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
|
||||
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
|
||||
|
||||
; Source:
|
||||
;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
|
||||
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
|
||||
|
||||
; Source:
|
||||
;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: opt -S -hotcoldsplit < %s | FileCheck %s
|
||||
; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
|
||||
|
||||
; Source:
|
||||
;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue