https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110087
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Richard Biener from comment #2) > there? There's zero_one_valued_p we could use for both the > tested value and the value or-ed into. > > We already have > > /* ((x & 0x1) == 0) ? y : z <op> y -> (-(typeof(y))(x & 0x1) & z) <op> y */ > > and > > /* ((x & 0x1) == 0) ? z <op> y : y -> (-(typeof(y))(x & 0x1) & z) <op> y */ That is exactly what my patch does (I put it in PR 89263), I was going to submit this patch a couple of days ago but got side tracked with other fixes not to add the testcases to the patch and submit it.