------- Comment #6 from jakub at gcc dot gnu dot org 2007-12-04 20:50 ------- It is the: /* Minimize the number of bits set in C1, i.e. C1 := C1 & ~C2. */ hi1 &= mhi; lo1 &= mlo; if ((hi1 & ~hi2) != hi1 || (lo1 & ~lo2) != lo1) return fold_build2 (BIT_IOR_EXPR, type, fold_build2 (BIT_AND_EXPR, type, TREE_OPERAND (arg0, 0), build_int_cst_wide (type, lo1 & ~lo2, hi1 & ~hi2)), arg1); optimization that fights against the new optimization. Guess a simple check if fold_build2 of the BIT_AND_EXPR has created again a BIT_AND_EXPR with the same first argument and second argument became the original constant should cure it, will test tomorrow.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34337