[llvm] 7d09898 - [SelectOptimize] Add some debug logging. NFC
David Green via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 22 05:48:02 PST 2022
Author: David Green
Date: 2022-11-22T13:47:56Z
New Revision: 7d098988bc32d2894c338640cbee7084a02c15c8
URL: https://github.com/llvm/llvm-project/commit/7d098988bc32d2894c338640cbee7084a02c15c8
DIFF: https://github.com/llvm/llvm-project/commit/7d098988bc32d2894c338640cbee7084a02c15c8.diff
LOG: [SelectOptimize] Add some debug logging. NFC
This is some quick debug messages for the SelectOptimize pass, adding
some information for the costs that are measured from getInstructionCost
calls, and re-using the existing optimization remarks to print some
information about if transforms were performed or not.
Differential Revision: https://reviews.llvm.org/D138108
Added:
Modified:
llvm/lib/CodeGen/SelectOptimize.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectOptimize.cpp b/llvm/lib/CodeGen/SelectOptimize.cpp
index ca46e8aa7d424..b5a8a80193adb 100644
--- a/llvm/lib/CodeGen/SelectOptimize.cpp
+++ b/llvm/lib/CodeGen/SelectOptimize.cpp
@@ -555,6 +555,12 @@ void SelectOptimize::findProfitableSIGroupsBase(SelectGroups &SIGroups,
}
}
+static void EmitAndPrintRemark(OptimizationRemarkEmitter *ORE,
+ DiagnosticInfoOptimizationBase &Rem) {
+ LLVM_DEBUG(dbgs() << Rem.getMsg() << "\n");
+ ORE->emit(Rem);
+}
+
void SelectOptimize::findProfitableSIGroupsInnerLoops(
const Loop *L, SelectGroups &SIGroups, SelectGroups &ProfSIGroups) {
NumSelectOptAnalyzed += SIGroups.size();
@@ -589,7 +595,7 @@ void SelectOptimize::findProfitableSIGroupsInnerLoops(
OR << "Profitable to convert to branch (loop analysis). BranchCost="
<< BranchCost.toString() << ", SelectCost=" << SelectCost.toString()
<< ". ";
- ORE->emit(OR);
+ EmitAndPrintRemark(ORE, OR);
++NumSelectConvertedLoop;
ProfSIGroups.push_back(ASI);
} else {
@@ -597,7 +603,7 @@ void SelectOptimize::findProfitableSIGroupsInnerLoops(
ORmiss << "Select is more profitable (loop analysis). BranchCost="
<< BranchCost.toString()
<< ", SelectCost=" << SelectCost.toString() << ". ";
- ORE->emit(ORmiss);
+ EmitAndPrintRemark(ORE, ORmiss);
}
}
}
@@ -605,6 +611,7 @@ void SelectOptimize::findProfitableSIGroupsInnerLoops(
bool SelectOptimize::isConvertToBranchProfitableBase(
const SmallVector<SelectInst *, 2> &ASI) {
SelectInst *SI = ASI.front();
+ LLVM_DEBUG(dbgs() << "Analyzing select group containing " << *SI << "\n");
OptimizationRemark OR(DEBUG_TYPE, "SelectOpti", SI);
OptimizationRemarkMissed ORmiss(DEBUG_TYPE, "SelectOpti", SI);
@@ -612,7 +619,7 @@ bool SelectOptimize::isConvertToBranchProfitableBase(
if (PSI->isColdBlock(SI->getParent(), BFI.get())) {
++NumSelectColdBB;
ORmiss << "Not converted to branch because of cold basic block. ";
- ORE->emit(ORmiss);
+ EmitAndPrintRemark(ORE, ORmiss);
return false;
}
@@ -620,7 +627,7 @@ bool SelectOptimize::isConvertToBranchProfitableBase(
if (SI->getMetadata(LLVMContext::MD_unpredictable)) {
++NumSelectUnPred;
ORmiss << "Not converted to branch because of unpredictable branch. ";
- ORE->emit(ORmiss);
+ EmitAndPrintRemark(ORE, ORmiss);
return false;
}
@@ -629,7 +636,7 @@ bool SelectOptimize::isConvertToBranchProfitableBase(
if (isSelectHighlyPredictable(SI) && TLI->isPredictableSelectExpensive()) {
++NumSelectConvertedHighPred;
OR << "Converted to branch because of highly predictable branch. ";
- ORE->emit(OR);
+ EmitAndPrintRemark(ORE, OR);
return true;
}
@@ -638,12 +645,12 @@ bool SelectOptimize::isConvertToBranchProfitableBase(
if (hasExpensiveColdOperand(ASI)) {
++NumSelectConvertedExpColdOperand;
OR << "Converted to branch because of expensive cold operand.";
- ORE->emit(OR);
+ EmitAndPrintRemark(ORE, OR);
return true;
}
ORmiss << "Not profitable to convert to branch (base heuristic).";
- ORE->emit(ORmiss);
+ EmitAndPrintRemark(ORE, ORmiss);
return false;
}
@@ -665,7 +672,7 @@ bool SelectOptimize::hasExpensiveColdOperand(
OptimizationRemarkMissed ORmiss(DEBUG_TYPE, "SelectOpti", ASI.front());
ORmiss << "Profile data available but missing branch-weights metadata for "
"select instruction. ";
- ORE->emit(ORmiss);
+ EmitAndPrintRemark(ORE, ORmiss);
}
if (!ColdOperand)
return false;
@@ -801,7 +808,7 @@ bool SelectOptimize::checkLoopHeuristics(const Loop *L,
LoopCost[1].NonPredCost >= LoopCost[1].PredCost) {
ORmissL << "No select conversion in the loop due to no reduction of loop's "
"critical path. ";
- ORE->emit(ORmissL);
+ EmitAndPrintRemark(ORE, ORmissL);
return false;
}
@@ -818,7 +825,7 @@ bool SelectOptimize::checkLoopHeuristics(const Loop *L,
"loop's critical path. Gain="
<< Gain[1].toString()
<< ", RelativeGain=" << RelativeGain.toString() << "%. ";
- ORE->emit(ORmissL);
+ EmitAndPrintRemark(ORE, ORmissL);
return false;
}
@@ -834,7 +841,7 @@ bool SelectOptimize::checkLoopHeuristics(const Loop *L,
ORmissL << "No select conversion in the loop due to small gradient gain. "
"GradientGain="
<< GradientGain.toString() << "%. ";
- ORE->emit(ORmissL);
+ EmitAndPrintRemark(ORE, ORmissL);
return false;
}
}
@@ -842,7 +849,7 @@ bool SelectOptimize::checkLoopHeuristics(const Loop *L,
else if (Gain[1] < Gain[0]) {
ORmissL
<< "No select conversion in the loop due to negative gradient gain. ";
- ORE->emit(ORmissL);
+ EmitAndPrintRemark(ORE, ORmissL);
return false;
}
@@ -858,6 +865,8 @@ bool SelectOptimize::checkLoopHeuristics(const Loop *L,
bool SelectOptimize::computeLoopCosts(
const Loop *L, const SelectGroups &SIGroups,
DenseMap<const Instruction *, CostInfo> &InstCostMap, CostInfo *LoopCost) {
+ LLVM_DEBUG(dbgs() << "Calculating Latency / IPredCost / INonPredCost of loop "
+ << L->getHeader()->getName() << "\n");
const auto &SIset = getSIset(SIGroups);
// Compute instruction and loop-critical-path costs across two iterations for
// both predicated and non-predicated version.
@@ -891,7 +900,7 @@ bool SelectOptimize::computeLoopCosts(
ORmissL << "Invalid instruction cost preventing analysis and "
"optimization of the inner-most loop containing this "
"instruction. ";
- ORE->emit(ORmissL);
+ EmitAndPrintRemark(ORE, ORmissL);
return false;
}
IPredCost += Scaled64::get(ILatency.value());
@@ -925,12 +934,17 @@ bool SelectOptimize::computeLoopCosts(
INonPredCost = PredictedPathCost + MispredictCost;
}
+ LLVM_DEBUG(dbgs() << " " << ILatency << "/" << IPredCost << "/"
+ << INonPredCost << " for " << I << "\n");
InstCostMap[&I] = {IPredCost, INonPredCost};
MaxCost.PredCost = std::max(MaxCost.PredCost, IPredCost);
MaxCost.NonPredCost = std::max(MaxCost.NonPredCost, INonPredCost);
}
}
+ LLVM_DEBUG(dbgs() << "Iteration " << Iter + 1
+ << " MaxCost = " << MaxCost.PredCost << " "
+ << MaxCost.NonPredCost << "\n");
}
return true;
}
More information about the llvm-commits
mailing list