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

bin.cheng <amker.cheng at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amker.cheng at gmail dot com

--- Comment #3 from bin.cheng <amker.cheng at gmail dot com> ---
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.

Reply via email to