[Mlir-commits] [mlir] [WIP][mlir][EmitC] Model lvalues as a type in EmitC (PR #91475)
Simon Camphausen
llvmlistbot at llvm.org
Thu May 16 02:29:52 PDT 2024
simon-camp wrote:
I'm trying to summarize the discussion so far to highlight questions I have right now (much of this was also already written down in the RFC):
- add new type that designates [modifiable](https://en.cppreference.com/w/c/language/value_category#Modifiable_lvalue_expressions) values (currently `lvalue` possibly renamed to `mlvalue` to distinguish this from array variables)
- EmitC operations work on non-lvalues unless explicitly defined otherwise
- Conversion to non lvalue types is done explicitly through a new op (currently `lvalue_to_rvalue`) which is directly emitted as an assignment to an anonymous variable.
- (Maybe we should rename this to lvalue_load or something as the name lvalue conversion is connotated with implicit behaviour for me)
- ops working with the new type
- lhs operand of the assign op
- operand of the apply op if it's an `&`
- the result of the subscript op
- result of the apply op if it's an `*`
- result of the variable op
- unless it's an array, as arrays are not assignable. Additionally there would be no way to work this such a value as the conversion op wouldn't work either [^1]
- result of the get_global op
- adding traits/effects to ops
- lvalue_to_rvalue has a read effect
- assign has a write effect on lhs
- variable has alloc effect
- we should add `AutomaticAllocationScope`to all op having regions (func, for, if branches)
Somewhat related, we have a few ops (subscript, get_global) that are specifically handled in the emitter to not immediately create variables. Can we categorize these as exactly those ops returning mlvalues except for the variable op?
[^1] I don't know how to lower the [memref-to-emitc](https://github.com/llvm/llvm-project/blob/main/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir) if we don't distinguish modifiable and array variables.
https://github.com/llvm/llvm-project/pull/91475
More information about the Mlir-commits
mailing list