https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97532
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- memory_operand calls general_operand which for MEM does: /* Use the mem's mode, since it will be reloaded thus. LRA can generate move insn with invalid addresses which is made valid and efficiently calculated by LRA through further numerous transformations. */ if (lra_in_progress || memory_address_addr_space_p (GET_MODE (op), y, MEM_ADDR_SPACE (op))) return 1; So, during LRA it accepts anything, and at the end of LRA it ICEs because it isn't recognized. So, I think LRA needs to know somewhere what is the address operand of the MEM even inside of the bcst_mem_operand and know that it should fix it up.