LLZK 0.1.0
Veridise's ZK Language IR
Loading...
Searching...
No Matches
llzk::SourceRefLatticeValue Class Reference

A value at a given point of the SourceRefLattice. More...

#include <SourceRefLattice.h>

Inheritance diagram for llzk::SourceRefLatticeValue:
[legend]
Collaboration diagram for llzk::SourceRefLatticeValue:
[legend]

Public Member Functions

 SourceRefLatticeValue (ScalarTy s)
 SourceRefLatticeValue (SourceRef r)
 SourceRefLatticeValue ()
virtual ~SourceRefLatticeValue ()=default
 SourceRefLatticeValue (mlir::ArrayRef< int64_t > shape)
const SourceRefgetSingleValue () const
mlir::ChangeResult insert (const SourceRef &rhs)
 Directly insert the ref into this value.
std::pair< SourceRefLatticeValue, mlir::ChangeResult > translate (const TranslationMap &translation) const
 For the refs contained in this value, translate them given the translation map and return the transformed value.
std::pair< SourceRefLatticeValue, mlir::ChangeResult > referenceField (SymbolLookupResult< component::FieldDefOp > fieldRef) const
 Add the given fieldRef to the SourceRefs contained within this value.
std::pair< SourceRefLatticeValue, mlir::ChangeResult > extract (const std::vector< SourceRefIndex > &indices) const
 Perform an array.extract or array.read operation, depending on how many indices are provided.
Public Member Functions inherited from llzk::dataflow::AbstractLatticeValue< SourceRefLatticeValue, SourceRefSet >
 AbstractLatticeValue (ScalarTy s)
 AbstractLatticeValue ()
 AbstractLatticeValue (const mlir::ArrayRef< int64_t > shape)
 AbstractLatticeValue (const AbstractLatticeValue &rhs)
AbstractLatticeValueoperator= (const AbstractLatticeValue &rhs)
bool isScalar () const
bool isSingleValue () const
bool isArray () const
bool isDynamicArray () const
const ScalarTy & getScalarValue () const
ScalarTy & getScalarValue ()
const ArrayTy & getArrayValue () const
ArrayTy & getArrayValue ()
const SourceRefLatticeValuegetElemFlatIdx (unsigned i) const
 Directly index into the flattened array using a single index.
SourceRefLatticeValuegetElemFlatIdx (unsigned i)
size_t getArraySize () const
size_t getNumArrayDims () const
void print (mlir::raw_ostream &os) const
ScalarTy foldToScalar () const
 If this is an array value, combine all elements into a single scalar value and return it.
mlir::ChangeResult setValue (const AbstractLatticeValue &rhs)
 Sets this value to be equal to rhs.
mlir::ChangeResult update (const SourceRefLatticeValue &rhs)
 Union this value with that of rhs.
bool operator== (const AbstractLatticeValue &rhs) const

Protected Member Functions

mlir::ChangeResult translateScalar (const TranslationMap &translation)
 Translate this value using the translation map, assuming this value is a scalar.
virtual std::pair< SourceRefLatticeValue, mlir::ChangeResult > elementwiseTransform (llvm::function_ref< SourceRef(const SourceRef &)> transform) const
 Perform a recursive transformation over all elements of this value and return a new value with the modifications.
Protected Member Functions inherited from llzk::dataflow::AbstractLatticeValue< SourceRefLatticeValue, SourceRefSet >
std::variant< ScalarTy, ArrayTy > & getValue ()
const std::vector< int64_t > & getArrayShape () const
int64_t getArrayDim (unsigned i) const
void copyArrayShape (const AbstractLatticeValue &rhs)
mlir::ChangeResult updateScalar (const ScalarTy &rhs)
 Union this value with the given scalar.
mlir::ChangeResult updateArray (const ArrayTy &rhs)
 Union this value with the given array.
mlir::ChangeResult foldAndUpdate (const SourceRefLatticeValue &rhs)
 Folds the current value into a scalar and folds rhs to a scalar and updates the current value to the union of the two scalars.

Detailed Description

A value at a given point of the SourceRefLattice.

Definition at line 25 of file SourceRefLattice.h.

Constructor & Destructor Documentation

◆ SourceRefLatticeValue() [1/4]

llzk::SourceRefLatticeValue::SourceRefLatticeValue ( ScalarTy s)
inlineexplicit

Definition at line 40 of file SourceRefLattice.h.

◆ SourceRefLatticeValue() [2/4]

llzk::SourceRefLatticeValue::SourceRefLatticeValue ( SourceRef r)
inlineexplicit

Definition at line 41 of file SourceRefLattice.h.

◆ SourceRefLatticeValue() [3/4]

llzk::SourceRefLatticeValue::SourceRefLatticeValue ( )
inline

Definition at line 42 of file SourceRefLattice.h.

◆ ~SourceRefLatticeValue()

virtual llzk::SourceRefLatticeValue::~SourceRefLatticeValue ( )
virtualdefault

◆ SourceRefLatticeValue() [4/4]

llzk::SourceRefLatticeValue::SourceRefLatticeValue ( mlir::ArrayRef< int64_t > shape)
inlineexplicit

Definition at line 46 of file SourceRefLattice.h.

Member Function Documentation

◆ elementwiseTransform()

std::pair< SourceRefLatticeValue, mlir::ChangeResult > llzk::SourceRefLatticeValue::elementwiseTransform ( llvm::function_ref< SourceRef(const SourceRef &)> transform) const
protectedvirtual

Perform a recursive transformation over all elements of this value and return a new value with the modifications.

Definition at line 163 of file SourceRefLattice.cpp.

◆ extract()

std::pair< SourceRefLatticeValue, mlir::ChangeResult > llzk::SourceRefLatticeValue::extract ( const std::vector< SourceRefIndex > & indices) const

Perform an array.extract or array.read operation, depending on how many indices are provided.

Definition at line 71 of file SourceRefLattice.cpp.

◆ getSingleValue()

const SourceRef & llzk::SourceRefLatticeValue::getSingleValue ( ) const
inline

Definition at line 48 of file SourceRefLattice.h.

◆ insert()

mlir::ChangeResult llzk::SourceRefLatticeValue::insert ( const SourceRef & rhs)

Directly insert the ref into this value.

If this is a scalar value, insert the ref into the value's set. If this is an array value, the array is folded into a single scalar, then the ref is inserted.

Definition at line 38 of file SourceRefLattice.cpp.

◆ referenceField()

std::pair< SourceRefLatticeValue, mlir::ChangeResult > llzk::SourceRefLatticeValue::referenceField ( SymbolLookupResult< component::FieldDefOp > fieldRef) const

Add the given fieldRef to the SourceRefs contained within this value.

For example, if fieldRef is a field reference @foo and this value represents self, the new value will represent self[@foo].

Parameters
fieldRefThe field reference into the current value.
Returns
The new value and a change result indicating if the value is different than the original value.

Definition at line 64 of file SourceRefLattice.cpp.

◆ translate()

std::pair< SourceRefLatticeValue, mlir::ChangeResult > llzk::SourceRefLatticeValue::translate ( const TranslationMap & translation) const

For the refs contained in this value, translate them given the translation map and return the transformed value.

Definition at line 48 of file SourceRefLattice.cpp.

◆ translateScalar()

mlir::ChangeResult llzk::SourceRefLatticeValue::translateScalar ( const TranslationMap & translation)
protected

Translate this value using the translation map, assuming this value is a scalar.

Definition at line 139 of file SourceRefLattice.cpp.


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