https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117191
--- Comment #4 from denisc at gcc dot gnu.org --- (In reply to denisc from comment #0) > Created attachment 59370 [details] > 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) These conclusions were wrong because it's a local (inter basic blocks) algorythms. We have a problem in global DSE.