19#include "mlir/Pass/Pass.h"
20#include "llvm/ADT/DenseMap.h"
21#include "llvm/ADT/SmallVector.h"
26#define GEN_PASS_DEF_AIERESERVERUNTIMEBDIDS
27#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h.inc"
37struct AIEReserveRuntimeBDIDsPass
38 : xilinx::AIEX::impl::AIEReserveRuntimeBDIDsBase<
39 AIEReserveRuntimeBDIDsPass> {
41 void runOnOperation()
override {
42 DeviceOp device = getOperation();
44 llvm::DenseMap<TileOp, std::set<int32_t>> reserved;
45 device.walk([&](DMAConfigureTaskOp cfg) {
46 TileOp tile = cfg.tryGetTileOp();
49 cfg.walk([&](DMABDOp bd) {
50 if (bd.getBdId().has_value())
51 reserved[tile].insert(bd.getBdId().value());
55 for (
auto &[tile, ids] : reserved) {
56 SmallVector<int32_t> sorted(ids.begin(), ids.end());
57 tile->setAttr(
"aiex.reserved_bd_ids",
58 DenseI32ArrayAttr::get(&getContext(), sorted));
65std::unique_ptr<mlir::OperationPass<AIE::DeviceOp>>
67 return std::make_unique<AIEReserveRuntimeBDIDsPass>();
std::unique_ptr< mlir::OperationPass< AIE::DeviceOp > > createAIEReserveRuntimeBDIDsPass()