mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-08 19:25:47 +00:00
ScheduleDAG: colorize the DOT graph and improve formatting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173431 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -948,7 +948,8 @@ public:
|
|||||||
//
|
//
|
||||||
// Debugging support
|
// Debugging support
|
||||||
//
|
//
|
||||||
void print(raw_ostream &OS, const TargetMachine *TM = 0) const;
|
void print(raw_ostream &OS, const TargetMachine *TM = 0,
|
||||||
|
bool SkipOpers = false) const;
|
||||||
void dump() const;
|
void dump() const;
|
||||||
|
|
||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
|
@@ -79,6 +79,11 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename GraphType>
|
||||||
|
static std::string getNodeDescription(const void *, const GraphType &) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
/// If you want to specify custom node attributes, this is the place to do so
|
/// If you want to specify custom node attributes, this is the place to do so
|
||||||
///
|
///
|
||||||
template<typename GraphType>
|
template<typename GraphType>
|
||||||
|
@@ -34,6 +34,10 @@ namespace llvm {
|
|||||||
|
|
||||||
namespace DOT { // Private functions...
|
namespace DOT { // Private functions...
|
||||||
std::string EscapeString(const std::string &Label);
|
std::string EscapeString(const std::string &Label);
|
||||||
|
|
||||||
|
/// \brief Get a color string for this node number. Simply round-robin selects
|
||||||
|
/// from a reasonable number of colors.
|
||||||
|
StringRef getColorString(unsigned NodeNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace GraphProgram {
|
namespace GraphProgram {
|
||||||
@@ -173,6 +177,10 @@ public:
|
|||||||
// If we should include the address of the node in the label, do so now.
|
// If we should include the address of the node in the label, do so now.
|
||||||
if (DTraits.hasNodeAddressLabel(Node, G))
|
if (DTraits.hasNodeAddressLabel(Node, G))
|
||||||
O << "|" << static_cast<const void*>(Node);
|
O << "|" << static_cast<const void*>(Node);
|
||||||
|
|
||||||
|
std::string NodeDesc = DTraits.getNodeDescription(Node, G);
|
||||||
|
if (!NodeDesc.empty())
|
||||||
|
O << "|" << DOT::EscapeString(NodeDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string edgeSourceLabels;
|
std::string edgeSourceLabels;
|
||||||
@@ -193,6 +201,10 @@ public:
|
|||||||
// If we should include the address of the node in the label, do so now.
|
// If we should include the address of the node in the label, do so now.
|
||||||
if (DTraits.hasNodeAddressLabel(Node, G))
|
if (DTraits.hasNodeAddressLabel(Node, G))
|
||||||
O << "|" << static_cast<const void*>(Node);
|
O << "|" << static_cast<const void*>(Node);
|
||||||
|
|
||||||
|
std::string NodeDesc = DTraits.getNodeDescription(Node, G);
|
||||||
|
if (!NodeDesc.empty())
|
||||||
|
O << "|" << DOT::EscapeString(NodeDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DTraits.hasEdgeDestLabels()) {
|
if (DTraits.hasEdgeDestLabels()) {
|
||||||
|
@@ -1428,7 +1428,8 @@ static void printDebugLoc(DebugLoc DL, const MachineFunction *MF,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM,
|
||||||
|
bool SkipOpers) const {
|
||||||
// We can be a bit tidier if we know the TargetMachine and/or MachineFunction.
|
// We can be a bit tidier if we know the TargetMachine and/or MachineFunction.
|
||||||
const MachineFunction *MF = 0;
|
const MachineFunction *MF = 0;
|
||||||
const MachineRegisterInfo *MRI = 0;
|
const MachineRegisterInfo *MRI = 0;
|
||||||
@@ -1465,6 +1466,9 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
|||||||
else
|
else
|
||||||
OS << "UNKNOWN";
|
OS << "UNKNOWN";
|
||||||
|
|
||||||
|
if (SkipOpers)
|
||||||
|
return;
|
||||||
|
|
||||||
// Print the rest of the operands.
|
// Print the rest of the operands.
|
||||||
bool OmittedAnyCallClobbers = false;
|
bool OmittedAnyCallClobbers = false;
|
||||||
bool FirstOp = true;
|
bool FirstOp = true;
|
||||||
|
@@ -994,7 +994,7 @@ std::string ScheduleDAGInstrs::getGraphNodeLabel(const SUnit *SU) const {
|
|||||||
else if (SU == &ExitSU)
|
else if (SU == &ExitSU)
|
||||||
oss << "<exit>";
|
oss << "<exit>";
|
||||||
else
|
else
|
||||||
SU->getInstr()->print(oss);
|
SU->getInstr()->print(oss, &TM, /*SkipOpers=*/true);
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -41,6 +41,10 @@ namespace llvm {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isNodeHidden(const SUnit *Node) {
|
||||||
|
return (Node->NumPreds > 10 || Node->NumSuccs > 10);
|
||||||
|
}
|
||||||
|
|
||||||
static bool hasNodeAddressLabel(const SUnit *Node,
|
static bool hasNodeAddressLabel(const SUnit *Node,
|
||||||
const ScheduleDAG *Graph) {
|
const ScheduleDAG *Graph) {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -53,6 +53,17 @@ std::string llvm::DOT::EscapeString(const std::string &Label) {
|
|||||||
return Str;
|
return Str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \brief Get a color string for this node number. Simply round-robin selects
|
||||||
|
/// from a reasonable number of colors.
|
||||||
|
StringRef llvm::DOT::getColorString(unsigned ColorNumber) {
|
||||||
|
static const int NumColors = 20;
|
||||||
|
static const char* Colors[NumColors] = {
|
||||||
|
"aaaaaa", "aa0000", "00aa00", "aa5500", "0055ff", "aa00aa", "00aaaa",
|
||||||
|
"555555", "ff5555", "55ff55", "ffff55", "5555ff", "ff55ff", "55ffff",
|
||||||
|
"ffaaaa", "aaffaa", "ffffaa", "aaaaff", "ffaaff", "aaffff"};
|
||||||
|
return Colors[ColorNumber % NumColors];
|
||||||
|
}
|
||||||
|
|
||||||
// Execute the graph viewer. Return true if successful.
|
// Execute the graph viewer. Return true if successful.
|
||||||
static bool LLVM_ATTRIBUTE_UNUSED
|
static bool LLVM_ATTRIBUTE_UNUSED
|
||||||
ExecGraphViewer(const sys::Path &ExecPath, std::vector<const char*> &args,
|
ExecGraphViewer(const sys::Path &ExecPath, std::vector<const char*> &args,
|
||||||
|
Reference in New Issue
Block a user