pr52543
Kenneth Zadeck
zadeck@naturalbridge.com
Tue Mar 20 13:45:00 GMT 2012
i actually care about all registers, not just the hard ones. as it
turns out i had been wrong and lower-subregs splits pseudo to pseudo
moves, and hard reg to and from psuedo moves.
register_move_cost requires the regclasses.
anyway that is not the right thing to do for the shifts.
kenny
On 03/20/2012 09:40 AM, Ian Lance Taylor wrote:
> Kenneth Zadeck<zadeck@naturalbridge.com> writes:
>
>> I think that the question is really bigger than finding the correct
>> line to fix. The problem is, that this code assumes that machines do
>> not have multiword moves or multiword shifts. My machine has both,
>> and i assume that the avr and the neon have at least multiword moves
>> (but i do not know about the shifts). And as life moves forward,
>> more machines will have these.
>>
>> It seems like the right way to fix this is to somehow enhance the code
>> at the beginning of decompose_multiword_subregs to ask which modes are
>> not cheap to move or shift and then modify the second loop to never
>> lower for those operations for those modes.
>>
>> The question is do i add 2 more target hooks (one for shifting and one
>> for moves) or do i use the rtx_cost mechanism and split for anything
>> over COSTS_N_INSNS (1) or some such?
> Why not use REGISTER_MOVE_COST? You only care about hard registers, and
> all that matters are moves between hard registers and pseudo-regs. So
> if you find a hard register REG, and if
>
> register_move_cost (GET_MODE (reg), REGNO_REG_CLASS (REGNO (REG)),
> REGNO_REG_CLASS (REGNO (REG)))
> == 2
>
> then put the pseudo reg into non_decomposable_context. This would be in
> find_decomposable_subregs.
>
> Ian
More information about the Gcc
mailing list