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
This commit is contained in:
parent
577b2a064e
commit
1ebd8d9ac1
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
PR 17886
|
||||
|
@ -1,3 +1,7 @@
|
||||
2005-09-29 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
* gcc.dg/pr23911.c: New test.
|
||||
|
||||
2005-09-28 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* g++.dg/opt/pr19650.C: Use -w -fpermissive.
|
||||
|
22
gcc/testsuite/gcc.dg/pr23911.c
Normal file
22
gcc/testsuite/gcc.dg/pr23911.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* 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)
|
||||
return cval;
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user