CIRCT 23.0.0git
Loading...
Searching...
No Matches
Classes | Namespaces | Macros | Typedefs | Functions
InferDomains.cpp File Reference
#include "circt/Dialect/FIRRTL/FIRRTLInstanceGraph.h"
#include "circt/Dialect/FIRRTL/FIRRTLOps.h"
#include "circt/Dialect/FIRRTL/FIRRTLUtils.h"
#include "circt/Dialect/FIRRTL/Passes.h"
#include "circt/Support/Debug.h"
#include "circt/Support/Namespace.h"
#include "mlir/IR/AsmState.h"
#include "mlir/IR/Iterators.h"
#include "mlir/IR/Threading.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "circt/Dialect/FIRRTL/Passes.h.inc"
Include dependency graph for InferDomains.cpp:

Go to the source code of this file.

Classes

struct  ModuleState::Render< T >
 

Namespaces

namespace  circt
 The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
 
namespace  circt::firrtl
 

Macros

#define DEBUG_TYPE   "firrtl-infer-domains"
 
#define GEN_PASS_DEF_INFERDOMAINS
 

Typedefs

using DomainValue = mlir::TypedValue< DomainType >
 
using PortInsertions = SmallVector< std::pair< unsigned, PortInfo > >
 
using PendingSolutions = DenseMap< VariableTerm *, unsigned >
 A map from unsolved variables to a port index, where that port has not yet been created.
 
using PendingExports = llvm::MapVector< DomainValue, unsigned >
 A map from local domains to an aliasing port index, where that port has not yet been created.
 
using ExportTable = DenseMap< DomainValue, TinyPtrVector< DomainValue > >
 A map from domain IR values defined internal to the moduleOp, to ports that alias that domain.
 

Functions

static auto getPortDomainAssociation (ArrayAttr info, size_t i)
 From a domain info attribute, get the row of associated domains for a hardware value at index i.
 
static bool isPort (BlockArgument arg)
 Return true if the value is a port on the module.
 
static bool isPort (Value value)
 Return true if the value is a port on the module.
 
static bool isDriven (DomainValue port)
 Returns true if the value is driven by a connect op.
 
static bool isHardware (Type type)
 True if a value of the given type could be associated with a domain.
 
static bool isHardware (Value value)
 True if the given value could be association with a domain.
 
template<typename T >
static llvm::raw_ostream & operator<< (llvm::raw_ostream &out, ModuleState::Render< T > r)
 
static LogicalResult stripModule (FModuleLike op)
 
static LogicalResult stripCircuit (MLIRContext *context, CircuitOp circuit)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "firrtl-infer-domains"

Definition at line 34 of file InferDomains.cpp.

◆ GEN_PASS_DEF_INFERDOMAINS

#define GEN_PASS_DEF_INFERDOMAINS

Definition at line 38 of file InferDomains.cpp.

Typedef Documentation

◆ DomainValue

using DomainValue = mlir::TypedValue<DomainType>

Definition at line 60 of file InferDomains.cpp.

◆ ExportTable

using ExportTable = DenseMap<DomainValue, TinyPtrVector<DomainValue> >

A map from domain IR values defined internal to the moduleOp, to ports that alias that domain.

These ports make the domain useable as associations of ports, and we say these are exporting ports.

Definition at line 279 of file InferDomains.cpp.

◆ PendingExports

A map from local domains to an aliasing port index, where that port has not yet been created.

Eventually we will be exporting the domain value at the port index.

Definition at line 266 of file InferDomains.cpp.

◆ PendingSolutions

using PendingSolutions = DenseMap<VariableTerm *, unsigned>

A map from unsolved variables to a port index, where that port has not yet been created.

Eventually we will have an input domain at the port index, which will be the solution to the recorded variable.

Definition at line 261 of file InferDomains.cpp.

◆ PortInsertions

using PortInsertions = SmallVector<std::pair<unsigned, PortInfo> >

Definition at line 62 of file InferDomains.cpp.

Function Documentation

◆ getPortDomainAssociation()

static auto getPortDomainAssociation ( ArrayAttr  info,
size_t  i 
)
static

From a domain info attribute, get the row of associated domains for a hardware value at index i.

Definition at line 66 of file InferDomains.cpp.

◆ isDriven()

static bool isDriven ( DomainValue  port)
static

Returns true if the value is driven by a connect op.

Definition at line 86 of file InferDomains.cpp.

◆ isHardware() [1/2]

static bool isHardware ( Type  type)
static

True if a value of the given type could be associated with a domain.

Definition at line 95 of file InferDomains.cpp.

Referenced by isHardware().

◆ isHardware() [2/2]

static bool isHardware ( Value  value)
static

True if the given value could be association with a domain.

Definition at line 100 of file InferDomains.cpp.

References isHardware().

◆ isPort() [1/2]

static bool isPort ( BlockArgument  arg)
static

Return true if the value is a port on the module.

Definition at line 73 of file InferDomains.cpp.

Referenced by isPort().

◆ isPort() [2/2]

static bool isPort ( Value  value)
static

Return true if the value is a port on the module.

Definition at line 78 of file InferDomains.cpp.

References isPort().

◆ operator<<()

template<typename T >
static llvm::raw_ostream & operator<< ( llvm::raw_ostream &  out,
ModuleState::Render< T >  r 
)
static

Definition at line 504 of file InferDomains.cpp.

◆ stripCircuit()

static LogicalResult stripCircuit ( MLIRContext *  context,
CircuitOp  circuit 
)
static

Definition at line 1769 of file InferDomains.cpp.

References context, and stripModule().

◆ stripModule()

static LogicalResult stripModule ( FModuleLike  op)
static

Definition at line 1700 of file InferDomains.cpp.

Referenced by stripCircuit().