* gcc.dg/tree-ssa/20041122-1.c: New test for missing optimization.
authorJeff Law <law@redhat.com>
Mon, 21 Feb 2005 14:55:38 +0000 (07:55 -0700)
committerJeff Law <law@gcc.gnu.org>
Mon, 21 Feb 2005 14:55:38 +0000 (07:55 -0700)
From-SVN: r95332

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c [new file with mode: 0644]

index 0feb30b148bc7359a52b298439f237d031ea1e6d..d7200a647f0329fe840c726d89124aa9f949b213 100644 (file)
@@ -1,3 +1,7 @@
+2005-01-31  Jeff Law  <law@redhat.com>
+
+       * gcc.dg/tree-ssa/20041122-1.c: New test for missing optimization.
+
 2005-02-20  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
 
        * gfortran.dg/do_iterator: Split loop, markup all lines for
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20041122-1.c
new file mode 100644 (file)
index 0000000..89b9064
--- /dev/null
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-dom3" } */
+
+
+typedef unsigned int size_t;
+extern void *xmalloc (size_t) __attribute__ ((__malloc__));
+struct edge_def
+{
+  struct basic_block_def *dest;
+  int flags;
+};
+typedef struct edge_def *edge;
+struct basic_block_def
+{
+  int flags;
+};
+typedef struct basic_block_def *basic_block;
+extern int n_basic_blocks;
+extern edge frob ();
+void
+find_unreachable_blocks (int frobit)
+{
+  basic_block *tos, *worklist, bb;
+  tos = worklist = xmalloc (sizeof (basic_block) * n_basic_blocks);
+  edge e = frob();
+  if (!(e->dest->flags & 4))
+    {
+      e->dest->flags |= 4;
+      *tos++ = e->dest;
+    }
+}
+
+/* If the aliasing code does its job properly, then we should be
+   able to determine that modifying e->dest->flags does not
+   modify e or e->dest.  The net result is that we only need one
+   load of e->dest.  */
+/* { dg-final { scan-tree-dump-times "->dest" 1 "dom3" { xfail *-*-* } } } */
+
+