Skip to content

Lowering through MLIR standard dialects: class, struct, arrays and other issues #1219

Open
@keryell

Description

@keryell

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 tuple in MLIR;
  • introduce a new memory-friendly MLIR tuple-like type;
  • keep cir.struct just for that;
  • go directly to llvm.struct just for that.
    How does it work with Flang since F90 introduced derived data types?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is neededquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions