Fix PR56035.
authorMarek Polacek <polacek@redhat.com>
Fri, 25 Jan 2013 08:52:02 +0000 (08:52 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Fri, 25 Jan 2013 08:52:02 +0000 (08:52 +0000)
From-SVN: r195462

gcc/ChangeLog
gcc/cfgloopmanip.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr56035.c [new file with mode: 0644]

index ef53850c01c253948a59f9371a95bde333ca08c4..327d2859816da8a168ba287233f12f99886646a8 100644 (file)
@@ -1,3 +1,8 @@
+2013-01-25  Marek Polacek  <polacek@redhat.com>
+
+       PR tree-optimization/56035
+       * cfgloopmanip.c (fix_loop_structure): Remove redundant condition.
+
 2012-01-24  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (*movti_internal_rex64): Add (o,e) alternative.
index 8c6c39de86b0a734cd209e24374d1230c4bd270c..c72cedaf74e5dbba438852516539bc7a0cf904b4 100644 (file)
@@ -1823,10 +1823,8 @@ fix_loop_structure (bitmap changed_bbs)
       /* If there was no latch, schedule the loop for removal.  */
       if (!first_latch)
        loop->header = NULL;
-      /* If there was a single latch and it belongs to the loop of the
-        header, record it.  */
-      else if (latch
-              && latch->src->loop_father == loop)
+      /* If there was a single latch, record it.  */
+      else if (latch)
        loop->latch = latch->src;
       /* Otherwise there are multiple latches which are eventually
          disambiguated below.  */
index 62baf69aad97e0ae7576927a65fe2246f5d599c2..6fc08a1474548bf0723c70b26c8fe205942e9977 100644 (file)
@@ -1,3 +1,8 @@
+2013-01-22  Marek Polacek  <polacek@redhat.com>
+
+       PR tree-optimization/56035
+       * gcc.dg/pr56035.c: New test.
+
 2013-01-24  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * gfortran.dg/bind_c_array_params_2.f90: Require -mno-relax-pic-calls
diff --git a/gcc/testsuite/gcc.dg/pr56035.c b/gcc/testsuite/gcc.dg/pr56035.c
new file mode 100644 (file)
index 0000000..4e3a77e
--- /dev/null
@@ -0,0 +1,35 @@
+/* PR tree-optimization/56035 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-vectorize -fcse-follow-jumps -fstrict-overflow" } */
+
+short a, c, *p;
+
+void
+f (void)
+{
+  int b;
+
+  if (c)
+  lbl1:
+    for (a = 0; a < 1; a++)
+      {
+       for (c = 0; c < 1; c++)
+         {
+           goto lbl1;
+           while (*p++)
+           lbl2:
+             ;
+         }
+      }
+
+  for (;; b++)
+    {
+      if (c)
+       goto lbl2;
+    lbl3:
+      for (c = 0; c < 9; c++)
+       for (c = -17; c < 2; c++)
+         if (*p)
+           goto lbl3;
+    }
+}