Mark Shinwell wrote:
> As you say, one unusual thing about this situation must be the fact
> that the reload register is getting chosen by the code in
> push_reload heralded by "If this is an input reload and the operand
> contains a register that dies in this insn and is used nowhere else,
> see if it is the right class to be used for this reload. Use it if so."
Not that unusual - this happens all the time.
> etc. I suspect it is the conjunction of this code and the behaviour of
> reload in choosing r9 for pseudo 4082 in insn 5314 above that causes the
> problem.
>
> I don't entirely follow your example below...
>
>> Still, assume a similar sequence
>>
>> insn 5301: (set (reg/f:SI 4082) (reg/f:SI 3275))
>>
>> insn 5291 (set (reg:DF 4078])
>> (unspec:DF (mem/s:DF (plus:SI (reg/f:SI 3275)
>> (reg:SI 3812)))
>> (reg:SI 3275)))
>> REG_DEAD 3275
>>
>> <some other insn where R9 is used for an input reload>
>>
>> insn 5314 (set (reg:DF 4096)
>> (mem/s:DF (plus:SI (reg/f:SI 4082) (reg:SI 4084))))
>>
>> Here, we wouldn't use R9 as reload register in 5291
>
> ...since here, as far as I understand it, the clause mentioned above
> in push_reload wouldn't select r9 to use as a reload register for
> 5291.
That, and the subsequent code won't use a reg that's also used in the
insn. However, ...
> My gut feeling is that this example will work as a consequence.
... note that I inserted <some other insn> which could conceivably use
R9 as an input reload, as the hard reg is dead. Where would we
invalidate previous information about R9? I assume it would be the loop
at the end of emit_reload_insns, specifically
/* First, clear out memory of what used to be in this
spill reg.
If consecutive registers are used, clear them all. */
for (k = 0; k < nr; k++)
{
CLEAR_HARD_REG_BIT (reg_reloaded_valid, i + k);
CLEAR_HARD_REG_BIT (reg_reloaded_call_part_clobbered,
i + k);
Why isn't this triggering?
> (Perhaps you're getting at the fact that the decision procedure leading
> us to choose r9 for pseudo 4082 in insn 5314 might be at fault instead?
No, that seems fine.
Bernd
--
This footer brought to you by insane German lawmakers.
Analog Devices GmbH Wilhelm-Wagenfeld-Str. 6 80807 Muenchen
Sitz der Gesellschaft Muenchen, Registergericht Muenchen HRB 40368
Geschaeftsfuehrer Thomas Wessel, William A. Martin, Margaret Seif