[llvm][nfc] InstructionCostDetail encapsulation
authorMircea Trofin <mtrofin@google.com>
Wed, 8 Apr 2020 21:54:33 +0000 (14:54 -0700)
committerMircea Trofin <mtrofin@google.com>
Thu, 9 Apr 2020 15:21:18 +0000 (08:21 -0700)
Ensured initialized fields; encapsulad delta calulations and evaluation
of threshold having had changed; assertion for CostThresholdMap
dereference, to indicate design intent.

Differential Revision: https://reviews.llvm.org/D77762

llvm/lib/Analysis/InlineCost.cpp

index b4aa2fb..b9f0699 100644 (file)
@@ -116,10 +116,16 @@ class InlineCostCallAnalyzer;
 // This struct is used to store information about inline cost of a
 // particular instruction
 struct InstructionCostDetail {
-  int CostBefore;
-  int CostAfter;
-  int ThresholdBefore;
-  int ThresholdAfter;
+  int CostBefore = 0;
+  int CostAfter = 0;
+  int ThresholdBefore = 0;
+  int ThresholdAfter = 0;
+
+  int getThresholdDelta() const { return ThresholdAfter - ThresholdBefore; }
+
+  int getCostDelta() const { return CostAfter - CostBefore; }
+
+  bool hasThresholdChanged() const { return ThresholdAfter != ThresholdBefore; }
 };
 
 class CostAnnotationWriter : public AssemblyAnnotationWriter {
@@ -722,16 +728,16 @@ void CostAnnotationWriter::emitInstructionAnnot(
     // The cost of inlining of the given instruction is printed always.
     // The threshold delta is printed only when it is non-zero. It happens
     // when we decided to give a bonus at a particular instruction.
-    OS << "; cost before = " << CostThresholdMap[I].CostBefore <<
-              ", cost after = " << CostThresholdMap[I].CostAfter <<
-              ", threshold before = " << CostThresholdMap[I].ThresholdBefore <<
-              ", threshold after = " << CostThresholdMap[I].ThresholdAfter <<
-              ", ";
-    OS << "cost delta = " << CostThresholdMap[I].CostAfter -
-                                CostThresholdMap[I].CostBefore;
-    if (CostThresholdMap[I].ThresholdAfter != CostThresholdMap[I].ThresholdBefore)
-      OS << ", threshold delta = " << CostThresholdMap[I].ThresholdAfter -
-                                CostThresholdMap[I].ThresholdBefore;
+    assert(CostThresholdMap.count(I) > 0 &&
+           "Expected each instruction to have an instruction annotation");
+    const auto &Record = CostThresholdMap[I];
+    OS << "; cost before = " << Record.CostBefore
+       << ", cost after = " << Record.CostAfter
+       << ", threshold before = " << Record.ThresholdBefore
+       << ", threshold after = " << Record.ThresholdAfter << ", ";
+    OS << "cost delta = " << Record.getCostDelta();
+    if (Record.hasThresholdChanged())
+      OS << ", threshold delta = " << Record.getThresholdDelta();
     OS << "\n";
 }