/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized-raw" } */
/* PR tree-optimization/115224 */

int f1(int a, int b)
{
        a = a ^ 1;
        int c = ~a;
        return c | (a ^ b);
        // ~((a ^ 1) & b) or (a ^ -2) | ~b
}
/* { dg-final { scan-tree-dump-times   "bit_xor_expr, "  1  "optimized" } } */
/* { dg-final { scan-tree-dump-times   "bit_ior_expr, "  1  "optimized" } } */
/* { dg-final { scan-tree-dump-times   "bit_not_expr, "  1  "optimized" } } */