From 8a0b57b3c7a133c91bb9375635909472749ca954 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Fri, 24 Feb 2006 10:51:42 +0000 Subject: re PR fortran/24519 (gfortran slow because of incomplete dependency checking) 2006-02-24 Paul Thomas PR fortran/24519 * dependency.c (gfc_is_same_range): Correct typo. (gfc_check_section_vs_section): Call gfc_is_same_range. PR fortran/25395 * trans-common.c (add_equivalences): Add a new flag that is set when an equivalence is seen that prevents more from being reset until the start of a new traversal of the list, thus ensuring completion of all the equivalences. 2006-02-24 Paul Thomas PR fortran/24519 * gfortran.dg/dependency_3.f90: New test. * gfortran.fortran-torture/execute/vect-3.f90: Remove two of the XFAILs. PR fortran/25395 * gfortran.dg/equiv_6.f90: New test. From-SVN: r111416 --- gcc/fortran/dependency.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'gcc/fortran/dependency.c') diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c index 62f3aa6..df6609b 100644 --- a/gcc/fortran/dependency.c +++ b/gcc/fortran/dependency.c @@ -159,7 +159,7 @@ gfc_is_same_range (gfc_array_ref * ar1, gfc_array_ref * ar2, int n, int def) e1 = ar1->as->lower[n]; if (ar2->as && !e2) - e2 = ar2->as->upper[n]; + e2 = ar2->as->lower[n]; /* Check we have values for both. */ if (!(e1 && e2)) @@ -538,15 +538,19 @@ gfc_check_section_vs_section (gfc_ref * lref, gfc_ref * rref, int n) gfc_expr *r_start; gfc_expr *r_stride; - gfc_array_ref l_ar; - gfc_array_ref r_ar; + gfc_array_ref l_ar; + gfc_array_ref r_ar; mpz_t no_of_elements; - mpz_t X1, X2; + mpz_t X1, X2; gfc_dependency dep; l_ar = lref->u.ar; r_ar = rref->u.ar; + + /* If they are the same range, return without more ado. */ + if (gfc_is_same_range (&l_ar, &r_ar, n, 0)) + return GFC_DEP_EQUAL; l_start = l_ar.start[n]; l_end = l_ar.end[n]; -- cgit v1.1