[PATCH] D115077: [fir] Add array operations documentation
Valentin Clement via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 7 11:26:41 PST 2021
clementval marked 3 inline comments as done.
clementval added inline comments.
================
Comment at: flang/docs/FIRArrayOperations.md:94
+ fir.array_merge_store %v, %r to %a : !fir.ref<!fir.array<?x?xf32>>
+```
+
----------------
mehdi_amini wrote:
> It's not clear to me in this example why array_merge_store needs %v?
> Why isn't it just `fir.array_store %r to %a` enough? Seems like the array_update should have all the information here.
In this example it has everything but it's not always the case like in the example below:
```
func @conversion_with_temporary(%arr0 : !fir.ref<!fir.array<10xi32>>) {
%c10 = arith.constant 10 : index
%1 = fir.shape %c10 : (index) -> !fir.shape<1>
%2 = fir.array_load %arr0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.array<10xi32>
%c10_i64 = arith.constant 10 : i64
%3 = fir.convert %c10_i64 : (i64) -> index
%c1_i64 = arith.constant 1 : i64
%c-1_i64 = arith.constant -1 : i64
%4 = fir.shape %c10 : (index) -> !fir.shape<1>
%5 = fir.slice %c10_i64, %c1_i64, %c-1_i64 : (i64, i64, i64) -> !fir.slice<1>
%6 = fir.array_load %arr0(%4) [%5] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.array<10xi32>
%c1 = arith.constant 1 : index
%c0 = arith.constant 0 : index
%7 = arith.subi %3, %c1 : index
%8 = fir.do_loop %arg0 = %c0 to %7 step %c1 unordered iter_args(%arg1 = %2) -> (!fir.array<10xi32>) {
%9 = fir.array_fetch %6, %arg0 : (!fir.array<10xi32>, index) -> i32
%10 = fir.array_update %arg1, %9, %arg0 : (!fir.array<10xi32>, i32, index) -> !fir.array<10xi32>
fir.result %10 : !fir.array<10xi32>
}
fir.array_merge_store %2, %8 to %arr0 : !fir.array<10xi32>, !fir.array<10xi32>, !fir.ref<!fir.array<10xi32>>
return
}
```
================
Comment at: flang/docs/FIRArrayOperations.md:138
+One can use `fir.array_update` to update the (implied) value of `a(i,j)`
+in an array expression as shown above.
+
----------------
mehdi_amini wrote:
> Shouldn't the expression in Fortran above shows i and j somehow?
This Fortran example will generate an implied loop so the actual `i` and `j` are not present in the user code but will be generated.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D115077/new/
https://reviews.llvm.org/D115077
More information about the llvm-commits
mailing list