Kenneth Zadeck <zad...@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