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.