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/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 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 3055 of file SVOps.cpp.

Function Documentation

◆ canonicalizeConcurrentVerifOp()

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

Definition at line 2477 of file SVOps.cpp.

References eraseIfZeroOrNotZero().

◆ canonicalizeIfDefLike()

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

Definition at line 509 of file SVOps.cpp.

◆ canonicalizeImmediateVerifOp()

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

Definition at line 2456 of file SVOps.cpp.

References eraseIfZeroOrNotZero().

◆ eraseIfZeroOrNotZero()

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

Definition at line 2443 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 1983 of file SVOps.cpp.

◆ getElementTypeOfWidth()

static Type getElementTypeOfWidth ( Type  type,
int32_t  width 
)
static

Definition at line 1853 of file SVOps.cpp.

◆ getExplicitlyReturnedValueImpl()

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

Definition at line 2958 of file SVOps.cpp.

◆ getPatternBitsForValue()

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

Definition at line 906 of file SVOps.cpp.

◆ getReferencedMacro()

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

Definition at line 203 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 144 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 62 of file SVOps.cpp.

References lookupSymbolInNested().

Referenced by lookupSymbolInNested().

◆ mergeNeiboringAssignments()

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

Definition at line 1449 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 2504 of file SVOps.cpp.

References pattern.

◆ parseEventList()

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

Definition at line 741 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 2600 of file SVOps.cpp.

References isdigit, and parseTypedAttrWithFallback().

◆ parseIfaceTypeAndSignal()

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

Definition at line 1693 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 361 of file SVOps.cpp.

◆ parseModportStructs()

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

Definition at line 1537 of file SVOps.cpp.

References context.

◆ parseTypedAttrWithFallback()

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

Definition at line 2571 of file SVOps.cpp.

Referenced by parseGenerateFor().

◆ parseXMRPath()

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

Definition at line 2388 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 2529 of file SVOps.cpp.

References assert().

◆ printEventList()

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

Definition at line 772 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 2652 of file SVOps.cpp.

◆ printIfaceTypeAndSignal()

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

Definition at line 1706 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 375 of file SVOps.cpp.

◆ printModportStructs()

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

Definition at line 1564 of file SVOps.cpp.

◆ printXMRPath()

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

Definition at line 2413 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 640 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 85 of file SVOps.cpp.

◆ verifySignalExists()

LogicalResult verifySignalExists ( Value  ifaceVal,
FlatSymbolRefAttr  signalName 
)

Definition at line 1715 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 116 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 100 of file SVOps.cpp.

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