https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90822
Bug ID: 90822 Summary: Remove PowerPC lfiwax and lfiwzx patterns Product: gcc Version: 10.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: --- When I first added the patterns for LFIWAX and LFIWZX instructions (back in 2010), I wanted to add support for these instructions, but at the time we didn't have automatic sign/zero extension from SImode to DImode, and I was worried about allowing SImode in the floating point and vector registers. The initial pattern that is generated is: (insn 6 5 7 (parallel [ (set (reg:DF 120) (float:DF (mem:SI (reg/v/f:DI 119 [ p ]) [1 *p_3(D)+0 S4 A32]))) (clobber (scratch:DI)) ]) "foo50.c":1:30 -1 (nil)) After the split1 pass we generate: (insn 15 6 16 2 (set (reg:DI 122) (unspec:DI [ (mem:SI (reg:DI 121) [1 *p_3(D)+0 S4 A32]) ] UNSPEC_LFIWAX)) "foo50.c":1:1 -1 (nil)) (insn 16 15 12 2 (set (reg/i:DF 33 1) (float:DF (reg:DI 122))) "foo50.c":1:1 -1 (nil)) Instead, we should generate in the split1 pass: (insn 15 6 16 2 (set (reg:DI 122) (sign_extend:DI (mem:SI (reg:DI 121)))) (insn 16 15 12 2 (set (reg/i:DF 33 1) (float:DF (reg:DI 122))) "foo50.c":1:1 -1 (nil)) And delete the lfiwax (and similar lfiwzx) patterns. Obviously, we want to make sure we don't affect code generation for the power7 targets (for lfiwax/lfiwzx) and power6 targets (for just lfiwax).