https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42046
--- Comment #3 from Marc Glisse <glisse at gcc dot gnu.org> --- (a?b|1:b&~1) could also be turned into (b&~1)+(a!=0) or (b|1)-(a==0) (or with ^ instead of +-, or | instead of +, etc) but it is quite possible that none of those are a win.