[flang] Update the description of `!fir.coordinate_of`
This change was suggested in one of the comments for https://reviews.llvm.org/D115333. Basically, the following usage is valid, but the current wording suggests otherwise: ``` %1 = fir.coordinate_of %a, %k : (!fir.ref<!fir.array<10 x 10 x i32>>, index) -> !fir.ref<!fir.array<10 x i32>> ``` A test is also added to better document this particular case. Differential revision: https://reviews.llvm.org/D115929
This commit is contained in:
parent
7d19566c3b
commit
022600334d
|
@ -1633,7 +1633,7 @@ def fir_CoordinateOp : fir_Op<"coordinate_of", [NoSideEffect]> {
|
||||||
Compute the internal coordinate address starting from a boxed value or
|
Compute the internal coordinate address starting from a boxed value or
|
||||||
unboxed memory reference. Returns a memory reference. When computing the
|
unboxed memory reference. Returns a memory reference. When computing the
|
||||||
coordinate of an array element, the rank of the array must be known and
|
coordinate of an array element, the rank of the array must be known and
|
||||||
the number of indexing expressions must equal the rank of the array.
|
the number of indexing expressions must not exceed the rank of the array.
|
||||||
|
|
||||||
This operation will apply the access map from a boxed value implicitly.
|
This operation will apply the access map from a boxed value implicitly.
|
||||||
|
|
||||||
|
|
|
@ -2471,11 +2471,11 @@ func @coordinate_array_known_size_1d(%arg0: !fir.ref<!fir.array<10 x i32>>, %arg
|
||||||
|
|
||||||
// -----
|
// -----
|
||||||
|
|
||||||
func @coordinate_array_known_size_2d(%arg0: !fir.ref<!fir.array<10 x 10 x i32>>, %arg1 : index, %arg2 : index) {
|
func @coordinate_array_known_size_2d_get_i32(%arg0: !fir.ref<!fir.array<10 x 10 x i32>>, %arg1 : index, %arg2 : index) {
|
||||||
%q = fir.coordinate_of %arg0, %arg1, %arg2 : (!fir.ref<!fir.array<10 x 10 x i32>>, index, index) -> !fir.ref<i32>
|
%q = fir.coordinate_of %arg0, %arg1, %arg2 : (!fir.ref<!fir.array<10 x 10 x i32>>, index, index) -> !fir.ref<i32>
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// CHECK-LABEL: llvm.func @coordinate_array_known_size_2d(
|
// CHECK-LABEL: llvm.func @coordinate_array_known_size_2d_get_i32(
|
||||||
// CHECK-SAME: %[[VAL_0:.*]]: !llvm.ptr<array<10 x array<10 x i32>>>,
|
// CHECK-SAME: %[[VAL_0:.*]]: !llvm.ptr<array<10 x array<10 x i32>>>,
|
||||||
// CHECK-SAME: %[[VAL_1:.*]]: i64,
|
// CHECK-SAME: %[[VAL_1:.*]]: i64,
|
||||||
// CHECK-SAME: %[[VAL_2:.*]]: i64) {
|
// CHECK-SAME: %[[VAL_2:.*]]: i64) {
|
||||||
|
@ -2486,6 +2486,20 @@ func @coordinate_array_known_size_2d(%arg0: !fir.ref<!fir.array<10 x 10 x i32>>,
|
||||||
|
|
||||||
// -----
|
// -----
|
||||||
|
|
||||||
|
func @coordinate_array_known_size_2d_get_array(%arg0: !fir.ref<!fir.array<10 x 10 x i32>>, %arg1 : index) {
|
||||||
|
%q = fir.coordinate_of %arg0, %arg1 : (!fir.ref<!fir.array<10 x 10 x i32>>, index) -> !fir.ref<!fir.array<10 x i32>>
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// CHECK-LABEL: llvm.func @coordinate_array_known_size_2d_get_array(
|
||||||
|
// CHECK-SAME: %[[VAL_0:.*]]: !llvm.ptr<array<10 x array<10 x i32>>>,
|
||||||
|
// CHECK-SAME: %[[VAL_1:.*]]: i64) {
|
||||||
|
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i64) : i64
|
||||||
|
// CHECK: %[[VAL_3:.*]] = llvm.getelementptr %[[VAL_0]][%[[VAL_2]], %[[VAL_1]]] : (!llvm.ptr<array<10 x array<10 x i32>>>, i64, i64) -> !llvm.ptr<array<10 x i32>>
|
||||||
|
// CHECK: llvm.return
|
||||||
|
// CHECK: }
|
||||||
|
|
||||||
|
// -----
|
||||||
|
|
||||||
// 5.2. `fir.derived`
|
// 5.2. `fir.derived`
|
||||||
func @coordinate_ref_derived(%arg0: !fir.ref<!fir.type<dervied_4{field_1:i32, field_2:i32}>>) {
|
func @coordinate_ref_derived(%arg0: !fir.ref<!fir.type<dervied_4{field_1:i32, field_2:i32}>>) {
|
||||||
%idx = fir.field_index field_2, !fir.type<dervied_4{field_1:i32, field_2:i32}>
|
%idx = fir.field_index field_2, !fir.type<dervied_4{field_1:i32, field_2:i32}>
|
||||||
|
|
Loading…
Reference in New Issue