(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
ipa/
ipcp-agg-12.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-cp-details --param=ipa-cp-eval-threshold=2"  } */
       3  
       4  struct S
       5  {
       6    int a, b, c;
       7  };
       8  
       9  int __attribute__((noinline)) foo (int i, struct S s);
      10  int __attribute__((noinline)) bar (int i, struct S s);
      11  int __attribute__((noinline)) baz (int i, struct S s);
      12  
      13  
      14  int __attribute__((noinline))
      15  bar (int i, struct S s)
      16  {
      17    return baz (i, s);
      18  }
      19  
      20  int __attribute__((noinline))
      21  baz (int i, struct S s)
      22  {
      23    return foo (i, s);
      24  }
      25  
      26  int __attribute__((noinline))
      27  foo (int i, struct S s)
      28  {
      29    if (i == 2)
      30      return 0;
      31    else
      32      return s.b * s.b + bar (i - 1, s);
      33  }
      34  
      35  volatile int g;
      36  
      37  void entry (void)
      38  {
      39    struct S s;
      40    s.b = 4;
      41    g = bar (g, s);
      42  }
      43  
      44  
      45  void entry2 (void)
      46  {
      47    struct S s;
      48    s.b = 6;
      49    g = baz (g, s);
      50  }
      51  
      52  
      53  /* { dg-final { scan-ipa-dump-times "adding an extra caller" 2 "cp" { xfail { hppa*-*-hpux* && { ! lp64 } } } } } */