Skip to content

Commit

Permalink
[PGO] add debug option to view annotated cfg after prof use annotation
Browse files Browse the repository at this point in the history
Differential Revision: http://reviews.llvm.org/D28967 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292815 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
david-xl committed Jan 23, 2017
1 parent 41e0c1e commit 83c73f5
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
13 changes: 11 additions & 2 deletions lib/Analysis/BlockFrequencyInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,18 @@ cl::opt<unsigned>
"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;
Expand Down Expand Up @@ -89,8 +99,7 @@ struct DOTGraphTraits<BlockFrequencyInfo *> : public BFIDOTGTraitsBase {
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,
Expand Down
25 changes: 25 additions & 0 deletions lib/Transforms/Instrumentation/PGOInstrumentation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -143,6 +145,17 @@ static cl::opt<bool> NoPGOWarnMismatchComdat("no-pgo-warn-mismatch-comdat",
// 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
Expand Down Expand Up @@ -1202,6 +1215,18 @@ static bool annotateAllFunctions(
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.
Expand Down

0 comments on commit 83c73f5

Please sign in to comment.