http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47986
Summary: gcc.c-torture/execute/20040709-1.c fails with
non-delegitimized UNSPEC
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
On powerpc64-linux at -O3 -g -m64, this testcase has the following snippet in
150r.into_cfglayout. Note the duplicated debug_insns for p (and i).
========
(insn 39 38 40 2 (set (reg:DI 234)
(plus:DI (reg:DI 2 2)
(high:DI (const:DI (unspec:DI [
(symbol_ref/u:DI ("*.LC5") [flags 0x2])
] 49)))))
/home/alan/src/gcc-current/gcc/testsuite/gcc.c-torture/execute/20040709-1.c:90
517 {largetoc_high}
(nil))
(insn 40 39 41 2 (set (reg/v/f:DI 209 [ p ])
(mem/u/c:DI (lo_sum:DI (reg:DI 234)
(const:DI (unspec:DI [
(symbol_ref/u:DI ("*.LC5") [flags 0x2])
] 49))) [6 S8 A8]))
/home/alan/src/gcc-current/gcc/testsuite/gcc.c-torture/execute/20040709-1.c:90
405 {*movdi_internal64}
(expr_list:REG_EQUAL (const:DI (plus:DI (symbol_ref:DI ("sA") [flags 0x80]
<var_decl 0xf78492a0 sA>)
(const_int 1 [0x1])))
(nil)))
(debug_insn 41 40 42 2 (var_location:DI p (reg/v/f:DI 209 [ p ]))
/home/alan/src/gcc-current/gcc/testsuite/gcc.c-torture/execute/20040709-1.c:90
-1
(nil))
(debug_insn 42 41 43 2 (var_location:SI i (debug_expr:SI D#16))
/home/alan/src/gcc-current/gcc/testsuite/gcc.c-torture/execute/20040709-1.c:90
-1
(nil))
(debug_insn 43 42 44 2 (var_location:DI p (reg/v/f:DI 209 [ p ])) -1
(nil))
(debug_insn 44 43 45 2 (var_location:SI i (debug_expr:SI D#16)) -1
(nil))
========
In 151r.jump insn 39 and 40 are deleted (reg 209 is dead) and we are left with:
========
(debug_insn 505 38 504 2 (var_location:DI D#21 (plus:DI (reg:DI 2 2)
(high:DI (const:DI (unspec:DI [
(symbol_ref/u:DI ("*.LC5") [flags 0x2])
] 49))))) -1
(nil))
(debug_insn 504 505 43 2 (var_location:DI D#20 (mem/u/c:DI (lo_sum:DI
(debug_expr:DI D#21)
(const:DI (unspec:DI [
(symbol_ref/u:DI ("*.LC5") [flags 0x2])
] 49))) [6 S8 A8])) -1
(nil))
(debug_insn 43 504 44 2 (var_location:DI p (debug_expr:DI D#20)) -1
(nil))
(debug_insn 44 43 45 2 (var_location:SI i (debug_expr:SI D#16)) -1
(nil))
========
Note how one set of the debug_insns have also been removed, but we are left
with some garbage. dwarf2out tries to output debug info for p by substituting
the debug_exprs and we get something that rs6000_delegitimize_address can't
handle.
(mem/u/c:DI (lo_sum:DI (plus:DI (reg:DI 2 2)
(high:DI (const:DI (unspec:DI [
(symbol_ref/u:DI ("*.LC11") [flags 0x2])
] 49))))
(const:DI (unspec:DI [
(symbol_ref/u:DI ("*.LC11") [flags 0x2])
] 49))) [6 S8 A8])