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