[MBFI]: show branch probability in DOT graph

Differential Revision:  http://reviews.llvm.org/D21596

llvm-svn: 273430
This commit is contained in:
Xinliang David Li 2016-06-22 16:04:51 +00:00
parent 1a7a6957c0
commit 69317f2ec2
1 changed files with 18 additions and 0 deletions

View File

@ -20,7 +20,9 @@
#include "llvm/InitializePasses.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/GraphWriter.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
@ -80,6 +82,7 @@ struct DOTGraphTraits<MachineBlockFrequencyInfo *>
explicit DOTGraphTraits(bool isSimple = false)
: DefaultDOTGraphTraits(isSimple) {}
typedef MachineBasicBlock::const_succ_iterator EdgeIter;
static std::string getGraphName(const MachineBlockFrequencyInfo *G) {
return G->getFunction()->getName();
}
@ -104,6 +107,21 @@ struct DOTGraphTraits<MachineBlockFrequencyInfo *>
return Result;
}
static std::string getEdgeAttributes(const MachineBasicBlock *Node,
EdgeIter EI,
const MachineBlockFrequencyInfo *MBFI) {
MachineBranchProbabilityInfo &MBPI =
MBFI->getAnalysis<MachineBranchProbabilityInfo>();
BranchProbability BP = MBPI.getEdgeProbability(Node, EI);
uint32_t N = BP.getNumerator();
uint32_t D = BP.getDenominator();
double Percent = 100.0 * N / D;
std::string Str;
raw_string_ostream OS(Str);
OS << format("label=\"%.1f%%\"", Percent);
OS.flush();
return Str;
}
};
} // end namespace llvm