https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117111
Bug ID: 117111 Summary: [SH] delay slot is filled with wrong instruction Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: wrong-code Severity: minor Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: kkojima at gcc dot gnu.org CC: olegendo at gcc dot gnu.org Target Milestone: --- There are new execution failures reported on PR 55212 with enabling LRA. FAIL: gcc.c-torture/execute/ieee/fp-cmp-5.c execution, -O2 FAIL: gcc.c-torture/execute/ieee/fp-cmp-5.c execution, -O2 -flto -fno-use-linker-plugin -flto-partition=none FAIL: gcc.c-torture/execute/ieee/fp-cmp-5.c execution, -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects FAIL: gcc.c-torture/execute/ieee/fp-cmp-5.c execution, -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions FAIL: gcc.c-torture/execute/ieee/fp-cmp-5.c execution, -O3 -g These FAILs went away with -fno-delayed-branch. --- Comment #1 from Kazumoto Kojima <kkojima at gcc dot gnu.org> --- Created attachment 59329 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59329&action=edit a reduced test case (-m4 -mlra -O2 -fno-inline -mieee) .s looks like test_not_isless: mov.l r8,@-r15 mov #1,r8 fmov.s fr12,@-r15 fmov.s fr13,@-r15 mov.l .L7,r0 fmov.s fr14,@-r15 fmov.s fr15,@-r15 sts.l pr,@-r15 fmov fr4,fr14 fmov fr5,fr15 fmov fr6,fr12 jsr @r0 fmov fr7,fr13 tst r0,r0 bf .L3 fcmp/gt dr12,dr14 bt .L9 fcmp/eq dr12,dr14 .L9: bf/s .L6 mov r8,r0 <<<<<<<<< .L3: mov r8,r0 lds.l @r15+,pr fmov.s @r15+,fr15 fmov.s @r15+,fr14 fmov.s @r15+,fr13 fmov.s @r15+,fr12 rts mov.l @r15+,r8 .align 1 .L6: movt r8 lds.l @r15+,pr fmov.s @r15+,fr15 fmov.s @r15+,fr14 fmov.s @r15+,fr13 fmov.s @r15+,fr12 rts mov.l @r15+,r8 With adding -fno-delayed-branch, it looks ... fcmp/eq dr12,dr14 bf .L6 .L9: .L3: mov r8,r0 lds.l @r15+,pr fmov.s @r15+,fr15 fmov.s @r15+,fr14 fmov.s @r15+,fr13 fmov.s @r15+,fr12 mov.l @r15+,r8 rts nop .align 1 .L6: movt r8 mov r8,r0 lds.l @r15+,pr ... i.e. the delay slot is filled with a wrong insn.