> I can see why WORD_REGISTER_OPERATIONS allows some REG cases,
> but why does LOAD_EXTEND_OP have an effect on them?

LOAD_EXTEND_OP has an effect on all paradoxical SUBREGs because of spilling.  
This was even originally decoupled from WORD_REGISTER_OPERATIONS in reload, 
see this comment from find_reloads:

                         On machines that extend byte operations and we have a
                         SUBREG where both the inner and outer modes are no 
wider
                         than a word and the inner mode is narrower, is 
integral,
                         and gets extended when loaded from memory, combine.c 
has
                         made assumptions about the behavior of the machine in 
such
                         register access.  If the data is, in fact, in memory we
                         must always load using the size assumed to be in the
                         register and let the insn do the different-sized
                         accesses.

                         This is doubly true if WORD_REGISTER_OPERATIONS.  In
                         this case eliminate_regs has left non-paradoxical
                         subregs for push_reload to see.  Make sure it does
                         by forcing the reload.

> Ah well.  I guess I'm just glad that AArch64 doesn't define this :-)

Nothing even remotely approaching the complexity of the SVE stuff... ;-)

-- 
Eric Botcazou

Reply via email to