This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/37131] inline matmul for small matrix sizes


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37131

--- Comment #28 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Author: tkoenig
Date: Wed May  6 20:23:48 2015
New Revision: 222864

URL: https://gcc.gnu.org/viewcvs?rev=222864&root=gcc&view=rev
Log:
2015-05-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

        PR fortran/37131
        * gfortran.h (gfc_isym_id):  Add GFC_ISYM_FE_RUNTIME_ERROR.
        (gfc_intrinsic_sym):  Add vararg.
        * intrinsic.h (gfc_check_fe_runtime_error):  Add prototype.
        (gfc_resolve_re_runtime_error):  Likewise.
        Add prototype for gfc_is_reallocatable_lhs.
        * trans-array.h (gfc_is_reallocatable_lhs):  Remove prototype.
        * check.c (gfc_check_fe_runtime_error):  New function.
        * intrinsic.c (add_sym_1p):  New function.
        (make_vararg):  New function.
        (add_subroutines):  Add fe_runtime_error.
        (gfc_intrinsic_sub_interface): Skip sorting for variable number
        of arguments.
        * iresolve.c (gfc_resolve_fe_runtime_error):  New function.
        * lang.opt (inline-matmul-limit):  New option.
        (gfc_post_options): If no inline matmul limit has been set and
        BLAS is called externally, use the BLAS limit.
        * frontend-passes.c:  Include intrinsic.h.
        (var_num):  New global counter for naming temporary variablbles.
        (matrix_case):  Enum for differentiating the different matmul
        cases.
        (realloc_string_callback):  Add "trim" to the variable name.
        (create_var): Add optional argument vname as part of the name.
        Use var_num. Set dimension of result correctly. Split off block
        creation into
        (insert_block): New function.
        (cfe_expr_0): Use "fcn" as part of temporary variable name.
        (optimize_namesapce): Also set gfc_current_ns. Call
        inline_matmul_assign.
        (combine_array_constructor):  Use "constr" as part of
        temporary name.
        (get_array_inq_function):  New function.
        (build_logical_expr):  New function.
        (get_operand):  new function.
        (inline_limit_check):  New function.
        (runtime_error_ne):  New function.
        (matmul_lhs_realloc):  New function.
        (is_functino_or_op):  New function.
        (has_function_or_op):  New function.
        (freeze_expr):  New function.
        (freeze_references):  New function.
        (convert_to_index_kind):  New function.
        (create_do_loop):  New function.
        (get_size_m1):  New function.
        (scalarized_expr):  New function.
        (inline_matmul_assign):  New function.
        * simplify.c (simplify_bound):  Simplify the case of the
        lower bound of an assumed-shape argument.

2015-05-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

        PR fortran/37131
        * gfortran.dg/dependency_26.f90: Add option to suppress inlining
        matmul.
        * gfortran.dg/function_optimize_1.f90:  Likewise.
        * gfortran.dg/function_optimize_2.f90:  Likewise.
        * gfortran.dg/function_optimize_5.f90:  Likewise.
        * gfortran.dg/function_optimize_7.f90:  Likewise.
        * gfortran.dg/inline_matmul_1.f90:  New test.
        * gfortran.dg/inline_matmul_2.f90:  New test.
        * gfortran.dg/inline_matmul_3.f90:  New test.
        * gfortran.dg/inline_matmul_4.f90:  New test.
        * gfortran.dg/inline_matmul_5.f90:  New test.
        * gfortran.dg/inline_matmul_6.f90:  New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/inline_matmul_1.f90
    trunk/gcc/testsuite/gfortran.dg/inline_matmul_2.f90
    trunk/gcc/testsuite/gfortran.dg/inline_matmul_3.f90
    trunk/gcc/testsuite/gfortran.dg/inline_matmul_4.f90
    trunk/gcc/testsuite/gfortran.dg/inline_matmul_5.f90
    trunk/gcc/testsuite/gfortran.dg/inline_matmul_6.f90
Modified:
    trunk/gcc/fortran/check.c
    trunk/gcc/fortran/frontend-passes.c
    trunk/gcc/fortran/gfortran.h
    trunk/gcc/fortran/intrinsic.c
    trunk/gcc/fortran/intrinsic.h
    trunk/gcc/fortran/invoke.texi
    trunk/gcc/fortran/iresolve.c
    trunk/gcc/fortran/lang.opt
    trunk/gcc/fortran/options.c
    trunk/gcc/fortran/trans-array.h
    trunk/gcc/testsuite/gfortran.dg/dependency_26.f90
    trunk/gcc/testsuite/gfortran.dg/function_optimize_1.f90
    trunk/gcc/testsuite/gfortran.dg/function_optimize_2.f90
    trunk/gcc/testsuite/gfortran.dg/function_optimize_5.f90
    trunk/gcc/testsuite/gfortran.dg/function_optimize_7.f90


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]