2012/2/24 Georg-Johann Lay <a...@gjlay.de>:
> http://gcc.gnu.org/ml/gcc-patches/2012-02/msg00956.html
>
> Georg-Johann Lay wrote:
>> Spill failure PR52148 occurs for movmem insn that allocates 2 of AVR's 3
>> pointer registers. Register allocator is at it's limits and the patch tries 
>> to
>> cure the situation by replacing
>>
>> (match_operand:HI 0 "register_operand" "x")
>>
>> with explicit
>>
>> (reg:HI REG_X)
>>
>> and similar for Z Register classes "x" and "z" contain only one HI register.
>>
>> This PR and PR50925 show that register allocator has some problems.
>> Even though this patch is not a fix of the root cause, it allows the PR's 
>> test
>> case to compile.
>>
>> Anyways, the patch simplifies the backend and replaces an insn with 11(!)
>> operands with an insn with only 2 operands so that the patch is improvement 
>> of
>> the backend.
>>
>> The hard registers are already known at expand time so there is no need for
>> match_operands.
>>
>> Passes without regression.
>>
>> Ok for trunk?
>>
>> Johann
>>
>>       PR target/52148
>>       * config/avr/avr.md (movmem_<mode>): Replace match_operand that
>>       match only one single hard register with respective hard reg rtx.
>>       (movmemx_<mode>): Ditto.
>>       * config/avr/avr.c (avr_emit_movmemhi): Adapt expanding to new
>>       insn anatomy of movmem[x]_<mode>.
>>       (avr_out_movmem): Same for printing assembler and operand usage.


Approved.

Denis.

PS: I have not understood this patch from first look

Reply via email to