https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91420
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Andrew Waterman from comment #4) > In -O2, the compiler materializes ("x" + INT_MIN) by loading that > symbol+offset into a register in one shot, whereas in -O0 it loads the > address of "x" into a register, then adds INT_MIN to that register. > The same phenomenon happens in the x86-64 -mcmodel=kernel case. Other targets use the linker to relax this in some form.