------- Comment #1 from segher at kernel dot crashing dot org 2008-02-23 19:51 ------- (In reply to comment #0) > The following rule is not handled by GCC > > (a & x) || (a & y) ===> a & (x | y)
Perhaps that is because those two expressions aren't equivalent? But, confirmed, assuming you meant to say that int bla(int a, int x, int y) { return (a & x) || (a & y); } isn't transformed to the equivalent of int blabla(int a, int x, int y) { return !!(a & (x | y)); } This _is_ handled for constant x, y though. Segher -- segher at kernel dot crashing dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |segher at kernel dot | |crashing dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35306