Add missing single_pred_p test in scop_detection::merge_sese
authorTom de Vries <tom@codesourcery.com>
Wed, 16 Mar 2016 09:19:23 +0000 (09:19 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Wed, 16 Mar 2016 09:19:23 +0000 (09:19 +0000)
2016-03-16  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/68715
* graphite-scop-detection.c (scop_detection::merge_sese): Add missing
single_pred_p test.

* gcc.dg/graphite/pr68715-2.c: New test.
* gcc.dg/graphite/pr68715.c: New test.
* gfortran.dg/graphite/pr68715.f90: New test.

From-SVN: r234251

gcc/ChangeLog
gcc/graphite-scop-detection.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr68715-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/graphite/pr68715.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/graphite/pr68715.f90 [new file with mode: 0644]

index d8f2eeac6e44beace1135aa2eb80e74899514e67..e7c759febda209fc5493da508e16cc4d0052e99e 100644 (file)
@@ -1,3 +1,9 @@
+2016-03-16  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/68715
+       * graphite-scop-detection.c (scop_detection::merge_sese): Add missing
+       single_pred_p test.
+
 2016-03-16  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/68809
index e20baa10b93ce858308fd97cf33a29c014a53458..7615842b332d34a734ac26383ed11a44047bd4c0 100644 (file)
@@ -836,7 +836,9 @@ scop_detection::merge_sese (sese_l first, sese_l second) const
     {
       /* Find the first empty succ (with single exit) of combined.exit.  */
       basic_block imm_succ = combined.exit->dest;
-      if (single_succ_p (imm_succ) && trivially_empty_bb_p (imm_succ))
+      if (single_succ_p (imm_succ)
+         && single_pred_p (imm_succ)
+         && trivially_empty_bb_p (imm_succ))
        combined.exit = single_succ_edge (imm_succ);
       else
        {
index 90e19eeab44c201028255bdb4c8fc6879fbcf510..8d2546ca3577a708793c102adb1da74889e7158f 100644 (file)
@@ -1,3 +1,10 @@
+2016-03-16  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/68715
+       * gcc.dg/graphite/pr68715-2.c: New test.
+       * gcc.dg/graphite/pr68715.c: New test.
+       * gfortran.dg/graphite/pr68715.f90: New test.
+
 2016-03-16  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/68809
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68715-2.c b/gcc/testsuite/gcc.dg/graphite/pr68715-2.c
new file mode 100644 (file)
index 0000000..270d948
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-options "-Ofast -floop-interchange" } */
+
+int a, b, c, d, f, g;
+int e[1], h[1];
+void fn2 ();
+void fn3 ();
+void
+fn1 ()
+{
+  fn2 ();
+  b = 0;
+  for (; b < 10; b++)
+    ;
+}
+
+void
+fn2 ()
+{
+  if (a)
+    {
+      fn3 ();
+      c = d;
+    }
+}
+
+void
+fn3 ()
+{
+  for (; g; g++)
+    e[g] = 2;
+  if (f)
+    for (; g; g++)
+      h[g] = 5;
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68715.c b/gcc/testsuite/gcc.dg/graphite/pr68715.c
new file mode 100644 (file)
index 0000000..14da2fb
--- /dev/null
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+int a[1], c[1];
+int b, d, e;
+
+void
+fn1 (int p1)
+{
+  for (;;)
+    ;
+}
+
+int
+fn3 ()
+{
+  for (; e; e++)
+    c[e] = 2;
+  for (; d; d--)
+    a[d] = 8;
+  return 0;
+}
+
+int fn5 (int);
+
+int
+fn2 ()
+{
+  fn3 ();
+}
+
+void
+fn4 ()
+{
+  fn1 (b || fn5 (fn2 ()));
+}
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr68715.f90 b/gcc/testsuite/gfortran.dg/graphite/pr68715.f90
new file mode 100644 (file)
index 0000000..c011756
--- /dev/null
@@ -0,0 +1,31 @@
+! { dg-do compile }
+! { dg-options "-floop-nest-optimize -O1" }
+
+SUBROUTINE se_core_core_interaction(calculate_forces)
+  INTEGER, PARAMETER :: dp=8
+  LOGICAL, INTENT(in)           :: calculate_forces
+  REAL(KIND=dp), DIMENSION(3)   :: force_ab, rij
+  LOGICAL :: lfoo,kfoo,mfoo,nfoo,ffoo
+  INTEGER, PARAMETER :: mi2=42
+  CALL dummy(lfoo,kfoo,mfoo,nfoo,method_id,core_core)
+  IF (lfoo) THEN
+     DO WHILE (ffoo())
+       IF (lfoo) CYCLE
+       IF (kfoo) CYCLE
+       dr1 = DOT_PRODUCT(rij,rij)
+       IF (dr1 > rij_threshold) THEN
+          SELECT CASE (method_id)
+          CASE (mi2)
+             IF (calculate_forces) THEN
+                CALL dummy2(force_ab)
+                IF (nfoo) THEN
+                   force_ab = force_ab + core_core*dr3inv
+                END IF
+             END IF
+          END SELECT
+       END IF
+       enuclear = enuclear + enucij
+     END DO
+     CALL dummy3(enuclear)
+  END IF
+END SUBROUTINE se_core_core_interaction