From 9e588d89c5ffadd6b8fcb9aecc725df3159e3417 Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Wed, 22 Jun 2016 19:26:44 +0000 Subject: [PATCH] [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273460 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../llvm/CodeGen/MachineBlockFrequencyInfo.h | 3 +++ lib/CodeGen/MachineBlockFrequencyInfo.cpp | 22 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/llvm/CodeGen/MachineBlockFrequencyInfo.h b/include/llvm/CodeGen/MachineBlockFrequencyInfo.h index feb394e7a69..4a881ee354a 100644 --- a/include/llvm/CodeGen/MachineBlockFrequencyInfo.h +++ b/include/llvm/CodeGen/MachineBlockFrequencyInfo.h @@ -14,6 +14,7 @@ #ifndef LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H #define LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H +#include "llvm/ADT/Optional.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/Support/BlockFrequency.h" #include @@ -50,6 +51,8 @@ public: /// BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const; + Optional getBlockProfileCount(const MachineBasicBlock *MBB) const; + const MachineFunction *getFunction() const; void view() const; diff --git a/lib/CodeGen/MachineBlockFrequencyInfo.cpp b/lib/CodeGen/MachineBlockFrequencyInfo.cpp index f83e7ff2fbf..689deb8c370 100644 --- a/lib/CodeGen/MachineBlockFrequencyInfo.cpp +++ b/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; } -- 2.50.1