http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59652

--- Comment #6 from John David Anglin <danglin at gcc dot gnu.org> ---
The fundamental issue is how these insns are reloaded:

(insn 223 222 224 7 (set (reg/f:SI 2448)        (high:SI (symbol_ref:SI
("resource") [flags 0x200]  <var_decl 0x40579660
 resource>))) ../../../texk/xdvik/xdvi.c:2968 52 {*pa.md:2686}
     (expr_list:REG_EQUIV (high:SI (symbol_ref:SI ("resource") [flags 0x200] 
<v
ar_decl 0x40579660 resource>))
        (nil)))
(insn 224 223 226 7 (set (reg/f:SI 2442)
        (lo_sum:SI (reg/f:SI 2448)
            (symbol_ref:SI ("resource") [flags 0x200]  <var_decl 0x40579660
resource>))) ../../../texk/xdvik/xdvi.c:2968 55 {*pa.md:2766}
     (expr_list:REG_EQUIV (symbol_ref:SI ("resource") [flags 0x200]  <var_decl
0x40579660 resource>)
        (nil)))
(insn 226 224 227 7 (set (reg:SI 936 [ resource.unique+-3 ])
        (zero_extend:SI (mem/c:QI (plus:SI (reg/f:SI 2442)
                    (const_int 201 [0xc9])) [0 resource.unique+0 S1 A8])))
../../../texk/xdvik/xdvi.c:2968 84 {*pa.md:4628}
     (nil))

Insn 224 ends up being deleted.  I'm not sure why because reg/f:SI 2442
appears to be needed in insn 226 and later insns.  What happens is reload
does an input reload for insn 226, but gets in trouble later.

The best fix that I have at the moment is to inhibit generation of REG+D
instructions prior to reload.

Reply via email to