CIRCT  20.0.0git
Classes | Macros | Typedefs | Functions
FIRRTLOps.cpp File Reference
#include "circt/Dialect/FIRRTL/FIRRTLOps.h"
#include "circt/Dialect/FIRRTL/AnnotationDetails.h"
#include "circt/Dialect/FIRRTL/CHIRRTLDialect.h"
#include "circt/Dialect/FIRRTL/FIRRTLAnnotations.h"
#include "circt/Dialect/FIRRTL/FIRRTLAttributes.h"
#include "circt/Dialect/FIRRTL/FIRRTLInstanceImplementation.h"
#include "circt/Dialect/FIRRTL/FIRRTLTypes.h"
#include "circt/Dialect/FIRRTL/FIRRTLUtils.h"
#include "circt/Dialect/FIRRTL/FIRRTLVisitors.h"
#include "circt/Dialect/FIRRTL/FieldRefCache.h"
#include "circt/Dialect/HW/HWAttributes.h"
#include "circt/Dialect/HW/HWTypes.h"
#include "circt/Support/CustomDirectiveImpl.h"
#include "circt/Support/Utils.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Diagnostics.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/SymbolTable.h"
#include "mlir/Interfaces/FunctionImplementation.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/FormatVariadic.h"
#include "circt/Dialect/FIRRTL/FIRRTL.cpp.inc"
Include dependency graph for FIRRTLOps.cpp:

Go to the source code of this file.

Classes

struct  HasParameters< Properties, typename >
 
struct  HasParameters< Properties, std::void_t< decltype(std::declval< Properties >().parameters)> >
 

Macros

#define GET_OP_CLASSES
 

Typedefs

using LayerSet = SmallSet< SymbolRefAttr, 4, CompareSymbolRefAttr >
 

Functions

template<typename T >
static SmallVector< T > removeElementsAtIndices (ArrayRef< T > input, const llvm::BitVector &indicesToDrop)
 Remove elements from the input array corresponding to set bits in indicesToDrop, returning the elements not mentioned. More...
 
template<typename RetTy = FIRRTLType, typename... Args>
static RetTy emitInferRetTypeError (std::optional< Location > loc, const Twine &message, Args &&...args)
 Emit an error if optional location is non-null, return null of return type. More...
 
static MemOp::PortKind getMemPortKindFromType (FIRRTLType type)
 Return the kind of port this is given the port type from a 'mem' decl. More...
 
const char * toString (Flow flow)
 
void getAsmBlockArgumentNamesImpl (Operation *op, mlir::Region &region, OpAsmSetValueNameFn setNameFn)
 Get a special name to use when printing the entry block arguments of the region contained by an operation in this dialect. More...
 
static ParseResult parseNameKind (OpAsmParser &parser, firrtl::NameKindEnumAttr &result)
 A forward declaration for NameKind attribute parser. More...
 
static LayerSet getAmbientLayersAt (Operation *op)
 Get the ambient layers active at the given op. More...
 
static LayerSet getAmbientLayersFor (Value value)
 Get the ambient layer requirements at the definition site of the value. More...
 
static LayerSet getLayersFor (Value value)
 Get the effective layer requirements for the given value. More...
 
static bool isLayerCompatibleWith (mlir::SymbolRefAttr srcLayer, mlir::SymbolRefAttr dstLayer)
 Check that the source layer is compatible with the destination layer. More...
 
static bool isLayerCompatibleWith (SymbolRefAttr srcLayer, const LayerSet &dstLayers)
 Check that the source layer is present in the destination layers. More...
 
static bool isLayerSetCompatibleWith (const LayerSet &src, const LayerSet &dst, SmallVectorImpl< SymbolRefAttr > &missing)
 Check that the source layers are all present in the destination layers. More...
 
static ParseResult parseCircuitOpAttrs (OpAsmParser &parser, NamedAttrList &resultAttrs)
 
static void printCircuitOpAttrs (OpAsmPrinter &p, Operation *op, DictionaryAttr attr)
 
static SmallVector< PortInfogetPortImpl (FModuleLike module)
 
static hw::ModulePort::Direction dirFtoH (Direction dir)
 
static SmallVector< hw::PortInfo > getPortListImpl (FModuleLike module)
 
static hw::PortInfo getPortImpl (FModuleLike module, size_t idx)
 
static void insertPorts (FModuleLike op, ArrayRef< std::pair< unsigned, PortInfo >> ports, bool supportsInternalPaths=false)
 Inserts the given ports. More...
 
static void erasePorts (FModuleLike op, const llvm::BitVector &portIndices)
 Erases the ports that have their corresponding bit set in portIndices. More...
 
template<typename T >
static void eraseInternalPaths (T op, const llvm::BitVector &portIndices)
 
template<typename OpTy >
void buildModuleLike (OpBuilder &builder, OperationState &result, StringAttr name, ArrayRef< PortInfo > ports)
 
template<typename OpTy >
static void buildModule (OpBuilder &builder, OperationState &result, StringAttr name, ArrayRef< PortInfo > ports, ArrayAttr annotations, ArrayAttr layers)
 
template<typename OpTy >
static void buildClass (OpBuilder &builder, OperationState &result, StringAttr name, ArrayRef< PortInfo > ports)
 
static bool printModulePorts (OpAsmPrinter &p, Block *block, ArrayRef< bool > portDirections, ArrayRef< Attribute > portNames, ArrayRef< Attribute > portTypes, ArrayRef< Attribute > portAnnotations, ArrayRef< Attribute > portSyms, ArrayRef< Attribute > portLocs)
 Print a list of module ports in the following form: in x: !firrtl.uint<1> [{class = "DontTouch}], out "_port": !firrtl.uint<2> More...
 
static ParseResult parseModulePorts (OpAsmParser &parser, bool hasSSAIdentifiers, bool supportsSymbols, SmallVectorImpl< OpAsmParser::Argument > &entryArgs, SmallVectorImpl< Direction > &portDirections, SmallVectorImpl< Attribute > &portNames, SmallVectorImpl< Attribute > &portTypes, SmallVectorImpl< Attribute > &portAnnotations, SmallVectorImpl< Attribute > &portSyms, SmallVectorImpl< Attribute > &portLocs)
 Parse a list of module ports. More...
 
static void printParameterList (OpAsmPrinter &p, Operation *op, ArrayAttr parameters)
 Print a paramter list for a module or instance. More...
 
static void printFModuleLikeOp (OpAsmPrinter &p, FModuleLike op)
 
static ParseResult parseOptionalParameters (OpAsmParser &parser, SmallVectorImpl< Attribute > &parameters)
 Parse an parameter list if present. More...
 
static ParseResult parseParameterList (OpAsmParser &parser, ArrayAttr &parameters)
 Shim to use with assemblyFormat, custom<ParameterList>. More...
 
template<typename OpTy >
static ParseResult parseFModuleLikeOp (OpAsmParser &parser, OperationState &result, bool hasSSAIdentifiers)
 
static LogicalResult verifyInternalPaths (FModuleLike op, std::optional<::mlir::ArrayAttr > internalPaths)
 
static LogicalResult verifyProbeType (RefType refType, Location loc, CircuitOp circuitOp, SymbolTableCollection &symbolTable, Twine start)
 
static LogicalResult verifyPortSymbolUses (FModuleLike module, SymbolTableCollection &symbolTable)
 
template<typename OpTy >
ParseResult parseClassLike (OpAsmParser &parser, OperationState &result, bool hasSSAIdentifiers)
 
static void printClassLike (OpAsmPrinter &p, ClassLike op)
 
static size_t getAddressWidth (size_t depth)
 
static void forceableAsmResultNames (Forceable op, StringRef name, OpAsmSetValueNameFn setNameFn)
 Helper for naming forceable declarations (and their optional ref result). More...
 
static LogicalResult checkConnectFlow (Operation *connect)
 Check if the source and sink are of appropriate flow. More...
 
static bool isConstFieldDriven (FIRRTLBaseType type, bool isFlip=false, bool outerTypeIsConst=false)
 Checks if the type has any 'const' leaf elements . More...
 
static LogicalResult checkConnectConditionality (FConnectLike connect)
 Checks that connections to 'const' destinations are not dependent on non-'const' conditions in when blocks. More...
 
static bool checkAggConstant (Operation *op, Attribute attr, FIRRTLBaseType type)
 
template<typename OpTy >
ParseResult parseSubfieldLikeOp (OpAsmParser &parser, OperationState &result)
 
template<typename OpTy >
static void printSubfieldLikeOp (OpTy op, ::mlir::OpAsmPrinter &printer)
 
template<typename OpTy >
static LogicalResult verifySubfieldLike (OpTy op)
 
static bool isSameIntTypeKind (Type lhs, Type rhs, int32_t &lhsWidth, int32_t &rhsWidth, bool &isConstResult, std::optional< Location > loc)
 If LHS and RHS are both UInt or SInt types, the return true and fill in the width of them if known. More...
 
static FIRRTLBaseType inferMuxReturnType (FIRRTLBaseType high, FIRRTLBaseType low, bool isConstCondition, std::optional< Location > loc)
 Infer the result type for a multiplexer given its two operand types, which may be aggregates. More...
 
static bool isTypeAllowedForDPI (Operation *op, Type type)
 
static ParseResult parseElideAnnotations (OpAsmParser &parser, NamedAttrList &resultAttrs)
 Parse an optional attribute dictionary, adding an empty 'annotations' attribute if not specified. More...
 
static void printElideAnnotations (OpAsmPrinter &p, Operation *op, DictionaryAttr attr, ArrayRef< StringRef > extraElides={})
 
static ParseResult parseElidePortAnnotations (OpAsmParser &parser, NamedAttrList &resultAttrs)
 Parse an optional attribute dictionary, adding empty 'annotations' and 'portAnnotations' attributes if not specified. More...
 
static void printElidePortAnnotations (OpAsmPrinter &p, Operation *op, DictionaryAttr attr, ArrayRef< StringRef > extraElides={})
 
static void printNameKind (OpAsmPrinter &p, Operation *op, firrtl::NameKindEnumAttr attr, ArrayRef< StringRef > extraElides={})
 
static ParseResult parseFIRRTLImplicitSSAName (OpAsmParser &parser, NamedAttrList &resultAttrs)
 
static void printFIRRTLImplicitSSAName (OpAsmPrinter &p, Operation *op, DictionaryAttr attrs)
 
static ParseResult parseMemOp (OpAsmParser &parser, NamedAttrList &resultAttrs)
 
static void printMemOp (OpAsmPrinter &p, Operation *op, DictionaryAttr attr)
 Always elide "ruw" and elide "annotations" if it exists or if it is empty. More...
 
static ParseResult parseClassInterface (OpAsmParser &parser, Type &result)
 
static void printClassInterface (OpAsmPrinter &p, Operation *, ClassType type)
 
static ParseResult parseElideEmptyName (OpAsmParser &p, NamedAttrList &resultAttrs)
 
static void printElideEmptyName (OpAsmPrinter &p, Operation *op, DictionaryAttr attr, ArrayRef< StringRef > extraElides={})
 
static ParseResult parsePrintfAttrs (OpAsmParser &p, NamedAttrList &resultAttrs)
 
static void printPrintfAttrs (OpAsmPrinter &p, Operation *op, DictionaryAttr attr)
 
static ParseResult parseStopAttrs (OpAsmParser &p, NamedAttrList &resultAttrs)
 
static void printStopAttrs (OpAsmPrinter &p, Operation *op, DictionaryAttr attr)
 
static ParseResult parseVerifAttrs (OpAsmParser &p, NamedAttrList &resultAttrs)
 
static void printVerifAttrs (OpAsmPrinter &p, Operation *op, DictionaryAttr attr)
 
static void genericAsmResultNames (Operation *op, OpAsmSetValueNameFn setNameFn)
 

Macro Definition Documentation

◆ GET_OP_CLASSES

#define GET_OP_CLASSES

Definition at line 6298 of file FIRRTLOps.cpp.

Typedef Documentation

◆ LayerSet

using LayerSet = SmallSet<SymbolRefAttr, 4, CompareSymbolRefAttr>

Definition at line 382 of file FIRRTLOps.cpp.

Function Documentation

◆ buildClass()

template<typename OpTy >
static void buildClass ( OpBuilder &  builder,
OperationState &  result,
StringAttr  name,
ArrayRef< PortInfo ports 
)
static

Definition at line 1041 of file FIRRTLOps.cpp.

◆ buildModule()

template<typename OpTy >
static void buildModule ( OpBuilder &  builder,
OperationState &  result,
StringAttr  name,
ArrayRef< PortInfo ports,
ArrayAttr  annotations,
ArrayAttr  layers 
)
static

Definition at line 1013 of file FIRRTLOps.cpp.

◆ buildModuleLike()

template<typename OpTy >
void buildModuleLike ( OpBuilder &  builder,
OperationState &  result,
StringAttr  name,
ArrayRef< PortInfo ports 
)

◆ checkAggConstant()

static bool checkAggConstant ( Operation *  op,
Attribute  attr,
FIRRTLBaseType  type 
)
static

Definition at line 4162 of file FIRRTLOps.cpp.

◆ checkConnectConditionality()

static LogicalResult checkConnectConditionality ( FConnectLike  connect)
static

Checks that connections to 'const' destinations are not dependent on non-'const' conditions in when blocks.

Looks up the value's defining op until the defining op is null or a declaration of the value. If a SubAccessOp is encountered with a 'const' input, originalFieldType is made 'const'.

Definition at line 3577 of file FIRRTLOps.cpp.

References Python.support::connect(), and isConstFieldDriven().

◆ checkConnectFlow()

static LogicalResult checkConnectFlow ( Operation *  connect)
static

◆ dirFtoH()

static hw::ModulePort::Direction dirFtoH ( Direction  dir)
static

Definition at line 685 of file FIRRTLOps.cpp.

References assert(), circt::firrtl::In, Input, circt::firrtl::Out, and Output.

Referenced by getPortImpl(), and getPortListImpl().

◆ emitInferRetTypeError()

template<typename RetTy = FIRRTLType, typename... Args>
static RetTy emitInferRetTypeError ( std::optional< Location >  loc,
const Twine &  message,
Args &&...  args 
)
static

Emit an error if optional location is non-null, return null of return type.

Definition at line 95 of file FIRRTLOps.cpp.

◆ eraseInternalPaths()

template<typename T >
static void eraseInternalPaths ( op,
const llvm::BitVector &  portIndices 
)
static

Definition at line 907 of file FIRRTLOps.cpp.

References empty, circt::calyx::direction::get(), and removeElementsAtIndices().

◆ erasePorts()

static void erasePorts ( FModuleLike  op,
const llvm::BitVector &  portIndices 
)
static

Erases the ports that have their corresponding bit set in portIndices.

Definition at line 867 of file FIRRTLOps.cpp.

References assert(), circt::calyx::direction::get(), circt::calyx::direction::packAttribute(), and removeElementsAtIndices().

◆ forceableAsmResultNames()

static void forceableAsmResultNames ( Forceable  op,
StringRef  name,
OpAsmSetValueNameFn  setNameFn 
)
static

Helper for naming forceable declarations (and their optional ref result).

Definition at line 3321 of file FIRRTLOps.cpp.

◆ genericAsmResultNames()

static void genericAsmResultNames ( Operation *  op,
OpAsmSetValueNameFn  setNameFn 
)
static

Definition at line 5779 of file FIRRTLOps.cpp.

◆ getAddressWidth()

static size_t getAddressWidth ( size_t  depth)
static

Definition at line 3068 of file FIRRTLOps.cpp.

◆ getAmbientLayersAt()

static LayerSet getAmbientLayersAt ( Operation *  op)
static

Get the ambient layers active at the given op.

Definition at line 385 of file FIRRTLOps.cpp.

Referenced by getAmbientLayersFor().

◆ getAmbientLayersFor()

static LayerSet getAmbientLayersFor ( Value  value)
static

Get the ambient layer requirements at the definition site of the value.

Definition at line 404 of file FIRRTLOps.cpp.

References getAmbientLayersAt(), and circt::firrtl::getFieldRefFromValue().

Referenced by getLayersFor().

◆ getAsmBlockArgumentNamesImpl()

void getAsmBlockArgumentNamesImpl ( Operation *  op,
mlir::Region &  region,
OpAsmSetValueNameFn  setNameFn 
)

Get a special name to use when printing the entry block arguments of the region contained by an operation in this dialect.

Definition at line 328 of file FIRRTLOps.cpp.

◆ getLayersFor()

static LayerSet getLayersFor ( Value  value)
static

Get the effective layer requirements for the given value.

The effective layers for a value is the union of

  • the ambient layers for the cannonical storage location.
  • any explicit layer annotations in the value's type.

Definition at line 412 of file FIRRTLOps.cpp.

References getAmbientLayersFor().

◆ getMemPortKindFromType()

static MemOp::PortKind getMemPortKindFromType ( FIRRTLType  type)
static

Return the kind of port this is given the port type from a 'mem' decl.

Definition at line 143 of file FIRRTLOps.cpp.

References circt::firrtl::addr, circt::firrtl::clk, circt::firrtl::data, circt::firrtl::en, circt::firrtl::mask, circt::firrtl::rdata, circt::firrtl::wdata, circt::firrtl::wmask, and circt::firrtl::wmode.

◆ getPortImpl() [1/2]

static SmallVector<PortInfo> getPortImpl ( FModuleLike  module)
static

Definition at line 666 of file FIRRTLOps.cpp.

References circt::firrtl::AnnotationSet::forPort().

◆ getPortImpl() [2/2]

static hw::PortInfo getPortImpl ( FModuleLike  module,
size_t  idx 
)
static

Definition at line 730 of file FIRRTLOps.cpp.

References dirFtoH(), and circt::calyx::direction::get().

◆ getPortListImpl()

static SmallVector<hw::PortInfo> getPortListImpl ( FModuleLike  module)
static

◆ inferMuxReturnType()

static FIRRTLBaseType inferMuxReturnType ( FIRRTLBaseType  high,
FIRRTLBaseType  low,
bool  isConstCondition,
std::optional< Location >  loc 
)
static

Infer the result type for a multiplexer given its two operand types, which may be aggregates.

This essentially performs a pairwise comparison of fields and elements, as follows:

  • Identical operands inferred to their common type
  • Integer operands inferred to the larger one if both have a known width, a widthless integer otherwise.
  • Vectors inferred based on the element type.
  • Bundles inferred in a pairwise fashion based on the field types.

Definition at line 5218 of file FIRRTLOps.cpp.

References circt::calyx::direction::get(), circt::firrtl::FIRRTLBaseType::getAllConstDroppedType(), circt::firrtl::FIRRTLBaseType::getBitWidthOrSentinel(), circt::firrtl::FIRRTLBaseType::getConstType(), circt::firrtl::FIRRTLBaseType::isConst(), and numElements.

◆ insertPorts()

static void insertPorts ( FModuleLike  op,
ArrayRef< std::pair< unsigned, PortInfo >>  ports,
bool  supportsInternalPaths = false 
)
static

Inserts the given ports.

The insertion indices are expected to be in order. Insertion occurs in-order, such that ports with the same insertion index appear in the module in the same order they appeared in the list.

Definition at line 767 of file FIRRTLOps.cpp.

References assert(), empty, circt::calyx::direction::get(), circt::calyx::direction::packAttribute(), and circt::firrtl::direction::unGet().

◆ isConstFieldDriven()

static bool isConstFieldDriven ( FIRRTLBaseType  type,
bool  isFlip = false,
bool  outerTypeIsConst = false 
)
static

Checks if the type has any 'const' leaf elements .

If isFlip is true, the const leaf is not considered to be driven.

Definition at line 3553 of file FIRRTLOps.cpp.

References circt::firrtl::FIRRTLBaseType::isConst(), and circt::firrtl::FIRRTLBaseType::isPassive().

Referenced by checkConnectConditionality().

◆ isLayerCompatibleWith() [1/2]

static bool isLayerCompatibleWith ( mlir::SymbolRefAttr  srcLayer,
mlir::SymbolRefAttr  dstLayer 
)
static

Check that the source layer is compatible with the destination layer.

Either the source and destination are identical, or the source-layer is a parent of the destination. For example A is compatible with A.B.C, because any definition valid in A is also valid in A.B.C.

Definition at line 424 of file FIRRTLOps.cpp.

Referenced by isLayerCompatibleWith(), and isLayerSetCompatibleWith().

◆ isLayerCompatibleWith() [2/2]

static bool isLayerCompatibleWith ( SymbolRefAttr  srcLayer,
const LayerSet dstLayers 
)
static

Check that the source layer is present in the destination layers.

Definition at line 448 of file FIRRTLOps.cpp.

References isLayerCompatibleWith().

◆ isLayerSetCompatibleWith()

static bool isLayerSetCompatibleWith ( const LayerSet src,
const LayerSet dst,
SmallVectorImpl< SymbolRefAttr > &  missing 
)
static

Check that the source layers are all present in the destination layers.

True if all source layers are present in the destination. Outputs the set of source layers that are missing in the destination.

Definition at line 464 of file FIRRTLOps.cpp.

References isLayerCompatibleWith().

◆ isSameIntTypeKind()

static bool isSameIntTypeKind ( Type  lhs,
Type  rhs,
int32_t &  lhsWidth,
int32_t &  rhsWidth,
bool &  isConstResult,
std::optional< Location >  loc 
)
static

If LHS and RHS are both UInt or SInt types, the return true and fill in the width of them if known.

If unknown, return -1 for the widths. The constness of the result is also returned, where if both lhs and rhs are const, then the result is const.

On failure, this reports and error and returns false. This function should not be used if you don't want an error reported.

Definition at line 4867 of file FIRRTLOps.cpp.

◆ isTypeAllowedForDPI()

static bool isTypeAllowedForDPI ( Operation *  op,
Type  type 
)
static

◆ parseCircuitOpAttrs()

static ParseResult parseCircuitOpAttrs ( OpAsmParser &  parser,
NamedAttrList &  resultAttrs 
)
static

Definition at line 493 of file FIRRTLOps.cpp.

◆ parseClassInterface()

static ParseResult parseClassInterface ( OpAsmParser &  parser,
Type &  result 
)
static

Definition at line 5712 of file FIRRTLOps.cpp.

◆ parseClassLike()

template<typename OpTy >
ParseResult parseClassLike ( OpAsmParser &  parser,
OperationState &  result,
bool  hasSSAIdentifiers 
)

◆ parseElideAnnotations()

static ParseResult parseElideAnnotations ( OpAsmParser &  parser,
NamedAttrList &  resultAttrs 
)
static

Parse an optional attribute dictionary, adding an empty 'annotations' attribute if not specified.

Definition at line 5596 of file FIRRTLOps.cpp.

Referenced by parseElidePortAnnotations(), and parseFIRRTLImplicitSSAName().

◆ parseElideEmptyName()

static ParseResult parseElideEmptyName ( OpAsmParser &  p,
NamedAttrList &  resultAttrs 
)
static

Definition at line 5728 of file FIRRTLOps.cpp.

Referenced by parsePrintfAttrs(), parseStopAttrs(), and parseVerifAttrs().

◆ parseElidePortAnnotations()

static ParseResult parseElidePortAnnotations ( OpAsmParser &  parser,
NamedAttrList &  resultAttrs 
)
static

Parse an optional attribute dictionary, adding empty 'annotations' and 'portAnnotations' attributes if not specified.

Definition at line 5620 of file FIRRTLOps.cpp.

References parseElideAnnotations().

Referenced by parseMemOp().

◆ parseFIRRTLImplicitSSAName()

static ParseResult parseFIRRTLImplicitSSAName ( OpAsmParser &  parser,
NamedAttrList &  resultAttrs 
)
static

Definition at line 5677 of file FIRRTLOps.cpp.

References circt::inferImplicitSSAName(), and parseElideAnnotations().

◆ parseFModuleLikeOp()

template<typename OpTy >
static ParseResult parseFModuleLikeOp ( OpAsmParser &  parser,
OperationState &  result,
bool  hasSSAIdentifiers 
)
static

Definition at line 1446 of file FIRRTLOps.cpp.

◆ parseMemOp()

static ParseResult parseMemOp ( OpAsmParser &  parser,
NamedAttrList &  resultAttrs 
)
static

Definition at line 5698 of file FIRRTLOps.cpp.

References parseElidePortAnnotations().

◆ parseModulePorts()

static ParseResult parseModulePorts ( OpAsmParser &  parser,
bool  hasSSAIdentifiers,
bool  supportsSymbols,
SmallVectorImpl< OpAsmParser::Argument > &  entryArgs,
SmallVectorImpl< Direction > &  portDirections,
SmallVectorImpl< Attribute > &  portNames,
SmallVectorImpl< Attribute > &  portTypes,
SmallVectorImpl< Attribute > &  portAnnotations,
SmallVectorImpl< Attribute > &  portSyms,
SmallVectorImpl< Attribute > &  portLocs 
)
static

Parse a list of module ports.

If port names are SSA identifiers, then this will populate entryArgs.

Definition at line 1207 of file FIRRTLOps.cpp.

References assert(), circt::calyx::direction::get(), circt::hw::InnerSymbolTable::getInnerSymbolAttrName(), and isdigit.

Referenced by parseClassLike().

◆ parseNameKind()

static ParseResult parseNameKind ( OpAsmParser &  parser,
firrtl::NameKindEnumAttr &  result 
)
static

A forward declaration for NameKind attribute parser.

Definition at line 5649 of file FIRRTLOps.cpp.

References circt::calyx::direction::get().

◆ parseOptionalParameters()

static ParseResult parseOptionalParameters ( OpAsmParser &  parser,
SmallVectorImpl< Attribute > &  parameters 
)
static

Parse an parameter list if present.

module-parameter-list ::= < parameter-decl (, parameter-decl)* > parameter-decl ::= identifier : type parameter-decl ::= identifier : type = attribute

Definition at line 1400 of file FIRRTLOps.cpp.

◆ parseParameterList()

static ParseResult parseParameterList ( OpAsmParser &  parser,
ArrayAttr &  parameters 
)
static

Shim to use with assemblyFormat, custom<ParameterList>.

Definition at line 1426 of file FIRRTLOps.cpp.

◆ parsePrintfAttrs()

static ParseResult parsePrintfAttrs ( OpAsmParser &  p,
NamedAttrList &  resultAttrs 
)
static

Definition at line 5747 of file FIRRTLOps.cpp.

References parseElideEmptyName().

◆ parseStopAttrs()

static ParseResult parseStopAttrs ( OpAsmParser &  p,
NamedAttrList &  resultAttrs 
)
static

Definition at line 5757 of file FIRRTLOps.cpp.

References parseElideEmptyName().

◆ parseSubfieldLikeOp()

template<typename OpTy >
ParseResult parseSubfieldLikeOp ( OpAsmParser &  parser,
OperationState &  result 
)

Definition at line 4451 of file FIRRTLOps.cpp.

References circt::calyx::direction::get().

◆ parseVerifAttrs()

static ParseResult parseVerifAttrs ( OpAsmParser &  p,
NamedAttrList &  resultAttrs 
)
static

Definition at line 5766 of file FIRRTLOps.cpp.

References parseElideEmptyName().

◆ printCircuitOpAttrs()

static void printCircuitOpAttrs ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr 
)
static

Definition at line 502 of file FIRRTLOps.cpp.

◆ printClassInterface()

static void printClassInterface ( OpAsmPrinter &  p,
Operation *  ,
ClassType  type 
)
static

Definition at line 5720 of file FIRRTLOps.cpp.

◆ printClassLike()

static void printClassLike ( OpAsmPrinter &  p,
ClassLike  op 
)
static

Definition at line 1924 of file FIRRTLOps.cpp.

References printModulePorts().

◆ printElideAnnotations()

static void printElideAnnotations ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr,
ArrayRef< StringRef >  extraElides = {} 
)
static

Definition at line 5605 of file FIRRTLOps.cpp.

Referenced by printFIRRTLImplicitSSAName().

◆ printElideEmptyName()

static void printElideEmptyName ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr,
ArrayRef< StringRef >  extraElides = {} 
)
static

Definition at line 5737 of file FIRRTLOps.cpp.

Referenced by printPrintfAttrs(), printStopAttrs(), and printVerifAttrs().

◆ printElidePortAnnotations()

static void printElidePortAnnotations ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr,
ArrayRef< StringRef >  extraElides = {} 
)
static

Definition at line 5634 of file FIRRTLOps.cpp.

Referenced by printMemOp().

◆ printFIRRTLImplicitSSAName()

static void printFIRRTLImplicitSSAName ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attrs 
)
static

◆ printFModuleLikeOp()

static void printFModuleLikeOp ( OpAsmPrinter &  p,
FModuleLike  op 
)
static

Definition at line 1326 of file FIRRTLOps.cpp.

◆ printMemOp()

static void printMemOp ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr 
)
static

Always elide "ruw" and elide "annotations" if it exists or if it is empty.

Definition at line 5703 of file FIRRTLOps.cpp.

References printElidePortAnnotations().

◆ printModulePorts()

static bool printModulePorts ( OpAsmPrinter &  p,
Block *  block,
ArrayRef< bool >  portDirections,
ArrayRef< Attribute >  portNames,
ArrayRef< Attribute >  portTypes,
ArrayRef< Attribute >  portAnnotations,
ArrayRef< Attribute >  portSyms,
ArrayRef< Attribute >  portLocs 
)
static

Print a list of module ports in the following form: in x: !firrtl.uint<1> [{class = "DontTouch}], out "_port": !firrtl.uint<2>

When there is no block specified, the port names print as MLIR identifiers, wrapping in quotes if not legal to print as-is. When there is no block specified, this function always return false, indicating that there was no issue printing port names.

If there is a block specified, then port names will be printed as SSA values. If there is a reason the printed SSA values can't match the true port name, then this function will return true. When this happens, the caller should print the port names as a part of the attr-dict.

Definition at line 1133 of file FIRRTLOps.cpp.

References empty, and circt::calyx::direction::get().

Referenced by printClassLike().

◆ printNameKind()

static void printNameKind ( OpAsmPrinter &  p,
Operation *  op,
firrtl::NameKindEnumAttr  attr,
ArrayRef< StringRef >  extraElides = {} 
)
static

Definition at line 5666 of file FIRRTLOps.cpp.

◆ printParameterList()

static void printParameterList ( OpAsmPrinter &  p,
Operation *  op,
ArrayAttr  parameters 
)
static

Print a paramter list for a module or instance.

Definition at line 1309 of file FIRRTLOps.cpp.

◆ printPrintfAttrs()

static void printPrintfAttrs ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr 
)
static

Definition at line 5752 of file FIRRTLOps.cpp.

References printElideEmptyName().

◆ printStopAttrs()

static void printStopAttrs ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr 
)
static

Definition at line 5761 of file FIRRTLOps.cpp.

References printElideEmptyName().

◆ printSubfieldLikeOp()

template<typename OpTy >
static void printSubfieldLikeOp ( OpTy  op,
::mlir::OpAsmPrinter &  printer 
)
static

Definition at line 4536 of file FIRRTLOps.cpp.

◆ printVerifAttrs()

static void printVerifAttrs ( OpAsmPrinter &  p,
Operation *  op,
DictionaryAttr  attr 
)
static

Definition at line 5770 of file FIRRTLOps.cpp.

References printElideEmptyName().

◆ removeElementsAtIndices()

template<typename T >
static SmallVector<T> removeElementsAtIndices ( ArrayRef< T >  input,
const llvm::BitVector &  indicesToDrop 
)
static

Remove elements from the input array corresponding to set bits in indicesToDrop, returning the elements not mentioned.

Definition at line 56 of file FIRRTLOps.cpp.

References assert().

Referenced by eraseInternalPaths(), and erasePorts().

◆ toString()

const char* toString ( Flow  flow)

◆ verifyInternalPaths()

static LogicalResult verifyInternalPaths ( FModuleLike  op,
std::optional<::mlir::ArrayAttr >  internalPaths 
)
static

Definition at line 1591 of file FIRRTLOps.cpp.

◆ verifyPortSymbolUses()

static LogicalResult verifyPortSymbolUses ( FModuleLike  module,
SymbolTableCollection &  symbolTable 
)
static

Definition at line 1686 of file FIRRTLOps.cpp.

References verifyProbeType().

◆ verifyProbeType()

static LogicalResult verifyProbeType ( RefType  refType,
Location  loc,
CircuitOp  circuitOp,
SymbolTableCollection &  symbolTable,
Twine  start 
)
static

Definition at line 1665 of file FIRRTLOps.cpp.

Referenced by verifyPortSymbolUses().

◆ verifySubfieldLike()

template<typename OpTy >
static LogicalResult verifySubfieldLike ( OpTy  op)
static

Definition at line 4563 of file FIRRTLOps.cpp.