https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70628
--- Comment #6 from ktkachov at gcc dot gnu.org --- The ICE in cselib occurs when it calls gen_reg_rtx after reload, which is not allowed. This is through a call to simplify_unary_operation_1 on (zero_extend:DI (high:SI (symbol_ref/f:SI ("*.LC3") [flags 0x82] <var_decl 0x7ffff74eee10 *.LC3>))) and more specifically a call to convert_memory_address here: 1594 #if defined(POINTERS_EXTEND_UNSIGNED) 1595 /* As we do not know which address space the pointer is referring to, 1596 we can do this only if the target does not support different pointer 1597 or address modes depending on the address space. */ 1598 if (target_default_pointer_address_modes_p () 1599 && POINTERS_EXTEND_UNSIGNED > 0 1600 && mode == Pmode && GET_MODE (op) == ptr_mode 1601 && (CONSTANT_P (op) 1602 || (GET_CODE (op) == SUBREG 1603 && REG_P (SUBREG_REG (op)) 1604 && REG_POINTER (SUBREG_REG (op)) 1605 && GET_MODE (SUBREG_REG (op)) == Pmode)) 1606 && !targetm.have_ptr_extend ()) 1607 return convert_memory_address (Pmode, op); 1608 #endif