MLIR-AIE
AIEPasses.h
Go to the documentation of this file.
1//===- AIEPasses.h ----------------------------------------------*- 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// (c) Copyright 2021 Xilinx Inc.
8//
9//===----------------------------------------------------------------------===//
10
11#ifndef AIE_PASSES_H
12#define AIE_PASSES_H
13
16
17#include "mlir/Dialect/SCF/IR/SCF.h"
18#include "mlir/Pass/Pass.h"
19
20namespace xilinx::AIE {
21
22#define GEN_PASS_CLASSES
23#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
24
25std::unique_ptr<mlir::OperationPass<DeviceOp>>
27std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEAssignLockIDsPass();
28std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
30std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
32std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEFindFlowsPass();
33std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIELocalizeLocksPass();
34std::unique_ptr<mlir::OperationPass<DeviceOp>>
36std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>> createAIERouteFlowsPass();
37std::unique_ptr<mlir::OperationPass<mlir::func::FuncOp>>
39std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEPathfinderPass();
40std::unique_ptr<mlir::OperationPass<DeviceOp>>
42std::unique_ptr<mlir::OperationPass<DeviceOp>>
44std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIELowerCascadeFlowsPass();
45std::unique_ptr<mlir::OperationPass<DeviceOp>>
47std::unique_ptr<mlir::OperationPass<DeviceOp>>
49std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEAssignTileCtrlIDsPass();
50
51/// Generate the code for registering passes.
52#define GEN_PASS_REGISTRATION
53#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
54
55/// Overall Flow:
56/// rewrite switchboxes to assign unassigned connections, ensure this can be
57/// done concurrently ( by different threads)
58/// 1. Goal is to rewrite all flows in the device into switchboxes + shim-mux
59/// 2. multiple passes of the rewrite pattern rewriting streamswitch
60/// configurations to routes
61/// 3. rewrite flows to stream-switches using 'weights' from analysis pass.
62/// 4. check a region is legal
63/// 5. rewrite stream-switches (within a bounding box) back to flows
65
67 mlir::DenseMap<TileID, mlir::Operation *> tiles;
68
69 AIEPathfinderPass() = default;
72
73 void runOnOperation() override;
74 void runOnFlow(DeviceOp d);
75 void runOnPacketFlow(DeviceOp d, mlir::OpBuilder &builder);
76
77 typedef std::pair<mlir::Operation *, Port> PhysPort;
78
79 bool findPathToDest(SwitchSettings settings, TileID currTile,
80 WireBundle currDestBundle, int currDestChannel,
81 TileID finalTile, WireBundle finalDestBundle,
82 int finalDestChannel);
83};
84
85} // namespace xilinx::AIE
86
87#endif // AIE_PASSES_H
Include the generated interface declarations.
std::unique_ptr< mlir::OperationPass< mlir::func::FuncOp > > createAIEVectorOptPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignTileCtrlIDsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIELowerCascadeFlowsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEFindFlowsPass()
TileID { friend std::ostream &operator<<(std::ostream &os, const TileID &s) { os<< "TileID("<< s.col<< ", "<< s.row<< ")" TileID
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoStatefulTransformPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIECoreToStandardPass()
std::map< TileID, SwitchSetting > SwitchSettings
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignLockIDsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIENormalizeAddressSpacesPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIERouteFlowsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEObjectFifoRegisterProcessPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIECanonicalizeDevicePass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignBufferAddressesPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIELocalizeLocksPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignBufferDescriptorIDsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEPathfinderPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEGenerateColumnControlOverlayPass()
Overall Flow: rewrite switchboxes to assign unassigned connections, ensure this can be done concurren...
Definition AIEPasses.h:64
AIEPathfinderPass(DynamicTileAnalysis analyzer)
Definition AIEPasses.h:70
DynamicTileAnalysis analyzer
Definition AIEPasses.h:66
void runOnPacketFlow(DeviceOp d, mlir::OpBuilder &builder)
mlir::DenseMap< TileID, mlir::Operation * > tiles
Definition AIEPasses.h:67
bool findPathToDest(SwitchSettings settings, TileID currTile, WireBundle currDestBundle, int currDestChannel, TileID finalTile, WireBundle finalDestBundle, int finalDestChannel)
std::pair< mlir::Operation *, Port > PhysPort
Definition AIEPasses.h:77