[PATCH] D28967: [PGO] Add option to view CFG with profile after profile annotation

David Li via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 23 11:09:33 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL292815: [PGO] add debug option to view annotated cfg after prof use annotation (authored by davidxl).

Changed prior to commit:
  https://reviews.llvm.org/D28967?vs=85271&id=85428#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D28967

Files:
  llvm/trunk/lib/Analysis/BlockFrequencyInfo.cpp
  llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp


Index: llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
+++ llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
@@ -58,7 +58,9 @@
 #include "llvm/Analysis/BranchProbabilityInfo.h"
 #include "llvm/Analysis/CFG.h"
 #include "llvm/Analysis/IndirectCallSiteVisitor.h"
+#include "llvm/Analysis/LoopInfo.h"
 #include "llvm/IR/CallSite.h"
+#include "llvm/IR/Dominators.h"
 #include "llvm/IR/DiagnosticInfo.h"
 #include "llvm/IR/GlobalValue.h"
 #include "llvm/IR/IRBuilder.h"
@@ -143,6 +145,17 @@
 // Command line option to enable/disable select instruction instrumentation.
 static cl::opt<bool> PGOInstrSelect("pgo-instr-select", cl::init(true),
                                     cl::Hidden);
+
+// Command line option to specify the name of the function for CFG dump
+static cl::opt<std::string>
+    PGOViewFunction("pgo-view-function", cl::Hidden,
+                    cl::desc("The option to specify "
+                             "the name of the function "
+                             "whose CFG will be displayed."));
+
+// Command line option to turn on CFG dot dump after profile annotation.
+extern cl::opt<bool> PGOViewCounts;
+
 namespace {
 
 /// The select instruction visitor plays three roles specified
@@ -1202,6 +1215,18 @@
       ColdFunctions.push_back(&F);
     else if (FreqAttr == PGOUseFunc::FFA_Hot)
       HotFunctions.push_back(&F);
+#ifndef NDEBUG
+    if (PGOViewCounts &&
+        (PGOViewFunction.empty() || F.getName().equals(PGOViewFunction))) {
+      LoopInfo LI{DominatorTree(F)};
+      std::unique_ptr<BranchProbabilityInfo> NewBPI =
+          llvm::make_unique<BranchProbabilityInfo>(F, LI);
+      std::unique_ptr<BlockFrequencyInfo> NewBFI =
+          llvm::make_unique<BlockFrequencyInfo>(F, *NewBPI, LI);
+
+      NewBFI->view();
+    }
+#endif
   }
   M.setProfileSummary(PGOReader->getSummary().getMD(M.getContext()));
   // Set function hotness attribute from the profile.
Index: llvm/trunk/lib/Analysis/BlockFrequencyInfo.cpp
===================================================================
--- llvm/trunk/lib/Analysis/BlockFrequencyInfo.cpp
+++ llvm/trunk/lib/Analysis/BlockFrequencyInfo.cpp
@@ -55,8 +55,18 @@
                                 "is no less than the max frequency of the "
                                 "function multiplied by this percent."));
 
+// Command line option to turn on CFG dot dump after profile annotation.
+cl::opt<bool> PGOViewCounts("pgo-view-counts", cl::init(false), cl::Hidden);
+
 namespace llvm {
 
+static GVDAGType getGVDT() {
+
+  if (PGOViewCounts)
+    return GVDT_Count;
+  return ViewBlockFreqPropagationDAG;
+}
+
 template <>
 struct GraphTraits<BlockFrequencyInfo *> {
   typedef const BasicBlock *NodeRef;
@@ -89,8 +99,7 @@
   std::string getNodeLabel(const BasicBlock *Node,
                            const BlockFrequencyInfo *Graph) {
 
-    return BFIDOTGTraitsBase::getNodeLabel(Node, Graph,
-                                           ViewBlockFreqPropagationDAG);
+    return BFIDOTGTraitsBase::getNodeLabel(Node, Graph, getGVDT());
   }
 
   std::string getNodeAttributes(const BasicBlock *Node,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28967.85428.patch
Type: text/x-patch
Size: 3274 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170123/47e9978c/attachment.bin>


More information about the llvm-commits mailing list