------- Comment #2 from xinliangli at gmail dot com 2008-02-24 00:36 ------- (In reply to comment #1) > (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 >
Right --- missing context in bug report. (a&x) || (a&y) ==> (a&(x|y) != 0) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35306