From 30c50f3cea27964f85b53358e38a60fd07642960 Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Wed, 22 Jun 2016 19:26:44 +0000 Subject: [MBFI]: Add a new suboption for graph viewer -view-machine-block-freq-propagation-dags currently support integer and fraction as the suboptions. This patch adds the 'count' suboption to display actual profile count if available. llvm-svn: 273460 --- llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp') diff --git a/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp b/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp index f83e7ff2fbf..689deb8c370 100644 --- a/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp +++ b/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp @@ -29,7 +29,7 @@ using namespace llvm; #define DEBUG_TYPE "block-freq" #ifndef NDEBUG -enum GVDAGType { GVDT_None, GVDT_Fraction, GVDT_Integer }; +enum GVDAGType { GVDT_None, GVDT_Fraction, GVDT_Integer, GVDT_Count }; static cl::opt ViewMachineBlockFreqPropagationDAG( "view-machine-block-freq-propagation-dags", cl::Hidden, @@ -42,6 +42,9 @@ static cl::opt ViewMachineBlockFreqPropagationDAG( clEnumValN(GVDT_Integer, "integer", "display a graph using the raw " "integer fractional block frequency representation."), + clEnumValN(GVDT_Count, "count", "display a graph using the real " + "profile count if available."), + clEnumValEnd)); static cl::opt ViewMachineBlockFreqFuncName("view-mbfi-func-name", @@ -92,7 +95,7 @@ struct DOTGraphTraits std::string Result; raw_string_ostream OS(Result); - OS << Node->getName().str() << ":"; + OS << Node->getName().str() << " : "; switch (ViewMachineBlockFreqPropagationDAG) { case GVDT_Fraction: Graph->printBlockFreq(OS, Node); @@ -100,11 +103,18 @@ struct DOTGraphTraits case GVDT_Integer: OS << Graph->getBlockFreq(Node).getFrequency(); break; + case GVDT_Count: { + auto Count = Graph->getBlockProfileCount(Node); + if (Count) + OS << Count.getValue(); + else + OS << "Unknown"; + break; + } case GVDT_None: llvm_unreachable("If we are not supposed to render a graph we should " "never reach this point."); } - return Result; } static std::string getEdgeAttributes(const MachineBasicBlock *Node, @@ -187,6 +197,12 @@ MachineBlockFrequencyInfo::getBlockFreq(const MachineBasicBlock *MBB) const { return MBFI ? MBFI->getBlockFreq(MBB) : 0; } +Optional MachineBlockFrequencyInfo::getBlockProfileCount( + const MachineBasicBlock *MBB) const { + const Function *F = MBFI->getFunction()->getFunction(); + return MBFI ? MBFI->getBlockProfileCount(*F, MBB) : None; +} + const MachineFunction *MachineBlockFrequencyInfo::getFunction() const { return MBFI ? MBFI->getFunction() : nullptr; } -- cgit v1.2.3