[all-commits] [llvm/llvm-project] 5ae653: [mlir][EmitC] Add rank-0 MemRef conversion (#205774)

ioana ghiban via All-commits all-commits at lists.llvm.org
Tue Jul 14 04:48:31 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 5ae6537bbaf577889fb81f5f8397463b0d0499c3
      https://github.com/llvm/llvm-project/commit/5ae6537bbaf577889fb81f5f8397463b0d0499c3
  Author: ioana ghiban <ioana.ghiban at arm.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M mlir/lib/Conversion/EmitCCommon/TypeConverter.cpp
    M mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
    M mlir/test/Conversion/FuncToEmitC/func-to-emitc-failed.mlir
    M mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-alloc-dealloc.mlir
    M mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-alloc-load-store.mlir
    M mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-copy.mlir
    M mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-failed.mlir
    M mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir

  Log Message:
  -----------
  [mlir][EmitC] Add rank-0 MemRef conversion (#205774)

Add rank-0 memref support to MemRefToEmitC and the EmitC TypeConverter,
needed for lowering the models generated by:
- `llvm/lib/Analysis/models/gen-inline-oz-test-model.py`
- `llvm/lib/Analysis/models/gen-regalloc-eviction-test-model.py`

Rank-0 memrefs are no longer rejected by `isMemRefTypeLegalForEmitC`.
The EmitC type converter maps `memref<T>` to `!emitc.ptr<T>`, giving
rank-0 memrefs addressable scalar storage.

`memref.alloc` now allocates one element for rank-0 memrefs.
`memref.dealloc` frees the pointer-backed value. `memref.load` and
`memref.store` lower rank-0 accesses through `emitc.subscript %ptr[0]`,
followed by `emitc.load` or `emitc.assign`. `memref.copy` lowers rank-0
copies as scalar load plus assign.

`memref.alloca` still rejects rank-0 memrefs because this patch only
supports pointer-backed rank-0 lowering.

The pointer recovery helper now accepts both direct `emitc.ptr<T>`
values and pointer values behind `builtin.unrealized_conversion_cast`,
which is needed by dealloc, copy, load, and store depending on where the
value comes from in conversion.

Tests cover rank-0 alloc/dealloc, load/store, alloc-backed load/store,
and copy. Removed cases this patch adds support for (rank-0) from
`func-to-emitc-failed`.

Assisted-by: Codex (refine implementation + tests). I reviewed all code
and tests before submission.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list