https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94266

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
This looks latent somewhat.  The issue is manifold - first we end up
with &TARGET_MEM_REF [_1] where the TARGET_MEM_REF was not canonicalized
to a MEM_REF because

static tree
create_mem_ref_raw (tree type, tree alias_ptr_type, struct mem_address *addr,
                    bool verify)
...
  /* If possible use a plain MEM_REF instead of a TARGET_MEM_REF.
     ???  As IVOPTs does not follow restrictions to where the base
     pointer may point to create a MEM_REF only if we know that
     base is valid.  */
  if ((TREE_CODE (base) == ADDR_EXPR || TREE_CODE (base) == INTEGER_CST)

thus an SSA name base isn't wanted here.  That may be legacy.

The best action is probably to make forwprop not try to forward &TARGET_MEM_REF
since that's hardly a good idea and code in general isn't prepared to do that.
Will test a patch along that line.

Reply via email to