summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/ipa/pr91089.c
blob: a54cbdf5390b20304cf805d1b21606c81d698459 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/* { dg-do compile } */
/* { dg-options "-O3 -fdump-ipa-cp-details -fdump-ipa-fnsummary-details --param ipa-max-switch-predicate-bounds=10 -fno-inline" } */

int fn ();

int data;

int callee (int i)
{
  switch (i % 128)
    {
      case -126:  return i + 13;
      case -127:  return i + 5;
      case -8:    return i * i;
      case 0:     return i % 9;
      case 5:
      case 7:
      case 6:     return 3;
      default:
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
     }

  return data += i;
}

int fn2 ();

int callee_complex_predicate (int i)
{
  switch (i)
    {
      case 0:
	fn ();
	fn ();
	fn ();
      case 1:
	fn ();
	fn ();
      case -1:
	fn ();
      case -2:
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	data += i;
	break;
    }

  if (i == 1000)
    {
      int j;

      for (j = 0; j < 100; j++)
	fn2 ();
    }
  return i + 3;
}

int caller ()
{
  return callee (-127) +
	 callee (-126) +
	 callee (-8) +
	 callee (0) +
	 callee (5) +
	 callee (6) +
	 callee (7) +
	 callee (100);
}
 
/* { dg-final { scan-ipa-dump-times "Creating a specialized node of callee" 7 "cp" } } */
/* { dg-final { scan-ipa-dump-not "op0,\\(# % 128\\) < -127" "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > -126" "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != -8"  "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != 0"   "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) < 5"    "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > 7"    "fnsummary" } } */
/* { dg-final { scan-ipa-dump "loop depth: 1 .+ time:\[ \]*\[0-9\]+ predicate: \\(op0 == 1000\\)\[\r\n]+" "fnsummary" } } */