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

Reply via email to