(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
ipa/
pr91089.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -fdump-ipa-cp-details -fdump-ipa-fnsummary-details --param ipa-max-switch-predicate-bounds=10 -fno-inline" } */
       3  
       4  int fn ();
       5  
       6  int data;
       7  
       8  int callee (int i)
       9  {
      10    switch (i % 128)
      11      {
      12        case -126:  return i + 13;
      13        case -127:  return i + 5;
      14        case -8:    return i * i;
      15        case 0:     return i % 9;
      16        case 5:
      17        case 7:
      18        case 6:     return 3;
      19        default:
      20  	fn ();
      21  	fn ();
      22  	fn ();
      23  	fn ();
      24  	fn ();
      25  	fn ();
      26  	fn ();
      27  	fn ();
      28  	fn ();
      29  	fn ();
      30  	fn ();
      31  	fn ();
      32  	fn ();
      33  	fn ();
      34  	fn ();
      35  	fn ();
      36  	fn ();
      37  	fn ();
      38  	fn ();
      39       }
      40  
      41    return data += i;
      42  }
      43  
      44  int fn2 ();
      45  
      46  int callee_complex_predicate (int i)
      47  {
      48    switch (i)
      49      {
      50        case 0:
      51  	fn ();
      52  	fn ();
      53  	fn ();
      54        case 1:
      55  	fn ();
      56  	fn ();
      57        case -1:
      58  	fn ();
      59        case -2:
      60  	fn ();
      61  	fn ();
      62  	fn ();
      63  	fn ();
      64  	fn ();
      65  	fn ();
      66  	fn ();
      67  	fn ();
      68  	fn ();
      69  	fn ();
      70  	fn ();
      71  	fn ();
      72  	fn ();
      73  	fn ();
      74  	fn ();
      75  	fn ();
      76  	data += i;
      77  	break;
      78      }
      79  
      80    if (i == 1000)
      81      {
      82        int j;
      83  
      84        for (j = 0; j < 100; j++)
      85  	fn2 ();
      86      }
      87    return i + 3;
      88  }
      89  
      90  int caller ()
      91  {
      92    return callee (-127) +
      93  	 callee (-126) +
      94  	 callee (-8) +
      95  	 callee (0) +
      96  	 callee (5) +
      97  	 callee (6) +
      98  	 callee (7) +
      99  	 callee (100);
     100  }
     101   
     102  /* { dg-final { scan-ipa-dump-times "Creating a specialized node of callee" 7 "cp" } } */
     103  /* { dg-final { scan-ipa-dump-not "op0,\\(# % 128\\) < -127" "fnsummary" } } */
     104  /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > -126" "fnsummary" } } */
     105  /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != -8"  "fnsummary" } } */
     106  /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != 0"   "fnsummary" } } */
     107  /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) < 5"    "fnsummary" } } */
     108  /* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > 7"    "fnsummary" } } */
     109  /* { dg-final { scan-ipa-dump "loop depth: 1 .+ time:\[ \]*\[0-9\]+ predicate: \\(op0 == 1000\\)\[\r\n]+" "fnsummary" } } */