[llvm] r342495 - [PGO][CHR] Add opt remarks.

Hiroshi Yamauchi via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 18 09:50:10 PDT 2018


Author: yamauchi
Date: Tue Sep 18 09:50:10 2018
New Revision: 342495

URL: http://llvm.org/viewvc/llvm-project?rev=342495&view=rev
Log:
[PGO][CHR] Add opt remarks.

Reviewers: davidxl

Reviewed By: davidxl

Subscribers: llvm-commits

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

Modified:
    llvm/trunk/lib/Transforms/Instrumentation/ControlHeightReduction.cpp

Modified: llvm/trunk/lib/Transforms/Instrumentation/ControlHeightReduction.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ControlHeightReduction.cpp?rev=342495&r1=342494&r2=342495&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/ControlHeightReduction.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/ControlHeightReduction.cpp Tue Sep 18 09:50:10 2018
@@ -19,6 +19,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Analysis/BlockFrequencyInfo.h"
 #include "llvm/Analysis/GlobalsModRef.h"
+#include "llvm/Analysis/OptimizationRemarkEmitter.h"
 #include "llvm/Analysis/ProfileSummaryInfo.h"
 #include "llvm/Analysis/RegionInfo.h"
 #include "llvm/Analysis/RegionIterator.h"
@@ -320,8 +321,9 @@ class CHRScope {
 class CHR {
  public:
   CHR(Function &Fin, BlockFrequencyInfo &BFIin, DominatorTree &DTin,
-      ProfileSummaryInfo &PSIin, RegionInfo &RIin)
-      : F(Fin), BFI(BFIin), DT(DTin), PSI(PSIin), RI(RIin) {}
+      ProfileSummaryInfo &PSIin, RegionInfo &RIin,
+      OptimizationRemarkEmitter &OREin)
+      : F(Fin), BFI(BFIin), DT(DTin), PSI(PSIin), RI(RIin), ORE(OREin) {}
 
   ~CHR() {
     for (CHRScope *Scope : Scopes) {
@@ -403,6 +405,7 @@ class CHR {
   DominatorTree &DT;
   ProfileSummaryInfo Ψ
   RegionInfo &RI;
+  OptimizationRemarkEmitter &ORE;
   CHRStats Stats;
 
   // All the true-biased regions in the function
@@ -771,6 +774,12 @@ CHRScope * CHR::findScope(Region *R) {
         Scopes.insert(Result);
         CHR_DEBUG(dbgs() << "Found a region with a branch\n");
         ++Stats.NumBranches;
+        if (!RI.HasBranch) {
+          ORE.emit([&]() {
+            return OptimizationRemarkMissed(DEBUG_TYPE, "BranchNotBiased", BI)
+                << "Branch not biased";
+          });
+        }
       }
     }
   }
@@ -811,6 +820,11 @@ CHRScope * CHR::findScope(Region *R) {
                                 FalseBiasedSelectsGlobal,
                                 SelectBiasMap))
             RI.Selects.push_back(SI);
+          else
+            ORE.emit([&]() {
+              return OptimizationRemarkMissed(DEBUG_TYPE, "SelectNotBiased", SI)
+                  << "Select not biased";
+            });
       };
       if (!Result) {
         CHR_DEBUG(dbgs() << "Found a select-only region\n");
@@ -882,6 +896,11 @@ void CHR::checkScopeHoistable(CHRScope *
                                          DT, Unhoistables, nullptr);
       if (!IsHoistable) {
         CHR_DEBUG(dbgs() << "Dropping select " << *SI << "\n");
+        ORE.emit([&]() {
+          return OptimizationRemarkMissed(DEBUG_TYPE,
+                                          "DropUnhoistableSelect", SI)
+              << "Dropped unhoistable select";
+        });
         it = Selects.erase(it);
         // Since we are dropping the select here, we also drop it from
         // Unhoistables.
@@ -905,6 +924,13 @@ void CHR::checkScopeHoistable(CHRScope *
             for (SelectInst *SI : Selects) {
               dbgs() << "SI " << *SI << "\n";
             });
+        for (SelectInst *SI : Selects) {
+          ORE.emit([&]() {
+            return OptimizationRemarkMissed(DEBUG_TYPE,
+                                            "DropSelectUnhoistableBranch", SI)
+                << "Dropped select due to unhoistable branch";
+          });
+        }
         Selects.erase(std::remove_if(Selects.begin(), Selects.end(),
                                      [EntryBB](SelectInst *SI) {
                                        return SI->getParent() == EntryBB;
@@ -1133,6 +1159,13 @@ SmallVector<CHRScope *, 8> CHR::splitSco
                         ConditionValues, DT, Unhoistables)) {
           PrevConditionValues = ConditionValues;
           PrevInsertPoint = InsertPoint;
+          ORE.emit([&]() {
+            return OptimizationRemarkMissed(DEBUG_TYPE,
+                                            "SplitScopeFromOuter",
+                                            RI.R->getEntry()->getTerminator())
+                << "Split scope from outer due to unhoistable branch/select "
+                << "and/or lack of common condition values";
+          });
         } else {
           // Not splitting from the outer. Use the outer bases and insert
           // point. Union the bases.
@@ -1162,6 +1195,13 @@ SmallVector<CHRScope *, 8> CHR::splitSco
         PrevConditionValues = ConditionValues;
         PrevInsertPoint = InsertPoint;
         PrevSplitFromOuter = true;
+        ORE.emit([&]() {
+          return OptimizationRemarkMissed(DEBUG_TYPE,
+                                          "SplitScopeFromPrev",
+                                          RI.R->getEntry()->getTerminator())
+              << "Split scope from previous due to unhoistable branch/select "
+              << "and/or lack of common condition values";
+        });
       } else {
         // Not splitting. Union the bases. Keep the hoist point.
         PrevConditionValues.insert(ConditionValues.begin(), ConditionValues.end());
@@ -1283,6 +1323,15 @@ void CHR::filterScopes(SmallVectorImpl<C
                 << " falsy-regions " << Scope->FalseBiasedRegions.size()
                 << " true-selects " << Scope->TrueBiasedSelects.size()
                 << " false-selects " << Scope->FalseBiasedSelects.size() << "\n");
+      ORE.emit([&]() {
+        return OptimizationRemarkMissed(
+            DEBUG_TYPE,
+            "DropScopeWithOneBranchOrSelect",
+            Scope->RegInfos[0].R->getEntry()->getTerminator())
+            << "Drop scope with < "
+            << ore::NV("CHRMergeThreshold", CHRMergeThreshold)
+            << " biased branch(es) or select(s)";
+      });
       continue;
     }
     Output.push_back(Scope);
@@ -1773,6 +1822,14 @@ void CHR::fixupBranchesAndSelects(CHRSco
   }
   Stats.NumBranchesDelta += NumCHRedBranches - 1;
   Stats.WeightedNumBranchesDelta += (NumCHRedBranches - 1) * ProfileCount;
+  ORE.emit([&]() {
+    return OptimizationRemark(DEBUG_TYPE,
+                              "CHR",
+                              // Refer to the hot (original) path
+                              MergedBR->getSuccessor(0)->getTerminator())
+        << "Merged " << ore::NV("NumCHRedBranches", NumCHRedBranches)
+        << " branches or selects";
+  });
   MergedBR->setCondition(MergedCondition);
   SmallVector<uint32_t, 2> Weights;
   Weights.push_back(static_cast<uint32_t>(CHRBranchBias.scale(1000)));
@@ -1961,8 +2018,18 @@ bool CHR::run() {
     }
   }
 
-  if (Changed)
+  if (Changed) {
     CHR_DEBUG(dumpIR(F, "after", &Stats));
+    ORE.emit([&]() {
+      return OptimizationRemark(DEBUG_TYPE, "Stats", &F)
+          << ore::NV("Function", &F) << " "
+          << "Reduced the number of branches in hot paths by "
+          << ore::NV("NumBranchesDelta", Stats.NumBranchesDelta)
+          << " (static) and "
+          << ore::NV("WeightedNumBranchesDelta", Stats.WeightedNumBranchesDelta)
+          << " (weighted by PGO count)";
+    });
+  }
 
   return Changed;
 }
@@ -1974,7 +2041,9 @@ bool ControlHeightReductionLegacyPass::r
   ProfileSummaryInfo &PSI =
       *getAnalysis<ProfileSummaryInfoWrapperPass>().getPSI();
   RegionInfo &RI = getAnalysis<RegionInfoPass>().getRegionInfo();
-  return CHR(F, BFI, DT, PSI, RI).run();
+  std::unique_ptr<OptimizationRemarkEmitter> OwnedORE =
+      llvm::make_unique<OptimizationRemarkEmitter>(&F);
+  return CHR(F, BFI, DT, PSI, RI, *OwnedORE.get()).run();
 }
 
 namespace llvm {
@@ -1992,7 +2061,8 @@ PreservedAnalyses ControlHeightReduction
   auto &MAM = MAMProxy.getManager();
   auto &PSI = *MAM.getCachedResult<ProfileSummaryAnalysis>(*F.getParent());
   auto &RI = FAM.getResult<RegionInfoAnalysis>(F);
-  bool Changed = CHR(F, BFI, DT, PSI, RI).run();
+  auto &ORE = FAM.getResult<OptimizationRemarkEmitterAnalysis>(F);
+  bool Changed = CHR(F, BFI, DT, PSI, RI, ORE).run();
   if (!Changed)
     return PreservedAnalyses::all();
   auto PA = PreservedAnalyses();




More information about the llvm-commits mailing list