On 11/06/2015 04:08 AM, Bernd Schmidt wrote:
This one is a fix for something that could currently only affect c6x,
but I have code that exposes it on i386.

When optionally gathering operand info in regrename, we can overflow the
array in certain situations. This can occur when we have a situation
where a value is constructed in multiple small registers and then
accessed as a larger one (CDImode in the testcase I have). In that case
we enter the "superset" path, which fails the involved chains, but the
smaller pieces still all get seen by record_operand_use, and there may
be more of them than MAX_REGS_PER_ADDRESS.

The following fixes it. Bootstrapped and tested  with -frename-registers
enabled at -O1 on x86_64-linux. Ok?


Bernd

rr-fail-op.diff


        * regrename.c (record_operand_use): Keep track of failed operands
        and stop appending if we see any.
        * regrename.h (struct operand_rr_info): Add a failed field and shrink
        n_chains to short.
OK.

jeff

Reply via email to