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.