Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- llvm/Analysis/DDGPrinter.h -------------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. //===----------------------------------------------------------------------===//
  10. //
  11. // This file defines the DOT printer for the Data-Dependence Graph (DDG).
  12. //
  13. //===----------------------------------------------------------------------===//
  14.  
  15. #ifndef LLVM_ANALYSIS_DDGPRINTER_H
  16. #define LLVM_ANALYSIS_DDGPRINTER_H
  17.  
  18. #include "llvm/Analysis/DDG.h"
  19. #include "llvm/Support/DOTGraphTraits.h"
  20.  
  21. namespace llvm {
  22. class LPMUpdater;
  23. class Loop;
  24.  
  25. //===--------------------------------------------------------------------===//
  26. // Implementation of DDG DOT Printer for a loop.
  27. //===--------------------------------------------------------------------===//
  28. class DDGDotPrinterPass : public PassInfoMixin<DDGDotPrinterPass> {
  29. public:
  30.   PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
  31.                         LoopStandardAnalysisResults &AR, LPMUpdater &U);
  32. };
  33.  
  34. //===--------------------------------------------------------------------===//
  35. // Specialization of DOTGraphTraits.
  36. //===--------------------------------------------------------------------===//
  37. template <>
  38. struct DOTGraphTraits<const DataDependenceGraph *>
  39.     : public DefaultDOTGraphTraits {
  40.  
  41.   DOTGraphTraits(bool IsSimple = false) : DefaultDOTGraphTraits(IsSimple) {}
  42.  
  43.   /// Generate a title for the graph in DOT format
  44.   std::string getGraphName(const DataDependenceGraph *G) {
  45.     assert(G && "expected a valid pointer to the graph.");
  46.     return "DDG for '" + std::string(G->getName()) + "'";
  47.   }
  48.  
  49.   /// Print a DDG node either in concise form (-ddg-dot-only) or
  50.   /// verbose mode (-ddg-dot).
  51.   std::string getNodeLabel(const DDGNode *Node,
  52.                            const DataDependenceGraph *Graph);
  53.  
  54.   /// Print attributes of an edge in the DDG graph. If the edge
  55.   /// is a MemoryDependence edge, then detailed dependence info
  56.   /// available from DependenceAnalysis is displayed.
  57.   std::string
  58.   getEdgeAttributes(const DDGNode *Node,
  59.                     GraphTraits<const DDGNode *>::ChildIteratorType I,
  60.                     const DataDependenceGraph *G);
  61.  
  62.   /// Do not print nodes that are part of a pi-block separately. They
  63.   /// will be printed when their containing pi-block is being printed.
  64.   bool isNodeHidden(const DDGNode *Node, const DataDependenceGraph *G);
  65.  
  66. private:
  67.   /// Print a DDG node in concise form.
  68.   static std::string getSimpleNodeLabel(const DDGNode *Node,
  69.                                         const DataDependenceGraph *G);
  70.  
  71.   /// Print a DDG node with more information including containing instructions
  72.   /// and detailed information about the dependence edges.
  73.   static std::string getVerboseNodeLabel(const DDGNode *Node,
  74.                                          const DataDependenceGraph *G);
  75.  
  76.   /// Print a DDG edge in concise form.
  77.   static std::string getSimpleEdgeAttributes(const DDGNode *Src,
  78.                                              const DDGEdge *Edge,
  79.                                              const DataDependenceGraph *G);
  80.  
  81.   /// Print a DDG edge with more information including detailed information
  82.   /// about the dependence edges.
  83.   static std::string getVerboseEdgeAttributes(const DDGNode *Src,
  84.                                               const DDGEdge *Edge,
  85.                                               const DataDependenceGraph *G);
  86. };
  87.  
  88. using DDGDotGraphTraits = DOTGraphTraits<const DataDependenceGraph *>;
  89.  
  90. } // namespace llvm
  91.  
  92. #endif // LLVM_ANALYSIS_DDGPRINTER_H
  93.