2015-05-06 Thomas Koenig <tkoenig@gcc.gnu.org>
commit08f351fd0b0f62e35a2f12a9e5b9613c9694a269
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 May 2015 20:23:48 +0000 (6 20:23 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 May 2015 20:23:48 +0000 (6 20:23 +0000)
treebcbdcbcffefce1c189dafd0e4b29a080eefe1575
parent8120405bda9bf222228b004e09b23e74eda57ae1
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222864 138bc75d-0d04-0410-961f-82ee72b054a4
21 files changed:
gcc/fortran/check.c
gcc/fortran/frontend-passes.c
gcc/fortran/gfortran.h
gcc/fortran/intrinsic.c
gcc/fortran/intrinsic.h
gcc/fortran/invoke.texi
gcc/fortran/iresolve.c
gcc/fortran/lang.opt
gcc/fortran/options.c
gcc/fortran/trans-array.h
gcc/testsuite/gfortran.dg/dependency_26.f90
gcc/testsuite/gfortran.dg/function_optimize_1.f90
gcc/testsuite/gfortran.dg/function_optimize_2.f90
gcc/testsuite/gfortran.dg/function_optimize_5.f90
gcc/testsuite/gfortran.dg/function_optimize_7.f90
gcc/testsuite/gfortran.dg/inline_matmul_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/inline_matmul_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/inline_matmul_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/inline_matmul_4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/inline_matmul_5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/inline_matmul_6.f90 [new file with mode: 0644]