[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