]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR tree-optimization/49279 (Optimization incorrectly presuming constant...
authorRichard Guenther <rguenther@suse.de>
Tue, 3 Jan 2012 13:54:44 +0000 (13:54 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 3 Jan 2012 13:54:44 +0000 (13:54 +0000)
2012-01-03  Richard Guenther  <rguenther@suse.de>

Backport from mainline
2011-10-06  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/49279
* tree-ssa-structalias.c (find_func_aliases): Don't handle
CAST_RESTRICT.

2011-10-06  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/49279
* gcc.c-torture/execute/pr49279.c: New test.

From-SVN: r182846

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr49279.c [new file with mode: 0644]
gcc/tree-ssa-structalias.c

index f7f00b5d849417f5858f9fc212ae184abbf941a0..d8f3174d587a5bb8527e1e738eee67eac8a6b7a4 100644 (file)
@@ -1,3 +1,12 @@
+2012-01-03  Richard Guenther  <rguenther@suse.de>
+
+       Backport from mainline
+       2011-10-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/49279
+       * tree-ssa-structalias.c (find_func_aliases): Don't handle
+       CAST_RESTRICT.
+
 2012-01-03  Richard Guenther  <rguenther@suse.de>
  
        Backport from mainline
index 25e5c8299ce0dffff2f4a3ee4294969b330abc63..1fedf3408125441f98bfeaa9c062339fcdf97f1a 100644 (file)
@@ -1,3 +1,11 @@
+2012-01-03  Richard Guenther  <rguenther@suse.de>
+
+       Backport from mainline
+       2011-10-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/49279
+       * gcc.c-torture/execute/pr49279.c: New test.
+
 2012-01-03  Richard Guenther  <rguenther@suse.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr49279.c b/gcc/testsuite/gcc.c-torture/execute/pr49279.c
new file mode 100644 (file)
index 0000000..7f2c0d2
--- /dev/null
@@ -0,0 +1,35 @@
+/* PR tree-optimization/49279 */
+extern void abort (void);
+
+struct S { int a; int *__restrict p; };
+
+__attribute__((noinline, noclone))
+struct S *bar (struct S *p)
+{
+  struct S *r;
+  asm volatile ("" : "=r" (r) : "0" (p) : "memory");
+  return r;
+}
+
+__attribute__((noinline, noclone))
+int
+foo (int *p, int *q)
+{
+  struct S s, *t;
+  s.a = 1;
+  s.p = p;
+  t = bar (&s);
+  t->p = q;
+  s.p[0] = 0;
+  t->p[0] = 1;
+  return s.p[0];
+}
+
+int
+main ()
+{
+  int a, b;
+  if (foo (&a, &b) != 1)
+    abort ();
+  return 0;
+}
index 88b23c028e695869b59a06c07dce1691b08a36ca..b2ba385be0a7cdd35d96561f18a62df557e1eeb8 100644 (file)
@@ -3968,15 +3968,6 @@ find_func_aliases (gimple origt)
          && DECL_P (lhsop)
          && is_global_var (lhsop))
        make_escape_constraint (rhsop);
-      /* If this is a conversion of a non-restrict pointer to a
-        restrict pointer track it with a new heapvar.  */
-      else if (gimple_assign_cast_p (t)
-              && POINTER_TYPE_P (TREE_TYPE (rhsop))
-              && POINTER_TYPE_P (TREE_TYPE (lhsop))
-              && !TYPE_RESTRICT (TREE_TYPE (rhsop))
-              && TYPE_RESTRICT (TREE_TYPE (lhsop)))
-       make_constraint_from_restrict (get_vi_for_tree (lhsop),
-                                      "CAST_RESTRICT");
     }
   /* Handle escapes through return.  */
   else if (gimple_code (t) == GIMPLE_RETURN