]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/59985 (stage2/3 compare error on lto-streamer-in.o)
authorVladimir Makarov <vmakarov@redhat.com>
Fri, 31 Jan 2014 23:56:46 +0000 (23:56 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 31 Jan 2014 23:56:46 +0000 (23:56 +0000)
2014-01-31  Vladimir Makarov  <vmakarov@redhat.com>

PR bootstrap/59985
* lra-constraints.c (process_alt_operands): Update reload_sum only
on the first pass.

2014-01-31  Vladimir Makarov  <vmakarov@redhat.com>

PR bootstrap/59985
* gcc.target/arm/pr59985.C: New.

From-SVN: r207375

gcc/ChangeLog
gcc/lra-constraints.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr59985.C [new file with mode: 0644]

index 93ebbb9efc0e77039f5f6a892bb386db770a3bf8..32eb882f40ecd5c78f9be32d9f1f28ef9cb2ed8d 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-31  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR bootstrap/59985
+       * lra-constraints.c (process_alt_operands): Update reload_sum only
+       on the first pass.
+
 2014-01-31  Richard Henderson  <rth@redhat.com>
 
        PR middle-end/60004
index cb64ee151a6d9896a4a925709220d00f2926b307..ada1baf885c344f9706189ec87d905ce2ac31dc5 100644 (file)
@@ -2178,7 +2178,11 @@ process_alt_operands (int only_alternative)
                                                  (operand_reg[nop])]
                                     .last_reload);
 
-                 if (last_reload > bb_reload_num)
+                 /* The value of reload_sum has sense only if we
+                    process insns in their order.  It happens only on
+                    the first constraints sub-pass when we do most of
+                    reload work.  */
+                 if (lra_constraint_iter == 1 && last_reload > bb_reload_num)
                    reload_sum += last_reload - bb_reload_num;
                }
              /* If this is a constant that is reloaded into the
index 0f59583dff3105e6b56064024e60cc69ed6cf1fa..b1a657aea92e9cc74c202d037da72b49269bf1dd 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-31  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR bootstrap/59985
+       * gcc.target/arm/pr59985.C: New.
+
 2014-01-31  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/59410
diff --git a/gcc/testsuite/gcc.target/arm/pr59985.C b/gcc/testsuite/gcc.target/arm/pr59985.C
new file mode 100644 (file)
index 0000000..cc688a9
--- /dev/null
@@ -0,0 +1,68 @@
+/* { dg-do compile } */
+/* { dg-options "-g -fcompare-debug -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard" } */
+
+extern void *f1 (unsigned long, unsigned long);
+extern const struct line_map *f2 (void *, int, unsigned int, const char *, unsigned int);
+extern unsigned int f3 (void *, unsigned int);
+extern void *v1;
+struct B { const char *s; int t; };
+struct C { unsigned u; unsigned long long v; void *w; };
+unsigned long long f4 (struct C *);
+const char *f5 (void *, unsigned int, unsigned int *);
+unsigned long long f6 (void *);
+
+static inline unsigned long long
+f7 (struct C *x, unsigned y)
+{
+  unsigned long long a, b;
+  int u = x->u;
+  a = y == 64 ? -1ULL : (1ULL << y) - 1;
+  if (u + y > 64)
+    {
+      f6 (x->w);
+      x->u = y;
+      return b & a;
+    }
+  b = x->v;
+  b >>= u;
+  x->u = u + y;
+  return b & a;
+}
+
+static const char *
+f8 (const char *x)
+{
+  B **a;
+  unsigned long t = __builtin_strlen (x);
+  char *b;
+  struct B *c;
+  b = (char *) f1 (t + 1, 1);
+  c = (struct B *) f1 (1, sizeof (struct B));
+  __builtin_memcpy (b, x, t + 1);
+  c->t = t;
+  struct B *d = *a;
+  return d->s;
+}
+
+unsigned int
+f9 (struct C *x, void *y)
+{
+  static const char *a;
+  static int b;
+  static int c;
+  bool d, e, f;
+  unsigned t;
+  bool prev_file = a != __null;
+  if (f7 (x, 1))
+    return ((unsigned int) 0);
+  d = f7 (x, 1);
+  e = f7 (x, 1);
+  f = f7 (x, 1);
+  a = f8 (f5 (y, f4 (x), &t));
+  if (e) b = f4 (x);
+  if (f)
+    if (d)
+      if (prev_file)
+        f2 (v1, 1, false, __null, 0);
+  return f3 (v1, c);
+}