OSDN Git Service

2012-01-20 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Jan 2012 16:29:01 +0000 (16:29 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Jan 2012 16:29:01 +0000 (16:29 +0000)
PR rtl-optimization/51856
* reload.c (find_reloads_subreg_address): Set the address_reloaded
flag to reloaded.

2012-01-20  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

* gcc.c-torture/compile/pr51856.c: New testcase.

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

gcc/ChangeLog
gcc/reload.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr51856.c [new file with mode: 0644]

index 940e361..45bdc3d 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-20  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       PR rtl-optimization/51856
+       * reload.c (find_reloads_subreg_address): Set the address_reloaded
+       flag to reloaded.
+
 2012-01-20  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
 
        PR target/51819
index 90085bd..8420c80 100644 (file)
@@ -6231,8 +6231,8 @@ find_reloads_subreg_address (rtx x, int force_replace, int opnum,
            }
        }
     }
-  if (reloaded && address_reloaded)
-    *address_reloaded = 1;
+  if (address_reloaded)
+    *address_reloaded = reloaded;
 
   return x;
 }
index d0068ba..86ae60f 100644 (file)
@@ -1,3 +1,7 @@
+2012-01-20  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * gcc.c-torture/compile/pr51856.c: New testcase.
+
 2012-01-20  Uros Bizjak  <ubizjak@gmail.com>
 
        * go.test/go-test.exp (go-gc-tests): Pass correctly formatted
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr51856.c b/gcc/testsuite/gcc.c-torture/compile/pr51856.c
new file mode 100644 (file)
index 0000000..6644c7f
--- /dev/null
@@ -0,0 +1,23 @@
+struct B { int b1; long long b2, b3; int b4; };
+struct C { char c1[40], c2, c3[96]; long long c4[5], c5; char c6[596]; };
+void fn1 (long long), fn2 (char *, int), fn4 (void);
+int r, fn3 (int, const char *, int, char *, int, int);
+
+void
+foo (int t, int u, int v, int w, int x, int y, struct B *z)
+{
+  char c[512], d[512], e;
+  struct C g;
+  long long f, h[255];
+  struct B j;
+  __builtin_bzero (&j, sizeof j);
+  if (y > w)
+    fn4 ();
+  __builtin_bzero (&g, sizeof g);
+  g.c5 = h[0];
+  fn1 (z ? z->b3 : f);
+  g.c2 = y;
+  fn2 (d, 256);
+  if (fn3 (r, "", e, c, 0, 16))
+    fn4 ();
+}