https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81741
--- Comment #2 from Patrick Pelissier <patrick.pelissier at gmail dot com> --- I can reproduce the behavior without __builtin_constant_p by removing it from the M_ASSUME macro : # define M_ASSUME(x) \ ( (x) ? \ (void) 0 : __builtin_unreachable()) It still generates the same instructions.