My Project
Public Types | Public Member Functions | Protected Member Functions | Friends | List of all members
mlir::quantizer::CAGNode Class Reference

#include <ConstraintAnalysisGraph.h>

Inheritance diagram for mlir::quantizer::CAGNode:
Inheritance graph
[legend]

Public Types

enum  Kind {
  Kind::Anchor, Kind::OperandAnchor, Kind::ResultAnchor, Kind::LastAnchor = ResultAnchor,
  Kind::Constraint, Kind::SolveUniformConstraint, Kind::UniformPropagateExplicitScale, Kind::LastConstraint = UniformPropagateExplicitScale
}
 
using node_vector = SmallVector< CAGNode *, 1 >
 
using iterator = node_vector::iterator
 
using const_iterator = node_vector::const_iterator
 

Public Member Functions

virtual ~CAGNode ()=default
 
Kind getKind () const
 
int getNodeId () const
 Unique id of the node within the slice. More...
 
bool isDirty () const
 Whether the node is dirty, requiring one or more calls to propagate(). More...
 
void markDirty ()
 
void clearDirty ()
 
const_iterator begin () const
 Iterator over this node's children (outgoing) nodes. More...
 
const_iterator end () const
 
iterator begin ()
 
iterator end ()
 
const_iterator incoming_begin () const
 Iterator over this parents (incoming) nodes. More...
 
const_iterator incoming_end () const
 
iterator incoming_begin ()
 
iterator incoming_end ()
 
virtual void propagate (SolverContext &solverContext, const TargetConfiguration &config)
 
virtual void printLabel (raw_ostream &os) const
 Prints the node label, suitable for one-line display. More...
 
template<typename T >
void findChildrenOfKind (SmallVectorImpl< T *> &found)
 
void replaceIncoming (CAGNode *otherNode)
 
void addOutgoing (CAGNode *toNode)
 
bool isOrphan () const
 Whether this node is an orphan (has no incoming or outgoing connections). More...
 

Protected Member Functions

 CAGNode (Kind kind)
 

Friends

class CAGSlice
 

Detailed Description

A node in the Constraint Analysis Graph. Nodes are either anchors (representing results and operands) or constraints. Anchor nodes are connected to other anchor nodes via constraints. Nodes exist within graph slices, which are typically analyses attached to the function or module. Slices can contain other slices, which mirrors the nesting of analyses.

Nodes have directed relationships which propagate successor-ward when dirty. Relationships can be bi-directional, in which case, the constraint's propagation mechanism must ensure convergence.

Member Typedef Documentation

◆ const_iterator

using mlir::quantizer::CAGNode::const_iterator = node_vector::const_iterator

◆ iterator

using mlir::quantizer::CAGNode::iterator = node_vector::iterator

◆ node_vector

Member Enumeration Documentation

◆ Kind

Enumerator
Anchor 

Anchors.

OperandAnchor 
ResultAnchor 
LastAnchor 
Constraint 

Constraints.

SolveUniformConstraint 
UniformPropagateExplicitScale 
LastConstraint 

Constructor & Destructor Documentation

◆ ~CAGNode()

virtual mlir::quantizer::CAGNode::~CAGNode ( )
virtualdefault

◆ CAGNode()

mlir::quantizer::CAGNode::CAGNode ( Kind  kind)
inlineprotected

Member Function Documentation

◆ addOutgoing()

void CAGNode::addOutgoing ( CAGNode toNode)

Adds an outgoing connection to this node (and corresponding back incoming connection).

◆ begin() [1/2]

const_iterator mlir::quantizer::CAGNode::begin ( ) const
inline

Iterator over this node's children (outgoing) nodes.

◆ begin() [2/2]

iterator mlir::quantizer::CAGNode::begin ( )
inline

◆ clearDirty()

void mlir::quantizer::CAGNode::clearDirty ( )
inline

◆ end() [1/2]

const_iterator mlir::quantizer::CAGNode::end ( ) const
inline

◆ end() [2/2]

iterator mlir::quantizer::CAGNode::end ( )
inline

◆ findChildrenOfKind()

template<typename T >
void mlir::quantizer::CAGNode::findChildrenOfKind ( SmallVectorImpl< T *> &  found)
inline

◆ getKind()

Kind mlir::quantizer::CAGNode::getKind ( ) const
inline

◆ getNodeId()

int mlir::quantizer::CAGNode::getNodeId ( ) const
inline

Unique id of the node within the slice.

◆ incoming_begin() [1/2]

const_iterator mlir::quantizer::CAGNode::incoming_begin ( ) const
inline

Iterator over this parents (incoming) nodes.

◆ incoming_begin() [2/2]

iterator mlir::quantizer::CAGNode::incoming_begin ( )
inline

◆ incoming_end() [1/2]

const_iterator mlir::quantizer::CAGNode::incoming_end ( ) const
inline

◆ incoming_end() [2/2]

iterator mlir::quantizer::CAGNode::incoming_end ( )
inline

◆ isDirty()

bool mlir::quantizer::CAGNode::isDirty ( ) const
inline

Whether the node is dirty, requiring one or more calls to propagate().

◆ isOrphan()

bool mlir::quantizer::CAGNode::isOrphan ( ) const
inline

Whether this node is an orphan (has no incoming or outgoing connections).

◆ markDirty()

void mlir::quantizer::CAGNode::markDirty ( )
inline

◆ printLabel()

void CAGNode::printLabel ( raw_ostream &  os) const
virtual

Prints the node label, suitable for one-line display.

Reimplemented in mlir::quantizer::CAGResultAnchor, mlir::quantizer::CAGOperandAnchor, and mlir::quantizer::CAGAnchorNode.

◆ propagate()

virtual void mlir::quantizer::CAGNode::propagate ( SolverContext solverContext,
const TargetConfiguration config 
)
inlinevirtual

Reimplemented in mlir::quantizer::CAGAnchorNode.

◆ replaceIncoming()

void CAGNode::replaceIncoming ( CAGNode otherNode)

Replaces this node by rerouting any parent nodes to have otherNode as a child.

Friends And Related Function Documentation

◆ CAGSlice

friend class CAGSlice
friend

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