LLVM 22.0.0git
llvm::DDGBuilder Class Reference

Concrete implementation of a pure data dependence graph builder. More...

#include "llvm/Analysis/DDG.h"

Inheritance diagram for llvm::DDGBuilder:
[legend]

Public Member Functions

 DDGBuilder (DataDependenceGraph &G, DependenceInfo &D, const BasicBlockListType &BBs)
DDGNodecreateRootNode () final
 Create the root node of the graph.
DDGNodecreateFineGrainedNode (Instruction &I) final
 Create an atomic node in the graph given a single instruction.
DDGNodecreatePiBlock (const NodeListType &L) final
 Create a pi-block node in the graph representing a group of nodes in an SCC of the graph.
DDGEdgecreateDefUseEdge (DDGNode &Src, DDGNode &Tgt) final
 Create a def-use edge going from Src to Tgt.
DDGEdgecreateMemoryEdge (DDGNode &Src, DDGNode &Tgt) final
 Create a memory dependence edge going from Src to Tgt.
DDGEdgecreateRootedEdge (DDGNode &Src, DDGNode &Tgt) final
 Create a rooted edge going from Src to Tgt .
const NodeListTypegetNodesInPiBlock (const DDGNode &N) final
 Given a pi-block node, return a vector of all the nodes contained within it.
bool areNodesMergeable (const DDGNode &Src, const DDGNode &Tgt) const final
 Return true if the two nodes \pSrc and \pTgt are both simple nodes and the consecutive instructions after merging belong to the same basic block.
void mergeNodes (DDGNode &Src, DDGNode &Tgt) final
 Append the content of node B into node A and remove B and the edge between A and B from the graph.
bool shouldSimplify () const final
 Return true if graph simplification step is requested, and false otherwise.
bool shouldCreatePiBlocks () const final
 Return true if creation of pi-blocks are supported and desired, and false otherwise.
Public Member Functions inherited from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >
 AbstractDependenceGraphBuilder (DataDependenceGraph &G, DependenceInfo &D, const BasicBlockListType &BBs)
virtual ~AbstractDependenceGraphBuilder ()=default
void populate ()
 The main entry to the graph construction algorithm.
void computeInstructionOrdinals ()
 Compute ordinal numbers for each instruction and store them in a map for future look up.
void createFineGrainedNodes ()
 Create fine grained nodes.
void createDefUseEdges ()
 Analyze the def-use chains and create edges from the nodes containing definitions to the nodes containing the uses.
void createMemoryDependencyEdges ()
 Analyze data dependencies that exist between memory loads or stores, in the graph nodes and create edges between them.
void createAndConnectRootNode ()
 Create a root node and add edges such that each node in the graph is reachable from the root.
void createPiBlocks ()
 Apply graph abstraction to groups of nodes that belong to a strongly connected component of the graph to create larger compound nodes called pi-blocks.
void simplify ()
 Go through all the nodes in the graph and collapse any two nodes 'a' and 'b' if all of the following are true:
void sortNodesTopologically ()
 Topologically sort the graph nodes.

Additional Inherited Members

Public Types inherited from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >
using ClassesType
using NodeListType
Protected Types inherited from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >
using BasicBlockListType
using InstToNodeMap
 Map types to map instructions to nodes used when populating the graph.
using InstToOrdinalMap
 Map Types to map instruction/nodes to an ordinal number.
using NodeToOrdinalMap
Protected Member Functions inherited from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >
virtual void destroyEdge (EdgeType &E)
 Deallocate memory of edge E.
virtual void destroyNode (NodeType &N)
 Deallocate memory of node N.
size_t getOrdinal (Instruction &I)
 Given an instruction I return its associated ordinal number.
Protected Attributes inherited from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >
DataDependenceGraphGraph
 Reference to the graph that gets built by a concrete implementation of this builder.
DependenceInfoDI
 Dependence information used to create memory dependence edges in the graph.
const BasicBlockListTypeBBList
 The list of basic blocks to consider when building the graph.
InstToNodeMap IMap
 A mapping from instructions to the corresponding nodes in the graph.
InstToOrdinalMap InstOrdinalMap
 A mapping from each instruction to an ordinal number.
NodeToOrdinalMap NodeOrdinalMap
 A mapping from nodes to an ordinal number.

Detailed Description

Concrete implementation of a pure data dependence graph builder.

This class provides custom implementation for the pure-virtual functions used in the generic dependence graph build algorithm.

For information about time complexity of the build algorithm see the comments near the declaration of AbstractDependenceGraphBuilder.

Definition at line 347 of file DDG.h.

Constructor & Destructor Documentation

◆ DDGBuilder()

llvm::DDGBuilder::DDGBuilder ( DataDependenceGraph & G,
DependenceInfo & D,
const BasicBlockListType & BBs )
inline

Member Function Documentation

◆ areNodesMergeable()

bool DDGBuilder::areNodesMergeable ( const DDGNode & Src,
const DDGNode & Tgt ) const
finalvirtual

Return true if the two nodes \pSrc and \pTgt are both simple nodes and the consecutive instructions after merging belong to the same basic block.

Implements llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 266 of file DDG.cpp.

References llvm::dyn_cast().

◆ createDefUseEdge()

DDGEdge & llvm::DDGBuilder::createDefUseEdge ( DDGNode & Src,
DDGNode & Tgt )
inlinefinalvirtual

◆ createFineGrainedNode()

DDGNode & llvm::DDGBuilder::createFineGrainedNode ( Instruction & I)
inlinefinalvirtual

Create an atomic node in the graph given a single instruction.

Implements llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 359 of file DDG.h.

References assert(), llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >::Graph, and I.

◆ createMemoryEdge()

DDGEdge & llvm::DDGBuilder::createMemoryEdge ( DDGNode & Src,
DDGNode & Tgt )
inlinefinalvirtual

Create a memory dependence edge going from Src to Tgt.

Implements llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 377 of file DDG.h.

References assert(), E(), llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >::Graph, and llvm::DDGEdge::MemoryDependence.

◆ createPiBlock()

DDGNode & llvm::DDGBuilder::createPiBlock ( const NodeListType & L)
inlinefinalvirtual

Create a pi-block node in the graph representing a group of nodes in an SCC of the graph.

Implements llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 365 of file DDG.h.

References assert(), and llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >::Graph.

◆ createRootedEdge()

DDGEdge & llvm::DDGBuilder::createRootedEdge ( DDGNode & Src,
DDGNode & Tgt )
inlinefinalvirtual

◆ createRootNode()

DDGNode & llvm::DDGBuilder::createRootNode ( )
inlinefinalvirtual

Create the root node of the graph.

Implements llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 353 of file DDG.h.

References assert(), and llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >::Graph.

◆ getNodesInPiBlock()

const NodeListType & llvm::DDGBuilder::getNodesInPiBlock ( const DDGNode & N)
inlinefinalvirtual

Given a pi-block node, return a vector of all the nodes contained within it.

Implements llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 391 of file DDG.h.

References assert(), llvm::dyn_cast(), and N.

◆ mergeNodes()

◆ shouldCreatePiBlocks()

bool DDGBuilder::shouldCreatePiBlocks ( ) const
finalvirtual

Return true if creation of pi-blocks are supported and desired, and false otherwise.

Reimplemented from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 301 of file DDG.cpp.

References CreatePiBlocks.

◆ shouldSimplify()

bool DDGBuilder::shouldSimplify ( ) const
finalvirtual

Return true if graph simplification step is requested, and false otherwise.

Reimplemented from llvm::AbstractDependenceGraphBuilder< DataDependenceGraph >.

Definition at line 299 of file DDG.cpp.

References SimplifyDDG.


The documentation for this class was generated from the following files: