MLIR-AIE
Namespaces | Classes | Functions
xilinx::aievec Namespace Reference

Namespaces

namespace  aie1
 

Classes

class  AddOpConversion
 
struct  AIEVecConvAnalysis
 
class  AIEVecType
 
class  BroadcastOpConversion
 
class  BroadcastScalarOpConversion
 
struct  BufferParams
 
struct  CanonicalizeVectorForAIEVecOptions
 Options for the "canonicalize-vector-for-aievec" pipeline. More...
 
class  ConcatOpConversion
 
struct  ConvertAIEVecToLLVMPass
 
struct  ConvertVectorToAIEVecOptions
 Options for the "convert-vector-to-aievec" pipeline. More...
 
class  ExtOpConversion
 
class  ExtractElemOpConversion
 
class  FMAElemOpConversion
 
class  FMAOpConversion
 
class  FoldAIECastOps
 
class  IntervalReuse
 
struct  LowerVectorToAIEVecOptions
 Options for the "lower-vector-to-aievec" pipeline. More...
 
class  MatMulOpConversion
 
class  MaxOpConversion
 
class  MinOpConversion
 
class  MulElemOpConversion
 
class  MulOpConversion
 
struct  OptimizeAIEVecOptions
 Options for the "optimize-aievec" pipeline. More...
 
class  PackOpConversion
 
class  SelectOpConversion
 
class  ShiftOpConversion
 
class  ShuffleOpConversion
 
class  SRSOpConversion
 
class  SubOpConversion
 
class  UnpackOpConversion
 
class  UPDOpConversion
 
class  UPSOpConversion
 

Functions

void populateAIEVecToLLVMConversionPatterns (mlir::LLVMTypeConverter &converter, mlir::RewritePatternSet &patterns)
 
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createConvertAIEVecToLLVMPass ()
 
char getHexValue (int val)
 
bool isPowerOfTwo (int32_t n)
 
mlir::VectorType createVectorType (unsigned lanes, mlir::Type elementType)
 
int32_t getElementSizeInBits (mlir::VectorType type)
 
unsigned getVectorLaneSize (mlir::VectorType type)
 
int32_t getVectorSizeInBits (mlir::VectorType type)
 
bool isAIEOp (mlir::Operation *op)
 
mlir::VectorType getVectorOpDestType (mlir::VectorType type, bool AIE2)
 
mlir::AffineExpr flattenedStridedExpr (llvm::ArrayRef< int64_t > sizes, llvm::ArrayRef< mlir::AffineExpr > exprs, mlir::MLIRContext *context)
 
mlir::AffineExpr constructLinearizedAffineExprForUPDOp (UPDOp updOp)
 
std::pair< mlir::AffineExpr, int32_t > extractBaseAndOffset (mlir::AffineExpr expr)
 
bool isAssumingNoImplicitBroadcastOfDynamicSizes (mlir::Block *block)
 
bool isAssumingNoImplicitBroadcastOfDynamicSizes (mlir::OpBuilder &builder)
 
std::unique_ptr< mlir::Pass > createAIEVecConvolutionAnalysisPass ()
 
void registerAIEVecToCppTranslation ()
 
void buildConvertVectorToAIEVec (mlir::OpPassManager &pm, const ConvertVectorToAIEVecOptions &options)
 Adds the "convert-vector-to-aievec" pipeline to the OpPassManager.
 
void buildCanonicalizeVectorForAIEVec (mlir::OpPassManager &pm, const CanonicalizeVectorForAIEVecOptions &options)
 
void buildLowerVectorToAIEVec (mlir::OpPassManager &pm, const LowerVectorToAIEVecOptions &options)
 
void buildOptimizeAIEVec (mlir::OpPassManager &pm, const OptimizeAIEVecOptions &options)
 
void registerAIEVecPipelines ()
 Register all pipelines for the AIE Vector dialect.
 
std::unique_ptr<::mlir::Pass > createCopyRemovalPass ()
 Create a pass that removes unnecessary Copy operations.
 
std::unique_ptr<::mlir::Pass > createDynamicSizeNoImplicitBroadcastPass ()
 
void buildDynamicSizeNoImplicitBroadcastPass (mlir::OpPassManager &pm)
 
void registerTransformDialectExtension (mlir::DialectRegistry &registry)
 
std::unique_ptr< mlir::Pass > createAIEVectorizePass ()
 
template<typename TransferReadLikeOp , typename = std::enable_if_t< std::is_same_v<TransferReadLikeOp, mlir::vector::TransferReadOp> || std::is_same_v<TransferReadLikeOp, mlir::vector::TransferReadOp::Adaptor>>>
std::optional< int64_t > getTransferReadAlignmentOffset (TransferReadLikeOp readOp, mlir::VectorType vType, int64_t alignment)
 
mlir::VectorType getFlattenedVectorType (mlir::VectorType vecTy)
 
mlir::LogicalResult translateAIEVecToCpp (mlir::Operation *op, bool aie2, mlir::raw_ostream &os)
 Translates the AIE vector dialect MLIR to C++ code.
 
std::string getVectorTypeString (VectorType type, bool abbrev=false, bool acc=false)
 
std::string getMulOrFMAIntrinsicName (Operation *op)
 
uint32_t encodeSquare (uint32_t square)
 
void encodeConf (uint32_t conf[2], const BufferParams &x, const BufferParams &z, bool sub)
 
void populateAIEVecToLLVMConversionPatterns (mlir::LLVMTypeConverter &converter, mlir::RewritePatternSet &patterns, Aie2Fp32Emulation aie2Fp32EmulationOption)
 
SmallVector< NamedAttribute > buildFMAOpSplatAttrForElemTy (aievec::aie1::FMAOp fmaOp, int64_t bcastPos, int64_t step=1)
 
void configureAIEVecConvOpTransformationLegalizations (ConversionTarget &target, AnalysisManager &am, TargetBackend backend)
 
void populateAIEVecConvOpTransformationPatterns (RewritePatternSet &patterns, AnalysisManager &am, unsigned shiftParam, TargetBackend backend)
 
void configureAIEVecConvOpTransformationLegalizations (mlir::ConversionTarget &target, mlir::AnalysisManager &am, TargetBackend backend)
 
void populateAIEVecConvOpTransformationPatterns (mlir::RewritePatternSet &patterns, mlir::AnalysisManager &am, unsigned shiftParam, TargetBackend backend)
 
template<typename TransferReadLikeOp , typename >
std::optional< int64_t > getTransferReadAlignmentOffset (TransferReadLikeOp readOp, VectorType vType, int64_t alignment)
 
template std::optional< int64_t > getTransferReadAlignmentOffset (vector::TransferReadOp readOp, VectorType vType, int64_t alignment)
 
template std::optional< int64_t > getTransferReadAlignmentOffset (vector::TransferReadOp::Adaptor readOp, VectorType vType, int64_t alignment)
 
VectorType getFlattenedVectorType (VectorType vecTy)
 

Function Documentation

◆ buildCanonicalizeVectorForAIEVec()

void xilinx::aievec::buildCanonicalizeVectorForAIEVec ( mlir::OpPassManager &  pm,
const CanonicalizeVectorForAIEVecOptions options 
)

Referenced by registerAIEVecPipelines().

◆ buildConvertVectorToAIEVec()

void xilinx::aievec::buildConvertVectorToAIEVec ( mlir::OpPassManager &  pm,
const ConvertVectorToAIEVecOptions options 
)

Adds the "convert-vector-to-aievec" pipeline to the OpPassManager.

This pipeline takes Vector code, transforms it to make it compatible with the selected AIE target, lowers it to AIEVec dialect, and performs some optimizations based on the target AIE architecture.

Referenced by registerAIEVecPipelines().

◆ buildDynamicSizeNoImplicitBroadcastPass()

void xilinx::aievec::buildDynamicSizeNoImplicitBroadcastPass ( mlir::OpPassManager &  pm)

Referenced by registerAIEVecPipelines().

◆ buildFMAOpSplatAttrForElemTy()

SmallVector< NamedAttribute > xilinx::aievec::buildFMAOpSplatAttrForElemTy ( aievec::aie1::FMAOp  fmaOp,
int64_t  bcastPos,
int64_t  step = 1 
)

◆ buildLowerVectorToAIEVec()

void xilinx::aievec::buildLowerVectorToAIEVec ( mlir::OpPassManager &  pm,
const LowerVectorToAIEVecOptions options 
)

Referenced by registerAIEVecPipelines().

◆ buildOptimizeAIEVec()

void xilinx::aievec::buildOptimizeAIEVec ( mlir::OpPassManager &  pm,
const OptimizeAIEVecOptions options 
)

Referenced by registerAIEVecPipelines().

◆ configureAIEVecConvOpTransformationLegalizations() [1/2]

void xilinx::aievec::configureAIEVecConvOpTransformationLegalizations ( ConversionTarget &  target,
AnalysisManager &  am,
TargetBackend  backend 
)

◆ configureAIEVecConvOpTransformationLegalizations() [2/2]

void xilinx::aievec::configureAIEVecConvOpTransformationLegalizations ( mlir::ConversionTarget &  target,
mlir::AnalysisManager &  am,
TargetBackend  backend 
)

◆ constructLinearizedAffineExprForUPDOp()

mlir::AffineExpr xilinx::aievec::constructLinearizedAffineExprForUPDOp ( UPDOp  updOp)
inline

Definition at line 151 of file AIEVecUtils.h.

References flattenedStridedExpr().

◆ createAIEVecConvolutionAnalysisPass()

std::unique_ptr< Pass > xilinx::aievec::createAIEVecConvolutionAnalysisPass ( )

Definition at line 610 of file FoldMulAddChainToConvOp.cpp.

◆ createAIEVectorizePass()

std::unique_ptr< Pass > xilinx::aievec::createAIEVectorizePass ( )

Definition at line 3063 of file AIEVectorize.cpp.

◆ createConvertAIEVecToLLVMPass()

std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > xilinx::aievec::createConvertAIEVecToLLVMPass ( )

Definition at line 2379 of file AIEVecToLLVM.cpp.

References createConvertAIEVecToLLVMPass().

Referenced by createConvertAIEVecToLLVMPass().

◆ createCopyRemovalPass()

std::unique_ptr<::mlir::Pass > xilinx::aievec::createCopyRemovalPass ( )

Create a pass that removes unnecessary Copy operations.

Definition at line 244 of file CopyRemoval.cpp.

◆ createDynamicSizeNoImplicitBroadcastPass()

std::unique_ptr<::mlir::Pass > xilinx::aievec::createDynamicSizeNoImplicitBroadcastPass ( )

Definition at line 121 of file DynamicSizeNoImplicitBroadcast.cpp.

◆ createVectorType()

mlir::VectorType xilinx::aievec::createVectorType ( unsigned  lanes,
mlir::Type  elementType 
)
inline

◆ encodeConf()

void xilinx::aievec::encodeConf ( uint32_t  conf[2],
const BufferParams x,
const BufferParams z,
bool  sub 
)

◆ encodeSquare()

uint32_t xilinx::aievec::encodeSquare ( uint32_t  square)

◆ extractBaseAndOffset()

std::pair< mlir::AffineExpr, int32_t > xilinx::aievec::extractBaseAndOffset ( mlir::AffineExpr  expr)
inline

Definition at line 206 of file AIEVecUtils.h.

◆ flattenedStridedExpr()

mlir::AffineExpr xilinx::aievec::flattenedStridedExpr ( llvm::ArrayRef< int64_t >  sizes,
llvm::ArrayRef< mlir::AffineExpr >  exprs,
mlir::MLIRContext *  context 
)
inline

Definition at line 111 of file AIEVecUtils.h.

Referenced by constructLinearizedAffineExprForUPDOp().

◆ getElementSizeInBits()

int32_t xilinx::aievec::getElementSizeInBits ( mlir::VectorType  type)
inline

◆ getFlattenedVectorType() [1/2]

mlir::VectorType xilinx::aievec::getFlattenedVectorType ( mlir::VectorType  vecTy)

◆ getFlattenedVectorType() [2/2]

VectorType xilinx::aievec::getFlattenedVectorType ( VectorType  vecTy)

Definition at line 99 of file Utils.cpp.

◆ getHexValue()

char xilinx::aievec::getHexValue ( int  val)
inline

Definition at line 31 of file AIEVecUtils.h.

◆ getMulOrFMAIntrinsicName()

std::string xilinx::aievec::getMulOrFMAIntrinsicName ( Operation *  op)

◆ getTransferReadAlignmentOffset() [1/4]

template<typename TransferReadLikeOp , typename = std::enable_if_t< std::is_same_v<TransferReadLikeOp, mlir::vector::TransferReadOp> || std::is_same_v<TransferReadLikeOp, mlir::vector::TransferReadOp::Adaptor>>>
std::optional< int64_t > xilinx::aievec::getTransferReadAlignmentOffset ( TransferReadLikeOp  readOp,
mlir::VectorType  vType,
int64_t  alignment 
)

◆ getTransferReadAlignmentOffset() [2/4]

template<typename TransferReadLikeOp , typename >
std::optional< int64_t > xilinx::aievec::getTransferReadAlignmentOffset ( TransferReadLikeOp  readOp,
VectorType  vType,
int64_t  alignment 
)

Definition at line 73 of file Utils.cpp.

◆ getTransferReadAlignmentOffset() [3/4]

template std::optional< int64_t > xilinx::aievec::getTransferReadAlignmentOffset ( vector::TransferReadOp  readOp,
VectorType  vType,
int64_t  alignment 
)

◆ getTransferReadAlignmentOffset() [4/4]

template std::optional< int64_t > xilinx::aievec::getTransferReadAlignmentOffset ( vector::TransferReadOp::Adaptor  readOp,
VectorType  vType,
int64_t  alignment 
)

◆ getVectorLaneSize()

unsigned xilinx::aievec::getVectorLaneSize ( mlir::VectorType  type)
inline

Definition at line 55 of file AIEVecUtils.h.

Referenced by getMulOrFMAIntrinsicName(), getVectorSizeInBits(), getVectorTypeString(), xilinx::aievec::BroadcastScalarOpConversion::matchAndRewrite(), xilinx::aievec::ConcatOpConversion::matchAndRewrite(), xilinx::aievec::ExtractElemOpConversion::matchAndRewrite(), xilinx::aievec::ExtOpConversion::matchAndRewrite(), xilinx::aievec::MaxOpConversion::matchAndRewrite(), xilinx::aievec::MinOpConversion::matchAndRewrite(), xilinx::aievec::ShiftOpConversion::matchAndRewrite(), xilinx::aievec::SRSOpConversion::matchAndRewrite(), xilinx::aievec::UPDOpConversion::matchAndRewrite(), xilinx::aievec::UPSOpConversion::matchAndRewrite(), ConvertMulAddToAIEVecFMAElemOpPattern::matchAndRewrite(), ComputeSigmoidOpPattern::matchAndRewrite(), ConvertMulFToAIEVecMulElemOpPattern::matchAndRewrite(), ConvertMulIToAIEVecMulElemOpPattern::matchAndRewrite(), ComputeNegOpPattern::matchAndRewrite(), LowerVectorSelectOpToAIEVecSelOp::matchAndRewrite(), ComputeSignedIntRightShiftOpPattern::matchAndRewrite(), ComputeBxorAndBnegOpPattern::matchAndRewrite(), ComputeCeilOpPattern::matchAndRewrite(), ComputeErfOpPattern::matchAndRewrite(), ComputeFloorOpPattern::matchAndRewrite(), ComputeRsqrtOpPattern::matchAndRewrite(), ComputeSqrtOpPattern::matchAndRewrite(), ComputeTanhOpByLUTPattern::matchAndRewrite(), ComputeAbsOpPattern< SrcOpTy >::matchAndRewrite(), LowerVectorAddOrSubOpToAIEVecAddElemOrSubElemOp< SrcOpTy, DstOpTy >::matchAndRewrite(), LowerVectorMinMaxOpToAIEVecMinMaxOp< SrcOpTy, DstOpTy >::matchAndRewrite(), LowerVectorCmpOpToAIEVecCmpOp< SrcOpTy, CmpTy >::matchAndRewrite(), ComputeBandAndBorOpPattern< SrcOpTy, DstOpTy >::matchAndRewrite(), LowerTruncOpPattern< SrcOpTy >::matchAndRewrite(), ConvertVectorFMAOpToAIEVecFMAElemOpPattern::matchAndRewrite(), LowerVectorReductionMinOp::matchAndRewrite(), LowerVectorReductionMaxOp::matchAndRewrite(), LowerVectorReductionAddIntOp::matchAndRewrite(), LowerVectorReductionAddFloatOp::matchAndRewrite(), LowerVectorReductionAddBfloat16Op::matchAndRewrite(), FoldVectorExtractAndSplatToAIEBroadcast::matchAndRewrite(), ConvertSplatToAIEBroadcast::matchAndRewrite(), verifyMulFMAConvOp(), verifyMulFMAElemOp(), xilinx::aievec::aie1::verifyMulFMAOp(), and verifyPackUnpackOp().

◆ getVectorOpDestType()

mlir::VectorType xilinx::aievec::getVectorOpDestType ( mlir::VectorType  type,
bool  AIE2 
)
inline

◆ getVectorSizeInBits()

int32_t xilinx::aievec::getVectorSizeInBits ( mlir::VectorType  type)
inline

◆ getVectorTypeString()

std::string xilinx::aievec::getVectorTypeString ( VectorType  type,
bool  abbrev = false,
bool  acc = false 
)

◆ isAIEOp()

bool xilinx::aievec::isAIEOp ( mlir::Operation *  op)
inline

Definition at line 73 of file AIEVecUtils.h.

◆ isAssumingNoImplicitBroadcastOfDynamicSizes() [1/2]

bool xilinx::aievec::isAssumingNoImplicitBroadcastOfDynamicSizes ( mlir::Block *  block)
inline

◆ isAssumingNoImplicitBroadcastOfDynamicSizes() [2/2]

bool xilinx::aievec::isAssumingNoImplicitBroadcastOfDynamicSizes ( mlir::OpBuilder &  builder)
inline

Definition at line 246 of file AIEVecUtils.h.

References isAssumingNoImplicitBroadcastOfDynamicSizes().

◆ isPowerOfTwo()

bool xilinx::aievec::isPowerOfTwo ( int32_t  n)
inline

Definition at line 39 of file AIEVecUtils.h.

◆ populateAIEVecConvOpTransformationPatterns() [1/2]

void xilinx::aievec::populateAIEVecConvOpTransformationPatterns ( mlir::RewritePatternSet &  patterns,
mlir::AnalysisManager &  am,
unsigned  shiftParam,
TargetBackend  backend 
)

◆ populateAIEVecConvOpTransformationPatterns() [2/2]

void xilinx::aievec::populateAIEVecConvOpTransformationPatterns ( RewritePatternSet &  patterns,
AnalysisManager &  am,
unsigned  shiftParam,
TargetBackend  backend 
)

◆ populateAIEVecToLLVMConversionPatterns() [1/2]

void xilinx::aievec::populateAIEVecToLLVMConversionPatterns ( mlir::LLVMTypeConverter &  converter,
mlir::RewritePatternSet &  patterns 
)

◆ populateAIEVecToLLVMConversionPatterns() [2/2]

void xilinx::aievec::populateAIEVecToLLVMConversionPatterns ( mlir::LLVMTypeConverter &  converter,
mlir::RewritePatternSet &  patterns,
Aie2Fp32Emulation  aie2Fp32EmulationOption 
)

Definition at line 2323 of file AIEVecToLLVM.cpp.

References populateAIEVecToLLVMConversionPatterns().

◆ registerAIEVecPipelines()

void xilinx::aievec::registerAIEVecPipelines ( )

◆ registerAIEVecToCppTranslation()

void xilinx::aievec::registerAIEVecToCppTranslation ( )

Definition at line 43 of file TranslateRegistration.cpp.

References xilinx::AIE2, and translateAIEVecToCpp().

◆ registerTransformDialectExtension()

void xilinx::aievec::registerTransformDialectExtension ( mlir::DialectRegistry &  registry)

◆ translateAIEVecToCpp()

mlir::LogicalResult xilinx::aievec::translateAIEVecToCpp ( mlir::Operation *  op,
bool  aie2,
mlir::raw_ostream &  os 
)

Translates the AIE vector dialect MLIR to C++ code.

Referenced by aieTranslateAIEVecToCpp(), and registerAIEVecToCppTranslation().