OSDN Git Service

PR rtl-optimization/52092
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Feb 2012 11:55:29 +0000 (11:55 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Feb 2012 11:55:29 +0000 (11:55 +0000)
* loop-unswitch.c (unswitch_single_loop): Call copy_rtx_if_shared
on get_iv_value result.

* gcc.c-torture/compile/pr52092.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183869 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/loop-unswitch.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr52092.c [new file with mode: 0644]

index cb11fed..cbb76e4 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-03  Jakub Jelinek  <jakub@redhat.com>
+           Zdenek Dvorak  <ook@ucw.cz>
+
+       PR rtl-optimization/52092
+       * loop-unswitch.c (unswitch_single_loop): Call copy_rtx_if_shared
+       on get_iv_value result.
+
 2012-02-02  Andrew Pinski  <apinski@cavium.com>
 
        PR middle-end/47982
index 77524d8..78da115 100644 (file)
@@ -1,5 +1,5 @@
 /* Loop unswitching for GNU compiler.
-   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2012
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -367,7 +367,7 @@ unswitch_single_loop (struct loop *loop, rtx cond_checked, int num)
     fprintf (dump_file, ";; Unswitching loop\n");
 
   /* Unswitch the loop on this condition.  */
-  nloop = unswitch_loop (loop, bbs[i], cond, cinsn);
+  nloop = unswitch_loop (loop, bbs[i], copy_rtx_if_shared (cond), cinsn);
   gcc_assert (nloop);
 
   /* Invoke itself on modified loops.  */
index e47725a..0c20996 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/52092
+       * gcc.c-torture/compile/pr52092.c: New test.
+
 2012-02-02  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/41587
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr52092.c b/gcc/testsuite/gcc.c-torture/compile/pr52092.c
new file mode 100644 (file)
index 0000000..4c39c77
--- /dev/null
@@ -0,0 +1,25 @@
+/* PR rtl-optimization/52092 */
+
+int a, b, c, d, e, f, g;
+
+void
+foo (void)
+{
+  for (;;)
+    {
+      int *h = 0;
+      int i = 3;
+      int **j = &h;
+      if (e)
+       {
+         c = d || a;
+         g = c ? a : b;
+         if ((char) (i * g))
+           {
+             h = &f;
+             *h = 0;
+           }
+         **j = 0;
+       }
+    }
+}