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.

Reply via email to