10#ifndef CONVERSION_IMPORTVERILOG_IMPORTVERILOGINTERNALS_H 
   11#define CONVERSION_IMPORTVERILOG_IMPORTVERILOGINTERNALS_H 
   19#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" 
   20#include "mlir/Dialect/Func/IR/FuncOps.h" 
   21#include "slang/ast/ASTVisitor.h" 
   22#include "llvm/ADT/ScopedHashTable.h" 
   23#include "llvm/Support/Debug.h" 
   27#define DEBUG_TYPE "import-verilog" 
   30namespace ImportVerilog {
 
   36  const slang::ast::PortSymbol &
ast;
 
 
   44  SmallVector<PortLowering> 
ports;
 
   45  DenseMap<const slang::syntax::SyntaxNode *, const slang::ast::PortSymbol *>
 
 
   51  mlir::func::FuncOp 
op;
 
 
   60  circt::moore::ClassDeclOp 
op;
 
 
   80  std::optional<unsigned int> 
idx;
 
 
  110  Type 
convertType(
const slang::ast::Type &type, LocationAttr loc = {});
 
  111  Type 
convertType(
const slang::ast::DeclaredType &type);
 
  118  LogicalResult 
convertPackage(
const slang::ast::PackageSymbol &package);
 
  121  LogicalResult 
convertFunction(
const slang::ast::SubroutineSymbol &subroutine);
 
  124  ClassLowering *
declareClass(
const slang::ast::ClassType &cls);
 
  129                          const moore::ClassHandleType &baseTy);
 
  133  moore::ClassHandleType
 
  135                               StringRef fieldName);
 
  145                                Type requiredType = {});
 
  154      const slang::ast::CallExpression &expr,
 
  155      const slang::ast::CallExpression::SystemCallInfo &info, Location loc);
 
  160                            const slang::ast::Symbol &outermostModule);
 
  172                                     const slang::ast::Statement &stmt);
 
  179                                const Value &seqOrPro);
 
  200                         const slang::ast::Type &type, Location loc);
 
  204                          const slang::ast::Type &type, Location loc);
 
  208                          const slang::ast::Type &astType, Location loc);
 
  213      const slang::ConstantValue &constant,
 
  214      const slang::ast::FixedSizeUnpackedArrayType &astType, Location loc);
 
  219                            const slang::ast::Type &type, Location loc);
 
  226      std::span<const slang::ast::Expression *const> arguments, Location loc,
 
  227      moore::IntFormat defaultFormat = moore::IntFormat::Decimal,
 
  228      bool appendNewline = 
false);
 
  238                          Location loc, Value value);
 
  243      const slang::ast::SystemSubroutine &subroutine, Location loc,
 
  264  DenseMap<
const slang::ast::InstanceBodySymbol *,
 
  265           std::unique_ptr<ModuleLowering>>
 
  272  DenseMap<
const slang::ast::SubroutineSymbol *,
 
  273           std::unique_ptr<FunctionLowering>>
 
  277  DenseMap<const slang::ast::ClassType *, std::unique_ptr<ClassLowering>>
 
  284      llvm::ScopedHashTable<const slang::ast::ValueSymbol *, Value>;
 
  289  DenseMap<const slang::ast::InstanceBodySymbol *, SmallVector<HierPathInfo>>
 
  328                      mlir::StringRef qualifiedName,
 
  329                      llvm::SmallVectorImpl<Type> &extraParams);
 
 
 
Domain
The number of values each bit of a type can assume.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Options that control how Verilog input files are parsed and processed.
circt::moore::ClassDeclOp op
A helper class to facilitate the conversion from a Slang AST to MLIR operations.
LogicalResult convertFunction(const slang::ast::SubroutineSymbol &subroutine)
Convert a function.
Value convertToI1(Value value)
Helper function to convert a value to a MLIR I1 value.
Value materializeConversion(Type type, Value value, bool isSigned, Location loc)
Helper function to insert the necessary operations to cast a value from one type to another.
FunctionLowering * declareCallableImpl(const slang::ast::SubroutineSymbol &subroutine, mlir::StringRef qualifiedName, llvm::SmallVectorImpl< Type > &extraParams)
Helper function to extract the commonalities in lowering of functions and methods.
ModuleLowering * convertModuleHeader(const slang::ast::InstanceBodySymbol *module)
Convert a module and its ports to an empty module op in the IR.
Value convertLvalueExpression(const slang::ast::Expression &expr)
Value materializeConstant(const slang::ConstantValue &constant, const slang::ast::Type &type, Location loc)
Helper function to materialize a ConstantValue as an SSA value.
SmallVector< LoopFrame > loopStack
A stack of loop continuation and exit blocks.
LogicalResult convertModuleBody(const slang::ast::InstanceBodySymbol *module)
Convert a module's body to the corresponding IR ops.
LogicalResult convertClassDeclaration(const slang::ast::ClassType &classdecl)
slang::ConstantValue evaluateConstant(const slang::ast::Expression &expr)
Evaluate the constant value of an expression.
Value convertLTLTimingControl(const slang::ast::TimingControl &ctrl, const Value &seqOrPro)
slang::ast::Compilation & compilation
LogicalResult convertTimingControl(const slang::ast::TimingControl &ctrl)
Context(const ImportVerilogOptions &options, slang::ast::Compilation &compilation, mlir::ModuleOp intoModuleOp, const slang::SourceManager &sourceManager)
OpBuilder builder
The builder used to create IR operations.
std::queue< const slang::ast::InstanceBodySymbol * > moduleWorklist
A list of modules for which the header has been created, but the body has not been converted yet.
Value materializeFixedSizeUnpackedArrayType(const slang::ConstantValue &constant, const slang::ast::FixedSizeUnpackedArrayType &astType, Location loc)
Helper function to materialize an unpacked array of SVInts as an SSA value.
Value convertAssertionCallExpression(const slang::ast::CallExpression &expr, const slang::ast::CallExpression::SystemCallInfo &info, Location loc)
DenseMap< const slang::ast::ClassType *, std::unique_ptr< ClassLowering > > classes
Classes that have already been converted.
std::function< void(moore::ReadOp)> rvalueReadCallback
A listener called for every variable or net being read.
bool isClassDerivedFrom(const moore::ClassHandleType &actualTy, const moore::ClassHandleType &baseTy)
Checks whether one class (actualTy) is derived from another class (baseTy).
Context(const Context &)=delete
std::map< slang::SourceLocation, Operation * > orderedRootOps
The top-level operations ordered by their Slang source location.
Type convertType(const slang::ast::Type &type, LocationAttr loc={})
Convert a slang type into an MLIR type.
DenseMap< const slang::ast::SubroutineSymbol *, std::unique_ptr< FunctionLowering > > functions
Functions that have already been converted.
Value materializeSVInt(const slang::SVInt &svint, const slang::ast::Type &type, Location loc)
Helper function to materialize an SVInt as an SSA value.
slang::TimeScale timeScale
The time scale currently in effect.
LogicalResult finalizeFunctionBodyCaptures(FunctionLowering &lowering)
Value materializeSVReal(const slang::ConstantValue &svreal, const slang::ast::Type &type, Location loc)
Helper function to materialize a real value as an SSA value.
ClassLowering * declareClass(const slang::ast::ClassType &cls)
Value convertToBool(Value value)
Helper function to convert a value to its "truthy" boolean value.
ValueSymbols valueSymbols
std::function< void(mlir::Operation *)> variableAssignCallback
A listener called for every variable or net being assigned.
ValueSymbols::ScopeTy ValueSymbolScope
FailureOr< Value > convertFormatString(std::span< const slang::ast::Expression *const > arguments, Location loc, moore::IntFormat defaultFormat=moore::IntFormat::Decimal, bool appendNewline=false)
Convert a list of string literal arguments with formatting specifiers and arguments to be interpolate...
const ImportVerilogOptions & options
Value getImplicitThisRef() const
Value convertRvalueExpression(const slang::ast::Expression &expr, Type requiredType={})
FailureOr< Value > convertSystemCallArity0(const slang::ast::SystemSubroutine &subroutine, Location loc)
Convert system function calls only have arity-0.
llvm::ScopedHashTable< const slang::ast::ValueSymbol *, Value > ValueSymbols
A table of defined values, such as variables, that may be referred to by name in expressions.
Value convertToSimpleBitVector(Value value)
Helper function to convert a value to its simple bit vector representation, if it has one.
moore::ClassHandleType getAncestorClassWithProperty(const moore::ClassHandleType &actualTy, StringRef fieldName)
Tries to find the closest base class of actualTy that carries a property with name fieldName.
LogicalResult traverseInstanceBody(const slang::ast::Symbol &symbol)
Value materializeString(const slang::ConstantValue &string, const slang::ast::Type &astType, Location loc)
Helper function to materialize a string as an SSA value.
Value currentThisRef
Variable to track the value of the current function's implicit this reference.
FailureOr< Value > convertSystemCallArity1(const slang::ast::SystemSubroutine &subroutine, Location loc, Value value)
Convert system function calls only have arity-1.
const slang::SourceManager & sourceManager
DenseSet< StringAttr > sameHierPaths
It's used to collect the repeat hierarchical names on the same path.
FailureOr< Value > convertAssertionSystemCallArity1(const slang::ast::SystemSubroutine &subroutine, Location loc, Value value)
Convert system function calls within properties and assertion with a single argument.
mlir::ModuleOp intoModuleOp
SymbolTable symbolTable
A symbol table of the MLIR module we are emitting into.
DenseMap< const slang::ast::InstanceBodySymbol *, SmallVector< HierPathInfo > > hierPaths
Collect all hierarchical names used for the per module/instance.
FunctionLowering * declareFunction(const slang::ast::SubroutineSymbol &subroutine)
Convert a function and its arguments to a function declaration in the IR.
LogicalResult collectHierarchicalValues(const slang::ast::Expression &expr, const slang::ast::Symbol &outermostModule)
Value convertAssertionExpression(const slang::ast::AssertionExpr &expr, Location loc)
LogicalResult convertPackage(const slang::ast::PackageSymbol &package)
Convert a package and its contents.
LogicalResult convertCompilation()
Convert hierarchy and structure AST nodes to MLIR ops.
MLIRContext * getContext()
Return the MLIR context.
LogicalResult convertStatement(const slang::ast::Statement &stmt)
SmallVector< Value > lvalueStack
A stack of assignment left-hand side values.
DenseMap< const slang::ast::InstanceBodySymbol *, std::unique_ptr< ModuleLowering > > modules
How we have lowered modules to MLIR.
Location convertLocation(slang::SourceLocation loc)
Convert a slang SourceLocation into an MLIR Location.
Function lowering information.
llvm::DenseMap< Value, unsigned > captureIndex
llvm::SmallVector< Value, 4 > captures
Hierarchical path information.
slang::ast::ArgumentDirection direction
mlir::StringAttr hierName
const slang::ast::ValueSymbol * valueSym
std::optional< unsigned int > idx
Information about a loops continuation and exit blocks relevant while lowering the loop's body statem...
Block * breakBlock
The block to jump to from a break statement.
Block * continueBlock
The block to jump to from a continue statement.
Module lowering information.
DenseMap< const slang::syntax::SyntaxNode *, const slang::ast::PortSymbol * > portsBySyntaxNode
SmallVector< PortLowering > ports
Port lowering information.
const slang::ast::PortSymbol & ast