re PR tree-optimization/44683 (Optimization bug with copysign builtin)

2010-06-27  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/44683
	* tree-ssa-dom.c (record_edge_info): Record equivalences for the
	false edge from the inverted condition.

	* gcc.c-torture/execute/pr44683.c: New testcase.

From-SVN: r161469
This commit is contained in:
Richard Guenther 2010-06-27 11:22:06 +00:00 committed by Richard Biener
parent e85813bda1
commit 2683009ace
4 changed files with 31 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2010-06-27 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44683
* tree-ssa-dom.c (record_edge_info): Record equivalences for the
false edge from the inverted condition.
2010-06-21 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/39690

View File

@ -1,3 +1,8 @@
2010-06-27 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44683
* gcc.c-torture/execute/pr44683.c: New testcase.
2010-06-22 Jakub Jelinek <jakub@redhat.com>
PR c++/44627

View File

@ -0,0 +1,18 @@
int __attribute__((noinline,noclone))
copysign_bug (double x)
{
if (x != 0.0 && (x * 0.5 == x))
return 1;
if (__builtin_copysign(1.0, x) < 0.0)
return 2;
else
return 3;
}
int main(void)
{
double x = -0.0;
if (copysign_bug (x) != 2)
__builtin_abort ();
return 0;
}

View File

@ -1764,7 +1764,7 @@ record_edge_info (basic_block bb)
edge_info = allocate_edge_info (false_edge);
record_conditions (edge_info, inverted, cond);
if (code == NE_EXPR)
if (TREE_CODE (inverted) == EQ_EXPR)
{
edge_info->lhs = op1;
edge_info->rhs = op0;
@ -1791,7 +1791,7 @@ record_edge_info (basic_block bb)
edge_info = allocate_edge_info (false_edge);
record_conditions (edge_info, inverted, cond);
if (TREE_CODE (cond) == NE_EXPR)
if (TREE_CODE (inverted) == EQ_EXPR)
{
edge_info->lhs = op0;
edge_info->rhs = op1;