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.

Reply via email to