https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97071
Bug ID: 97071 Summary: Fails to CSE / inherit constant pool load Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- double foo (double x) { return x * -3. + 3.; } compiles to 0: addis 2,12,.TOC.-.LCF0@ha addi 2,2,.TOC.-.LCF0@l .localentry foo,.-foo addis 9,2,.LC0@toc@ha lfd 12,.LC0@toc@l(9) addis 9,2,.LC2@toc@ha lfd 0,.LC2@toc@l(9) fmadd 1,1,12,0 blr ... .LC0: .long 0 .long -1073217536 .align 3 .LC2: .long 0 .long 1074266112 but CSE or reload inheritance could have replaced the add of + 3. with subtraction of the available -3. constant. Might be more difficult to pull off on x86 where the add/mul has memory operands.