! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s ! Test matmul intrinsic ! CHECK-LABEL: func.func @_QPmatmul_test( ! CHECK-SAME: %[[X:.*]]: !fir.ref>{{.*}}, %[[Y:.*]]: !fir.ref>{{.*}}, %[[Z:.*]]: !fir.ref>{{.*}}) subroutine matmul_test(x,y,z) real :: x(3,1), y(1,3), z(3,3) ! CHECK-DAG: %[[XDECL:.*]]:2 = hlfir.declare %[[X]] ! CHECK-DAG: %[[YDECL:.*]]:2 = hlfir.declare %[[Y]] ! CHECK-DAG: %[[ZDECL:.*]]:2 = hlfir.declare %[[Z]] ! CHECK: %[[RESULT:.*]] = hlfir.matmul %[[XDECL]]#0 %[[YDECL]]#0 {{.*}} : (!fir.ref>, !fir.ref>) -> !hlfir.expr<3x3xf32> ! CHECK: hlfir.assign %[[RESULT]] to %[[ZDECL]]#0 : !hlfir.expr<3x3xf32>, !fir.ref> ! CHECK: hlfir.destroy %[[RESULT]] : !hlfir.expr<3x3xf32> z = matmul(x,y) end subroutine ! CHECK-LABEL: func.func @_QPmatmul_test2( ! CHECK-SAME: %[[X_BOX:.*]]: !fir.box>>{{.*}}, %[[Y_BOX:.*]]: !fir.box>>{{.*}}, %[[Z_BOX:.*]]: !fir.box>>{{.*}}) subroutine matmul_test2(X, Y, Z) logical :: X(:,:) logical :: Y(:) logical :: Z(:) ! CHECK-DAG: %[[XDECL:.*]]:2 = hlfir.declare %[[X_BOX]] ! CHECK-DAG: %[[YDECL:.*]]:2 = hlfir.declare %[[Y_BOX]] ! CHECK-DAG: %[[ZDECL:.*]]:2 = hlfir.declare %[[Z_BOX]] ! CHECK: %[[RESULT:.*]] = hlfir.matmul %[[XDECL]]#0 %[[YDECL]]#0 {{.*}} : (!fir.box>>, !fir.box>>) -> !hlfir.expr> ! CHECK: hlfir.assign %[[RESULT]] to %[[ZDECL]]#0 : !hlfir.expr>, !fir.box>> ! CHECK: hlfir.destroy %[[RESULT]] : !hlfir.expr> Z = matmul(X, Y) end subroutine