dependency.c (gfc_check_element_vs_element): Consider two unordered scalar subscripts...
authorRoger Sayle <roger@eyesopen.com>
Fri, 3 Mar 2006 21:47:24 +0000 (21:47 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Fri, 3 Mar 2006 21:47:24 +0000 (21:47 +0000)
* 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

gcc/fortran/ChangeLog
gcc/fortran/dependency.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dependency_9.f90 [new file with mode: 0644]

index 07350f469cc71c47e205dd9dc79badfd41fe1a82..4edafa6f99581363cccac3d93decec13ac3356ac 100644 (file)
@@ -1,3 +1,8 @@
+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
index 187b20777160fc3c4b5763dea7324c9ab534f1cb..129caa361ad1c715897278d625d0aac388257ed9 100644 (file)
@@ -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;
 }
 
index c56b0f935f5fadb9ce16c6f2ac26dd32c14d17db..12617066d397ca7788df2c85fada1b5b8d651070 100644 (file)
@@ -1,3 +1,7 @@
+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.
diff --git a/gcc/testsuite/gfortran.dg/dependency_9.f90 b/gcc/testsuite/gfortran.dg/dependency_9.f90
new file mode 100644 (file)
index 0000000..d1f6f5e
--- /dev/null
@@ -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" } }