mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
MachineScheduler support for viewGraph.
llvm-svn: 173432
This commit is contained in:
parent
8da14ff342
commit
efbba4d345
@ -325,6 +325,9 @@ public:
|
||||
|
||||
BitVector &getScheduledTrees() { return ScheduledTrees; }
|
||||
|
||||
void viewGraph(const Twine &Name, const Twine &Title) LLVM_OVERRIDE;
|
||||
void viewGraph() LLVM_OVERRIDE;
|
||||
|
||||
protected:
|
||||
// Top-Level entry points for the schedule() driver...
|
||||
|
||||
|
@ -578,8 +578,8 @@ namespace llvm {
|
||||
/// viewGraph - Pop up a GraphViz/gv window with the ScheduleDAG rendered
|
||||
/// using 'dot'.
|
||||
///
|
||||
void viewGraph(const Twine &Name, const Twine &Title);
|
||||
void viewGraph();
|
||||
virtual void viewGraph(const Twine &Name, const Twine &Title);
|
||||
virtual void viewGraph();
|
||||
|
||||
virtual void dumpNode(const SUnit *SU) const = 0;
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/GraphWriter.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <queue>
|
||||
|
||||
@ -557,7 +558,6 @@ void ScheduleDAGMI::buildDAGWithRegPressure() {
|
||||
|
||||
// Build the DAG, and compute current register pressure.
|
||||
buildSchedGraph(AA, &RPTracker);
|
||||
if (ViewMISchedDAGs) viewGraph();
|
||||
|
||||
// Initialize top/bottom trackers after computing region pressure.
|
||||
initRegPressure();
|
||||
@ -2294,3 +2294,90 @@ static MachineSchedRegistry ShufflerRegistry(
|
||||
"shuffle", "Shuffle machine instructions alternating directions",
|
||||
createInstructionShuffler);
|
||||
#endif // !NDEBUG
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// GraphWriter support for ScheduleDAGMI.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef NDEBUG
|
||||
namespace llvm {
|
||||
|
||||
template<> struct GraphTraits<
|
||||
ScheduleDAGMI*> : public GraphTraits<ScheduleDAG*> {};
|
||||
|
||||
template<>
|
||||
struct DOTGraphTraits<ScheduleDAGMI*> : public DefaultDOTGraphTraits {
|
||||
|
||||
DOTGraphTraits (bool isSimple=false) : DefaultDOTGraphTraits(isSimple) {}
|
||||
|
||||
static std::string getGraphName(const ScheduleDAG *G) {
|
||||
return G->MF.getName();
|
||||
}
|
||||
|
||||
static bool renderGraphFromBottomUp() {
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool isNodeHidden(const SUnit *Node) {
|
||||
return (Node->NumPreds > 10 || Node->NumSuccs > 10);
|
||||
}
|
||||
|
||||
static bool hasNodeAddressLabel(const SUnit *Node,
|
||||
const ScheduleDAG *Graph) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// If you want to override the dot attributes printed for a particular
|
||||
/// edge, override this method.
|
||||
static std::string getEdgeAttributes(const SUnit *Node,
|
||||
SUnitIterator EI,
|
||||
const ScheduleDAG *Graph) {
|
||||
if (EI.isArtificialDep())
|
||||
return "color=cyan,style=dashed";
|
||||
if (EI.isCtrlDep())
|
||||
return "color=blue,style=dashed";
|
||||
return "";
|
||||
}
|
||||
|
||||
static std::string getNodeLabel(const SUnit *SU, const ScheduleDAG *G) {
|
||||
std::string Str;
|
||||
raw_string_ostream SS(Str);
|
||||
SS << "SU(" << SU->NodeNum << ')';
|
||||
return SS.str();
|
||||
}
|
||||
static std::string getNodeDescription(const SUnit *SU, const ScheduleDAG *G) {
|
||||
return G->getGraphNodeLabel(SU);
|
||||
}
|
||||
|
||||
static std::string getNodeAttributes(const SUnit *N,
|
||||
const ScheduleDAG *Graph) {
|
||||
std::string Str("shape=Mrecord");
|
||||
const SchedDFSResult *DFS =
|
||||
static_cast<const ScheduleDAGMI*>(Graph)->getDFSResult();
|
||||
if (DFS) {
|
||||
Str += ",style=filled,fillcolor=\"#";
|
||||
Str += DOT::getColorString(DFS->getSubtreeID(N));
|
||||
Str += '"';
|
||||
}
|
||||
return Str;
|
||||
}
|
||||
};
|
||||
} // namespace llvm
|
||||
#endif // NDEBUG
|
||||
|
||||
/// viewGraph - Pop up a ghostview window with the reachable parts of the DAG
|
||||
/// rendered using 'dot'.
|
||||
///
|
||||
void ScheduleDAGMI::viewGraph(const Twine &Name, const Twine &Title) {
|
||||
#ifndef NDEBUG
|
||||
ViewGraph(this, Name, false, Title);
|
||||
#else
|
||||
errs() << "ScheduleDAGMI::viewGraph is only available in debug builds on "
|
||||
<< "systems with Graphviz or gv!\n";
|
||||
#endif // NDEBUG
|
||||
}
|
||||
|
||||
/// Out-of-line implementation with no arguments is handy for gdb.
|
||||
void ScheduleDAGMI::viewGraph() {
|
||||
viewGraph(getDAGName(), "Scheduling-Units Graph for " + getDAGName());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user