CIRCT 24.0.0git
Loading...
Searching...
No Matches
Namespaces | Macros | Functions
SVOps.cpp File Reference
#include "circt/Dialect/SV/SVOps.h"
#include "circt/Dialect/Comb/CombOps.h"
#include "circt/Dialect/Emit/EmitOps.h"
#include "circt/Dialect/HW/CustomDirectiveImpl.h"
#include "circt/Dialect/HW/HWAttributes.h"
#include "circt/Dialect/HW/HWOps.h"
#include "circt/Dialect/HW/HWSymCache.h"
#include "circt/Dialect/HW/HWTypes.h"
#include "circt/Dialect/HW/ModuleImplementation.h"
#include "circt/Dialect/SV/SVAttributes.h"
#include "circt/Dialect/SV/SVTypes.h"
#include "circt/Support/CustomDirectiveImpl.h"
#include "circt/Support/ProceduralRegionTrait.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/FunctionImplementation.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/TypeSwitch.h"
#include <optional>
#include "circt/Dialect/SV/SV.cpp.inc"
Include dependency graph for SVOps.cpp:

Go to the source code of this file.

Namespaces

namespace  AssertPropertyLikeOp
 

Macros

#define GET_OP_CLASSES
 

Functions

static Operation * lookupSymbolInNested (Operation *symbolTableOp, StringRef symbol)
 Returns the operation registered with the given symbol name with the regions of 'symbolTableOp'.
 
static LogicalResult verifyMacroIdentSymbolUses (Operation *op, FlatSymbolRefAttr attr, SymbolTableCollection &symbolTable)
 Verifies symbols referenced by macro identifiers.
 
static LogicalResult verifyVerbatimSymbols (Operation *op, ArrayAttr symbols, hw::InnerRefNamespace &ns)
 Helper function to verify inner refs in symbols array for verbatim ops.
 
static LogicalResult verifyVerbatimFlatSymbolRefs (Operation *op, ArrayAttr symbols, SymbolTableCollection &symbolTable)
 Helper function to verify flat symbol refs in symbols array for verbatim ops.
 
static void getVerbatimExprAsmResultNames (Operation *op, function_ref< void(Value, StringRef)> setNameFn)
 Get the asm name for sv.verbatim.expr and sv.verbatim.expr.se.
 
static MacroDeclOp getReferencedMacro (const hw::HWSymbolCache *cache, Operation *op, FlatSymbolRefAttr macroName)
 
static ParseResult parseImplicitVarInitType (OpAsmParser &p, Type varType, std::optional< OpAsmParser::UnresolvedOperand > &initValue, Type &initType)
 
static void printImplicitVarInitType (OpAsmPrinter &p, Operation *op, Type varType, Value initValue, Type initType)
 
static ParseResult parseImplicitInitType (OpAsmParser &p, mlir::Type regType, std::optional< OpAsmParser::UnresolvedOperand > &initValue, mlir::Type &initType)
 
static void printImplicitInitType (OpAsmPrinter &p, Operation *op, mlir::Type regType, mlir::Value initValue, mlir::Type initType)
 
template<class Op >
static LogicalResult canonicalizeIfDefLike (Op op, PatternRewriter &rewriter)
 
static void replaceOpWithRegion (PatternRewriter &rewriter, Operation *op, Region &region)
 Replaces the given op with the contents of the given single-block region.
 
static ParseResult parseEventList (OpAsmParser &p, Attribute &eventsAttr, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &clocksOperands)
 
static void printEventList (OpAsmPrinter &p, AlwaysOp op, ArrayAttr portsAttr, OperandRange operands)
 
static SmallVector< CasePatternBit > getPatternBitsForValue (const APInt &value)
 
template<typename AssignTy >
static LogicalResult mergeNeiboringAssignments (AssignTy op, PatternRewriter &rewriter)
 
static ParseResult parseModportStructs (OpAsmParser &parser, ArrayAttr &portsAttr)
 
static void printModportStructs (OpAsmPrinter &p, Operation *, ArrayAttr portsAttr)
 
ParseResult parseIfaceTypeAndSignal (OpAsmParser &p, Type &ifaceTy, FlatSymbolRefAttr &signalName)
 
void printIfaceTypeAndSignal (OpAsmPrinter &p, Operation *op, Type type, FlatSymbolRefAttr signalName)
 
LogicalResult verifySignalExists (Value ifaceVal, FlatSymbolRefAttr signalName)
 
static Type getElementTypeOfWidth (Type type, int32_t width)
 
template<class Op >
static Op findInstanceSymbolInBlock (StringAttr name, Block *body)
 Instances must be at the top level of the hw.module (or within a `ifdef)
 
ParseResult parseXMRPath (::mlir::OpAsmParser &parser, ArrayAttr &pathAttr, StringAttr &terminalAttr)
 
void printXMRPath (OpAsmPrinter &p, XMROp op, ArrayAttr pathAttr, StringAttr terminalAttr)
 
static LogicalResult eraseIfZeroOrNotZero (Operation *op, Value value, PatternRewriter &rewriter, bool eraseIfZero)
 
template<class Op , bool EraseIfZero = false>
static LogicalResult canonicalizeImmediateVerifOp (Op op, PatternRewriter &rewriter)
 
template<class Op , bool EraseIfZero = false>
static LogicalResult canonicalizeConcurrentVerifOp (Op op, PatternRewriter &rewriter)
 
bool parseCaseRegions (OpAsmParser &p, ArrayAttr &patternsArray, ArrayAttr &caseNamesArray, SmallVectorImpl< std::unique_ptr< Region > > &caseRegions)
 Parse cases formatted like: case (pattern, "name") { ... }.
 
void printCaseRegions (OpAsmPrinter &p, Operation *, ArrayAttr patternsArray, ArrayAttr namesArray, MutableArrayRef< Region > caseRegions)
 Print cases formatted like: case (pattern, "name") { ... }.
 
static ParseResult parseTypedAttrWithFallback (OpAsmParser &parser, TypedAttr &result, Type type)
 
static ParseResult parseGenerateFor (OpAsmParser &parser, TypedAttr &lowerBound, TypedAttr &upperBound, TypedAttr &step, StringAttr &inductionVarName, StringAttr &genBlockName, Region &body)
 
static void printGenerateFor (OpAsmPrinter &p, Operation *op, TypedAttr lowerBound, TypedAttr upperBound, TypedAttr step, StringAttr inductionVarName, StringAttr genBlockName, Region &body)
 
static Value getExplicitlyReturnedValueImpl (sv::FuncOp op, mlir::Operation::result_range results)
 
static LogicalResult AssertPropertyLikeOp::verify (Value clock, bool eventExists, mlir::Location loc)
 

Macro Definition Documentation

◆ GET_OP_CLASSES

#define GET_OP_CLASSES

Definition at line 3114 of file SVOps.cpp.

Function Documentation

◆ canonicalizeConcurrentVerifOp()

template<class Op , bool EraseIfZero = false>
static LogicalResult canonicalizeConcurrentVerifOp ( Op  op,
PatternRewriter &  rewriter 
)
static

Definition at line 2536 of file SVOps.cpp.

References eraseIfZeroOrNotZero().

◆ canonicalizeIfDefLike()

template<class Op >
static LogicalResult canonicalizeIfDefLike ( Op  op,
PatternRewriter &  rewriter 
)
static

Definition at line 568 of file SVOps.cpp.

◆ canonicalizeImmediateVerifOp()

template<class Op , bool EraseIfZero = false>
static LogicalResult canonicalizeImmediateVerifOp ( Op  op,
PatternRewriter &  rewriter 
)
static

Definition at line 2515 of file SVOps.cpp.

References eraseIfZeroOrNotZero().

◆ eraseIfZeroOrNotZero()

static LogicalResult eraseIfZeroOrNotZero ( Operation *  op,
Value  value,
PatternRewriter &  rewriter,
bool  eraseIfZero 
)
static

Definition at line 2502 of file SVOps.cpp.

◆ findInstanceSymbolInBlock()

template<class Op >
static Op findInstanceSymbolInBlock ( StringAttr  name,
Block *  body 
)
static

Instances must be at the top level of the hw.module (or within a `ifdef)

Definition at line 2042 of file SVOps.cpp.

◆ getElementTypeOfWidth()

static Type getElementTypeOfWidth ( Type  type,
int32_t  width 
)
static

Definition at line 1912 of file SVOps.cpp.

◆ getExplicitlyReturnedValueImpl()

static Value getExplicitlyReturnedValueImpl ( sv::FuncOp  op,
mlir::Operation::result_range  results 
)
static

Definition at line 3017 of file SVOps.cpp.

◆ getPatternBitsForValue()

static SmallVector< CasePatternBit > getPatternBitsForValue ( const APInt &  value)
static

Definition at line 965 of file SVOps.cpp.

◆ getReferencedMacro()

static MacroDeclOp getReferencedMacro ( const hw::HWSymbolCache *  cache,
Operation *  op,
FlatSymbolRefAttr  macroName 
)
static

Definition at line 215 of file SVOps.cpp.

References circt::hw::HWSymbolCache::getDefinition().

◆ getVerbatimExprAsmResultNames()

static void getVerbatimExprAsmResultNames ( Operation *  op,
function_ref< void(Value, StringRef)>  setNameFn 
)
static

Get the asm name for sv.verbatim.expr and sv.verbatim.expr.se.

Definition at line 156 of file SVOps.cpp.

◆ lookupSymbolInNested()

static Operation * lookupSymbolInNested ( Operation *  symbolTableOp,
StringRef  symbol 
)
static

Returns the operation registered with the given symbol name with the regions of 'symbolTableOp'.

recurse through nested regions which don't contain the symboltable trait. Returns nullptr if no valid symbol was found.

Definition at line 63 of file SVOps.cpp.

References lookupSymbolInNested().

Referenced by lookupSymbolInNested().

◆ mergeNeiboringAssignments()

template<typename AssignTy >
static LogicalResult mergeNeiboringAssignments ( AssignTy  op,
PatternRewriter &  rewriter 
)
static

Definition at line 1508 of file SVOps.cpp.

References hw.ArraySliceOp::create(), and circt::hw::isOffset().

◆ parseCaseRegions()

bool parseCaseRegions ( OpAsmParser &  p,
ArrayAttr &  patternsArray,
ArrayAttr &  caseNamesArray,
SmallVectorImpl< std::unique_ptr< Region > > &  caseRegions 
)

Parse cases formatted like: case (pattern, "name") { ... }.

Definition at line 2563 of file SVOps.cpp.

References pattern.

◆ parseEventList()

static ParseResult parseEventList ( OpAsmParser &  p,
Attribute &  eventsAttr,
SmallVectorImpl< OpAsmParser::UnresolvedOperand > &  clocksOperands 
)
static

Definition at line 800 of file SVOps.cpp.

◆ parseGenerateFor()

static ParseResult parseGenerateFor ( OpAsmParser &  parser,
TypedAttr &  lowerBound,
TypedAttr &  upperBound,
TypedAttr &  step,
StringAttr &  inductionVarName,
StringAttr &  genBlockName,
Region &  body 
)
static

Definition at line 2659 of file SVOps.cpp.

References isdigit, and parseTypedAttrWithFallback().

◆ parseIfaceTypeAndSignal()

ParseResult parseIfaceTypeAndSignal ( OpAsmParser &  p,
Type &  ifaceTy,
FlatSymbolRefAttr &  signalName 
)

Definition at line 1752 of file SVOps.cpp.

◆ parseImplicitInitType()

static ParseResult parseImplicitInitType ( OpAsmParser &  p,
mlir::Type  regType,
std::optional< OpAsmParser::UnresolvedOperand > &  initValue,
mlir::Type &  initType 
)
static

Definition at line 420 of file SVOps.cpp.

◆ parseImplicitVarInitType()

static ParseResult parseImplicitVarInitType ( OpAsmParser &  p,
Type  varType,
std::optional< OpAsmParser::UnresolvedOperand > &  initValue,
Type &  initType 
)
static

Definition at line 372 of file SVOps.cpp.

◆ parseModportStructs()

static ParseResult parseModportStructs ( OpAsmParser &  parser,
ArrayAttr &  portsAttr 
)
static

Definition at line 1596 of file SVOps.cpp.

References context.

◆ parseTypedAttrWithFallback()

static ParseResult parseTypedAttrWithFallback ( OpAsmParser &  parser,
TypedAttr &  result,
Type  type 
)
static

Definition at line 2630 of file SVOps.cpp.

Referenced by parseGenerateFor().

◆ parseXMRPath()

ParseResult parseXMRPath ( ::mlir::OpAsmParser &  parser,
ArrayAttr &  pathAttr,
StringAttr &  terminalAttr 
)

Definition at line 2447 of file SVOps.cpp.

◆ printCaseRegions()

void printCaseRegions ( OpAsmPrinter &  p,
Operation *  ,
ArrayAttr  patternsArray,
ArrayAttr  namesArray,
MutableArrayRef< Region >  caseRegions 
)

Print cases formatted like: case (pattern, "name") { ... }.

Definition at line 2588 of file SVOps.cpp.

References assert().

◆ printEventList()

static void printEventList ( OpAsmPrinter &  p,
AlwaysOp  op,
ArrayAttr  portsAttr,
OperandRange  operands 
)
static

Definition at line 831 of file SVOps.cpp.

◆ printGenerateFor()

static void printGenerateFor ( OpAsmPrinter &  p,
Operation *  op,
TypedAttr  lowerBound,
TypedAttr  upperBound,
TypedAttr  step,
StringAttr  inductionVarName,
StringAttr  genBlockName,
Region &  body 
)
static

Definition at line 2711 of file SVOps.cpp.

◆ printIfaceTypeAndSignal()

void printIfaceTypeAndSignal ( OpAsmPrinter &  p,
Operation *  op,
Type  type,
FlatSymbolRefAttr  signalName 
)

Definition at line 1765 of file SVOps.cpp.

References assert().

◆ printImplicitInitType()

static void printImplicitInitType ( OpAsmPrinter &  p,
Operation *  op,
mlir::Type  regType,
mlir::Value  initValue,
mlir::Type  initType 
)
static

Definition at line 434 of file SVOps.cpp.

◆ printImplicitVarInitType()

static void printImplicitVarInitType ( OpAsmPrinter &  p,
Operation *  op,
Type  varType,
Value  initValue,
Type  initType 
)
static

Definition at line 387 of file SVOps.cpp.

◆ printModportStructs()

static void printModportStructs ( OpAsmPrinter &  p,
Operation *  ,
ArrayAttr  portsAttr 
)
static

Definition at line 1623 of file SVOps.cpp.

◆ printXMRPath()

void printXMRPath ( OpAsmPrinter &  p,
XMROp  op,
ArrayAttr  pathAttr,
StringAttr  terminalAttr 
)

Definition at line 2472 of file SVOps.cpp.

◆ replaceOpWithRegion()

static void replaceOpWithRegion ( PatternRewriter &  rewriter,
Operation *  op,
Region &  region 
)
static

Replaces the given op with the contents of the given single-block region.

Definition at line 699 of file SVOps.cpp.

References assert().

◆ verifyMacroIdentSymbolUses()

static LogicalResult verifyMacroIdentSymbolUses ( Operation *  op,
FlatSymbolRefAttr  attr,
SymbolTableCollection &  symbolTable 
)
static

Verifies symbols referenced by macro identifiers.

Definition at line 86 of file SVOps.cpp.

◆ verifySignalExists()

LogicalResult verifySignalExists ( Value  ifaceVal,
FlatSymbolRefAttr  signalName 
)

Definition at line 1774 of file SVOps.cpp.

◆ verifyVerbatimFlatSymbolRefs()

static LogicalResult verifyVerbatimFlatSymbolRefs ( Operation *  op,
ArrayAttr  symbols,
SymbolTableCollection &  symbolTable 
)
static

Helper function to verify flat symbol refs in symbols array for verbatim ops.

Definition at line 128 of file SVOps.cpp.

◆ verifyVerbatimSymbols()

static LogicalResult verifyVerbatimSymbols ( Operation *  op,
ArrayAttr  symbols,
hw::InnerRefNamespace &  ns 
)
static

Helper function to verify inner refs in symbols array for verbatim ops.

Definition at line 112 of file SVOps.cpp.

References circt::hw::InnerRefNamespace::lookup().