emit-rtl.c (set_mem_attributes_minus_bitpos): Remove dead code.
authorRichard Guenther <rguenther@suse.de>
Tue, 12 Jun 2012 08:43:55 +0000 (08:43 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 12 Jun 2012 08:43:55 +0000 (08:43 +0000)
2012-06-12  Richard Guenther  <rguenther@suse.de>

* emit-rtl.c (set_mem_attributes_minus_bitpos): Remove dead code.
* alias.c (ao_ref_from_mem): MEM_EXPR is conservative, MEM_OFFSET
and MEM_SIZE only refines it.  Reflect that and be less conservative
if either of the latter is not known.

From-SVN: r188429

gcc/ChangeLog
gcc/alias.c
gcc/emit-rtl.c

index aa50728..152d478 100644 (file)
@@ -1,3 +1,10 @@
+2012-06-12  Richard Guenther  <rguenther@suse.de>
+
+       * emit-rtl.c (set_mem_attributes_minus_bitpos): Remove dead code.
+       * alias.c (ao_ref_from_mem): MEM_EXPR is conservative, MEM_OFFSET
+       and MEM_SIZE only refines it.  Reflect that and be less conservative
+       if either of the latter is not known.
+
 2012-06-12  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/53589
index 88a3b7e..fbc4e10 100644 (file)
@@ -326,17 +326,11 @@ ao_ref_from_mem (ao_ref *ref, const_rtx mem)
 
   ref->ref_alias_set = MEM_ALIAS_SET (mem);
 
-  /* If MEM_OFFSET or MEM_SIZE are unknown we have to punt.
-     Keep points-to related information though.  */
+  /* If MEM_OFFSET or MEM_SIZE are unknown what we got from MEM_EXPR
+     is conservative, so trust it.  */
   if (!MEM_OFFSET_KNOWN_P (mem)
       || !MEM_SIZE_KNOWN_P (mem))
-    {
-      ref->ref = NULL_TREE;
-      ref->offset = 0;
-      ref->size = -1;
-      ref->max_size = -1;
-      return true;
-    }
+    return true;
 
   /* If the base decl is a parameter we can have negative MEM_OFFSET in
      case of promoted subregs on bigendian targets.  Trust the MEM_EXPR
@@ -345,6 +339,9 @@ ao_ref_from_mem (ao_ref *ref, const_rtx mem)
       && (MEM_SIZE (mem) + MEM_OFFSET (mem)) * BITS_PER_UNIT == ref->size)
     return true;
 
+  /* Otherwise continue and refine size and offset we got from analyzing
+     MEM_EXPR by using MEM_SIZE and MEM_OFFSET.  */
+
   ref->offset += MEM_OFFSET (mem) * BITS_PER_UNIT;
   ref->size = MEM_SIZE (mem) * BITS_PER_UNIT;
 
index c2d734b..09be139 100644 (file)
@@ -1838,15 +1838,6 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
              /* ??? Any reason the field size would be different than
                 the size we got from the type?  */
            }
-
-         /* If this is an indirect reference, record it.  */
-         else if (TREE_CODE (t) == MEM_REF)
-           {
-             attrs.expr = t;
-             attrs.offset_known_p = true;
-             attrs.offset = 0;
-             apply_bitpos = bitpos;
-           }
        }
 
       /* If this is an indirect reference, record it.  */