LLZK 2.1.1
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType > Class Template Reference

Common implementation for handling MemberWriteOp and MemberReadOp while destructuring an aggregate type (e.g., ArrayType or PodType) stored in a struct member. More...

#include <LLZKConversionUtils.h>

Inheritance diagram for llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >:
[legend]
Collaboration diagram for llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >:
[legend]

Public Types

using MemberInfo = std::pair<mlir::StringAttr, mlir::Type>
 Scalar member name and type.
using LocalMemberReplacementMap = llvm::DenseMap<IdType, MemberInfo>
 Maps a scalar element identifier within the aggregate to its new scalar member info.
using MemberReplacementMap
 Maps struct -> original aggregate-type member name -> LocalMemberReplacementMap.

Public Member Functions

 SplitAggregateInMemberRefOp (mlir::MLIRContext *ctx, mlir::SymbolTableCollection &symTables, const MemberReplacementMap &memberRepMap)
mlir::LogicalResult match (MemberRefOpClass op) const override
void rewrite (MemberRefOpClass op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override

Static Public Member Functions

static bool legal (MemberRefOpClass)

Protected Types

using OpAdaptor = typename MemberRefOpClass::Adaptor

Static Protected Member Functions

static GenHeaderType genHeader (MemberRefOpClass, mlir::ConversionPatternRewriter &)
 Executed at the start of rewrite() to (optionally) generate anything that should appear before the per-scalar operations that will be added by forId().
static void forId (mlir::Location, GenHeaderType &, IdType, MemberInfo, OpAdaptor, mlir::ConversionPatternRewriter &)
 Executed for each scalar id in the aggregate type of the original member to generate the per-scalar operations on the new scalar members.

Detailed Description

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
class llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >

Common implementation for handling MemberWriteOp and MemberReadOp while destructuring an aggregate type (e.g., ArrayType or PodType) stored in a struct member.

Template Parameters
ImplClassthe concrete subclass (CRTP)
MemberRefOpClassthe concrete op class (must implement MemberRefOpInterface)
GenHeaderTypereturn type of genHeader(), used to pass data to forId()
IdTypethe type used to identify a scalar element within the aggregate

Definition at line 264 of file LLZKConversionUtils.h.

Member Typedef Documentation

◆ LocalMemberReplacementMap

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
using llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::LocalMemberReplacementMap = llvm::DenseMap<IdType, MemberInfo>

Maps a scalar element identifier within the aggregate to its new scalar member info.

Definition at line 269 of file LLZKConversionUtils.h.

◆ MemberInfo

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
using llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::MemberInfo = std::pair<mlir::StringAttr, mlir::Type>

Scalar member name and type.

Definition at line 267 of file LLZKConversionUtils.h.

◆ MemberReplacementMap

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
using llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::MemberReplacementMap
Initial value:
llvm::DenseMap<
component::StructDefOp, llvm::DenseMap<mlir::StringAttr, LocalMemberReplacementMap>>

Maps struct -> original aggregate-type member name -> LocalMemberReplacementMap.

Definition at line 271 of file LLZKConversionUtils.h.

◆ OpAdaptor

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
using llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::OpAdaptor = typename MemberRefOpClass::Adaptor
protected

Definition at line 287 of file LLZKConversionUtils.h.

Constructor & Destructor Documentation

◆ SplitAggregateInMemberRefOp()

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::SplitAggregateInMemberRefOp ( mlir::MLIRContext * ctx,
mlir::SymbolTableCollection & symTables,
const MemberReplacementMap & memberRepMap )
inline

Definition at line 309 of file LLZKConversionUtils.h.

Member Function Documentation

◆ forId()

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
void llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::forId ( mlir::Location ,
GenHeaderType & ,
IdType ,
MemberInfo ,
OpAdaptor ,
mlir::ConversionPatternRewriter &  )
inlinestaticprotected

Executed for each scalar id in the aggregate type of the original member to generate the per-scalar operations on the new scalar members.

Definition at line 298 of file LLZKConversionUtils.h.

◆ genHeader()

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
GenHeaderType llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::genHeader ( MemberRefOpClass ,
mlir::ConversionPatternRewriter &  )
inlinestaticprotected

Executed at the start of rewrite() to (optionally) generate anything that should appear before the per-scalar operations that will be added by forId().

Definition at line 291 of file LLZKConversionUtils.h.

◆ legal()

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
bool llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::legal ( MemberRefOpClass )
inlinestatic

Definition at line 316 of file LLZKConversionUtils.h.

◆ match()

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
mlir::LogicalResult llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::match ( MemberRefOpClass op) const
inlineoverride

Definition at line 322 of file LLZKConversionUtils.h.

◆ rewrite()

template<typename ImplClass, HasInterface< component::MemberRefOpInterface > MemberRefOpClass, typename GenHeaderType, typename IdType>
void llzk::SplitAggregateInMemberRefOp< ImplClass, MemberRefOpClass, GenHeaderType, IdType >::rewrite ( MemberRefOpClass op,
OpAdaptor adaptor,
mlir::ConversionPatternRewriter & rewriter ) const
inlineoverride

Definition at line 326 of file LLZKConversionUtils.h.


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