graphite-dependences.c (subtract_commutative_associative_deps): Add NULL checking...
authorRoman Gareev <gareevroman@gmail.com>
Sun, 29 Jun 2014 12:16:11 +0000 (12:16 +0000)
committerRoman Gareev <romangareev@gcc.gnu.org>
Sun, 29 Jun 2014 12:16:11 +0000 (12:16 +0000)
gcc/
* graphite-dependences.c (subtract_commutative_associative_deps):
Add NULL checking of the following variables: must_raw_no_source,
may_raw_no_source, must_war_no_source, may_war_no_source,
must_waw_no_source, may_waw_no_source, must_raw, may_raw,
must_war, may_war, must_waw, may_waw

gcc/testsuite/gfortran.dg/graphite/pr59586.f: New testcase.

From-SVN: r212122

gcc/ChangeLog
gcc/graphite-dependences.c
gcc/testsuite/gfortran.dg/graphite/pr59586.f [new file with mode: 0644]

index fc0a10231eba7f7dccd97361d2ee5109562e3765..dcf5f1566fa4d5fcaf64167e5c6edb57ae5a8023 100644 (file)
@@ -1,3 +1,13 @@
+2014-06-29  Roman Gareev  <gareevroman@gmail.com>
+
+       * graphite-dependences.c (subtract_commutative_associative_deps): 
+       Add NULL checking of the following variables: must_raw_no_source, 
+       may_raw_no_source, must_war_no_source, may_war_no_source, 
+       must_waw_no_source, may_waw_no_source, must_raw, may_raw, 
+       must_war, may_war, must_waw, may_waw
+
+       testsuite/gfortran.dg/graphite/pr59586.f: New testcase.
+
 2014-06-29  Roman Gareev  <gareevroman@gmail.com>
 
        * graphite-clast-to-gimple.c:
index 8c90c8e434f72fbf46bc5b14d5736b3379d0e2ce..e934d9a05ef17ef6f4254fc9e09b80c41c2d3e5a 100644 (file)
@@ -424,24 +424,71 @@ subtract_commutative_associative_deps (scop_p scop,
                                          &x_may_waw_no_source);
        gcc_assert (res == 0);
 
-       *must_raw = isl_union_map_subtract (*must_raw, x_must_raw);
-       *may_raw = isl_union_map_subtract (*may_raw, x_may_raw);
-       *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source,
-                                                     x_must_raw_no_source);
-       *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source,
-                                                    x_may_raw_no_source);
-       *must_war = isl_union_map_subtract (*must_war, x_must_war);
-       *may_war = isl_union_map_subtract (*may_war, x_may_war);
-       *must_war_no_source = isl_union_map_subtract (*must_war_no_source,
-                                                     x_must_war_no_source);
-       *may_war_no_source = isl_union_map_subtract (*may_war_no_source,
-                                                    x_may_war_no_source);
-       *must_waw = isl_union_map_subtract (*must_waw, x_must_waw);
-       *may_waw = isl_union_map_subtract (*may_waw, x_may_waw);
-       *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source,
-                                                     x_must_waw_no_source);
-       *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source,
-                                                    x_may_waw_no_source);
+       if (must_raw)
+         *must_raw = isl_union_map_subtract (*must_raw, x_must_raw);
+       else
+         isl_union_map_free (x_must_raw);
+
+       if (may_raw)
+         *may_raw = isl_union_map_subtract (*may_raw, x_may_raw);
+       else
+         isl_union_map_free (x_may_raw);
+
+       if (must_raw_no_source)
+         *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source,
+                                                       x_must_raw_no_source);
+       else
+         isl_union_map_free (x_must_raw_no_source);
+
+       if (may_raw_no_source)
+         *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source,
+                                                      x_may_raw_no_source);
+       else
+         isl_union_map_free (x_may_raw_no_source);
+
+       if (must_war)
+         *must_war = isl_union_map_subtract (*must_war, x_must_war);
+       else
+         isl_union_map_free (x_must_war);
+
+       if (may_war)
+         *may_war = isl_union_map_subtract (*may_war, x_may_war);
+       else
+         isl_union_map_free (x_may_war);
+
+       if (must_war_no_source)
+         *must_war_no_source = isl_union_map_subtract (*must_war_no_source,
+                                                       x_must_war_no_source);
+       else
+         isl_union_map_free (x_must_war_no_source);
+
+       if (may_war_no_source)
+         *may_war_no_source = isl_union_map_subtract (*may_war_no_source,
+                                                      x_may_war_no_source);
+       else
+         isl_union_map_free (x_may_war_no_source);
+
+       if (must_waw)
+         *must_waw = isl_union_map_subtract (*must_waw, x_must_waw);
+       else
+         isl_union_map_free (x_must_waw);
+
+       if (may_waw)
+         *may_waw = isl_union_map_subtract (*may_waw, x_may_waw);
+       else
+         isl_union_map_free (x_may_waw);
+
+       if (must_waw_no_source)
+         *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source,
+                                                       x_must_waw_no_source);
+       else
+         isl_union_map_free (x_must_waw_no_source);
+
+       if (may_waw_no_source)
+         *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source,
+                                                      x_may_waw_no_source);
+       else
+         isl_union_map_free (x_may_waw_no_source);
       }
 
   isl_union_map_free (original);
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr59586.f b/gcc/testsuite/gfortran.dg/graphite/pr59586.f
new file mode 100644 (file)
index 0000000..f33a1b1
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-additional-options "-Ofast -floop-parallelize-all" }
+
+      subroutine subsm ( n, x, xp, xx)
+      integer        n, m, x(n),xp(n), xx(n), gg(n), dd_p
+      do 55 i=1, n
+         dd_p  = dd_p + (x(i) - xx(i))*gg(i)
+ 55   continue
+      if ( dd_p .gt. 0  ) then
+         call dcopy( n, xp, 1, x, 1 )
+      endif
+      end