MLIR-AIE
AIEXToStandard.cpp
Go to the documentation of this file.
1//===- AIEXToStandard.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// Copyright (C) 2023, Advanced Micro Devices, Inc.
8//
9//===----------------------------------------------------------------------===//
10
14
15#include "mlir/IR/IRMapping.h"
16#include "mlir/IR/PatternMatch.h"
17#include "mlir/Pass/Pass.h"
18#include "mlir/Tools/mlir-translate/MlirTranslateMain.h"
19#include "mlir/Transforms/DialectConversion.h"
20
21namespace xilinx::AIEX {
22#define GEN_PASS_DEF_AIEXTOSTANDARD
23#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h.inc"
24} // namespace xilinx::AIEX
25
26using namespace mlir;
27using namespace xilinx;
28using namespace xilinx::AIE;
29using namespace xilinx::AIEX;
30
31template <typename MyAIEXOp>
34 using OpAdaptor = typename MyAIEXOp::Adaptor;
35 ModuleOp &module;
36
37 AIEXOpRemoval(MLIRContext *context, ModuleOp &m, PatternBenefit benefit = 1)
38 : OpConversionPattern<MyAIEXOp>(context, benefit), module(m) {}
39
40 LogicalResult
41 matchAndRewrite(MyAIEXOp op, OpAdaptor adaptor,
42 ConversionPatternRewriter &rewriter) const override {
43 Operation *Op = op.getOperation();
44 rewriter.eraseOp(Op);
45 return success();
46 }
47};
48
50 : xilinx::AIEX::impl::AIEXToStandardBase<AIEXToStandardPass> {
51 void runOnOperation() override {
52
53 ModuleOp m = getOperation();
54 ConversionTarget target(getContext());
55 RewritePatternSet removepatterns(&getContext());
56 removepatterns.add<AIEXOpRemoval<NpuDmaMemcpyNdOp>>(m.getContext(), m);
57 removepatterns.add<AIEXOpRemoval<NpuDmaWaitOp>>(m.getContext(), m);
58 removepatterns.add<AIEXOpRemoval<NpuPushQueueOp>>(m.getContext(), m);
59 removepatterns.add<AIEXOpRemoval<NpuWriteRTPOp>>(m.getContext(), m);
60 removepatterns.add<AIEXOpRemoval<NpuWrite32Op>>(m.getContext(), m);
61 removepatterns.add<AIEXOpRemoval<NpuSyncOp>>(m.getContext(), m);
62 removepatterns.add<AIEXOpRemoval<NpuWriteBdOp>>(m.getContext(), m);
63 removepatterns.add<AIEXOpRemoval<NpuAddressPatchOp>>(m.getContext(), m);
64 removepatterns.add<AIEXOpRemoval<NpuPreemptOp>>(m.getContext(), m);
65
66 if (failed(applyPartialConversion(m, target, std::move(removepatterns))))
67 signalPassFailure();
68 }
69};
70
71std::unique_ptr<OperationPass<ModuleOp>> AIEX::createAIEXToStandardPass() {
72 return std::make_unique<AIEXToStandardPass>();
73}
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIEXToStandardPass()
Include the generated interface declarations.
LogicalResult matchAndRewrite(MyAIEXOp op, OpAdaptor adaptor, ConversionPatternRewriter &rewriter) const override
typename MyAIEXOp::Adaptor OpAdaptor
ModuleOp & AIEXOpRemoval(MLIRContext *context, ModuleOp &m, PatternBenefit benefit=1)
void runOnOperation() override