https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117645

            Bug ID: 117645
           Summary: FAIL: gcc.dg/graphite/pr29581-2.c execution test
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: danglin at gcc dot gnu.org
  Target Milestone: ---

Created attachment 59615
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59615&action=edit
Reload RTL dump

With LRA, we have the following test failure on hppa64-hp-hpux11.11:

Executing on host: /home/dave/gnu/gcc/objdir64/gcc/xgcc
-B/home/dave/gnu/gcc/obj
dir64/gcc/  /home/dave/gnu/gcc/gcc/gcc/testsuite/gcc.dg/graphite/pr29581-2.c
-fdiagnostics-plain-output   -O2 -ftree-loop-linear  -lm  -o ./pr29581-2.exe
(timeout = 300)
spawn -ignore SIGHUP /home/dave/gnu/gcc/objdir64/gcc/xgcc
-B/home/dave/gnu/gcc/o
bjdir64/gcc/ /home/dave/gnu/gcc/gcc/gcc/testsuite/gcc.dg/graphite/pr29581-2.c
-f
diagnostics-plain-output -O2 -ftree-loop-linear -lm -o ./pr29581-2.exe
PASS: gcc.dg/graphite/pr29581-2.c (test for excess errors)
Setting LD_LIBRARY_PATH to
:/home/dave/gnu/gcc/objdir64/gcc:/home/dave/gnu/gcc/o
bjdir64/hppa64-hp-hpux11.11/./libatomic/.libs::/home/dave/gnu/gcc/objdir64/gcc:/
home/dave/gnu/gcc/objdir64/hppa64-hp-hpux11.11/./libatomic/.libs:/home/dave/gnu/
gcc/objdir64/gcc:/home/dave/gnu/gcc/objdir64/hppa64-hp-hpux11.11/libstdc++-v3/sr
c/.libs
Execution timeout is: 300
spawn [open ...]
FAIL: gcc.dg/graphite/pr29581-2.c execution test

The test doesn't fail with legacy reload.

Before reload, the generated RTL is similar.

This loop seems miscompiled.

reload:

        ldi 1,%r3
L$28:
        std %r0,-144(%r30)
        copy %r19,%r22
        std %r3,-136(%r30)
        copy %r20,%r31
        ldd -144(%r30),%r3
        ldd -136(%r30),%r4
        add %r20,%r4,%r20
        add,dc %r19,%r3,%r19
        cmpb,*<,n %r22,%r1,L$28
        ldi 1,%r3

LRA:

L$28:
        copy %r20,%r31
        add %r20,%r4,%r20
        add,dc %r19,%r3,%r19
        cmpb,*<,n %r22,%r1,L$28

The loop contains a TI mode addition.  We lose the initialization of
the register pair r3 and r4.

We had the following after ipa:

(code_label 163 15 160 9 19 (nil) [2 uses])
(note 160 163 53 9 [bb 9] NOTE_INSN_BASIC_BLOCK)
(insn 53 160 54 9 (set (reg:DI 129 [ graphite_IV.10 ])
        (subreg:DI (reg:TI 91 [ graphite_IV.10 ]) 0)) 130 {*pa.md:4286}
     (nil))
(insn 54 53 58 9 (set (reg:DI 130 [ graphite_IV.10+8 ])
        (subreg:DI (reg:TI 91 [ graphite_IV.10 ]) 8)) 130 {*pa.md:4286}
     (nil))
(insn 58 54 56 9 (clobber (reg:TI 111)) -1
     (nil))
(insn 56 58 57 9 (set (subreg:DI (reg:TI 111) 0)
        (const_int 0 [0])) 130 {*pa.md:4286}
     (nil))
(insn 57 56 59 9 (set (subreg:DI (reg:TI 111) 8)
        (const_int 1 [0x1])) 130 {*pa.md:4286}
     (nil))
(insn 59 57 61 9 (set (reg:TI 91 [ graphite_IV.10 ])
        (plus:TI (reg:TI 91 [ graphite_IV.10 ])
            (reg:TI 111))) 181 {addti3}
     (expr_list:REG_DEAD (reg:TI 111)
        (nil)))
(jump_insn 61 59 139 9 (set (pc)
        (if_then_else (gt (subreg:DI (reg:TI 77 [ _20 ]) 0)
                (reg:DI 129 [ graphite_IV.10 ]))
            (label_ref:DI 163)
            (pc))) 54 {*pa.md:1479}
     (nil)

After LRA:

(code_label 163 15 160 9 19 (nil) [2 uses])
(note 160 163 53 9 [bb 9] NOTE_INSN_BASIC_BLOCK)
(insn 53 160 54 9 (set (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129])
        (reg:DI 19 %r19 [ graphite_IV.10 ])) 130 {*pa.md:4286}
     (nil))
(insn 54 53 58 9 (set (reg:DI 31 %r31 [orig:130 graphite_IV.10+8 ] [130])
        (reg:DI 20 %r20 [orig:91 graphite_IV.10+8 ] [91])) 130 {*pa.md:4286}
     (nil))
(insn 58 54 56 9 (clobber (reg:TI 3 %r3 [111])) -1
     (nil))
(insn 56 58 57 9 (set (reg:DI 3 %r3)
        (const_int 0 [0])) 130 {*pa.md:4286}
     (nil))
(insn 57 56 178 9 (set (reg:DI 23 %r23 [135])
        (const_int 1 [0x1])) 130 {*pa.md:4286}
     (nil))
(insn 178 57 181 9 (set (reg:DI 4 %r4 [orig:111+8 ] [111])
        (reg:DI 23 %r23 [135])) 130 {*pa.md:4286}
     (nil))
(insn 181 178 59 9 (clobber (reg:TI 3 %r3 [111])) -1
     (nil))
(insn 59 181 61 9 (set (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91])
        (plus:TI (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91])
            (reg:TI 3 %r3 [111]))) 181 {addti3}
     (nil))
(jump_insn 61 59 139 9 (set (pc)
        (if_then_else (gt (reg:DI 1 %r1 [ _20 ])
                (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129]))
            (label_ref:DI 163)
            (pc))) 54 {*pa.md:1479}
     (nil)

Legacy reload generated:

(code_label 163 15 160 9 19 (nil) [2 uses])
(note 160 163 53 9 [bb 9] NOTE_INSN_BASIC_BLOCK)
(insn 53 160 54 9 (set (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129])
        (reg:DI 19 %r19 [ graphite_IV.10 ])) 130 {*pa.md:4286}
     (nil))
(insn 54 53 56 9 (set (reg:DI 31 %r31 [orig:130 graphite_IV.10+8 ] [130])
        (reg:DI 20 %r20 [orig:91 graphite_IV.10+8 ] [91])) 130 {*pa.md:4286}
     (nil))
(insn 56 54 181 9 (set (mem/c:DI (plus:DI (reg/f:DI 30 %r30)
                (const_int -144 [0xffffffffffffff70])) [2 %sfp+144 S8 A128])
        (const_int 0 [0])) 130 {*pa.md:4286}
     (nil))
(insn 181 56 57 9 (set (reg:DI 3 %r3)
        (const_int 1 [0x1])) 130 {*pa.md:4286}
     (nil))
(insn 57 181 182 9 (set (mem/c:DI (plus:DI (reg/f:DI 30 %r30)
                (const_int -136 [0xffffffffffffff78])) [2 %sfp+152 S8 A64])
        (reg:DI 3 %r3)) 130 {*pa.md:4286}
     (nil))
(insn 182 57 183 9 (set (reg:DI 3 %r3)
        (mem/c:DI (plus:DI (reg/f:DI 30 %r30)
                (const_int -144 [0xffffffffffffff70])) [2 %sfp+144 S8 A128]))
13
0 {*pa.md:4286}
     (nil))
(insn 183 182 59 9 (set (reg:DI 4 %r4 [orig:3+8 ] [3])
        (mem/c:DI (plus:DI (reg/f:DI 30 %r30)
                (const_int -136 [0xffffffffffffff78])) [2 %sfp+152 S8 A64]))
130
 {*pa.md:4286}
     (nil))
(insn 59 183 61 9 (set (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91])
        (plus:TI (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91])
            (reg:TI 3 %r3))) 181 {addti3}
     (nil))
(jump_insn 61 59 139 9 (set (pc)
        (if_then_else (gt (reg:DI 1 %r1 [ _20 ])
                (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129]))
            (label_ref:DI 163)
            (pc))) 54 {*pa.md:1479}
     (nil)

Things go bad in late_combine2:

(code_label 163 15 160 9 19 (nil) [2 uses])
(note 160 163 53 9 [bb 9] NOTE_INSN_BASIC_BLOCK)
(insn 53 160 54 9 (set (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129])
        (reg:DI 19 %r19 [ graphite_IV.10 ])) 130 {*pa.md:4286}
     (nil))
(insn 54 53 58 9 (set (reg:DI 31 %r31 [orig:130 graphite_IV.10+8 ] [130])
        (reg:DI 20 %r20 [orig:91 graphite_IV.10+8 ] [91])) 130 {*pa.md:4286}
     (nil))
(insn 58 54 56 9 (clobber (reg:TI 3 %r3 [111])) -1
     (nil))
(insn 56 58 181 9 (set (reg:DI 3 %r3)
        (const_int 0 [0])) 130 {*pa.md:4286}
     (nil))
(insn 181 56 59 9 (clobber (reg:TI 3 %r3 [111])) -1
     (nil))
(insn 59 181 61 9 (set (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91])
        (plus:TI (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91])
            (reg:TI 3 %r3 [111]))) 181 {addti3}
     (nil))
(jump_insn 61 59 139 9 (set (pc)
        (if_then_else (gt (reg:DI 1 %r1 [ _20 ])
                (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129]))
            (label_ref:DI 163)
            (pc))) 54 {*pa.md:1479}
     (nil)

(set (reg:DI 4 %r4 [orig:111+8 ] [111])
    (const_int 1 [0x1]))
original cost = 4 + 4, replacement cost = 4; keeping replacement
rescanning insn with uid = 178.
updating insn 178 in-place
verify found no changes in insn with uid = 178.
deleting insn 57
deleting insn with uid = 57.

trying to combine definition of r4 in:
  178: %r4:DI=0x1
      REG_UNUSED %r4:DI
into:
original cost = 4, replacement cost; keeping replacement
deleting insn 178
deleting insn with uid = 178.

late_combine2 fails to notice that insn 59 uses register r4.

Reply via email to