https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103660
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Two more cases, this time with XOR (^): ``` int min7(int a, int b) { const int c = a < b; return (c * a) ^ ((1 - c) * b); } int min8(int a, int b) { const bool c = a < b; return (c * a) ^ (!c * b); } ``` Because `0 ^ a` is `a`. Should be easy to change the pattern to accept all 3 (XOR, IOR and PLUS) instead of just IOR.