Commit 1ebd8d9a by Steven Bosscher Committed by Steven Bosscher

re PR tree-optimization/23911 (Failure to propagate constants from a const…

re PR tree-optimization/23911 (Failure to propagate constants from a const initializer for _Complex)

gcc/
	PR tree-optimization/23911
	* tree-ssa-ccp.c (fold_const_aggregate_ref): Handle REALPART_EXPR
	and IMAGPART_EXPR too.

testsuite/
	* gcc.dg/pr23911.c: New test.

From-SVN: r104771
parent 577b2a06
2005-09-29 Steven Bosscher <stevenb@suse.de>
PR tree-optimization/23911
* tree-ssa-ccp.c (fold_const_aggregate_ref): Handle REALPART_EXPR
and IMAGPART_EXPR too.
2005-09-28 Mark Mitchell <mark@codesourcery.com> 2005-09-28 Mark Mitchell <mark@codesourcery.com>
PR 17886 PR 17886
......
2005-09-29 Steven Bosscher <stevenb@suse.de>
* gcc.dg/pr23911.c: New test.
2005-09-28 Mark Mitchell <mark@codesourcery.com> 2005-09-28 Mark Mitchell <mark@codesourcery.com>
* g++.dg/opt/pr19650.C: Use -w -fpermissive. * g++.dg/opt/pr19650.C: Use -w -fpermissive.
/* This was a missed optimization in tree constant propagation
that CSE would catch later on. */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-store_ccp" } */
double _Complex *a;
const double _Complex b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
void
test (void)
{
a[0] = b[0] + b[1];
a[1] = b[0] + b[1];
return;
}
/* After store_ccp, there should not be any assignments from real or
imaginary parts anymore. The constants should be loaded from b and
propagated into the elements of a. */
/* { dg-final { scan-tree-dump-times "= CR" 0 "store_ccp" } } */
/* { dg-final { scan-tree-dump-times "= CI" 0 "store_ccp" } } */
/* { dg-final { cleanup-tree-dump "store_ccp" } } */
...@@ -1045,6 +1045,15 @@ fold_const_aggregate_ref (tree t) ...@@ -1045,6 +1045,15 @@ fold_const_aggregate_ref (tree t)
return cval; return cval;
break; break;
case REALPART_EXPR:
case IMAGPART_EXPR:
{
tree c = fold_const_aggregate_ref (TREE_OPERAND (t, 0));
if (c && TREE_CODE (c) == COMPLEX_CST)
return fold_build1 (TREE_CODE (t), TREE_TYPE (t), c);
break;
}
default: default:
break; break;
} }
......
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