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.