11#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
12#include "mlir/Conversion/LLVMCommon/Pattern.h"
13#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
14#include "mlir/Dialect/Func/IR/FuncOps.h"
15#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
16#include "mlir/Dialect/MemRef/IR/MemRef.h"
17#include "mlir/Dialect/Vector/IR/VectorOps.h"
18#include "mlir/Dialect/Vector/Transforms/LoweringPatterns.h"
19#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h"
20#include "mlir/IR/PatternMatch.h"
21#include "mlir/Pass/Pass.h"
22#include "mlir/Transforms/DialectConversion.h"
23#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
26#define GEN_PASS_DEF_AIEVECTORTRANSFERLOWERING
27#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
30#define DEBUG_TYPE "aie-vector-transfer-opt"
38struct AIEVectorTransferLoweringPass
39 : xilinx::AIE::impl::AIEVectorTransferLoweringBase<
40 AIEVectorTransferLoweringPass> {
41 AIEVectorTransferLoweringPass() =
default;
42 AIEVectorTransferLoweringPass(
const AIEVectorTransferLoweringPass &pass)
43 : AIEVectorTransferLoweringPass() {}
44 AIEVectorTransferLoweringPass(
unsigned maxTransferRank) {
45 this->maxTransferRank = maxTransferRank;
48 void getDependentDialects(DialectRegistry ®istry)
const override {
49 registry.insert<LLVM::LLVMDialect>();
52 void runOnOperation()
override {
53 DeviceOp deviceOp = getOperation();
54 MLIRContext *context = &getContext();
56 std::optional<unsigned> maxRank = std::nullopt;
57 if (maxTransferRank !=
static_cast<unsigned>(-1))
58 maxRank = maxTransferRank;
60 RewritePatternSet patterns(context);
61 vector::populateVectorTransferLoweringPatterns(patterns, maxRank);
63 if (failed(applyPatternsGreedily(deviceOp, std::move(patterns))))
69std::unique_ptr<OperationPass<DeviceOp>>
71 return std::make_unique<AIEVectorTransferLoweringPass>();
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEVectorTransferLoweringPass()