1  /* x's mask should be meet(0xc, 0x3) == 0xf  */
       2  
       3  /* { dg-do compile } */
       4  /* { dg-options "-O2 -fno-early-inlining -fdump-ipa-cp -fdump-tree-optimized" } */
       5  
       6  extern int pass_test ();
       7  extern int fail_test ();
       8  
       9  __attribute__((noinline))
      10  static int f1(int x)
      11  {
      12    if ((x & ~0xf) == 0)
      13      return pass_test ();
      14    else
      15      return fail_test ();
      16  }
      17  
      18  __attribute__((noinline))
      19  static int f2(int y)
      20  {
      21    return f1(y & 0x03);
      22  }
      23  
      24  __attribute__((noinline))
      25  static int f3(int z)
      26  {
      27    return f1(z & 0xc);
      28  }
      29  
      30  extern int a;
      31  extern int b;
      32  
      33  int main(void)
      34  {
      35    int k = f2(a); 
      36    int l = f3(b);
      37    return k + l;
      38  }
      39  
      40  /* { dg-final { scan-ipa-dump "Adjusting mask for param 0 to 0xf" "cp" } } */
      41  /* { dg-final { scan-tree-dump-not "fail_test" "optimized" } } */