CIRCT 23.0.0git
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
circt::om::Evaluator Class Reference

An Evaluator, which is constructed with an IR module and can instantiate Objects. More...

#include <Evaluator.h>

Collaboration diagram for circt::om::Evaluator:
Collaboration graph
[legend]

Classes

struct  DebugNesting
 RAII helper to increment/decrement debugNesting. More...
 

Public Types

using ActualParameters = SmallVectorImpl< std::shared_ptr< evaluator::EvaluatorValue > > *
 
using ObjectKey = std::pair< Value, ActualParameters >
 

Public Member Functions

 Evaluator (ModuleOp mod)
 Construct an Evaluator with an IR module.
 
FailureOr< evaluator::EvaluatorValuePtrinstantiate (StringAttr className, ArrayRef< EvaluatorValuePtr > actualParams)
 Instantiate an Object with its class name and actual parameters.
 
mlir::ModuleOp getModule ()
 Get the Module this Evaluator is built from.
 
FailureOr< evaluator::EvaluatorValuePtrgetPartiallyEvaluatedValue (Type type, Location loc)
 
uint64_t getFullyEvaluatedCount () const
 Get the number of fully evaluated nodes tracked by this evaluator.
 

Private Member Functions

bool isFullyEvaluated (Value value, ActualParameters key)
 
bool isFullyEvaluated (ObjectKey key)
 
void attachCounter (evaluator::EvaluatorValuePtr &value)
 Attach the evaluation counter to a newly created value.
 
FailureOr< evaluator::EvaluatorValuePtrinstantiateImpl (StringAttr className, ArrayRef< EvaluatorValuePtr > actualParams)
 
FailureOr< EvaluatorValuePtrgetOrCreateValue (Value value, ActualParameters actualParams, Location loc)
 
FailureOr< EvaluatorValuePtrallocateObjectInstance (StringAttr clasName, ActualParameters actualParams)
 
FailureOr< EvaluatorValuePtrevaluateValue (Value value, ActualParameters actualParams, Location loc)
 Evaluate a Value in a Class body according to the small expression grammar described in the rationale document.
 
FailureOr< EvaluatorValuePtrevaluateParameter (BlockArgument formalParam, ActualParameters actualParams, Location loc)
 Evaluator dispatch functions for the small expression grammar.
 
FailureOr< EvaluatorValuePtrevaluateConstant (ConstantOp op, ActualParameters actualParams, Location loc)
 Evaluator dispatch function for constants.
 
FailureOr< EvaluatorValuePtrevaluateObjectInstance (StringAttr className, ActualParameters actualParams, Location loc, ObjectKey instanceKey={})
 Instantiate an Object with its class name and actual parameters.
 
FailureOr< EvaluatorValuePtrevaluateObjectInstance (ObjectOp op, ActualParameters actualParams)
 Evaluator dispatch function for Object instances.
 
FailureOr< EvaluatorValuePtrevaluateElaboratedObject (ElaboratedObjectOp op, ActualParameters actualParams, Location loc)
 
FailureOr< EvaluatorValuePtrevaluateObjectField (ObjectFieldOp op, ActualParameters actualParams, Location loc)
 Evaluator dispatch function for Object fields.
 
FailureOr< EvaluatorValuePtrevaluateListCreate (ListCreateOp op, ActualParameters actualParams, Location loc)
 Evaluator dispatch function for List creation.
 
FailureOr< EvaluatorValuePtrevaluateListConcat (ListConcatOp op, ActualParameters actualParams, Location loc)
 Evaluator dispatch function for List concatenation.
 
FailureOr< EvaluatorValuePtrevaluateIntegerBinary (IntegerBinaryOp op, ActualParameters actualParams, Location loc)
 
FailureOr< EvaluatorValuePtrevaluateStringConcat (StringConcatOp op, ActualParameters actualParams, Location loc)
 Evaluator dispatch function for String concatenation.
 
FailureOr< EvaluatorValuePtrevaluateBinaryEquality (BinaryEqualityOp op, ActualParameters actualParams, Location loc)
 
FailureOr< evaluator::EvaluatorValuePtrevaluateBasePathCreate (FrozenBasePathCreateOp op, ActualParameters actualParams, Location loc)
 
FailureOr< evaluator::EvaluatorValuePtrevaluatePathCreate (FrozenPathCreateOp op, ActualParameters actualParams, Location loc)
 
FailureOr< evaluator::EvaluatorValuePtrevaluateEmptyPath (FrozenEmptyPathOp op, ActualParameters actualParams, Location loc)
 
FailureOr< evaluator::EvaluatorValuePtrevaluateUnknownValue (UnknownValueOp op, Location loc)
 Evaluate an unknown value.
 
LogicalResult evaluatePropertyAssert (PropertyAssertOp op, ActualParameters actualParams)
 Evaluator dispatch function for property assertions.
 
FailureOr< evaluator::EvaluatorValuePtrcreateUnknownValue (Type type, Location loc)
 Create an unknown value of the specified type.
 
FailureOr< ActualParameterscreateParametersFromOperands (ValueRange range, ActualParameters actualParams, Location loc)
 Evaluator dispatch function for Object instances.
 
raw_ostream & dbgs (unsigned extra=0)
 
llvm::indent indent (unsigned extra=0)
 

Private Attributes

SymbolTable symbolTable
 The symbol table for the IR module the Evaluator was constructed with.
 
SmallVector< std::unique_ptr< SmallVector< std::shared_ptr< evaluator::EvaluatorValue > > > > actualParametersBuffers
 This uniquely stores vectors that represent parameters.
 
std::vector< ObjectKeyworklist
 Worklists that track values which need to be fully evaluated.
 
std::vector< ObjectKeynextWorklist
 
std::queue< std::pair< PropertyAssertOp, ActualParameters > > pendingAsserts
 A queue of pending property assertions to be evaluated after the worklist is fully drained.
 
DenseMap< ObjectKey, std::shared_ptr< evaluator::EvaluatorValue > > objects
 Evaluator value storage.
 
uint64_t fullyEvaluatedCount = 0
 Counter for fully evaluated nodes.
 
unsigned debugNesting = 0
 Current nesting depth for debug output indentation.
 

Detailed Description

An Evaluator, which is constructed with an IR module and can instantiate Objects.

Further refinement is expected.

Definition at line 385 of file Evaluator.h.

Member Typedef Documentation

◆ ActualParameters

using circt::om::Evaluator::ActualParameters = SmallVectorImpl<std::shared_ptr<evaluator::EvaluatorValue> > *

Definition at line 400 of file Evaluator.h.

◆ ObjectKey

Definition at line 403 of file Evaluator.h.

Constructor & Destructor Documentation

◆ Evaluator()

circt::om::Evaluator::Evaluator ( ModuleOp  mod)

Construct an Evaluator with an IR module.

Definition at line 322 of file Evaluator.cpp.

Member Function Documentation

◆ allocateObjectInstance()

FailureOr< EvaluatorValuePtr > circt::om::Evaluator::allocateObjectInstance ( StringAttr  clasName,
ActualParameters  actualParams 
)
private

◆ attachCounter()

void circt::om::Evaluator::attachCounter ( evaluator::EvaluatorValuePtr value)
inlineprivate

Attach the evaluation counter to a newly created value.

Definition at line 419 of file Evaluator.h.

References fullyEvaluatedCount.

◆ createParametersFromOperands()

FailureOr< circt::om::Evaluator::ActualParameters > circt::om::Evaluator::createParametersFromOperands ( ValueRange  range,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch function for Object instances.

Definition at line 969 of file Evaluator.cpp.

◆ createUnknownValue()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::createUnknownValue ( Type  type,
Location  loc 
)
private

Create an unknown value of the specified type.

Definition at line 1374 of file Evaluator.cpp.

◆ dbgs()

raw_ostream & circt::om::Evaluator::dbgs ( unsigned  extra = 0)
inlineprivate

Definition at line 536 of file Evaluator.h.

References debugNesting.

◆ evaluateBasePathCreate()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateBasePathCreate ( FrozenBasePathCreateOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Definition at line 1319 of file Evaluator.cpp.

◆ evaluateBinaryEquality()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateBinaryEquality ( BinaryEqualityOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

◆ evaluateConstant()

FailureOr< circt::om::evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateConstant ( ConstantOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch function for constants.

Definition at line 829 of file Evaluator.cpp.

References circt::om::evaluator::AttributeValue::get.

◆ evaluateElaboratedObject()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateElaboratedObject ( ElaboratedObjectOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Definition at line 1004 of file Evaluator.cpp.

◆ evaluateEmptyPath()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateEmptyPath ( FrozenEmptyPathOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Definition at line 1366 of file Evaluator.cpp.

◆ evaluateIntegerBinary()

FailureOr< EvaluatorValuePtr > circt::om::Evaluator::evaluateIntegerBinary ( IntegerBinaryOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

◆ evaluateListConcat()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateListConcat ( ListConcatOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch function for List concatenation.

Definition at line 1142 of file Evaluator.cpp.

References circt::om::evaluator::ListValue::getElements(), and circt::om::evaluator::EvaluatorValue::isFullyEvaluated().

◆ evaluateListCreate()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateListCreate ( ListCreateOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch function for List creation.

Definition at line 1108 of file Evaluator.cpp.

◆ evaluateObjectField()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateObjectField ( ObjectFieldOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch function for Object fields.

Definition at line 1048 of file Evaluator.cpp.

◆ evaluateObjectInstance() [1/2]

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateObjectInstance ( ObjectOp  op,
ActualParameters  actualParams 
)
private

Evaluator dispatch function for Object instances.

Definition at line 989 of file Evaluator.cpp.

◆ evaluateObjectInstance() [2/2]

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateObjectInstance ( StringAttr  className,
ActualParameters  actualParams,
Location  loc,
ObjectKey  instanceKey = {} 
)
private

Instantiate an Object with its class name and actual parameters.

Definition at line 500 of file Evaluator.cpp.

References assert(), and context.

◆ evaluateParameter()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateParameter ( BlockArgument  formalParam,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch functions for the small expression grammar.

Evaluator dispatch function for parameters.

Definition at line 820 of file Evaluator.cpp.

◆ evaluatePathCreate()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluatePathCreate ( FrozenPathCreateOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Definition at line 1343 of file Evaluator.cpp.

◆ evaluatePropertyAssert()

LogicalResult circt::om::Evaluator::evaluatePropertyAssert ( PropertyAssertOp  op,
ActualParameters  actualParams 
)
private

Evaluator dispatch function for property assertions.

Definition at line 906 of file Evaluator.cpp.

References circt::om::evaluator::AttributeValue::getAttr().

◆ evaluateStringConcat()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateStringConcat ( StringConcatOp  op,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluator dispatch function for String concatenation.

Definition at line 1196 of file Evaluator.cpp.

References assert(), circt::om::evaluator::AttributeValue::get(), and circt::om::evaluator::AttributeValue::getAs().

◆ evaluateUnknownValue()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateUnknownValue ( UnknownValueOp  op,
Location  loc 
)
private

Evaluate an unknown value.

Definition at line 1419 of file Evaluator.cpp.

◆ evaluateValue()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::evaluateValue ( Value  value,
ActualParameters  actualParams,
Location  loc 
)
private

Evaluate a Value in a Class body according to the small expression grammar described in the rationale document.

The actual parameters are the values supplied at the current instantiation of the Class being evaluated.

Definition at line 750 of file Evaluator.cpp.

◆ getFullyEvaluatedCount()

uint64_t circt::om::Evaluator::getFullyEvaluatedCount ( ) const
inline

Get the number of fully evaluated nodes tracked by this evaluator.

Definition at line 406 of file Evaluator.h.

References fullyEvaluatedCount.

◆ getModule()

ModuleOp circt::om::Evaluator::getModule ( )

Get the Module this Evaluator is built from.

Definition at line 325 of file Evaluator.cpp.

◆ getOrCreateValue()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::getOrCreateValue ( Value  value,
ActualParameters  actualParams,
Location  loc 
)
private

◆ getPartiallyEvaluatedValue()

FailureOr< evaluator::EvaluatorValuePtr > circt::om::Evaluator::getPartiallyEvaluatedValue ( Type  type,
Location  loc 
)

Definition at line 365 of file Evaluator.cpp.

References circt::om::evaluator::AttributeValue::get.

◆ indent()

llvm::indent circt::om::Evaluator::indent ( unsigned  extra = 0)
inlineprivate

Definition at line 540 of file Evaluator.h.

References debugNesting.

◆ instantiate()

FailureOr< std::shared_ptr< evaluator::EvaluatorValue > > circt::om::Evaluator::instantiate ( StringAttr  className,
ArrayRef< EvaluatorValuePtr actualParams 
)

Instantiate an Object with its class name and actual parameters.

Definition at line 604 of file Evaluator.cpp.

Referenced by omEvaluatorInstantiate().

◆ instantiateImpl()

FailureOr< std::shared_ptr< evaluator::EvaluatorValue > > circt::om::Evaluator::instantiateImpl ( StringAttr  className,
ArrayRef< EvaluatorValuePtr actualParams 
)
private

Definition at line 647 of file Evaluator.cpp.

◆ isFullyEvaluated() [1/2]

bool circt::om::Evaluator::isFullyEvaluated ( ObjectKey  key)
inlineprivate

Definition at line 413 of file Evaluator.h.

References objects.

◆ isFullyEvaluated() [2/2]

bool circt::om::Evaluator::isFullyEvaluated ( Value  value,
ActualParameters  key 
)
inlineprivate

Definition at line 409 of file Evaluator.h.

References isFullyEvaluated().

Referenced by isFullyEvaluated().

Member Data Documentation

◆ actualParametersBuffers

SmallVector< std::unique_ptr<SmallVector<std::shared_ptr<evaluator::EvaluatorValue> > > > circt::om::Evaluator::actualParametersBuffers
private

This uniquely stores vectors that represent parameters.

Definition at line 503 of file Evaluator.h.

◆ debugNesting

unsigned circt::om::Evaluator::debugNesting = 0
private

Current nesting depth for debug output indentation.

Definition at line 527 of file Evaluator.h.

Referenced by dbgs(), and indent().

◆ fullyEvaluatedCount

uint64_t circt::om::Evaluator::fullyEvaluatedCount = 0
private

Counter for fully evaluated nodes.

Definition at line 523 of file Evaluator.h.

Referenced by attachCounter(), and getFullyEvaluatedCount().

◆ nextWorklist

std::vector<ObjectKey> circt::om::Evaluator::nextWorklist
private

Definition at line 509 of file Evaluator.h.

◆ objects

DenseMap<ObjectKey, std::shared_ptr<evaluator::EvaluatorValue> > circt::om::Evaluator::objects
private

Evaluator value storage.

Return an evaluator value for the given instantiation context (a pair of Value and parameters).

Definition at line 520 of file Evaluator.h.

Referenced by isFullyEvaluated().

◆ pendingAsserts

std::queue<std::pair<PropertyAssertOp, ActualParameters> > circt::om::Evaluator::pendingAsserts
private

A queue of pending property assertions to be evaluated after the worklist is fully drained.

Each entry is a (PropertyAssertOp, ActualParameters) pair. Property assertions are deferred because their operands may be ReferenceValues that are not yet resolved when the class body is first processed.

Definition at line 516 of file Evaluator.h.

◆ symbolTable

SymbolTable circt::om::Evaluator::symbolTable
private

The symbol table for the IR module the Evaluator was constructed with.

Used to look up class definitions.

Definition at line 498 of file Evaluator.h.

◆ worklist

std::vector<ObjectKey> circt::om::Evaluator::worklist
private

Worklists that track values which need to be fully evaluated.

We use two worklists to detect cycles: process all items from one, and if any become fully evaluated, swap and continue.

Definition at line 508 of file Evaluator.h.


The documentation for this class was generated from the following files: