https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89502
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> --- rtx memory_address_addr_space (machine_mode mode, rtx x, addr_space_t as) { rtx oldx = x; scalar_int_mode address_mode = targetm.addr_space.address_mode (as); x = convert_memory_address_addr_space (address_mode, x, as); /* By passing constant addresses through registers we get a chance to cse them. */ if (! cse_not_expected && CONSTANT_P (x) && CONSTANT_ADDRESS_P (x)) x = force_reg (address_mode, x); cprop undoes it, which isn't enabled by O1. For x86, using register instead of a 32-bit constant usually is a performance loss. Shouldn't backend have a choice here?