MLIR-AIE
AIEVectorTransferLowering.cpp
Go to the documentation of this file.
1//===- AIEVectorTransferLowering.cpp -----------------------------*- C++-*-===//
2//
3// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7// (c) Copyright 2025 Advanced Micro Devices Inc.
8//
9//===----------------------------------------------------------------------===//
10
13
14#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
15#include "mlir/Conversion/LLVMCommon/Pattern.h"
16#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
17#include "mlir/Dialect/Func/IR/FuncOps.h"
18#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
19#include "mlir/Dialect/MemRef/IR/MemRef.h"
20#include "mlir/Dialect/Vector/IR/VectorOps.h"
21#include "mlir/Dialect/Vector/Transforms/LoweringPatterns.h"
22#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h"
23#include "mlir/IR/PatternMatch.h"
24#include "mlir/Pass/Pass.h"
25#include "mlir/Transforms/DialectConversion.h"
26#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
27
28namespace xilinx::AIE {
29#define GEN_PASS_DEF_AIEVECTORTRANSFERLOWERING
30#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
31} // namespace xilinx::AIE
32
33#define DEBUG_TYPE "aie-vector-transfer-opt"
34
35using namespace mlir;
36using namespace xilinx;
37using namespace xilinx::AIE;
38
39namespace {
40
41struct AIEVectorTransferLoweringPass
42 : xilinx::AIE::impl::AIEVectorTransferLoweringBase<
43 AIEVectorTransferLoweringPass> {
44 AIEVectorTransferLoweringPass() = default;
45 AIEVectorTransferLoweringPass(const AIEVectorTransferLoweringPass &pass)
46 : AIEVectorTransferLoweringPass() {}
47 AIEVectorTransferLoweringPass(unsigned maxTransferRank) {
48 this->maxTransferRank = maxTransferRank;
49 }
50
51 void getDependentDialects(DialectRegistry &registry) const override {
52 registry.insert<LLVM::LLVMDialect>();
53 }
54
55 void runOnOperation() override {
56 DeviceOp deviceOp = getOperation();
57 MLIRContext *context = &getContext();
58
59 std::optional<unsigned> maxRank = std::nullopt;
60 if (maxTransferRank != static_cast<unsigned>(-1))
61 maxRank = maxTransferRank;
62
63 RewritePatternSet patterns(context);
64 vector::populateVectorTransferLoweringPatterns(patterns, maxRank);
65
66 if (failed(applyPatternsGreedily(deviceOp, std::move(patterns))))
67 signalPassFailure();
68 }
69};
70} // namespace
71
72std::unique_ptr<OperationPass<DeviceOp>>
74 return std::make_unique<AIEVectorTransferLoweringPass>();
75}
Include the generated interface declarations.
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEVectorTransferLoweringPass()