(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
calleesave-sse.c
       1  /* { dg-do run } */
       2  /* { dg-options "-fno-omit-frame-pointer" } */
       3  /* { dg-require-effective-target alloca } */
       4  
       5  #define alloca __builtin_alloca
       6  extern void abort (void);
       7  
       8  __attribute__ ((noinline)) static double
       9  bar (double a, double b, double c, double d, char *h)
      10  {
      11    *h = 0;
      12    return a * b + b + c;
      13  }
      14  
      15  __attribute__ ((noinline)) static int
      16  boo (double a, double b, double c, double d)
      17  {
      18    return c * b + a + b;
      19  }
      20  
      21  __attribute__ ((noinline)) static double
      22  foo (double a, double b, double c, double d)
      23  {
      24   int aa = boo (b, c, d, a);
      25   return bar (a, b, c, d, (char *) alloca (aa))
      26  	+ bar (d, c, b, a, (char *) alloca (aa));
      27  }
      28  
      29  int main ()
      30  {
      31    double a = 2.0, b = 3.0, c = 4.0, d = 5.0;
      32    double r1, r2;
      33    int aa;
      34  
      35    aa = boo (b, c, d, a);
      36    r1 = bar (a, b, c, d, (char *) alloca (aa))
      37         + bar (d, c, b, a, (char *) alloca (aa));
      38    r2 = foo (a, b, c, d);
      39  
      40    if (r1 != r2)
      41      abort ();
      42    return 0;
      43  }
      44