https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118360
--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #2) > Zeroone*b could be expanded also as zeroone?b:0. Though that's only half of the story and would x = zeroone ? b : 0; c ^= x; instead of if (zeroone & 1) c ^= b; and similar for | and +. IMO the most straight forward, comprehensible and concise would be not to generate bad code to begin with.