https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58623

--- Comment #4 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> ---
(In reply to bin.cheng from comment #3)
> Patch sent at https://gcc.gnu.org/ml/gcc-patches/2014-11/msg02209.html
> On latest trunk, the patch generates below assembly for the example:
> 
>       .cpu generic+fp+simd
>       .file   "pr58623.c"
>       .text
>       .align  2
>       .global foo
>       .type   foo, %function
> foo:
>       adrp    x0, .LANCHOR0
>       add     x2, x0, :lo12:.LANCHOR0
>       ldr     x1, [x0, #:lo12:.LANCHOR0]
>       ldr     x0, [x2, 8]
>       add     w0, w1, w0
>       ret
>       .size   foo, .-foo
>       .align  2
>       .global bar
>       .type   bar, %function
> bar:
>       adrp    x1, .LANCHOR0
>       add     x1, x1, :lo12:.LANCHOR0
>       ldp     w2, w0, [x1, 16]
>       add     w0, w2, w0
>       ret
>       .size   bar, .-bar
>       .global d
>       .global c
>       .global b
>       .global a
>       .bss
>       .align  3
> .LANCHOR0 = . + 0
>       .type   a, %object
>       .size   a, 8
> a:
>       .zero   8
>       .type   b, %object
>       .size   b, 8
> b:
>       .zero   8
>       .type   c, %object
>       .size   c, 4
> c:
>       .zero   4
>       .type   d, %object
>       .size   d, 4
> d:
>       .zero   4
>       .ident  "GCC: (GNU) 5.0.0 20141118 (experimental)"
> 
> ldp opportunity in bar is captured, but not the one in foo.  Apparently,
> fwprop pass propagates the expression into memory reference, corrupting the
> pair opportunity.  This is another known issue for long time.

So I think we should take the fwprop issue as a separate bug and close this out
for 5.0 as the main work required to generate ldp / stp in the compiler is now
done.

Reply via email to