The patch for PR rtl-opt/15289, changed the behavior of emit_move_insn_1 to invoke emit_block_move on memory to memory moves for "optimal behavior", instead of invoking a movMM pattern on the inner mode. emit_block_move changes the mode to BLKmode masking the original mode. This sequence of decisions results in GCC choosing GPRs to move a value that explicitly is declared floating point in the user code, hurting performance.
-- Summary: [4.0/4.1 Regression] FP complex modes moved via GPRs Product: gcc Version: 4.0.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P2 Component: rtl-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dje at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org,pthaugen at us dot ibm dot com GCC build triplet: powerpc*-*-* GCC host triplet: powerpc*-*-* GCC target triplet: powerpc*-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20306