MLIR-AIE 1.4.6.dev
AIEXPasses.h
Go to the documentation of this file.
1//===- AIEXPasses.h ---------------------------------------------*- C++ -*-===//
2//
3// Copyright (C) 2021-2022 Xilinx, Inc.
4// Copyright (C) 2022-2026 Advanced Micro Devices, Inc.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef AIEX_PASSES_H
10#define AIEX_PASSES_H
11
14
15#include "mlir/Pass/Pass.h"
16#include "mlir/Pass/PassOptions.h"
17
18namespace xilinx::AIEX {
19
20#define GEN_PASS_DECL
21#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h.inc"
22
23std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIECreateCoresPass();
24std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIECreateLocksPass();
25std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIELowerMemcpyPass();
26std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
28std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
30std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIEDmaToNpuPass();
31std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
32createAIEDmaToNpuPass(const AIEDmaToNpuOptions &options);
33std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
35std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>> createAIENpuToCertPass();
36std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIECertPagesPass();
37std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIECertVerifyPass();
38std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>> createAIEXToStandardPass();
39std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
41std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
43std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
45std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
47std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
49std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
51std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
53 const AIEAssignRuntimeSequenceBDIDsOptions &options);
54std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
56std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
58std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
60std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
62std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
63createAIELowerDynamicBDPoolPass(const AIELowerDynamicBDPoolOptions &options);
64std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
66std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
68std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
70std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
72std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>> createAIELowerSetLockPass();
73std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
75std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
77std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
79std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
81std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
83std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
85std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
87std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
89std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
91std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
93 AIELowerScratchpadParametersOptions options);
94
95/// Generate the code for registering passes.
96#define GEN_PASS_REGISTRATION
97#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h.inc"
98
99/// Name of the runtime sequence aie-expand-load-pdi{init-entry} adds.
100inline constexpr llvm::StringLiteral initEntrySequenceName = "reconfig_init";
101
102/// aiecc's stages that give a design its tiles, locks, BD IDs, buffers and
103/// routes, in its order. aiecc runs them as separate steps; the
104/// `aie-resource-stages` pipeline runs them back to back. Each anchors on the
105/// module.
106void addPlacementStage(mlir::OpPassManager &pm,
107 const AIE::AIEPlaceTilesOptions &options);
108void addTraceStage(mlir::OpPassManager &pm);
109/// Affine lowering through `aie-prepare-buffers`.
110void addLoweringStage(mlir::OpPassManager &pm, bool dynamicObjFifos,
111 bool packetSwObjFifos, bool ctrlPktOverlay,
112 bool loadPdiToCtrlPkt, bool skipObjectFifoVerify,
113 llvm::ArrayRef<int> coverColumns = {},
114 bool adaptiveOverlay = true, bool checkQueueSpace = true);
115void addBufferAddressStage(mlir::OpPassManager &pm, int64_t placementBudget);
116void addRoutingStage(mlir::OpPassManager &pm, bool allowDeadlockProne);
117
118/// Options of `aie-resource-stages`, named and defaulted as aiecc's flags.
120 : public mlir::PassPipelineOptions<AIEResourceStagesOptions> {
121 Option<AIE::PlacerType> placer{
122 *this, "placer", llvm::cl::desc("Placement algorithm to use"),
123 llvm::cl::values(clEnumValN(AIE::PlacerType::SequentialPlacer,
124 "sequential_placer",
125 "Sequential column-major placement"),
126 clEnumValN(AIE::PlacerType::SAPlacer, "sa_placer",
127 "Simulated annealing placement")),
128 llvm::cl::init(AIE::PlacerType::SequentialPlacer)};
129 Option<int> coresPerCol{*this, "cores-per-col",
130 llvm::cl::desc("Max cores per column"),
131 llvm::cl::init(-1)};
132 Option<int> saSeed{
133 *this, "sa-seed",
134 llvm::cl::desc("Random seed for SA placer (0 = non-deterministic)"),
135 llvm::cl::init(1)};
136 Option<double> saEffort{
137 *this, "sa-effort",
138 llvm::cl::desc("Scale on the SA placer's search budget"),
139 llvm::cl::init(1.0)};
140 Option<bool> dynamicObjFifos{*this, "dynamic-objFifos",
141 llvm::cl::desc("Dynamic objectFIFOs"),
142 llvm::cl::init(true)};
143 Option<bool> packetSwObjFifos{*this, "packet-sw-objFifos",
144 llvm::cl::desc("Packet-switched objectFIFOs"),
145 llvm::cl::init(false)};
146 Option<bool> ctrlPktOverlay{
147 *this, "generate-ctrl-pkt-overlay",
148 llvm::cl::desc("Route shim-to-tile control overlay"),
149 llvm::cl::init(false)};
150 Option<bool> loadPdiToCtrlPkt{
151 *this, "load-pdi-to-ctrl-pkt",
152 llvm::cl::desc("Load PDIs over control packets"), llvm::cl::init(false)};
153 Option<bool> adaptiveOverlay{
154 *this, "ctrlpkt-adaptive-overlay",
155 llvm::cl::desc("Choose the control overlay around application resources"),
156 llvm::cl::init(true)};
158 *this, "skip-objectFifo-verify",
159 llvm::cl::desc("Skip structural verification of split objectFifo IR"),
160 llvm::cl::init(false)};
161 Option<int64_t> placementBudget{
162 *this, "placement-budget",
163 llvm::cl::desc("Buffer placements to try per tile before giving up"),
164 llvm::cl::init(100000)};
166 *this, "allow-deadlock-prone-routing",
167 llvm::cl::desc("Warn of, rather than fail on, deadlock-prone flows"),
168 llvm::cl::init(false)};
169};
170
172
173} // namespace xilinx::AIEX
174
175#endif // AIEX_PASSES_H
constexpr llvm::StringLiteral initEntrySequenceName
Name of the runtime sequence aie-expand-load-pdi{init-entry} adds.
Definition AIEXPasses.h:100
void addLoweringStage(mlir::OpPassManager &pm, bool dynamicObjFifos, bool packetSwObjFifos, bool ctrlPktOverlay, bool loadPdiToCtrlPkt, bool skipObjectFifoVerify, llvm::ArrayRef< int > coverColumns={}, bool adaptiveOverlay=true, bool checkQueueSpace=true)
Affine lowering through aie-prepare-buffers.
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEResolveAddressPatchBuffersPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELowerMemcpyPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELowerDynamicBDPoolPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIETransformBfpTypesPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIECreateLocksPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIECtrlPacketInferTilesPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEReserveRuntimeBDIDsPass()
void addBufferAddressStage(mlir::OpPassManager &pm, int64_t placementBudget)
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELowerSetLockPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEDmaToNpuPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIECreateCoresPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIEMaterializeRuntimeSequencesPass()
void addRoutingStage(mlir::OpPassManager &pm, bool allowDeadlockProne)
void addPlacementStage(mlir::OpPassManager &pm, const AIE::AIEPlaceTilesOptions &options)
aiecc's stages that give a design its tiles, locks, BD IDs, buffers and routes, in its order.
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEXInlineTraceConfigPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIENpuToCertPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEDecomposeLargeDmaBdPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIEExpandLoadPdiPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIEXToStandardPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIECertVerifyPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIECtrlPacketToDmaPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELowerCoreResetPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIESubstituteShimDMAAllocationsPass()
void registerAIEResourceStagesPipeline()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIELowerScratchpadParametersPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEVerifyRuntimeRearmPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEMaterializeBDChainsPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELowerMulticastPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIESplitLongRepeatsPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIETxnToControlPacketPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEDMATasksToNPUPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIESCFToControlFlowPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEBroadcastPacketPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIEFuseTraceBuffersPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEUnrollRuntimeSequenceLoopsPass()
void addTraceStage(mlir::OpPassManager &pm)
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIECertPagesPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEAssignRuntimeSequenceBDIDsPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELegalizeControlPacketPass()
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIELowerDmaChannelResetPass()
Options of aie-resource-stages, named and defaulted as aiecc's flags.
Definition AIEXPasses.h:120
Option< AIE::PlacerType > placer
Definition AIEXPasses.h:121