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
21using namespace mlir;
22using namespace xilinx;
23using namespace xilinx::AIE;
24using namespace xilinx::AIEX;
25
26template <typename MyAIEXOp>
29 using OpAdaptor = typename MyAIEXOp::Adaptor;
30 ModuleOp &module;
31
32 AIEXOpRemoval(MLIRContext *context, ModuleOp &m, PatternBenefit benefit = 1)
33 : OpConversionPattern<MyAIEXOp>(context, benefit), module(m) {}
34
35 LogicalResult
36 matchAndRewrite(MyAIEXOp op, OpAdaptor adaptor,
37 ConversionPatternRewriter &rewriter) const override {
38 Operation *Op = op.getOperation();
39 rewriter.eraseOp(Op);
40 return success();
41 }
42};
43
44struct AIEXToStandardPass : AIEXToStandardBase<AIEXToStandardPass> {
45 void runOnOperation() override {
46
47 ModuleOp m = getOperation();
48 ConversionTarget target(getContext());
49 RewritePatternSet removepatterns(&getContext());
50 removepatterns.add<AIEXOpRemoval<NpuDmaMemcpyNdOp>>(m.getContext(), m);
51 removepatterns.add<AIEXOpRemoval<NpuDmaWaitOp>>(m.getContext(), m);
52 removepatterns.add<AIEXOpRemoval<NpuPushQueueOp>>(m.getContext(), m);
53 removepatterns.add<AIEXOpRemoval<NpuWriteRTPOp>>(m.getContext(), m);
54 removepatterns.add<AIEXOpRemoval<NpuWrite32Op>>(m.getContext(), m);
55 removepatterns.add<AIEXOpRemoval<NpuSyncOp>>(m.getContext(), m);
56 removepatterns.add<AIEXOpRemoval<NpuWriteBdOp>>(m.getContext(), m);
57 removepatterns.add<AIEXOpRemoval<NpuAddressPatchOp>>(m.getContext(), m);
58
59 if (failed(applyPartialConversion(m, target, std::move(removepatterns))))
60 signalPassFailure();
61 }
62};
63
64std::unique_ptr<OperationPass<ModuleOp>> AIEX::createAIEXToStandardPass() {
65 return std::make_unique<AIEXToStandardPass>();
66}
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