diff options
author | Richard Biener <rguenther@suse.de> | 2016-01-20 08:36:32 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-01-20 08:36:32 +0000 |
commit | dd6f2cf98c132d493c9ba7c5602d2ade2efa97f4 (patch) | |
tree | 25f916a4031cfa3e7564c20c520aa54e2b7d7499 /gcc | |
parent | bf0bb9703a83ddbe48d166d24ca2eeab22ad9886 (diff) | |
download | gcc-dd6f2cf98c132d493c9ba7c5602d2ade2efa97f4.zip gcc-dd6f2cf98c132d493c9ba7c5602d2ade2efa97f4.tar.gz gcc-dd6f2cf98c132d493c9ba7c5602d2ade2efa97f4.tar.bz2 |
re PR target/69345 (459.GemsFDTD regression)
2016-01-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/69345
* tree-ssa-sccvn.h (VN_INFO_RANGE_INFO): New inline function.
(VN_INFO_PTR_INFO): Likewise.
* tree-ssa-sccvn.c (set_ssa_val_to): Avoid clearing points-to
info when it is equal between non-dominating SSA names.
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
Make sure to look at original SSA infos.
From-SVN: r232603
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 14 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.h | 20 |
4 files changed, 42 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5309680..d675038 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2016-01-20 Richard Biener <rguenther@suse.de> + + PR tree-optimization/69345 + * tree-ssa-sccvn.h (VN_INFO_RANGE_INFO): New inline function. + (VN_INFO_PTR_INFO): Likewise. + * tree-ssa-sccvn.c (set_ssa_val_to): Avoid clearing points-to + info when it is equal between non-dominating SSA names. + * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): + Make sure to look at original SSA infos. + 2016-01-20 Jeff Law <law@redhat.com> PR target/25114 diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 1f1b055..311663d 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4033,22 +4033,22 @@ eliminate_dom_walker::before_dom_children (basic_block b) { basic_block sprime_b = gimple_bb (SSA_NAME_DEF_STMT (sprime)); if (POINTER_TYPE_P (TREE_TYPE (lhs)) - && SSA_NAME_PTR_INFO (lhs) - && !SSA_NAME_PTR_INFO (sprime)) + && VN_INFO_PTR_INFO (lhs) + && ! VN_INFO_PTR_INFO (sprime)) { duplicate_ssa_name_ptr_info (sprime, - SSA_NAME_PTR_INFO (lhs)); + VN_INFO_PTR_INFO (lhs)); if (b != sprime_b) mark_ptr_info_alignment_unknown (SSA_NAME_PTR_INFO (sprime)); } - else if (!POINTER_TYPE_P (TREE_TYPE (lhs)) - && SSA_NAME_RANGE_INFO (lhs) - && !SSA_NAME_RANGE_INFO (sprime) + else if (INTEGRAL_TYPE_P (TREE_TYPE (lhs)) + && VN_INFO_RANGE_INFO (lhs) + && ! VN_INFO_RANGE_INFO (sprime) && b == sprime_b) duplicate_ssa_name_range_info (sprime, SSA_NAME_RANGE_TYPE (lhs), - SSA_NAME_RANGE_INFO (lhs)); + VN_INFO_RANGE_INFO (lhs)); } /* Inhibit the use of an inserted PHI on a loop header when diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index a6ee501..e7bac42 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -3092,7 +3092,11 @@ set_ssa_val_to (tree from, tree to) /* Use that from the dominator. */ SSA_NAME_PTR_INFO (to) = SSA_NAME_PTR_INFO (from); } - else + else if (! SSA_NAME_PTR_INFO (from) + /* Handle the case of trivially equivalent info. */ + || memcmp (SSA_NAME_PTR_INFO (to), + SSA_NAME_PTR_INFO (from), + sizeof (ptr_info_def)) != 0) { /* Save old info. */ if (! VN_INFO (to)->info.ptr_info) diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h index d94bc1c..14093dd 100644 --- a/gcc/tree-ssa-sccvn.h +++ b/gcc/tree-ssa-sccvn.h @@ -243,4 +243,24 @@ vn_valueize (tree name) return name; } +/* Get at the original range info for NAME. */ + +inline range_info_def * +VN_INFO_RANGE_INFO (tree name) +{ + return (VN_INFO (name)->info.range_info + ? VN_INFO (name)->info.range_info + : SSA_NAME_RANGE_INFO (name)); +} + +/* Get at the original pointer info for NAME. */ + +inline ptr_info_def * +VN_INFO_PTR_INFO (tree name) +{ + return (VN_INFO (name)->info.ptr_info + ? VN_INFO (name)->info.ptr_info + : SSA_NAME_PTR_INFO (name)); +} + #endif /* TREE_SSA_SCCVN_H */ |