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.