re PR tree-optimization/67769 (VRP pass does wrong optimization)

PR tree-optimization/67769
	* tree-ssa-phiopt.c (conditional_replacement): Call
	reset_flow_sensitive_info_in_bb.
	(minmax_replacement): Likewise.
	(abs_replacement): Likewise.

	* gcc.dg/torture/pr67769.c: New test.

From-SVN: r228341
This commit is contained in:
Marek Polacek 2015-10-01 14:25:42 +00:00 committed by Marek Polacek
parent 4812613802
commit 9edaabf3d2
4 changed files with 40 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2015-10-01 Marek Polacek <polacek@redhat.com>
PR tree-optimization/67769
* tree-ssa-phiopt.c (conditional_replacement): Call
reset_flow_sensitive_info_in_bb.
(minmax_replacement): Likewise.
(abs_replacement): Likewise.
2015-10-01 Nathan Sidwell <nathan@codesourcery.com>
* builtins.c: Don't include gomp-constants.h.

View File

@ -1,3 +1,8 @@
2015-10-01 Marek Polacek <polacek@redhat.com>
PR tree-optimization/67769
* gcc.dg/torture/pr67769.c: New test.
2015-10-01 Uros Bizjak <ubizjak@gmail.com>
* gcc.dg/lto/pr55113_0.c: Skip on all x86 targets.

View File

@ -0,0 +1,23 @@
/* { dg-do run } */
static int
clamp (int x, int lo, int hi)
{
return (x < lo) ? lo : ((x > hi) ? hi : x);
}
__attribute__ ((noinline))
short
foo (int N)
{
short value = clamp (N, 0, 16);
return value;
}
int
main ()
{
if (foo (-5) != 0)
__builtin_abort ();
return 0;
}

View File

@ -646,6 +646,7 @@ conditional_replacement (basic_block cond_bb, basic_block middle_bb,
}
replace_phi_edge_with_variable (cond_bb, e1, phi, new_var);
reset_flow_sensitive_info_in_bb (cond_bb);
/* Note that we optimized this PHI. */
return true;
@ -1284,6 +1285,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
replace_phi_edge_with_variable (cond_bb, e1, phi, result);
reset_flow_sensitive_info_in_bb (cond_bb);
return true;
}
@ -1402,6 +1405,7 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb,
}
replace_phi_edge_with_variable (cond_bb, e1, phi, result);
reset_flow_sensitive_info_in_bb (cond_bb);
/* Note that we optimized this PHI. */
return true;