MLIR-AIE 1.4.5.dev
AIEVectorTransferLowering.cpp
Go to the documentation of this file.
1//===- AIEVectorTransferLowering.cpp -----------------------------*- C++-*-===//
2//
3// Copyright (C) 2025 Advanced Micro Devices, Inc.
4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5//
6//===----------------------------------------------------------------------===//
7
10
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"
24
25namespace xilinx::AIE {
26#define GEN_PASS_DEF_AIEVECTORTRANSFERLOWERING
27#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
28} // namespace xilinx::AIE
29
30#define DEBUG_TYPE "aie-vector-transfer-opt"
31
32using namespace mlir;
33using namespace xilinx;
34using namespace xilinx::AIE;
35
36namespace {
37
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;
46 }
47
48 void getDependentDialects(DialectRegistry &registry) const override {
49 registry.insert<LLVM::LLVMDialect>();
50 }
51
52 void runOnOperation() override {
53 DeviceOp deviceOp = getOperation();
54 MLIRContext *context = &getContext();
55
56 std::optional<unsigned> maxRank = std::nullopt;
57 if (maxTransferRank != static_cast<unsigned>(-1))
58 maxRank = maxTransferRank;
59
60 RewritePatternSet patterns(context);
61 vector::populateVectorTransferLoweringPatterns(patterns, maxRank);
62
63 if (failed(applyPatternsGreedily(deviceOp, std::move(patterns))))
64 signalPassFailure();
65 }
66};
67} // namespace
68
69std::unique_ptr<OperationPass<DeviceOp>>
71 return std::make_unique<AIEVectorTransferLoweringPass>();
72}
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEVectorTransferLoweringPass()