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.