re PR middle-end/78228 (fstrict-overflow breaks code without overflow?)

2016-11-07  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/78228
	* tree-ssa-phiopt.c (abs_replacement): Avoid introducing
	undefined behavior.

	* gcc.dg/tree-ssa/phi-opt-15.c: New testcase.

From-SVN: r241899
This commit is contained in:
Richard Biener 2016-11-07 12:25:09 +00:00 committed by Richard Biener
parent e27bfda2fc
commit 32894793ff
4 changed files with 31 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2016-11-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/78228
* tree-ssa-phiopt.c (abs_replacement): Avoid introducing
undefined behavior.
2016-11-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/77822

View File

@ -1,3 +1,8 @@
2016-11-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/78228
* gcc.dg/tree-ssa/phi-opt-15.c: New testcase.
2016-11-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/77822

View File

@ -0,0 +1,12 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
int
foo (int i)
{
if (i > 0)
i = -i;
return i;
}
/* { dg-final { scan-tree-dump-not "ABS" "optimized" } } */

View File

@ -1474,6 +1474,14 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb,
else
negate = false;
/* If the code negates only iff positive then make sure to not
introduce undefined behavior when negating or computing the absolute.
??? We could use range info if present to check for arg1 == INT_MIN. */
if (negate
&& (ANY_INTEGRAL_TYPE_P (TREE_TYPE (arg1))
&& ! TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg1))))
return false;
result = duplicate_ssa_name (result, NULL);
if (negate)