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
17
18#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
19#include "mlir/Dialect/SCF/IR/SCF.h"
20#include "mlir/Pass/Pass.h"
21
22namespace xilinx::AIE {
23
24#define GEN_PASS_DECL
25#define GEN_PASS_DEF_AIEROUTEPATHFINDERFLOWS
26#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
27
28std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEPlaceTilesPass();
29std::unique_ptr<mlir::OperationPass<DeviceOp>>
31std::unique_ptr<mlir::OperationPass<DeviceOp>>
33 const AIEAssignBufferAddressesOptions &options);
34std::unique_ptr<mlir::OperationPass<DeviceOp>>
36std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEAssignLockIDsPass();
37std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
39std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
41std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
42createAIECoreToStandardPass(const AIECoreToStandardOptions &options);
43std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEFindFlowsPass();
44std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIELocalizeLocksPass();
45std::unique_ptr<mlir::OperationPass<DeviceOp>>
47std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>> createAIERouteFlowsPass();
48std::unique_ptr<mlir::OperationPass<mlir::func::FuncOp>>
50std::unique_ptr<mlir::OperationPass<DeviceOp>>
52std::unique_ptr<mlir::OperationPass<DeviceOp>>
54std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
56std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEPathfinderPass();
57std::unique_ptr<mlir::OperationPass<DeviceOp>>
59std::unique_ptr<mlir::OperationPass<DeviceOp>>
61std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIELowerCascadeFlowsPass();
62std::unique_ptr<mlir::OperationPass<DeviceOp>>
64std::unique_ptr<mlir::OperationPass<DeviceOp>>
66std::unique_ptr<mlir::OperationPass<DeviceOp>>
68 const AIEGenerateColumnControlOverlayOptions &options);
69std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEAssignTileCtrlIDsPass();
70std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIETraceToConfigPass();
71std::unique_ptr<mlir::OperationPass<DeviceOp>>
73std::unique_ptr<mlir::OperationPass<DeviceOp>> createAIEInsertTraceFlowsPass();
74
75/// Generate the code for registering passes.
76#define GEN_PASS_REGISTRATION
77#include "aie/Dialect/AIE/Transforms/AIEPasses.h.inc"
78
79/// Overall Flow:
80/// rewrite switchboxes to assign unassigned connections, ensure this can be
81/// done concurrently ( by different threads)
82/// 1. Goal is to rewrite all flows in the device into switchboxes + shim-mux
83/// 2. multiple passes of the rewrite pattern rewriting streamswitch
84/// configurations to routes
85/// 3. rewrite flows to stream-switches using 'weights' from analysis pass.
86/// 4. check a region is legal
87/// 5. rewrite stream-switches (within a bounding box) back to flows
89 : impl::AIERoutePathfinderFlowsBase<AIEPathfinderPass> {
90
91 AIEPathfinderPass() = default;
92
93 void runOnOperation() override;
94 mlir::LogicalResult runOnFlow(DeviceOp d, DynamicTileAnalysis &analyzer);
95 mlir::LogicalResult runOnPacketFlow(DeviceOp d, mlir::OpBuilder &builder,
96 DynamicTileAnalysis &analyzer);
97
98 typedef std::pair<TileID, Port> PhysPort;
99
100 bool findPathToDest(SwitchSettings settings, TileID currTile,
101 WireBundle currDestBundle, int currDestChannel,
102 TileID finalTile, WireBundle finalDestBundle,
103 int finalDestChannel);
104};
105
106} // namespace xilinx::AIE
107
108#endif // AIE_PASSES_H
Include the generated interface declarations.
std::unique_ptr< mlir::OperationPass< mlir::func::FuncOp > > createAIEVectorOptPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEInsertTraceFlowsPass()
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIEHoistVectorTransferPointersPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIETraceRegPackWritesPass()
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 > > createAIEVectorToPointerLoopsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignLockIDsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEPlaceTilesPass()
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< DeviceOp > > createAIEAssignCoreLinkFilesPass()
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 > > createAIETraceToConfigPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEAssignBufferDescriptorIDsPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEPathfinderPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEVectorTransferLoweringPass()
std::unique_ptr< mlir::OperationPass< DeviceOp > > createAIEGenerateColumnControlOverlayPass()
Overall Flow: rewrite switchboxes to assign unassigned connections, ensure this can be done concurren...
Definition AIEPasses.h:89
mlir::LogicalResult runOnPacketFlow(DeviceOp d, mlir::OpBuilder &builder, DynamicTileAnalysis &analyzer)
mlir::LogicalResult runOnFlow(DeviceOp d, DynamicTileAnalysis &analyzer)
std::pair< TileID, Port > PhysPort
Definition AIEPasses.h:98
bool findPathToDest(SwitchSettings settings, TileID currTile, WireBundle currDestBundle, int currDestChannel, TileID finalTile, WireBundle finalDestBundle, int finalDestChannel)