CIRCT 24.0.0git
Loading...
Searching...
No Matches
LowerXMRPass Class Reference
Inheritance diagram for LowerXMRPass:
Collaboration diagram for LowerXMRPass:

Private Member Functions

void runOnOperation () override
void getRefABIPrefix (FModuleLike mod, SmallVectorImpl< char > &prefix)
 Generate the ABI ref_<module> prefix string into prefix.
StringAttr getRefABIMacroForPort (FModuleLike mod, size_t portIndex, const Twine &prefix, bool backTick=false)
 Get full macro name as StringAttr for the specified ref port.
LogicalResult resolveReferencePath (mlir::TypedValue< RefType > refVal, ImplicitLocOpBuilder builder, mlir::FlatSymbolRefAttr &ref, SmallString< 128 > &stringLeaf)
LogicalResult resolveReference (mlir::TypedValue< RefType > refVal, ImplicitLocOpBuilder &builder, FlatSymbolRefAttr &ref, StringAttr &xmrAttr)
LogicalResult handleForceReleaseOp (Operation *op)
LogicalResult handleRefResolve (RefResolveOp resolve)
void setPortToRemove (Operation *op, size_t index, size_t numPorts)
LogicalResult handleInstanceOp (InstanceOp inst, InstanceGraph &instanceGraph)
LogicalResult handlePublicModuleRefPorts (FModuleOp module)
hw::InnerSymbolNamespace & getModuleNamespace (FModuleLike module)
 Get the cached namespace for a module.
InnerRefAttr getInnerRefTo (Value val)
InnerRefAttr getInnerRefTo (Operation *op)
void markForRemoval (Operation *op)
std::optional< size_t > getRemoteRefSend (Value val, bool errorIfNotFound=true)
size_t addReachingSendsEntry (Value atRefVal, XMRNode::SymOrIndexOp info, std::optional< size_t > continueFrom=std::nullopt)
void garbageCollect ()
bool isZeroWidth (FIRRTLBaseType t)

Private Attributes

DenseMap< Operation *, hw::InnerSymbolNamespace > moduleNamespaces
 Cached module namespaces.
DenseSet< Operation * > visitedModules
DenseMap< Value, size_t > dataflowAt
 Map of a reference value to an entry into refSendPathList.
SmallVector< XMRNode > refSendPathList
 refSendPathList is used to construct a path to the RefSendOp.
llvm::EquivalenceClasses< Value > * dataFlowClasses
DenseMap< Operation *, llvm::BitVector > refPortsToRemoveMap
SmallVector< Operation * > opsToRemove
 RefResolve, RefSend, and Connects involving them that will be removed.
DenseMap< size_t, SmallString< 128 > > xmrPathSuffix
 Record the internal path to an external module or a memory.
CircuitNamespace * circuitNamespace
hw::HierPathCache * hierPathCache
 Utility to create HerPathOps at a predefined location in the circuit.
DenseMap< FModuleOp, ModuleState > moduleStates
 Per-module helpers for creating operations within modules.

Detailed Description

Definition at line 126 of file LowerXMR.cpp.

Member Function Documentation

◆ addReachingSendsEntry()

size_t LowerXMRPass::addReachingSendsEntry ( Value atRefVal,
XMRNode::SymOrIndexOp info,
std::optional< size_t > continueFrom = std::nullopt )
inlineprivate

Definition at line 807 of file LowerXMR.cpp.

References dataflowAt, dataFlowClasses, and refSendPathList.

Referenced by handleInstanceOp(), and runOnOperation().

◆ garbageCollect()

void LowerXMRPass::garbageCollect ( )
inlineprivate

Definition at line 816 of file LowerXMR.cpp.

References dataflowAt, moduleStates, opsToRemove, refPortsToRemoveMap, and refSendPathList.

◆ getInnerRefTo() [1/2]

InnerRefAttr LowerXMRPass::getInnerRefTo ( Operation * op)
inlineprivate

Definition at line 774 of file LowerXMR.cpp.

References getModuleNamespace().

◆ getInnerRefTo() [2/2]

InnerRefAttr LowerXMRPass::getInnerRefTo ( Value val)
inlineprivate

Definition at line 763 of file LowerXMR.cpp.

References circt::firrtl::getInnerRefTo().

Referenced by runOnOperation().

◆ getModuleNamespace()

hw::InnerSymbolNamespace & LowerXMRPass::getModuleNamespace ( FModuleLike module)
inlineprivate

Get the cached namespace for a module.

Definition at line 759 of file LowerXMR.cpp.

References moduleNamespaces.

Referenced by getInnerRefTo().

◆ getRefABIMacroForPort()

StringAttr LowerXMRPass::getRefABIMacroForPort ( FModuleLike mod,
size_t portIndex,
const Twine & prefix,
bool backTick = false )
inlineprivate

Get full macro name as StringAttr for the specified ref port.

Uses existing 'prefix', optionally preprends the backtick character.

Definition at line 471 of file LowerXMR.cpp.

Referenced by handleInstanceOp(), and handlePublicModuleRefPorts().

◆ getRefABIPrefix()

void LowerXMRPass::getRefABIPrefix ( FModuleLike mod,
SmallVectorImpl< char > & prefix )
inlineprivate

Generate the ABI ref_<module> prefix string into prefix.

Definition at line 462 of file LowerXMR.cpp.

References toVector().

Referenced by handleInstanceOp(), and handlePublicModuleRefPorts().

◆ getRemoteRefSend()

std::optional< size_t > LowerXMRPass::getRemoteRefSend ( Value val,
bool errorIfNotFound = true )
inlineprivate

Definition at line 783 of file LowerXMR.cpp.

References dataflowAt, and dataFlowClasses.

Referenced by handleInstanceOp(), resolveReference(), resolveReferencePath(), and runOnOperation().

◆ handleForceReleaseOp()

LogicalResult LowerXMRPass::handleForceReleaseOp ( Operation * op)
inlineprivate

Definition at line 567 of file LowerXMR.cpp.

References failure(), isZeroWidth(), moduleStates, resolveReference(), and success().

◆ handleInstanceOp()

LogicalResult LowerXMRPass::handleInstanceOp ( InstanceOp inst,
InstanceGraph & instanceGraph )
inlineprivate

◆ handlePublicModuleRefPorts()

LogicalResult LowerXMRPass::handlePublicModuleRefPorts ( FModuleOp module)
inlineprivate

◆ handleRefResolve()

LogicalResult LowerXMRPass::handleRefResolve ( RefResolveOp resolve)
inlineprivate

◆ isZeroWidth()

bool LowerXMRPass::isZeroWidth ( FIRRTLBaseType t)
inlineprivate

◆ markForRemoval()

void LowerXMRPass::markForRemoval ( Operation * op)
inlineprivate

Definition at line 781 of file LowerXMR.cpp.

References opsToRemove.

Referenced by runOnOperation().

◆ resolveReference()

LogicalResult LowerXMRPass::resolveReference ( mlir::TypedValue< RefType > refVal,
ImplicitLocOpBuilder & builder,
FlatSymbolRefAttr & ref,
StringAttr & xmrAttr )
inlineprivate

Definition at line 550 of file LowerXMR.cpp.

References failure(), getRemoteRefSend(), resolveReferencePath(), and success().

Referenced by handleForceReleaseOp(), and handleRefResolve().

◆ resolveReferencePath()

LogicalResult LowerXMRPass::resolveReferencePath ( mlir::TypedValue< RefType > refVal,
ImplicitLocOpBuilder builder,
mlir::FlatSymbolRefAttr & ref,
SmallString< 128 > & stringLeaf )
inlineprivate

◆ runOnOperation()

◆ setPortToRemove()

void LowerXMRPass::setPortToRemove ( Operation * op,
size_t index,
size_t numPorts )
inlineprivate

Definition at line 621 of file LowerXMR.cpp.

References refPortsToRemoveMap.

Referenced by handleInstanceOp(), and runOnOperation().

Member Data Documentation

◆ circuitNamespace

CircuitNamespace* LowerXMRPass::circuitNamespace
private

Definition at line 895 of file LowerXMR.cpp.

Referenced by runOnOperation().

◆ dataflowAt

DenseMap<Value, size_t> LowerXMRPass::dataflowAt
private

Map of a reference value to an entry into refSendPathList.

Each entry in refSendPathList represents the path to RefSend. The path is required since there can be multiple paths to the RefSend and we need to identify a unique path.

Definition at line 874 of file LowerXMR.cpp.

Referenced by addReachingSendsEntry(), garbageCollect(), and getRemoteRefSend().

◆ dataFlowClasses

llvm::EquivalenceClasses<Value>* LowerXMRPass::dataFlowClasses
private

◆ hierPathCache

hw::HierPathCache* LowerXMRPass::hierPathCache
private

Utility to create HerPathOps at a predefined location in the circuit.

This handles caching and keeps the order consistent.

Definition at line 899 of file LowerXMR.cpp.

Referenced by resolveReferencePath(), and runOnOperation().

◆ moduleNamespaces

DenseMap<Operation *, hw::InnerSymbolNamespace> LowerXMRPass::moduleNamespaces
private

Cached module namespaces.

Definition at line 867 of file LowerXMR.cpp.

Referenced by getModuleNamespace().

◆ moduleStates

DenseMap<FModuleOp, ModuleState> LowerXMRPass::moduleStates
private

Per-module helpers for creating operations within modules.

Definition at line 902 of file LowerXMR.cpp.

Referenced by garbageCollect(), handleForceReleaseOp(), and runOnOperation().

◆ opsToRemove

SmallVector<Operation *> LowerXMRPass::opsToRemove
private

RefResolve, RefSend, and Connects involving them that will be removed.

Definition at line 890 of file LowerXMR.cpp.

Referenced by garbageCollect(), and markForRemoval().

◆ refPortsToRemoveMap

DenseMap<Operation *, llvm::BitVector> LowerXMRPass::refPortsToRemoveMap
private

Definition at line 887 of file LowerXMR.cpp.

Referenced by garbageCollect(), runOnOperation(), and setPortToRemove().

◆ refSendPathList

SmallVector<XMRNode> LowerXMRPass::refSendPathList
private

refSendPathList is used to construct a path to the RefSendOp.

Each entry is an XMRNode, with an InnerRefAttr or indexing op, and a pointer to the next node in the path. The InnerRefAttr can be to an InstanceOp or to the XMR defining op, the index op records narrowing along path. All the nodes representing an InstanceOp or indexing operation must have a valid NextNodeOnPath. Only the node representing the final XMR defining op has no NextNodeOnPath, which denotes a leaf node on the path.

Definition at line 883 of file LowerXMR.cpp.

Referenced by addReachingSendsEntry(), garbageCollect(), and resolveReferencePath().

◆ visitedModules

DenseSet<Operation *> LowerXMRPass::visitedModules
private

Definition at line 869 of file LowerXMR.cpp.

Referenced by handleInstanceOp().

◆ xmrPathSuffix

DenseMap<size_t, SmallString<128> > LowerXMRPass::xmrPathSuffix
private

Record the internal path to an external module or a memory.

Definition at line 893 of file LowerXMR.cpp.

Referenced by handleInstanceOp(), resolveReferencePath(), and runOnOperation().


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