1 /* PR target/63661 */
2 /* { dg-do run } */
3 /* { dg-require-effective-target fpic } */
4 /* { dg-options "-mtune=nehalem -fPIC -O2" } */
5 
6 static void __attribute__((noinline,noclone,hot))
foo(double a,double q,double * ff,double * gx,int e,int ni)7 foo (double a, double q, double *ff, double *gx, int e, int ni)
8 {
9   union
10     {
11       double n;
12       unsigned long long o;
13     } punner;
14   double d;
15 
16   punner.n = q;
17    __builtin_printf("B: 0x%016llx ---- %g\n", punner.o, q);
18 
19   d = q - 5;
20   if(d < 0)
21     d = -d;
22   if (d > 0.1)
23     __builtin_abort();
24 }
25 
26 static int __attribute__((noinline,noclone,hot))
bar(int order,double q,double c[])27 bar (int order, double q, double c[])
28 {
29   int ni, nn, i, e;
30   double g2, x2, de, s, ratio, ff;
31 
32   nn = 0;
33   e = order & 1;
34   s = 0;
35   ratio = 0;
36   x2 = 0;
37   g2 = 0;
38 
39   if(q == 0.0)
40     return 0;
41 
42   if (order < 5)
43     {
44       ratio = 1.0 / q;
45       nn = order;
46     }
47 
48   ni = -nn;
49 
50   while(1)
51     {
52       de = ratio - g2 - x2;
53 
54       foo (0, q, &ff, &g2, e, ni);
55 
56       if((int)de == 0)
57         break;
58     }
59 
60   s += 2 * nn * c[nn];
61 
62   for (i = 0; i < 1; i++)
63     {
64       c[0] = nn;
65       for (; i < 10; i++)
66         c[i] = 0.0;
67       c[0] /= s;
68     }
69 
70   return 0;
71 }
72 
73 int
main()74 main ()
75 {
76   double c[1000];
77 
78   bar (1, 5.0, c);
79   return 0;
80 }
81