Commit a5bfb13a by Michael Matz Committed by Michael Matz

re PR target/34930 (ICE in instantiate_virtual_regs_in_insn with vector splat load)

        PR target/34930
        * function.c (instantiate_virtual_regs_in_insn): Reload address
        before falling back to reloading the whole operand.

From-SVN: r132317
parent 4571259b
2008-02-14 Michael Matz <matz@suse.de>
PR target/34930
* function.c (instantiate_virtual_regs_in_insn): Reload address
before falling back to reloading the whole operand.
2008-02-14 Andreas Krebbel <krebbel1@de.ibm.com> 2008-02-14 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.c (s390_mainpool_start): Emit the pool * config/s390/s390.c (s390_mainpool_start): Emit the pool
......
...@@ -1468,6 +1468,20 @@ instantiate_virtual_regs_in_insn (rtx insn) ...@@ -1468,6 +1468,20 @@ instantiate_virtual_regs_in_insn (rtx insn)
start_sequence (); start_sequence ();
x = replace_equiv_address (x, addr); x = replace_equiv_address (x, addr);
/* It may happen that the address with the virtual reg
was valid (e.g. based on the virtual stack reg, which might
be acceptable to the predicates with all offsets), whereas
the address now isn't anymore, for instance when the address
is still offsetted, but the base reg isn't virtual-stack-reg
anymore. Below we would do a force_reg on the whole operand,
but this insn might actually only accept memory. Hence,
before doing that last resort, try to reload the address into
a register, so this operand stays a MEM. */
if (!safe_insn_predicate (insn_code, i, x))
{
addr = force_reg (GET_MODE (addr), addr);
x = replace_equiv_address (x, addr);
}
seq = get_insns (); seq = get_insns ();
end_sequence (); end_sequence ();
if (seq) if (seq)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment