http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57963
Bug ID: 57963 Summary: LRA S/390: esa mode failure memcpy-chk Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: krebbel at gcc dot gnu.org memcpy-chk with -O2 fails if compiled with lra enabled. It succeeds with -mno-lra. With lra an insn storing into the literal pool is being emitted: ira: (insn 126 127 129 11 (parallel [ (set (reg/f:SI 60 [ D.1911 ]) (plus:SI (reg/v/f:SI 126 [ buf3 ]) (const_int 14 [0xe]))) (clobber (reg:CC 33 %cc)) ]) /build/gcc-head/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c:131 297 {*addsi3} (expr_list:REG_UNUSED (reg:CC 33 %cc) (expr_list:REG_EQUIV (const:SI (plus:SI (symbol_ref:SI ("buf1") [flags 0x400] <var_decl 0x7b97c9c0 buf1>) (const_int 14 [0xe]))) (nil)))) (insn 129 126 135 11 (set (reg/f:SI 261) (mem/u/c:SI (symbol_ref/u:SI ("*.LC69") [flags 0x2]) [3 S4 A32])) /build/gcc-head/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c:131 68 {*movsi_esa} (expr_list:REG_EQUIV (const:SI (plus:SI (symbol_ref:SI ("buf1") [flags 0x400] <var_decl 0x7b97c9c0 buf1>) (const_int 14 [0xe]))) (nil))) reload: 126: {r406:SI=r406:SI+0xe;clobber %cc:CC;} REG_UNUSED %cc:CC REG_EQUIV const(`buf1'+0xe) Inserting insn reload before: 829: r406:SI=r126:SI Inserting insn reload after: 830: r60:SI=r406:SI alt=1,overall=1,losers=0,rld_nregs=0 Choosing alt 1 in insn 830: (0) d (1) d {*movsi_esa} alt=1,overall=1,losers=0,rld_nregs=0 Choosing alt 1 in insn 829: (0) d (1) d {*movsi_esa} Removing equiv init insn 129 (freq=9944) 129: r261:SI=[`*.LC69'] REG_EQUIV const(`buf1'+0xe) deleting insn with uid = 129. Changing pseudo 60 in operand 0 of insn 830 on equiv [`*.LC69'] alt=1,overall=609,losers=1,rld_nregs=1 alt=2,overall=17,losers=2,rld_nregs=1 alt=3,overall=0,losers=0,rld_nregs=0 Choosing alt 3 in insn 830: (0) R (1) d {*movsi_esa} (insn 829 828 126 11 (set (reg/f:SI 7 %r7 [orig:60 D.1911 ] [60]) (reg/v/f:SI 2 %r2 [orig:126 buf3 ] [126])) /build/gcc-head/gcc/testsuite/gcc.c-torture/execute/ builtins/memcpy-chk.c:131 68 {*movsi_esa} (nil)) (insn 126 829 830 11 (parallel [ (set (reg/f:SI 7 %r7 [orig:60 D.1911 ] [60]) (plus:SI (reg/f:SI 7 %r7 [orig:60 D.1911 ] [60]) (const_int 14 [0xe]))) (clobber (reg:CC 33 %cc)) ]) /build/gcc-head/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c:131 297 {*addsi3} (expr_list:REG_EQUIV (const:SI (plus:SI (symbol_ref:SI ("buf1") [flags 0x400] <var_decl 0x7b97c9c 0 buf1>) (const_int 14 [0xe]))) (nil))) (insn 830 126 129 11 (set (mem/u/c:SI (symbol_ref/u:SI ("*.LC69") [flags 0x2]) [3 S4 A32]) (reg/f:SI 7 %r7 [orig:60 D.1911 ] [60])) /build/gcc-head/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c:131 68 {*movsi_esa} (expr_list:REG_DEAD (reg/f:SI 7 %r7 [orig:60 D.1911 ] [60]) (nil))) insn 830 writes to a literal pool slot. The testcase fails with a segfault due to this.