PageRenderTime 23ms CodeModel.GetById 18ms app.highlight 4ms RepoModel.GetById 0ms app.codeStats 0ms

/3rd_party/llvm/lib/CodeGen/ScheduleDAGPrinter.cpp

https://code.google.com/p/softart/
C++ | 100 lines | 67 code | 14 blank | 19 comment | 3 complexity | 56654e6d553d650b33e4878ff76a9d0a MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause, JSON, MPL-2.0-no-copyleft-exception, GPL-2.0, GPL-3.0, LGPL-3.0, BSD-2-Clause
  1//===-- ScheduleDAGPrinter.cpp - Implement ScheduleDAG::viewGraph() -------===//
  2//
  3//                     The LLVM Compiler Infrastructure
  4//
  5// This file is distributed under the University of Illinois Open Source
  6// License. See LICENSE.TXT for details.
  7//
  8//===----------------------------------------------------------------------===//
  9//
 10// This implements the ScheduleDAG::viewGraph method.
 11//
 12//===----------------------------------------------------------------------===//
 13
 14#include "llvm/CodeGen/ScheduleDAG.h"
 15#include "llvm/ADT/DenseSet.h"
 16#include "llvm/ADT/StringExtras.h"
 17#include "llvm/Assembly/Writer.h"
 18#include "llvm/CodeGen/MachineConstantPool.h"
 19#include "llvm/CodeGen/MachineFunction.h"
 20#include "llvm/CodeGen/MachineModuleInfo.h"
 21#include "llvm/IR/Constants.h"
 22#include "llvm/Support/Debug.h"
 23#include "llvm/Support/GraphWriter.h"
 24#include "llvm/Support/raw_ostream.h"
 25#include "llvm/Target/TargetMachine.h"
 26#include "llvm/Target/TargetRegisterInfo.h"
 27#include <fstream>
 28using namespace llvm;
 29
 30namespace llvm {
 31  template<>
 32  struct DOTGraphTraits<ScheduleDAG*> : public DefaultDOTGraphTraits {
 33
 34  DOTGraphTraits (bool isSimple=false) : DefaultDOTGraphTraits(isSimple) {}
 35
 36    static std::string getGraphName(const ScheduleDAG *G) {
 37      return G->MF.getName();
 38    }
 39
 40    static bool renderGraphFromBottomUp() {
 41      return true;
 42    }
 43
 44    static bool isNodeHidden(const SUnit *Node) {
 45      return (Node->NumPreds > 10 || Node->NumSuccs > 10);
 46    }
 47
 48    static bool hasNodeAddressLabel(const SUnit *Node,
 49                                    const ScheduleDAG *Graph) {
 50      return true;
 51    }
 52
 53    /// If you want to override the dot attributes printed for a particular
 54    /// edge, override this method.
 55    static std::string getEdgeAttributes(const SUnit *Node,
 56                                         SUnitIterator EI,
 57                                         const ScheduleDAG *Graph) {
 58      if (EI.isArtificialDep())
 59        return "color=cyan,style=dashed";
 60      if (EI.isCtrlDep())
 61        return "color=blue,style=dashed";
 62      return "";
 63    }
 64
 65
 66    std::string getNodeLabel(const SUnit *Node, const ScheduleDAG *Graph);
 67    static std::string getNodeAttributes(const SUnit *N,
 68                                         const ScheduleDAG *Graph) {
 69      return "shape=Mrecord";
 70    }
 71
 72    static void addCustomGraphFeatures(ScheduleDAG *G,
 73                                       GraphWriter<ScheduleDAG*> &GW) {
 74      return G->addCustomGraphFeatures(GW);
 75    }
 76  };
 77}
 78
 79std::string DOTGraphTraits<ScheduleDAG*>::getNodeLabel(const SUnit *SU,
 80                                                       const ScheduleDAG *G) {
 81  return G->getGraphNodeLabel(SU);
 82}
 83
 84/// viewGraph - Pop up a ghostview window with the reachable parts of the DAG
 85/// rendered using 'dot'.
 86///
 87void ScheduleDAG::viewGraph(const Twine &Name, const Twine &Title) {
 88  // This code is only for debugging!
 89#ifndef NDEBUG
 90  ViewGraph(this, Name, false, Title);
 91#else
 92  errs() << "ScheduleDAG::viewGraph is only available in debug builds on "
 93         << "systems with Graphviz or gv!\n";
 94#endif  // NDEBUG
 95}
 96
 97/// Out-of-line implementation with no arguments is handy for gdb.
 98void ScheduleDAG::viewGraph() {
 99  viewGraph(getDAGName(), "Scheduling-Units Graph for " + getDAGName());
100}