|
| 1 | +! Test shape lowering for assumed-rank |
| 2 | +! RUN: bbc -emit-hlfir -o - %s -allow-assumed-rank | FileCheck %s |
| 3 | + |
| 4 | +subroutine test_shape(x) |
| 5 | + real :: x(..) |
| 6 | + call takes_integer_array(shape(x)) |
| 7 | +end subroutine |
| 8 | +! CHECK-LABEL: func.func @_QPtest_shape( |
| 9 | +! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.array<15xi32> |
| 10 | +! CHECK: %[[VAL_4:.*]] = arith.constant 4 : i32 |
| 11 | +! CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.array<15xi32>>) -> !fir.llvm_ptr<i8> |
| 12 | +! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_3:.*]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
| 13 | +! CHECK: %[[VAL_10:.*]] = fir.call @_FortranAShape(%[[VAL_7]], %[[VAL_8]], %[[VAL_4]], %{{.*}}, %{{.*}}) |
| 14 | +! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.array<15xi32>>) -> !fir.ref<!fir.array<?xi32>> |
| 15 | +! CHECK: %[[VAL_12:.*]] = fir.box_rank %[[VAL_3]] : (!fir.box<!fir.array<*:f32>>) -> index |
| 16 | +! CHECK: %[[VAL_13:.*]] = fir.shape %[[VAL_12]] : (index) -> !fir.shape<1> |
| 17 | +! CHECK: %[[VAL_14:.*]]:2 = hlfir.declare %[[VAL_11]](%[[VAL_13]]) {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref<!fir.array<?xi32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.ref<!fir.array<?xi32>>) |
| 18 | +! CHECK: %[[VAL_15:.*]] = arith.constant false |
| 19 | +! CHECK: %[[VAL_16:.*]] = hlfir.as_expr %[[VAL_14]]#0 move %[[VAL_15]] : (!fir.box<!fir.array<?xi32>>, i1) -> !hlfir.expr<?xi32> |
| 20 | +! CHECK: %[[VAL_17:.*]]:3 = hlfir.associate %[[VAL_16]](%[[VAL_13]]) {adapt.valuebyref} : (!hlfir.expr<?xi32>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.ref<!fir.array<?xi32>>, i1) |
| 21 | +! CHECK: fir.call @_QPtakes_integer_array(%[[VAL_17]]#1) fastmath<contract> : (!fir.ref<!fir.array<?xi32>>) -> () |
| 22 | +! CHECK: hlfir.end_associate %[[VAL_17]]#1, %[[VAL_17]]#2 : !fir.ref<!fir.array<?xi32>>, i1 |
| 23 | +! CHECK: hlfir.destroy %[[VAL_16]] : !hlfir.expr<?xi32> |
| 24 | +! CHECK: return |
| 25 | +! CHECK: } |
| 26 | + |
| 27 | +subroutine test_shape_kind(x) |
| 28 | + real :: x(..) |
| 29 | + call takes_integer8_array(shape(x, kind=8)) |
| 30 | +end subroutine |
| 31 | +! CHECK-LABEL: func.func @_QPtest_shape_kind( |
| 32 | +! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.array<15xi64> |
| 33 | +! CHECK: %[[VAL_4:.*]] = arith.constant 8 : i32 |
| 34 | +! CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.array<15xi64>>) -> !fir.llvm_ptr<i8> |
| 35 | +! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_3:.*]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
| 36 | +! CHECK: %[[VAL_10:.*]] = fir.call @_FortranAShape(%[[VAL_7]], %[[VAL_8]], %[[VAL_4]], %{{.*}}, %{{.*}}) |
| 37 | +! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.array<15xi64>>) -> !fir.ref<!fir.array<?xi64>> |
| 38 | +! CHECK: %[[VAL_12:.*]] = fir.box_rank %[[VAL_3]] : (!fir.box<!fir.array<*:f32>>) -> index |
| 39 | +! CHECK: %[[VAL_13:.*]] = fir.shape %[[VAL_12]] : (index) -> !fir.shape<1> |
| 40 | +! CHECK: %[[VAL_14:.*]]:2 = hlfir.declare %[[VAL_11]](%[[VAL_13]]) {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref<!fir.array<?xi64>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi64>>, !fir.ref<!fir.array<?xi64>>) |
| 41 | + |
| 42 | +subroutine test_shape_2(x) |
| 43 | + real, pointer :: x(..) |
| 44 | + call takes_integer_array(shape(x)) |
| 45 | +end subroutine |
| 46 | +! CHECK-LABEL: func.func @_QPtest_shape_2( |
| 47 | +! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.array<15xi32> |
| 48 | +! CHECK: %[[VAL_4:.*]] = fir.load %[[VAL_3:.*]] : !fir.ref<!fir.box<!fir.ptr<!fir.array<*:f32>>>> |
| 49 | +! CHECK: %[[VAL_5:.*]] = arith.constant 4 : i32 |
| 50 | +! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.array<15xi32>>) -> !fir.llvm_ptr<i8> |
| 51 | +! CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_4]] : (!fir.box<!fir.ptr<!fir.array<*:f32>>>) -> !fir.box<none> |
| 52 | +! CHECK: %[[VAL_11:.*]] = fir.call @_FortranAShape(%[[VAL_8]], %[[VAL_9]], %[[VAL_5]], %{{.*}}, %{{.*}}) |
| 53 | +! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.array<15xi32>>) -> !fir.ref<!fir.array<?xi32>> |
| 54 | +! CHECK: %[[VAL_13:.*]] = fir.box_rank %[[VAL_4]] : (!fir.box<!fir.ptr<!fir.array<*:f32>>>) -> index |
| 55 | +! CHECK: %[[VAL_14:.*]] = fir.shape %[[VAL_13]] : (index) -> !fir.shape<1> |
| 56 | +! CHECK: %[[VAL_15:.*]]:2 = hlfir.declare %[[VAL_12]](%[[VAL_14]]) {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref<!fir.array<?xi32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.ref<!fir.array<?xi32>>) |
0 commit comments