mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[Inliner] Fold analysis remarks into missed remarks
This significantly reduces the noise level of these messages. llvm-svn: 293492
This commit is contained in:
parent
eefef160f3
commit
9dcc59e9f5
@ -343,6 +343,7 @@ static bool shouldInline(CallSite CS,
|
||||
InlineCost IC = GetInlineCost(CS);
|
||||
Instruction *Call = CS.getInstruction();
|
||||
Function *Callee = CS.getCalledFunction();
|
||||
Function *Caller = CS.getCaller();
|
||||
|
||||
if (IC.isAlways()) {
|
||||
DEBUG(dbgs() << " Inlining: cost=always"
|
||||
@ -356,19 +357,20 @@ static bool shouldInline(CallSite CS,
|
||||
if (IC.isNever()) {
|
||||
DEBUG(dbgs() << " NOT Inlining: cost=never"
|
||||
<< ", Call: " << *CS.getInstruction() << "\n");
|
||||
ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "NeverInline", Call)
|
||||
<< NV("Callee", Callee)
|
||||
<< " should never be inlined (cost=never)");
|
||||
ORE.emit(OptimizationRemarkMissed(DEBUG_TYPE, "NeverInline", Call)
|
||||
<< NV("Callee", Callee) << " not inlined into "
|
||||
<< NV("Caller", Caller)
|
||||
<< " because it should never be inlined (cost=never)");
|
||||
return false;
|
||||
}
|
||||
|
||||
Function *Caller = CS.getCaller();
|
||||
if (!IC) {
|
||||
DEBUG(dbgs() << " NOT Inlining: cost=" << IC.getCost()
|
||||
<< ", thres=" << (IC.getCostDelta() + IC.getCost())
|
||||
<< ", Call: " << *CS.getInstruction() << "\n");
|
||||
ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "TooCostly", Call)
|
||||
<< NV("Callee", Callee) << " too costly to inline (cost="
|
||||
ORE.emit(OptimizationRemarkMissed(DEBUG_TYPE, "TooCostly", Call)
|
||||
<< NV("Callee", Callee) << " not inlined into "
|
||||
<< NV("Caller", Caller) << " because too costly to inline (cost="
|
||||
<< NV("Cost", IC.getCost()) << ", threshold="
|
||||
<< NV("Threshold", IC.getCostDelta() + IC.getCost()) << ")");
|
||||
return false;
|
||||
@ -379,8 +381,8 @@ static bool shouldInline(CallSite CS,
|
||||
DEBUG(dbgs() << " NOT Inlining: " << *CS.getInstruction()
|
||||
<< " Cost = " << IC.getCost()
|
||||
<< ", outer Cost = " << TotalSecondaryCost << '\n');
|
||||
ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE,
|
||||
"IncreaseCostInOtherContexts", Call)
|
||||
ORE.emit(OptimizationRemarkMissed(DEBUG_TYPE, "IncreaseCostInOtherContexts",
|
||||
Call)
|
||||
<< "Not inlining. Cost of inlining " << NV("Callee", Callee)
|
||||
<< " increases the cost of inlining " << NV("Caller", Caller)
|
||||
<< " in other contexts");
|
||||
@ -553,16 +555,11 @@ inlineCallsImpl(CallGraphSCC &SCC, CallGraph &CG,
|
||||
|
||||
// If the policy determines that we should inline this function,
|
||||
// try to do so.
|
||||
using namespace ore;
|
||||
if (!shouldInline(CS, GetInlineCost, ORE)) {
|
||||
ORE.emit(
|
||||
OptimizationRemarkMissed(DEBUG_TYPE, "NotInlined", DLoc, Block)
|
||||
<< NV("Callee", Callee) << " will not be inlined into "
|
||||
<< NV("Caller", Caller));
|
||||
if (!shouldInline(CS, GetInlineCost, ORE))
|
||||
continue;
|
||||
}
|
||||
|
||||
// Attempt to inline the function.
|
||||
using namespace ore;
|
||||
if (!InlineCallIfPossible(CS, InlineInfo, InlinedArrayAllocas,
|
||||
InlineHistoryID, InsertLifetime, AARGetter,
|
||||
ImportedFunctionsStats)) {
|
||||
|
@ -4,8 +4,7 @@
|
||||
|
||||
; CHECK: foo should always be inlined (cost=always) (hotness: 30)
|
||||
; CHECK: foo inlined into bar (hotness: 30)
|
||||
; CHECK: foz should never be inlined (cost=never) (hotness: 30)
|
||||
; CHECK: foz will not be inlined into bar (hotness: 30)
|
||||
; CHECK: foz not inlined into bar because it should never be inlined (cost=never) (hotness: 30)
|
||||
|
||||
; Function Attrs: alwaysinline nounwind uwtable
|
||||
define i32 @foo() #0 !prof !1 {
|
||||
|
@ -9,8 +9,7 @@
|
||||
; NO_HOTNESS-NOT: fox will not be inlined into bar because its definition is unavailable
|
||||
; CHECK: foo should always be inlined (cost=always)
|
||||
; CHECK: foo inlined into bar
|
||||
; CHECK: foz should never be inlined (cost=never)
|
||||
; CHECK: foz will not be inlined into bar
|
||||
; CHECK: foz not inlined into bar because it should never be inlined (cost=never)
|
||||
|
||||
; Function Attrs: alwaysinline nounwind uwtable
|
||||
define i32 @foo(i32 %x, i32 %y) #0 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user