brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 1168004 Raw
49 lines · plain
1! RUN: bbc -emit-hlfir %s -o - | FileCheck --check-prefix CHECK-ALL --check-prefix CHECK-HLFIR %s2! RUN: bbc -emit-hlfir %s -o - | fir-opt --lower-hlfir-intrinsics | fir-opt --bufferize-hlfir | fir-opt --convert-hlfir-to-fir | FileCheck --check-prefix CHECK-ALL --check-prefix CHECK-FIR %s3subroutine foo(a, b)4  real :: a(2, 2), b(:, :)5  interface6    elemental subroutine elem_sub(x)7      real, intent(in) :: x8    end subroutine9  end interface10  call elem_sub(matmul(a, b))11end subroutine12! CHECK-ALL-LABEL:   func.func @_QPfoo13! CHECK-ALL:             %[[A_ARG:.*]]: !fir.ref<!fir.array<2x2xf32>> {fir.bindc_name = "a"}14! CHECK-ALL:             %[[B_ARG:.*]]: !fir.box<!fir.array<?x?xf32>> {fir.bindc_name = "b"}15 16! CHECK-HLFIR-DAG:     %[[A_VAR:.*]]:2 = hlfir.declare %[[A_ARG]]17! CHECK-HLFIR-DAG:     %[[B_VAR:.*]]:2 = hlfir.declare %[[B_ARG]]18! CHECK-HLFIR-NEXT:    %[[MUL:.*]] = hlfir.matmul %[[A_VAR]]#0 %[[B_VAR]]#019! CHECK-HLFIR-NEXT:    %[[SHAPE:.*]] = hlfir.shape_of %[[MUL]] : (!hlfir.expr<2x?xf32>) -> !fir.shape<2>20! CHECK-HLFIR-NEXT:    %[[EXT0:.*]] = arith.constant 2 : index21! CHECK-HLFIR-NEXT:    %[[EXT1:.*]] = hlfir.get_extent %[[SHAPE]] {dim = 1 : index} : (!fir.shape<2>) -> index22! CHECK-HLFIR-NEXT:    %[[C1:.*]] = arith.constant 1 : index23! CHECK-HLFIR-NEXT:    fir.do_loop %[[ARG2:.*]] = %[[C1]] to %[[EXT1]] step %[[C1]] unordered {24! CHECK-HLFIR-NEXT:      fir.do_loop %[[ARG3:.*]] = %[[C1]] to %[[EXT0]] step %[[C1]] unordered {25! CHECK-HLFIR-NEXT:        %[[ELE:.*]] = hlfir.apply %[[MUL]], %[[ARG3]], %[[ARG2]] : (!hlfir.expr<2x?xf32>, index, index) -> f3226! CHECK-HLFIR-NEXT:        %[[ASSOC:.*]]:3 = hlfir.associate %[[ELE]] {adapt.valuebyref} : (f32) -> (!fir.ref<f32>, !fir.ref<f32>, i1)27! CHECK-HLFIR-NEXT:        fir.call28! CHECK-HLFIR-NEXT:        hlfir.end_associate29! CHECK-HLFIR-NEXT:      }30! CHECK-HLFIR-NEXT:    }31! CHECK-HLFIR-NEXT:    hlfir.destroy %[[MUL]]32 33! ...34! CHECK-FIR-DAG:       %[[C0:.*]] = arith.constant 0 : index35! CHECK-FIR-DAG:       %[[C1:.*]] = arith.constant 1 : index36! CHECK-FIR-DAG:       %[[C2:.*]] = arith.constant 2 : index37! CHECK-FIR:           fir.call @_FortranAMatmul38! CHECK-FIR-NEXT:      %[[MUL:.*]] = fir.load %[[MUL_BOX:.*]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?xf32>>>>39! CHECK-FIR-NEXT:      %[[DIMS0:.*]]:3 = fir.box_dims %[[MUL]], %[[C0]]40! CHECK-FIR-NEXT:      %[[DIMS1:.*]]:3 = fir.box_dims %[[MUL]], %[[C1]]41! ...42! CHECK-FIR:           %[[SHAPE:.*]] = fir.shape %[[DIMS0]]#1, %[[DIMS1]]#143! CHECK-FIR-NEXT:      fir.do_loop %[[ARG2:.*]] = %[[C1]] to %[[DIMS1]]#1 step %[[C1]] unordered {44! CHECK-FIR-NEXT:        fir.do_loop %[[ARG3:.*]] = %[[C1]] to %[[C2]] step %[[C1]] unordered {45! ...46 47! CHECK-ALL:           return48! CHECK-ALL-NEXT:    }49