Tejas Belagod wrote: > Therefore strict_memory_address_addr_space_P () thinks that > (mem:OI (reg sp)) is a valid target address and lets it pass as > a subreg and does not narrow the subreg into a narrower memref. > find_reloads_toplev () should have infact given > strict_memory_address_addr_space_P () > (mem:OI (plus:DI (reg sp) (const_int 16))) > which will be returned as false as base+offset is invalid for NEON > addressing modes and this will be reloaded into a narrower memref.
Huh. I would have expected the offsettable_memref_p check > - && (reg_equiv_address (regno) != 0 > - || (reg_equiv_mem (regno) != 0 > - && (! strict_memory_address_addr_space_p > - (GET_MODE (x), XEXP (reg_equiv_mem (regno), 0), > - MEM_ADDR_SPACE (reg_equiv_mem (regno))) > - || ! offsettable_memref_p (reg_equiv_mem (regno)) ^^^ here > - || num_not_at_initial_offset)))) to fail, which should cause find_reloads_subreg_address to get called. Why is that not happening for you? Bye, Ulrich -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE ulrich.weig...@de.ibm.com