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))
f1(int x)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))
f2(int y)19 static int f2(int y)
20 {
21   return f1(y & 0x03);
22 }
23 
24 __attribute__((noinline))
f3(int z)25 static int f3(int z)
26 {
27   return f1(z & 0xc);
28 }
29 
30 extern int a;
31 extern int b;
32 
main(void)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" } } */
42