diff options
| author | Xinliang David Li <davidxl@google.com> | 2016-06-22 19:26:44 +0000 |
|---|---|---|
| committer | Xinliang David Li <davidxl@google.com> | 2016-06-22 19:26:44 +0000 |
| commit | 30c50f3cea27964f85b53358e38a60fd07642960 (patch) | |
| tree | 5918a7aabb4a077d5081a6e7cb7ecda743801018 | |
| parent | a06d98955245dc27fc1995192000f0f240f45d85 (diff) | |
| download | bcm5719-llvm-30c50f3cea27964f85b53358e38a60fd07642960.tar.gz bcm5719-llvm-30c50f3cea27964f85b53358e38a60fd07642960.zip | |
[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
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineBlockFrequencyInfo.h | 3 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp | 22 |
2 files changed, 22 insertions, 3 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineBlockFrequencyInfo.h b/llvm/include/llvm/CodeGen/MachineBlockFrequencyInfo.h index feb394e7a69..4a881ee354a 100644 --- a/llvm/include/llvm/CodeGen/MachineBlockFrequencyInfo.h +++ b/llvm/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 <climits> @@ -50,6 +51,8 @@ public: /// BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const; + Optional<uint64_t> getBlockProfileCount(const MachineBasicBlock *MBB) const; + const MachineFunction *getFunction() const; void view() const; 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<GVDAGType> ViewMachineBlockFreqPropagationDAG( "view-machine-block-freq-propagation-dags", cl::Hidden, @@ -42,6 +42,9 @@ static cl::opt<GVDAGType> 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<std::string> ViewMachineBlockFreqFuncName("view-mbfi-func-name", @@ -92,7 +95,7 @@ struct DOTGraphTraits<MachineBlockFrequencyInfo *> 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<MachineBlockFrequencyInfo *> 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<uint64_t> 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; } |

