Skip to content

Commit 72ff3d3

Browse files
committed
[CIR][MLIR] named_tuple.cast operation
WIP memref cast operation for NamedTuple hack. The `named_tuple.cast` operation converts a memref of `named_tuple` to a 1D memref of `i8` of the same size to emulate later the struct element access. Example: %0 = named_tuple.cast %alloca_0 : memref<!named_tuple.named_tuple<"s", [i32, i32]>> to memref<8xi8> loc(#loc6)
1 parent 38b636a commit 72ff3d3

File tree

7 files changed

+79
-33
lines changed

7 files changed

+79
-33
lines changed

mlir/include/mlir/Dialect/NamedTuple/IR/NamedTuple.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
#ifndef MLIR_DIALECT_NAMED_TUPLE_IR_NAMED_TUPLE_H
1414
#define MLIR_DIALECT_NAMED_TUPLE_IR_NAMED_TUPLE_H
1515

16+
//#include "mlir/IR/Dialect.h"
1617
#include "mlir/Dialect/NamedTuple/IR/NamedTupleDialect.h"
1718
#include "mlir/Dialect/NamedTuple/IR/NamedTupleTypes.h"
1819

20+
#define GET_OP_CLASSES
1921
#include "mlir/Dialect/NamedTuple/IR/NamedTuple.h.inc"
2022

2123
#endif // MLIR_DIALECT_NAMED_TUPLE_IR_NAMED_TUPLE_H

mlir/include/mlir/Dialect/NamedTuple/IR/NamedTupleOps.td

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,37 @@
99
#ifndef NAMED_TUPLE_OPS
1010
#define NAMED_TUPLE_OPS
1111

12-
include "mlir/IR/OpAsmInterface.td"
12+
include "mlir/Dialect/NamedTuple/IR/NamedTupleDialect.td"
13+
include "mlir/Dialect/Arith/IR/ArithBase.td"
14+
include "mlir/Interfaces/CastInterfaces.td"
15+
include "mlir/Interfaces/SideEffectInterfaces.td"
16+
include "mlir/IR/OpBase.td"
17+
18+
class NamedTuple_Op<string mnemonic, list<Trait> traits = []>
19+
: Op<NamedTuple_Dialect, mnemonic, traits>;
20+
21+
//===----------------------------------------------------------------------===//
22+
// CastOp
23+
//===----------------------------------------------------------------------===//
24+
25+
def NamedTuple_CastOp : NamedTuple_Op<"cast", [
26+
DeclareOpInterfaceMethods<CastOpInterface>,
27+
Pure,
28+
]> {
29+
let summary = "WIP memref cast operation for NamedTuple hack";
30+
let description = [{
31+
The `named_tuple.cast` operation converts a memref of `named_tuple` to a 1D memref of `i8` of the same size to emulate later the struct element access.
32+
33+
Example:
34+
35+
```mlir
36+
%0 = named_tuple.cast %alloca_0 : memref<!named_tuple.named_tuple<"s", [i32, i32]>> to memref<8xi8> loc(#loc6)
37+
```
38+
}];
39+
40+
let arguments = (ins AnyRankedOrUnrankedMemRef:$source);
41+
let results = (outs AnyRankedOrUnrankedMemRef:$dest);
42+
let assemblyFormat = "$source attr-dict `:` type($source) `to` type($dest)";
43+
}
1344

1445
#endif // NAMED_TUPLE_OPS

mlir/include/mlir/Dialect/NamedTuple/IR/NamedTupleTypes.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313
#ifndef MLIR_DIALECT_NAMED_TUPLE_IR_NAMED_TUPLE_TYPES_H
1414
#define MLIR_DIALECT_NAMED_TUPLE_IR_NAMED_TUPLE_TYPES_H
1515

16-
//#include "mlir/Bytecode/BytecodeOpInterface.h"
1716
#include "mlir/Dialect/NamedTuple/IR/NamedTupleDialect.h"
18-
//#include "mlir/IR/OpDefinition.h"
17+
#include "mlir/Interfaces/DataLayoutInterfaces.h"
1918

2019
#define GET_TYPEDEF_CLASSES
2120
#include "mlir/Dialect/NamedTuple/IR/NamedTupleTypes.h.inc"

mlir/include/mlir/Dialect/NamedTuple/IR/NamedTupleTypes.td

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,10 @@ class NamedTuple_Type<string name, string typeMnemonic, list<Trait> traits = []>
2727
}
2828

2929
def NamedTuple_NamedTupleType : NamedTuple_Type<"NamedTuple", "named_tuple", [
30-
MemRefElementTypeInterface//,
31-
//DeclareTypeInterfaceMethods<DataLayoutTypeInterface, [
32-
// "areCompatible", "getIndexBitwidth", "verifyEntries"]>
30+
MemRefElementTypeInterface,
31+
DeclareTypeInterfaceMethods<DataLayoutTypeInterface>
3332
]> {
34-
let summary = "Fixed-sized collection of other types with a name for each"
35-
" type";
33+
let summary = "Fixed-sized collection of other types with a name";
3634
let description = [{
3735
}];
3836
let parameters = (ins "StringAttr":$name, Builtin_ArrayAttr:$member_types);
@@ -41,9 +39,9 @@ def NamedTuple_NamedTupleType : NamedTuple_Type<"NamedTuple", "named_tuple", [
4139
TypeBuilder<(ins "StringRef":$name, "ArrayRef<Type>":$types), [{
4240
llvm::SmallVector<mlir::Attribute> typeAttrs;
4341
for (auto &t : types)
44-
typeAttrs.push_back(mlir::TypeAttr::get(t));
45-
return $_get($_ctxt, mlir::StringAttr::get($_ctxt, name),
46-
mlir::ArrayAttr::get($_ctxt, typeAttrs));
42+
typeAttrs.push_back(mlir::TypeAttr::get(t));
43+
return $_get($_ctxt, mlir::StringAttr::get($_ctxt, name),
44+
mlir::ArrayAttr::get($_ctxt, typeAttrs));
4745
}]>,
4846
// Empty tuple
4947
TypeBuilder<(ins "StringRef":$name), [{
@@ -53,6 +51,7 @@ def NamedTuple_NamedTupleType : NamedTuple_Type<"NamedTuple", "named_tuple", [
5351
}]>
5452
];
5553

54+
// \todo
5655
// let extraClassDeclaration = [{
5756
// /// Return the number of held types.
5857
// size_t size() const;

mlir/lib/Dialect/NamedTuple/IR/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
add_mlir_dialect_library(MLIRNamedTupleDialect
22
NamedTupleDialect.cpp
3-
NamedTupleOps.cpp
43

54
ADDITIONAL_HEADER_DIRS
65
${PROJECT_SOURCE_DIR}/include/mlir/Dialect/NamedTuple

mlir/lib/Dialect/NamedTuple/IR/NamedTupleDialect.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,52 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
#include "llvm/ADT/TypeSwitch.h"
13+
#include "mlir/Dialect/MemRef/IR/MemRef.h"
1414
#include "mlir/Dialect/NamedTuple/IR/NamedTuple.h"
1515
#include "mlir/IR/Builders.h"
1616
#include "mlir/IR/DialectImplementation.h"
17+
#include "llvm/ADT/TypeSwitch.h"
18+
#include "llvm/Support/ErrorHandling.h"
1719

1820
#include "mlir/Dialect/NamedTuple/IR/NamedTupleDialect.cpp.inc"
1921

2022
#define GET_TYPEDEF_CLASSES
2123
#include "mlir/Dialect/NamedTuple/IR/NamedTupleTypes.cpp.inc"
2224

25+
// Dummy implementation for now
26+
// TODO(cir)
27+
llvm::TypeSize mlir::named_tuple::NamedTupleType::getTypeSizeInBits(
28+
mlir::DataLayout const &,
29+
llvm::ArrayRef<mlir::DataLayoutEntryInterface>) const {
30+
llvm_unreachable("getTypeSizeInBits() not implemented");
31+
return llvm::TypeSize::getFixed(8);
32+
}
33+
34+
uint64_t mlir::named_tuple::NamedTupleType::getABIAlignment(
35+
mlir::DataLayout const &,
36+
llvm::ArrayRef<mlir::DataLayoutEntryInterface>) const {
37+
llvm_unreachable("getABIAlignment() not implemented");
38+
return 8;
39+
}
40+
41+
uint64_t mlir::named_tuple::NamedTupleType::getPreferredAlignment(
42+
mlir::DataLayout const &,
43+
llvm::ArrayRef<mlir::DataLayoutEntryInterface>) const {
44+
llvm_unreachable("getPreferredAlignment() not implemented");
45+
return 8;
46+
}
47+
48+
//===----------------------------------------------------------------------===//
49+
// TableGen'd op method definitions
50+
//===----------------------------------------------------------------------===//
51+
#define GET_OP_CLASSES
52+
#include "mlir/Dialect/NamedTuple/IR/NamedTuple.cpp.inc"
53+
54+
bool mlir::named_tuple::CastOp::areCastCompatible(mlir::TypeRange inputs,
55+
mlir::TypeRange outputs) {
56+
return true;
57+
}
58+
2359
void mlir::named_tuple::NamedTupleDialect::initialize() {
2460
// Add the defined types to the dialect.
2561
addTypes<

mlir/lib/Dialect/NamedTuple/IR/NamedTupleOps.cpp

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)