Commit f8294131 by Richard Biener Committed by Richard Biener

re PR tree-optimization/78305 (Wrong constant folding)

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

	PR middle-end/78305
	* fold-const.c (negate_expr_p): Fix multiplication case.

	* gcc.dg/torture/pr78305.c: New testcase.

From-SVN: r242536
parent 04f1c830
2016-11-17 Richard Biener <rguenther@suse.de>
PR middle-end/78305
* fold-const.c (negate_expr_p): Fix multiplication case.
2016-11-17 Chung-Lin Tang <cltang@codesourcery.com>
PR target/78357
......@@ -450,13 +450,13 @@ negate_expr_p (tree t)
if (TYPE_UNSIGNED (type))
break;
/* INT_MIN/n * n doesn't overflow while negating one operand it does
if n is a power of two. */
if n is a (negative) power of two. */
if (INTEGRAL_TYPE_P (TREE_TYPE (t))
&& ! TYPE_OVERFLOW_WRAPS (TREE_TYPE (t))
&& ! ((TREE_CODE (TREE_OPERAND (t, 0)) == INTEGER_CST
&& ! integer_pow2p (TREE_OPERAND (t, 0)))
&& wi::popcount (wi::abs (TREE_OPERAND (t, 0))) != 1)
|| (TREE_CODE (TREE_OPERAND (t, 1)) == INTEGER_CST
&& ! integer_pow2p (TREE_OPERAND (t, 1)))))
&& wi::popcount (wi::abs (TREE_OPERAND (t, 1))) != 1)))
break;
/* Fall through. */
......
2016-11-17 Richard Biener <rguenther@suse.de>
PR middle-end/78305
* gcc.dg/torture/pr78305.c: New testcase.
2016-11-17 Janus Weil <janus@gcc.gnu.org>
PR fortran/66227
......
/* { dg-require-effective-target int32plus } */
/* { dg-do run } */
int main ()
{
int a = 2;
int b = 1;
int t = -1 * ( -0x40000000 * a / ( -0x20000000 + b ) ) / -1;
if (t != 4) __builtin_abort();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment