aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-05-15 10:36:18 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-05-15 10:36:18 +0000
commit9f59420d5c2a4c94a1d3c7c82988ffcd672cae9c (patch)
tree6f8f7c379acc79115ebd45556e001eace5589796 /gcc
parent6784c6e03313eefa52ceb1a40776051ad1a720f1 (diff)
downloadgcc-9f59420d5c2a4c94a1d3c7c82988ffcd672cae9c.zip
gcc-9f59420d5c2a4c94a1d3c7c82988ffcd672cae9c.tar.gz
gcc-9f59420d5c2a4c94a1d3c7c82988ffcd672cae9c.tar.bz2
tree-dfa.c (refs_may_alias_p): Allow all kinds of INDIRECT_REF and TARGET_MEM_REF.
2008-05-15 Richard Guenther <rguenther@suse.de> * tree-dfa.c (refs_may_alias_p): Allow all kinds of INDIRECT_REF and TARGET_MEM_REF. * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle TARGET_MEM_REF. From-SVN: r135332
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-dfa.c6
-rw-r--r--gcc/tree-ssa-sccvn.c21
3 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a76ec9d..9a91ab4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-15 Richard Guenther <rguenther@suse.de>
+
+ * tree-dfa.c (refs_may_alias_p): Allow all kinds of
+ INDIRECT_REF and TARGET_MEM_REF.
+ * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle
+ TARGET_MEM_REF.
+
2008-05-15 Uros Bizjak <ubizjak@gmail.com>
H.J. Lu <hongjiu.lu@intel.com>
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c
index 622930f..f978441 100644
--- a/gcc/tree-dfa.c
+++ b/gcc/tree-dfa.c
@@ -996,10 +996,12 @@ refs_may_alias_p (tree ref1, tree ref2)
gcc_assert ((SSA_VAR_P (ref1)
|| handled_component_p (ref1)
- || TREE_CODE (ref1) == INDIRECT_REF)
+ || INDIRECT_REF_P (ref1)
+ || TREE_CODE (ref1) == TARGET_MEM_REF)
&& (SSA_VAR_P (ref2)
|| handled_component_p (ref2)
- || TREE_CODE (ref2) == INDIRECT_REF));
+ || INDIRECT_REF_P (ref2)
+ || TREE_CODE (ref2) == TARGET_MEM_REF));
/* Defer to TBAA if possible. */
if (flag_strict_aliasing
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index f5ec0a7..e8eb437 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -504,6 +504,27 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result)
return;
}
+ if (TREE_CODE (ref) == TARGET_MEM_REF)
+ {
+ vn_reference_op_s temp;
+
+ memset (&temp, 0, sizeof (temp));
+ /* We do not care for spurious type qualifications. */
+ temp.type = TYPE_MAIN_VARIANT (TREE_TYPE (ref));
+ temp.opcode = TREE_CODE (ref);
+ temp.op0 = TMR_SYMBOL (ref) ? TMR_SYMBOL (ref) : TMR_BASE (ref);
+ temp.op1 = TMR_INDEX (ref);
+ VEC_safe_push (vn_reference_op_s, heap, *result, &temp);
+
+ memset (&temp, 0, sizeof (temp));
+ temp.type = NULL_TREE;
+ temp.opcode = TREE_CODE (ref);
+ temp.op0 = TMR_STEP (ref);
+ temp.op1 = TMR_OFFSET (ref);
+ VEC_safe_push (vn_reference_op_s, heap, *result, &temp);
+ return;
+ }
+
/* For non-calls, store the information that makes up the address. */
while (ref)