brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · b68d78f Raw
63 lines · plain
1! Test lowering of elemental subroutine calls with array arguments2! RUN: bbc -o - -emit-fir -hlfir=false %s | FileCheck %s3 4! CHECK-LABEL: func @_QPtest_elem_sub(5! CHECK-SAME:    %[[VAL_0:.*]]: !fir.box<!fir.array<?xf32>>{{.*}}, %[[VAL_1:.*]]: !fir.box<!fir.array<?x!fir.char<1,?>>>{{.*}}, %[[VAL_2:.*]]: !fir.ref<i32>{{.*}}, %[[VAL_3:.*]]: !fir.ref<complex<f32>>{{.*}}) {6! CHECK:         %[[VAL_5:.*]] = arith.constant 0 : index7! CHECK:         %[[VAL_6:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_5]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index)8! CHECK:         %[[VAL_7:.*]] = arith.constant 10 : i649! CHECK:         %[[VAL_8:.*]] = fir.convert %[[VAL_7]] : (i64) -> index10! CHECK:         %[[VAL_9:.*]] = arith.constant -1 : i6411! CHECK:         %[[VAL_10:.*]] = fir.convert %[[VAL_9]] : (i64) -> index12! CHECK:         %[[VAL_11:.*]] = arith.constant 1 : i6413! CHECK:         %[[VAL_12:.*]] = fir.convert %[[VAL_11]] : (i64) -> index14! CHECK:         %[[VAL_13:.*]] = fir.slice %[[VAL_8]], %[[VAL_12]], %[[VAL_10]] : (index, index, index) -> !fir.slice<1>15! CHECK:         %[[VAL_14:.*]] = fir.load %[[VAL_3]] : !fir.ref<complex<f32>>16! CHECK:         %[[VAL_15:.*]] = arith.constant 1 : index17! CHECK:         %[[VAL_16:.*]] = arith.constant 0 : index18! CHECK:         %[[VAL_17:.*]] = arith.subi %[[VAL_6]]#1, %[[VAL_15]] : index19! CHECK:         fir.do_loop %[[VAL_18:.*]] = %[[VAL_16]] to %[[VAL_17]] step %[[VAL_15]] {20! CHECK:           %[[VAL_19:.*]] = arith.constant 1 : index21! CHECK:           %[[VAL_20:.*]] = arith.addi %[[VAL_18]], %[[VAL_19]] : index22! CHECK:           %[[VAL_21:.*]] = fir.array_coor %[[VAL_0]] %[[VAL_20]] : (!fir.box<!fir.array<?xf32>>, index) -> !fir.ref<f32>23! CHECK:           %[[VAL_22:.*]] = arith.constant 1 : index24! CHECK:           %[[VAL_23:.*]] = arith.addi %[[VAL_18]], %[[VAL_22]] : index25! CHECK:           %[[VAL_24:.*]] = fir.array_coor %[[VAL_1]] {{\[}}%[[VAL_13]]] %[[VAL_23]] : (!fir.box<!fir.array<?x!fir.char<1,?>>>, !fir.slice<1>, index) -> !fir.ref<!fir.char<1,?>>26! CHECK:           %[[VAL_25:.*]] = fir.box_elesize %[[VAL_1]] : (!fir.box<!fir.array<?x!fir.char<1,?>>>) -> index27! CHECK:           %[[VAL_26:.*]] = fir.emboxchar %[[VAL_24]], %[[VAL_25]] : (!fir.ref<!fir.char<1,?>>, index) -> !fir.boxchar<1>28! CHECK:           fir.call @_QPfoo(%[[VAL_21]], %[[VAL_26]], %[[VAL_2]], %[[VAL_14]]) {{.*}}: (!fir.ref<f32>, !fir.boxchar<1>, !fir.ref<i32>, complex<f32>) -> ()29! CHECK:         }30! CHECK:         return31! CHECK:       }32 33subroutine test_elem_sub(x, c, i, z)34  real :: x(:)35  character(*) :: c(:)36  integer :: i37  complex :: z38  interface39    elemental subroutine foo(x, c, i, z)40      real, intent(out) :: x41      character(*), intent(inout) :: c42      integer, intent(in) :: i43      complex, value :: z44    end subroutine45  end interface46 47  call foo(x, c(10:1:-1), i, z)48end subroutine49 50! CHECK-LABEL: func @_QPtest_elem_sub_no_array_args(51! CHECK-SAME:    %[[VAL_0:.*]]: !fir.ref<i32>{{.*}}, %[[VAL_1:.*]]: !fir.ref<i32>{{.*}}) {52subroutine test_elem_sub_no_array_args(i, j)53  integer :: i, j54  interface55    elemental subroutine bar(i, j)56      integer, intent(out) :: i57      integer, intent(in) :: j58    end subroutine59  end interface60  call bar(i, j)61  ! CHECK:         fir.call @_QPbar(%[[VAL_0]], %[[VAL_1]]) {{.*}}: (!fir.ref<i32>, !fir.ref<i32>) -> ()62end subroutine63