Commit ec963f2a by Kugan Vivekanandarajah Committed by Kugan Vivekanandarajah

re PR tree-optimization/71408 (wrong code at -Os and above on x86_64-linux-gnu)

gcc/ChangeLog:

2016-06-07  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/71408
	* tree-ssa-reassoc.c (zero_one_operation): Fix NEGATE_EXPR operand for
	propagate_op_to_single_use.


gcc/testsuite/ChangeLog:

2016-06-07  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/71408
	* gcc.dg/tree-ssa/pr71408.c: New test.

From-SVN: r237158
parent 46ab5b6e
2016-06-07 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/71408
* tree-ssa-reassoc.c (zero_one_operation): Fix NEGATE_EXPR operand for
propagate_op_to_single_use.
2016-06-07 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/71281
* tree-ssa-reassoc.c (reassociate_bb): Set uid for negate stmt.
......
2016-06-07 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/71408
* gcc.dg/tree-ssa/pr71408.c: New test.
2016-06-07 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/71281
* g++.dg/torture/pr71281.C: New test.
......
/* PR middle-end/71408 */
/* { dg-do run } */
/* { dg-options "-Os" } */
unsigned a, b;
struct S0
{
int f1:18;
unsigned f3:4;
};
void fn1 ()
{
struct S0 c = { 7, 0 };
if (c.f1)
c.f3 = 3;
a = -~c.f3;
c.f3 = ~(c.f1 && c.f1);
c.f1 = c.f3 * (c.f1 - (c.f1 - a % c.f1)) + ~c.f3 * -a;
b = ~(c.f1 & a);
if (b >= 4294967295)
__builtin_abort ();
}
int
main ()
{
fn1 ();
return 0;
}
......@@ -1203,7 +1203,8 @@ zero_one_operation (tree *def, enum tree_code opcode, tree op)
{
if (gimple_assign_rhs1 (stmt) == op)
{
propagate_op_to_single_use (op, stmt, def);
tree cst = build_minus_one_cst (TREE_TYPE (op));
propagate_op_to_single_use (cst, stmt, def);
return;
}
else if (integer_minus_onep (op)
......@@ -1251,7 +1252,8 @@ zero_one_operation (tree *def, enum tree_code opcode, tree op)
{
if (gimple_assign_rhs1 (stmt2) == op)
{
propagate_op_to_single_use (op, stmt2, def);
tree cst = build_minus_one_cst (TREE_TYPE (op));
propagate_op_to_single_use (cst, stmt2, def);
return;
}
else if (integer_minus_onep (op)
......
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