https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117191
Bug ID: 117191 Summary: [avr][dse2][lra] wrong dead store elimination Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: testsuite-fail, wrong-code Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: denisc at gcc dot gnu.org Target Milestone: --- Target: avr Created attachment 59370 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59370&action=edit dse2 pass dump file Failed testcase: $ make -k check-gcc RUNTESTFLAGS="--target_board=atmega128-sim --tool_opts='-mlra' avr-torture.exp=lra-pr116550-2.c" [...] Running /mnt/d/gcc-avr-lra/gcc/testsuite/gcc.target/avr/torture/avr-torture.exp ... FAIL: gcc.target/avr/torture/lra-pr116550-2.c -O1 execution test === gcc Summary === # of expected passes 21 # of unexpected failures 1 /mnt/d/mk-avr-lra/gcc/xgcc version 15.0.0 20241016 (experimental) (GCC) [...] This test successfully passed without -mlra option, may be lra related: $ make -k check-gcc RUNTESTFLAGS="--target_board=atmega128-sim --tool_opts='-mno-lra' avr-torture.exp=lra-pr116550-2.c" [...] Running /mnt/d/gcc-avr-lra/gcc/testsuite/gcc.target/avr/torture/avr-torture.exp ... === gcc Summary === # of expected passes 22 /mnt/d/mk-avr-lra/gcc/xgcc version 15.0.0 20241016 (experimental) (GCC) [...] Testcase $ avr-gcc -da -O1 -S -dp -fverbose-asm -mmcu=atmega128 lra-pr116550-2.c dse2 pass made a wrong elimination of insn 554 (%sfp+13) insn 456 have a use of *(%sfp+13):QI probably scanning of it have to be like: **scanning insn=505 mem: (plus:HI (reg/f:HI 28 r28) (const_int 5 [0x5])) after canon_rtx address: (plus:HI (reg/f:HI 28 r28) (const_int 5 [0x5])) gid=1 offset=5 processing const load gid=1[5..6) removing from active insn=459 has store mems_found = 0, cannot_delete = true but it's **scanning insn=456 mem: (plus:HI (reg/f:HI 28 r28) (const_int 13 [0xd])) after canon_rtx address: (plus:HI (reg/f:HI 28 r28) (const_int 13 [0xd])) gid=1 offset=13 processing const load gid=1[13..14) mems_found = 0, cannot_delete = true Scanning of insn 456 doesn't have 'removing from active insn=554 has store' because of that insn 554 was removed but it have a store to *(%sfp+13) It's wrong because insn 456 have a use of *(%sfp+13)