diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/alias.c | 15 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 9 |
3 files changed, 13 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa50728..152d478 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/alias.c b/gcc/alias.c index 88a3b7e..fbc4e10 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -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; diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index c2d734b..09be139 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -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. */ |