https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106343
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I should note that I noticed LLVM does not handle this either. Basically the following operators and values can be used: For integer: + 0 - 0 * 1 / 1 | 0 & -1 (all ones) ^ 0 For floating point (only with -ffast-math, I think sub can be used with 0 and add with -0.0 without but I am not 100% sure): + 0 - 0 * 1 / 1