MLIR-AIE 1.4.5.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);
113void addBufferAddressStage(mlir::OpPassManager &pm, int64_t placementBudget);
114void addRoutingStage(mlir::OpPassManager &pm, bool allowDeadlockProne);
115
116/// Options of `aie-resource-stages`, named and defaulted as aiecc's flags.
118 : public mlir::PassPipelineOptions<AIEResourceStagesOptions> {
119 Option<AIE::PlacerType> placer{
120 *this, "placer", llvm::cl::desc("Placement algorithm to use"),
121 llvm::cl::values(clEnumValN(AIE::PlacerType::SequentialPlacer,
122 "sequential_placer",
123 "Sequential column-major placement"),
124 clEnumValN(AIE::PlacerType::SAPlacer, "sa_placer",
125 "Simulated annealing placement")),
126 llvm::cl::init(AIE::PlacerType::SequentialPlacer)};
127 Option<int> coresPerCol{*this, "cores-per-col",
128 llvm::cl::desc("Max cores per column"),
129 llvm::cl::init(-1)};
130 Option<int> saSeed{
131 *this, "sa-seed",
132 llvm::cl::desc("Random seed for SA placer (0 = non-deterministic)"),
133 llvm::cl::init(1)};
134 Option<double> saEffort{
135 *this, "sa-effort",
136 llvm::cl::desc("Scale on the SA placer's search budget"),
137 llvm::cl::init(1.0)};
138 Option<bool> dynamicObjFifos{*this, "dynamic-objFifos",
139 llvm::cl::desc("Dynamic objectFIFOs"),
140 llvm::cl::init(true)};
141 Option<bool> packetSwObjFifos{*this, "packet-sw-objFifos",
142 llvm::cl::desc("Packet-switched objectFIFOs"),
143 llvm::cl::init(false)};
144 Option<bool> ctrlPktOverlay{
145 *this, "generate-ctrl-pkt-overlay",
146 llvm::cl::desc("Route shim-to-tile control overlay"),
147 llvm::cl::init(false)};
148 Option<bool> loadPdiToCtrlPkt{
149 *this, "load-pdi-to-ctrl-pkt",
150 llvm::cl::desc("Load PDIs over control packets"), llvm::cl::init(false)};
152 *this, "skip-objectFifo-verify",
153 llvm::cl::desc("Skip structural verification of split objectFifo IR"),
154 llvm::cl::init(false)};
155 Option<int64_t> placementBudget{
156 *this, "placement-budget",
157 llvm::cl::desc("Buffer placements to try per tile before giving up"),
158 llvm::cl::init(100000)};
160 *this, "allow-deadlock-prone-routing",
161 llvm::cl::desc("Warn of, rather than fail on, deadlock-prone flows"),
162 llvm::cl::init(false)};
163};
164
166
167} // namespace xilinx::AIEX
168
169#endif // AIEX_PASSES_H
constexpr llvm::StringLiteral initEntrySequenceName
Name of the runtime sequence aie-expand-load-pdi{init-entry} adds.
Definition AIEXPasses.h:100
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()
void addLoweringStage(mlir::OpPassManager &pm, bool dynamicObjFifos, bool packetSwObjFifos, bool ctrlPktOverlay, bool loadPdiToCtrlPkt, bool skipObjectFifoVerify)
Affine lowering through aie-prepare-buffers.
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:118
Option< AIE::PlacerType > placer
Definition AIEXPasses.h:119