https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69501
Bug ID: 69501 Summary: PowerPC rs6000_adjust_cost doesn't recognize float/sign/zero extend memory operations Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: meissner at gcc dot gnu.org Target Milestone: --- I was chasing down another bug, when I happened to look at rs6000_adjust_cost in rs6000.c. In the REG_DEP_TRUE case of the switch statement, it tries to separate a load from a narrower store. However, if the load is an extend: (sign_extend:DI (mem:SI ...)) (zero_extend:DI (mem:SI ...)) (float_extend:DF (mem:SF ...)) It will not recognize this, and bump up the cost by 14. There might be other places in the scheduling hooks where we miss opportunities with sign/zero extension from memory.