MLIR-AIE 1.4.5.dev
Dialects.cpp
Go to the documentation of this file.
1//===- Dialects.cpp ---------------------------------------------*- C++ -*-===//
2//
3// Copyright (C) 2022-2024 Advanced Micro Devices, Inc.
4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5//
6//===----------------------------------------------------------------------===//
7
8#include <utility>
9
10#include "aie-c/Dialects.h"
11
16
17#include "mlir/CAPI/Registration.h"
18
19MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(AIE, aie, xilinx::AIE::AIEDialect)
20MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(AIEX, aiex, xilinx::AIEX::AIEXDialect)
22 xilinx::aievec::AIEVecDialect)
23MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(XLLVM, xllvm, xilinx::xllvm::XLLVMDialect)
24
25//===---------------------------------------------------------------------===//
26// ObjectFifoType
27//===---------------------------------------------------------------------===//
28
29bool aieTypeIsObjectFifoType(MlirType type) {
30 return llvm::isa<xilinx::AIE::AIEObjectFifoType>(unwrap(type));
31}
32
33MlirType aieObjectFifoTypeGet(MlirType type) {
34 return wrap(xilinx::AIE::AIEObjectFifoType::get(
35 llvm::cast<mlir::MemRefType>(unwrap(type))));
36}
37
38//===---------------------------------------------------------------------===//
39// BlockFloatType
40//===---------------------------------------------------------------------===//
41
42bool aieTypeIsBlockFloatType(MlirType type) {
43 return llvm::isa<xilinx::AIEX::BlockFloatType>(unwrap(type));
44}
45
46MlirType aieBlockFloatTypeGet(MlirContext ctx, const std::string &blockType) {
47 return wrap(xilinx::AIEX::BlockFloatType::get(unwrap(ctx), blockType));
48}
49
50//===---------------------------------------------------------------------===//
51// Data layout
52//===---------------------------------------------------------------------===//
53
54uint64_t aieTypeGetSizeInBits(MlirType type) {
55 mlir::Type t = unwrap(type);
56 // Restricted to what the default layout can answer for, so an unrelated type
57 // reports "no size" instead of tripping the DataLayout assertion.
58 if (!llvm::isa<mlir::IntegerType, mlir::FloatType, mlir::IndexType,
59 mlir::DataLayoutTypeInterface>(t))
60 return 0;
61 return mlir::DataLayout().getTypeSizeInBits(t);
62}
63
64//===---------------------------------------------------------------------===//
65// TileLike Interface
66//===---------------------------------------------------------------------===//
67
68bool aieOpImplementsTileLike(MlirOperation op) {
69 return llvm::isa<xilinx::AIE::TileLike>(unwrap(op));
70}
71
72bool aieTileLikeIsCoreTile(MlirOperation op) {
73 auto tileLike = llvm::dyn_cast<xilinx::AIE::TileLike>(unwrap(op));
74 return tileLike && tileLike.isCoreTile();
75}
76
77bool aieTileLikeIsMemTile(MlirOperation op) {
78 auto tileLike = llvm::dyn_cast<xilinx::AIE::TileLike>(unwrap(op));
79 return tileLike && tileLike.isMemTile();
80}
81
82bool aieTileLikeIsShimNOCTile(MlirOperation op) {
83 auto tileLike = llvm::dyn_cast<xilinx::AIE::TileLike>(unwrap(op));
84 return tileLike && tileLike.isShimNOCTile();
85}
86
87bool aieTileLikeIsShimPLTile(MlirOperation op) {
88 auto tileLike = llvm::dyn_cast<xilinx::AIE::TileLike>(unwrap(op));
89 return tileLike && tileLike.isShimPLTile();
90}
91
92bool aieTileLikeIsShimNOCorPLTile(MlirOperation op) {
93 auto tileLike = llvm::dyn_cast<xilinx::AIE::TileLike>(unwrap(op));
94 return tileLike && tileLike.isShimNOCorPLTile();
95}
96
97//===---------------------------------------------------------------------===//
98// TraceBufferAttr / TraceSliceAttr
99//===---------------------------------------------------------------------===//
100
101bool aieAttrIsTraceBuffer(MlirAttribute attr) {
102 return llvm::isa<xilinx::AIE::TraceBufferAttr>(unwrap(attr));
103}
104
105uint32_t aieTraceBufferGetArgIndex(MlirAttribute attr) {
106 return llvm::cast<xilinx::AIE::TraceBufferAttr>(unwrap(attr)).getArgIndex();
107}
108
109uint32_t aieTraceBufferGetOffset(MlirAttribute attr) {
110 return llvm::cast<xilinx::AIE::TraceBufferAttr>(unwrap(attr)).getOffset();
111}
112
113uint32_t aieTraceBufferGetSize(MlirAttribute attr) {
114 return llvm::cast<xilinx::AIE::TraceBufferAttr>(unwrap(attr)).getSize();
115}
116
117bool aieTraceBufferGetDedicated(MlirAttribute attr) {
118 return llvm::cast<xilinx::AIE::TraceBufferAttr>(unwrap(attr)).getDedicated();
119}
120
121bool aieAttrIsTraceSlice(MlirAttribute attr) {
122 return llvm::isa<xilinx::AIE::TraceSliceAttr>(unwrap(attr));
123}
124
125MlirStringRef aieTraceSliceGetDevice(MlirAttribute attr) {
126 return wrap(
127 llvm::cast<xilinx::AIE::TraceSliceAttr>(unwrap(attr)).getDevice());
128}
129
130MlirStringRef aieTraceSliceGetSequence(MlirAttribute attr) {
131 return wrap(
132 llvm::cast<xilinx::AIE::TraceSliceAttr>(unwrap(attr)).getSequence());
133}
134
135uint32_t aieTraceSliceGetOffset(MlirAttribute attr) {
136 return llvm::cast<xilinx::AIE::TraceSliceAttr>(unwrap(attr)).getOffset();
137}
138
139uint32_t aieTraceSliceGetSize(MlirAttribute attr) {
140 return llvm::cast<xilinx::AIE::TraceSliceAttr>(unwrap(attr)).getSize();
141}
bool aieTileLikeIsShimNOCorPLTile(MlirOperation op)
Definition Dialects.cpp:92
MlirStringRef aieTraceSliceGetDevice(MlirAttribute attr)
Definition Dialects.cpp:125
bool aieTileLikeIsShimPLTile(MlirOperation op)
Definition Dialects.cpp:87
uint32_t aieTraceBufferGetOffset(MlirAttribute attr)
Definition Dialects.cpp:109
bool aieAttrIsTraceBuffer(MlirAttribute attr)
Definition Dialects.cpp:101
bool aieTraceBufferGetDedicated(MlirAttribute attr)
Definition Dialects.cpp:117
MlirType aieBlockFloatTypeGet(MlirContext ctx, const std::string &blockType)
Definition Dialects.cpp:46
uint64_t aieTypeGetSizeInBits(MlirType type)
Size of type in bits under the default data layout, or 0 for a type that does not describe one.
Definition Dialects.cpp:54
bool aieOpImplementsTileLike(MlirOperation op)
Definition Dialects.cpp:68
bool aieTileLikeIsMemTile(MlirOperation op)
Definition Dialects.cpp:77
MlirStringRef aieTraceSliceGetSequence(MlirAttribute attr)
Definition Dialects.cpp:130
bool aieTileLikeIsShimNOCTile(MlirOperation op)
Definition Dialects.cpp:82
uint32_t aieTraceSliceGetSize(MlirAttribute attr)
Definition Dialects.cpp:139
uint32_t aieTraceSliceGetOffset(MlirAttribute attr)
Definition Dialects.cpp:135
uint32_t aieTraceBufferGetSize(MlirAttribute attr)
Definition Dialects.cpp:113
bool aieTileLikeIsCoreTile(MlirOperation op)
Definition Dialects.cpp:72
uint32_t aieTraceBufferGetArgIndex(MlirAttribute attr)
Definition Dialects.cpp:105
bool aieAttrIsTraceSlice(MlirAttribute attr)
Definition Dialects.cpp:121
bool aieTypeIsBlockFloatType(MlirType type)
Definition Dialects.cpp:42
MlirType aieObjectFifoTypeGet(MlirType type)
Definition Dialects.cpp:33
MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(AIEVec, aievec, xilinx::aievec::AIEVecDialect) bool aieTypeIsObjectFifoType(MlirType type)
Definition Dialects.cpp:21
MLIR_CAPI_EXPORTED bool aieTypeIsObjectFifoType(MlirType type)