aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-03-03 21:47:24 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-03-03 21:47:24 +0000
commit12de6bc686b5e794c2ae69c96b54825ef43c5e3e (patch)
treeeeb28317cd038a4a128e62c468444d30c2592c81
parent0b8f2ce42dad5ee2bd3121e9cdcd522b6541b698 (diff)
downloadgcc-12de6bc686b5e794c2ae69c96b54825ef43c5e3e.zip
gcc-12de6bc686b5e794c2ae69c96b54825ef43c5e3e.tar.gz
gcc-12de6bc686b5e794c2ae69c96b54825ef43c5e3e.tar.bz2
dependency.c (gfc_check_element_vs_element): Consider two unordered scalar subscripts as (potentially) equal.
* dependency.c (gfc_check_element_vs_element): Consider two unordered scalar subscripts as (potentially) equal. * gfortran.dg/dependency_9.f90: New test case. From-SVN: r111687
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/dependency.c8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_9.f9013
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 07350f4..4edafa6 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2006-03-03 Roger Sayle <roger@eyesopen.com>
+ * dependency.c (gfc_check_element_vs_element): Consider two
+ unordered scalar subscripts as (potentially) equal.
+
+2006-03-03 Roger Sayle <roger@eyesopen.com>
+
* dependency.c (gfc_check_dependency): Call gfc_dep_resolver to
check whether two array references have a dependency.
(gfc_check_element_vs_element): Assume lref and rref must be
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c
index 187b207..129caa3 100644
--- a/gcc/fortran/dependency.c
+++ b/gcc/fortran/dependency.c
@@ -739,8 +739,14 @@ gfc_check_element_vs_element (gfc_ref * lref, gfc_ref * rref, int n)
i = gfc_dep_compare_expr (r_start, l_start);
if (i == 0)
return GFC_DEP_EQUAL;
+ /* Treat two scalar variables as potentially equal. This allows
+ us to prove that a(i,:) and a(j,:) have no dependency. See
+ Gerald Roth, "Evaluation of Array Syntax Dependence Analysis",
+ Proceedings of the International Conference on Parallel and
+ Distributed Processing Techniques and Applications (PDPTA2001),
+ Las Vegas, Nevada, June 2001. This used to be GFC_DEP_OVERLAP. */
if (i == -2)
- return GFC_DEP_OVERLAP;
+ return GFC_DEP_EQUAL;
return GFC_DEP_NODEP;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c56b0f9..1261706 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2006-03-03 Roger Sayle <roger@eyesopen.com>
+ * gfortran.dg/dependency_9.f90: New test case.
+
+2006-03-03 Roger Sayle <roger@eyesopen.com>
+
* gfortran.dg/dependency_4.f90: New test case.
* gfortran.dg/dependency_5.f90: New test case.
* gfortran.dg/dependency_6.f90: New test case.
diff --git a/gcc/testsuite/gfortran.dg/dependency_9.f90 b/gcc/testsuite/gfortran.dg/dependency_9.f90
new file mode 100644
index 0000000..d1f6f5e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dependency_9.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-O2 -fdump-tree-original" }
+subroutine foo(a,i,j)
+ integer, dimension (4,4) :: a
+ integer :: i
+ integer :: j
+
+ where (a(i,:) .ne. 0)
+ a(j,:) = 1
+ endwhere
+end subroutine
+! { dg-final { scan-tree-dump-times "malloc" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }