re PR tree-optimization/16721 (Accesses to volatile objects optimized away)
authorDiego Novillo <dnovillo@redhat.com>
Wed, 22 Sep 2004 23:33:20 +0000 (23:33 +0000)
committerDiego Novillo <dnovillo@gcc.gnu.org>
Wed, 22 Sep 2004 23:33:20 +0000 (19:33 -0400)
PR tree-optimization/16721
* tree-dfa.c (dump_variable): Show TREE_THIS_VOLATILE.
* tree-ssa-alias.c (create_memory_tag): Move setting of
TREE_THIS_VOLATILE ...
(get_tmt_for): ... here.

testsuite/ChangeLog

PR tree-optimization/16721
* testsuite/gcc.dg/tree-ssa/pr16721.c: New test.

From-SVN: r87895

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr16721.c [new file with mode: 0644]
gcc/tree-dfa.c
gcc/tree-ssa-alias.c

index 3680fead8be9ae44ce518c9f838c01a91aad769b..9feec2ead0bbae08e5508f8863dbff93ff0115e0 100644 (file)
@@ -1,3 +1,11 @@
+2004-09-22  Diego Novillo  <dnovillo@redhat.com>
+
+       PR tree-optimization/16721
+       * tree-dfa.c (dump_variable): Show TREE_THIS_VOLATILE.
+       * tree-ssa-alias.c (create_memory_tag): Move setting of
+       TREE_THIS_VOLATILE ...
+       (get_tmt_for): ... here.
+
 2004-09-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * config/sparc/sparc.md (cmove splitter): Fix formatting.
index 0d7aa4257729766226870f3753dace40f01f50c8..5c6e8958fd9c5b5845761addff0c20a10e738292 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-22  Diego Novillo  <dnovillo@redhat.com>
+
+       PR tree-optimization/16721
+       * testsuite/gcc.dg/tree-ssa/pr16721.c: New test.
+
 2004-09-23  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * gcc.dg/20030123-1.c: Add prototypes for builtin functions.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr16721.c b/gcc/testsuite/gcc.dg/tree-ssa/pr16721.c
new file mode 100644 (file)
index 0000000..869ab96
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-optimized" } */
+
+struct data {
+       volatile unsigned long *addr;
+} *p;
+
+int test()
+{
+       *p->addr;
+       return 0;
+}
+
+/* The load from p->addr should not disappear.  */
+/* { dg-final { scan-tree-dump-times "\->addr" 1 "optimized"} } */
index 4e65c5dffc8914698e20e83a9167b9aef4842015..9db0cbb243aab525cb12e5f735df44ffb5fbc694 100644 (file)
@@ -552,6 +552,9 @@ dump_variable (FILE *file, tree var)
   if (is_global_var (var))
     fprintf (file, ", is global");
 
+  if (TREE_THIS_VOLATILE (var))
+    fprintf (file, ", is volatile");
+
   if (is_call_clobbered (var))
     fprintf (file, ", call clobbered");
 
index baf5ff27696052d6e1609ac81528d71ee6c2c8c3..3d99d94e92ee4187c5e02b770fa1346015e34d73 100644 (file)
@@ -2025,9 +2025,6 @@ create_memory_tag (tree type, bool is_type_tag)
      determine whether they should be considered globals.  */
   DECL_CONTEXT (tag) = current_function_decl;
 
-  /* If the pointed-to type is volatile, so is the tag.  */
-  TREE_THIS_VOLATILE (tag) = TREE_THIS_VOLATILE (type);
-
   /* Memory tags are by definition addressable.  This also prevents
      is_gimple_ref frome confusing memory tags with optimizable
      variables.  */
@@ -2126,6 +2123,9 @@ get_tmt_for (tree ptr, struct alias_info *ai)
       ai->pointers[ai->num_pointers++] = alias_map;
     }
 
+  /* If the pointed-to type is volatile, so is the tag.  */
+  TREE_THIS_VOLATILE (tag) = TREE_THIS_VOLATILE (tag_type);
+
   /* Make sure that the type tag has the same alias set as the
      pointed-to type.  */
   gcc_assert (tag_set == get_alias_set (tag));