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; } --> ;; Function test (test) test () { double CI.17; double CR.16; complex double * D.1616; complex double * a.0; <bb 0>: a.0 = a; CR.16 = REALPART_EXPR <b[0]> + REALPART_EXPR <b[1]>; CI.17 = IMAGPART_EXPR <b[0]> + IMAGPART_EXPR <b[1]>; REALPART_EXPR <*a.0> = CR.16; IMAGPART_EXPR <*a.0> = CI.17; D.1616 = a.0 + 16B; REALPART_EXPR <*D.1616> = CR.16; IMAGPART_EXPR <*D.1616> = CI.17; return; } CSE later optimizes this, but we should do it earlier.
-- Summary: Failure to propagate constants from a const initializer for _Complex Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: missed-optimization, TREE Severity: normal Priority: P2 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: steven at gcc dot gnu dot org CC: bonzini at gcc dot gnu dot org,gcc-bugs at gcc dot gnu dot org OtherBugsDependingO 19721 nThis: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23911