MLIR-AIE 1.4.6.dev
AIEObjectFifoPipeline.cpp
Go to the documentation of this file.
1//===- AIEObjectFifoPipeline.cpp --------------------------------*- C++ -*-===//
2//
3// Copyright (C) 2026 Advanced Micro Devices, Inc.
4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5//
6//===----------------------------------------------------------------------===//
7
9
10#include "mlir/Pass/PassManager.h"
11#include "mlir/Pass/PassRegistry.h"
12
13using namespace mlir;
14using namespace xilinx;
15using namespace xilinx::AIE;
16
17namespace {
18struct ObjectFifoLoweringOptions
19 : public PassPipelineOptions<ObjectFifoLoweringOptions> {
20 Option<bool> packetSwitched{
21 *this, "packet-sw-objFifos",
22 llvm::cl::desc(
23 "Flag to enable aie.packetflow lowering from objectfifos."),
24 llvm::cl::init(false)};
25 Option<bool> reserveControllerPacketIds{
26 *this, "reserve-controller-packet-ids",
27 llvm::cl::desc("Reserve the tile controllers' packet IDs."),
28 llvm::cl::init(false)};
29 Option<bool> skipVerify{
30 *this, "skip-verify",
31 llvm::cl::desc("Skip structural verification of split objectFifo IR."),
32 llvm::cl::init(false)};
33 Option<bool> checkQueueSpace{
34 *this, "check-queue-space",
35 llvm::cl::desc("Wait for room on the task queue before each push a core "
36 "makes onto an out-of-order channel."),
37 llvm::cl::init(true)};
38};
39} // namespace
40
41void xilinx::AIE::addObjectFifoLoweringPasses(OpPassManager &pm,
42 bool packetSwitched,
43 bool skipVerify,
44 bool reserveControllerPacketIds,
45 bool checkQueueSpace) {
46 pm.addPass(createAIEObjectFifoSplitPass());
47 if (!skipVerify) {
49 }
50 pm.addPass(
51 createAIEAssignPacketIdsPass(packetSwitched, reserveControllerPacketIds));
53 AIEObjectFifoInsertCoreQueuePushesOptions pushOptions;
54 pushOptions.checkQueueSpace = checkQueueSpace;
55 pm.addPass(createAIEObjectFifoInsertCoreQueuePushesPass(pushOptions));
59}
60
62 PassPipelineRegistration<ObjectFifoLoweringOptions>(
63 "aie-objectFifo-stateful-transform",
64 "Lower aie.objectfifo to buffers, locks, flows and DMA programs",
65 [](OpPassManager &pm, const ObjectFifoLoweringOptions &options) {
67 pm, options.packetSwitched, options.skipVerify,
68 options.reserveControllerPacketIds, options.checkQueueSpace);
69 });
70}
void addObjectFifoLoweringPasses(mlir::OpPassManager &pm, bool packetSwitched, bool skipVerify, bool reserveControllerPacketIds=false, bool checkQueueSpace=true)
Adds the passes of aie-objectFifo-stateful-transform to pm, which anchors on DeviceOp.
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoLowerCoresPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoInsertCoreQueuePushesPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoAllocatePass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignPacketIdsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoErasePoolsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoVerifyPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoLowerDMAsPass()
void registerAIEObjectFifoPipeline()
Register aie-objectFifo-stateful-transform as a pipeline over the passes that lower aie....
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoSplitPass()