aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
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 849c250..a8d580e 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);