aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-01-20 08:36:32 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-01-20 08:36:32 +0000
commitdd6f2cf98c132d493c9ba7c5602d2ade2efa97f4 (patch)
tree25f916a4031cfa3e7564c20c520aa54e2b7d7499 /gcc
parentbf0bb9703a83ddbe48d166d24ca2eeab22ad9886 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/tree-ssa-pre.c14
-rw-r--r--gcc/tree-ssa-sccvn.c6
-rw-r--r--gcc/tree-ssa-sccvn.h20
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 */