https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93946
--- Comment #14 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to sandra from comment #13)
> Well, no. The problem is that the scheduler is moving
>
> ldw r2, 0(r4)
>
> ahead of
>
> stw zero, 0(r5)
>
> which is incorrect because the pointers in r4 and r5 are aliases.
Ah, so the scheduler needs to call anti_dependence (WAR).
> So at the point of call to true_dependence, I see:
>
> (gdb) frame 1
> #1 0x0000000001d1a108 in sched_analyze_2 (deps=0x7fffffffdd50,
> x=0x7ffff742cac8, insn=0x7ffff7315600)
> at /scratch/sandra/nios2-elf-fsf/src/gcc-mainline/gcc/sched-deps.c:2663
> 2663 if (true_dependence (pending_mem->element (),
> VOIDmode, t)
> (gdb) print debug_rtx(insn)
> (insn 17 10 18 2 (set (reg/i:SI 2 r2)
> (mem/j:SI (reg/v/f:SI 4 r4 [orig:47 bv ] [47]) [1 bv_3(D)->b.u.f+0
> S4 A32]))
> "/scratch/sandra/nios2-elf-fsf/src/gcc-mainline/gcc/testsuite/gcc.dg/torture/
> pr93946-1.c":18:1 5 {movsi_internal}
> (expr_list:REG_DEAD (reg/v/f:SI 4 r4 [orig:47 bv ] [47])
> (nil)))
> $3 = void
> (gdb) print debug_rtx(pending->insn())
> (insn 9 8 10 2 (set (mem/j:SI (reg/v/f:SI 5 r5 [orig:48 ptr ] [48]) [1
> MEM[(struct aa *)ptr_1(D)].a.u.i+0 S4 A32])
> (const_int 0 [0]))
> "/scratch/sandra/nios2-elf-fsf/src/gcc-mainline/gcc/testsuite/gcc.dg/torture/
> pr93946-1.c":15:12 5 {movsi_internal}
> (nil))
> $4 = void