aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/alias.c15
-rw-r--r--gcc/emit-rtl.c9
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. */