aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-08-24 13:25:25 +0000
committerRichard Guenther <rguenther@suse.de>2010-08-24 13:25:25 +0000
commit385a78676b54de292ddc598af39bd89dd216d040 (patch)
treeac7ce329d3a7ff7ad17267791793020655a605c9 /gcc/tree-ssa-alias.c
parenta800074f91e15f8fd6a0c272264dca45d8116f49 (diff)
2010-08-24 Richard Guenther <rguenther@suse.de>
PR middle-end/45379 * tree-ssa-address.c (create_mem_ref_raw): Drop to MEM_REF if addr->index is NULL or zero. * tree-ssa-alias.c (indirect_refs_may_alias_p): Handle TARGET_MEM_REF more properly. (indirect_ref_may_alias_decl_p): Likewise. * emit-rtl.c (set_mem_attributes_minus_bitpos): Keep TARGET_MEM_REFs. * alias.c (ao_ref_from_mem): Handle TARGET_MEM_REF more properly. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@163519 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r--gcc/tree-ssa-alias.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 849c25004e6..a8d580e88ad 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -672,10 +672,16 @@ indirect_ref_may_alias_decl_p (tree ref1 ATTRIBUTE_UNUSED, tree base1,
if (TREE_CODE (base1) == TARGET_MEM_REF)
{
- if (!TMR_BASE (base1)
- || !POINTER_TYPE_P (TMR_BASE (base1)))
+ if (TMR_BASE (base1))
+ {
+ if (!POINTER_TYPE_P (TREE_TYPE (TMR_BASE (base1))))
+ return true;
+ ptr1 = TMR_BASE (base1);
+ }
+ else if (TMR_SYMBOL (base1))
+ ptr1 = build_fold_addr_expr (TMR_SYMBOL (base1));
+ else
return true;
- ptr1 = TMR_BASE (base1);
}
else
ptr1 = TREE_OPERAND (base1, 0);
@@ -808,20 +814,32 @@ indirect_refs_may_alias_p (tree ref1 ATTRIBUTE_UNUSED, tree base1,
if (TREE_CODE (base1) == TARGET_MEM_REF)
{
- if (!TMR_BASE (base1)
- || !POINTER_TYPE_P (TMR_BASE (base1)))
+ if (TMR_BASE (base1))
+ {
+ if (!POINTER_TYPE_P (TREE_TYPE (TMR_BASE (base1))))
+ return true;
+ ptr1 = TMR_BASE (base1);
+ }
+ else if (TMR_SYMBOL (base1))
+ ptr1 = build_fold_addr_expr (TMR_SYMBOL (base1));
+ else
return true;
- ptr1 = TMR_BASE (base1);
}
else
ptr1 = TREE_OPERAND (base1, 0);
if (TREE_CODE (base2) == TARGET_MEM_REF)
{
- if (!TMR_BASE (base2)
- || !POINTER_TYPE_P (TMR_BASE (base2)))
+ if (TMR_BASE (base2))
+ {
+ if (!POINTER_TYPE_P (TREE_TYPE (TMR_BASE (base2))))
+ return true;
+ ptr2 = TMR_BASE (base2);
+ }
+ else if (TMR_SYMBOL (base2))
+ ptr2 = build_fold_addr_expr (TMR_SYMBOL (base2));
+ else
return true;
- ptr2 = TMR_BASE (base2);
}
else
ptr2 = TREE_OPERAND (base2, 0);