diff options
author | Richard Guenther <rguenther@suse.de> | 2008-05-15 10:36:18 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-05-15 10:36:18 +0000 |
commit | 9f59420d5c2a4c94a1d3c7c82988ffcd672cae9c (patch) | |
tree | 6f8f7c379acc79115ebd45556e001eace5589796 /gcc | |
parent | 6784c6e03313eefa52ceb1a40776051ad1a720f1 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-dfa.c | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 21 |
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) |