https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97417
--- Comment #37 from Kito Cheng <kito at gcc dot gnu.org> --- Maybe we could add a parameter to indicate the type of memory access, plain_mem, zext_mem or sext_mem for pass_shorten_memrefs::get_si_mem_base_reg. e.g. for (int i = 0; i < 2; i++) { rtx mem = XEXP (pat, i); rtx addr; mem_access_type_t type; if (get_si_mem_base_reg (mem, &addr, &type)) { HOST_WIDE_INT regno = REGNO (XEXP (addr, 0)); /* Do not transform store zero as these cannot be compressed. */ if (i == 0) { if (XEXP (pat, 1) == CONST0_RTX (GET_MODE (XEXP (pat, 1)))) continue; } if (m->get_or_insert (regno) > 3) { addr = targetm.legitimize_address (addr, addr, GET_MODE (mem)); switch (type) { case plain_mem: XEXP (pat, i) = replace_equiv_address (mem, addr); break; case zext_mem: ... break; case sext_mem: ... break; } df_insn_rescan (insn); } }