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
This commit is contained in:
Richard Biener 2016-01-20 08:36:32 +00:00 committed by Richard Biener
parent bf0bb9703a
commit dd6f2cf98c
4 changed files with 42 additions and 8 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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 */