-
Notifications
You must be signed in to change notification settings - Fork 179
Description
I have started lowering the class & struct product types down to MLIR standard dialects by relying on the fundamental MLIR product type (built-in tuple) and that works up to the point that they meet some memory. After some debug, it looks like memref and tuple cannot compose. 🤯 😢
Some past discussion context: https://discourse.llvm.org/t/why-cant-i-have-memref-tuple-i32-i32/1853/6 https://discourse.llvm.org/t/memref-type-and-data-layout/2116
I thought there would be some kind of support for data layout through MemRefElementTypeInterface but this work only user-defined types. 😦
This is a basic example where we need standard dialect support for basic higher-level language support as suggested by @joker-eph in a presentation at the last LLVM Dev Mtg.
It is unclear how to move on to integrate better CIR with MLIR standard dialects.
Some possible actions I am thinking of:
- someone has a brilliant idea 😄
- give up and focus on direct CIR → LLVMIR translation;
- just focus on having CIR to work well with MLIR standard transformations and analysis;
- translate any struct to an int of the struct size and generate memory cast operations and bit-field extraction/insertion all over the place to emulate the tuple access;
- add better support for
tuplein MLIR; - introduce a new memory-friendly MLIR tuple-like type;
- keep
cir.structjust for that; - go directly to
llvm.structjust for that.
How does it work with Flang since F90 introduced derived data types?