MLIR-AIE
AIETokenAnalysis.h
Go to the documentation of this file.
1//===- AIETokenAnalysis.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 2019 Xilinx Inc.
8// (c) Copyright 2023 Advanced Micro Devices, Inc.
9//
10//===----------------------------------------------------------------------===//
11
12#ifndef AIEX_TOKENANALYSIS_H
13#define AIEX_TOKENANALYSIS_H
14
15#include "llvm/ADT/DenseMap.h"
16#include "llvm/ADT/SmallVector.h"
17#include "llvm/Support/Debug.h"
18
19namespace mlir {
20class Operation;
21} // namespace mlir
22
23namespace xilinx::AIE {
24class DeviceOp;
25struct TileID;
26} // namespace xilinx::AIE
27
28namespace xilinx::AIEX {
29
31 AIE::DeviceOp &device;
32 llvm::DenseMap<llvm::StringRef, int> tokenSymbols;
33 std::vector<std::pair<llvm::StringRef, std::vector<mlir::Operation *>>>
34 tokenAcqMap;
35 std::vector<std::pair<llvm::StringRef, std::vector<mlir::Operation *>>>
36 tokenRelMap;
37 llvm::SmallVector<std::pair<mlir::Operation *, mlir::Operation *>, 4>
38 tokenChains;
39 llvm::SmallVector<std::pair<mlir::Operation *, mlir::Operation *>, 4>
40 tokenPairs;
41 llvm::DenseMap<xilinx::AIE::TileID, mlir::Operation *> tiles;
42
43public:
44 TokenAnalysis(AIE::DeviceOp &d) : device(d) {}
45
46 void runAnalysis();
47
48 auto getTokenSymbols() const { return tokenSymbols; }
49
50 auto getTokenChains() const { return tokenChains; }
51
52 auto getTokenPairs() const { return tokenPairs; }
53
54 auto getTiles() const { return tiles; }
55
56 // CoreOp or MemOp
57 mlir::Operation *getTokenUserOp(mlir::Operation *Op);
58 mlir::Operation *getShareableTileOp(mlir::Operation *Op1,
59 mlir::Operation *Op2);
60 xilinx::AIE::TileID getCoord(mlir::Operation *Op);
61
62 void print(llvm::raw_ostream &os);
63};
64
65} // namespace xilinx::AIEX
66
67#endif
TokenAnalysis(AIE::DeviceOp &d)
mlir::Operation * getShareableTileOp(mlir::Operation *Op1, mlir::Operation *Op2)
xilinx::AIE::TileID getCoord(mlir::Operation *Op)
mlir::Operation * getTokenUserOp(mlir::Operation *Op)
void print(llvm::raw_ostream &os)
Include the generated interface declarations.
TileID { friend std::ostream &operator<<(std::ostream &os, const TileID &s) { os<< "TileID("<< s.col<< ", "<< s.row<< ")" TileID