OSDN Git Service

f555dfc9d8d4ca45766aa4d86e4b3f8ed0f6be80
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vect / fast-math-bb-slp-call-2.c
1 #include "tree-vect.h"
2
3 extern long int lrint (double);
4 extern void abort (void);
5 long int a[64];
6 double b[64];
7
8 __attribute__((noinline, noclone)) void
9 f1 (void)
10 {
11   a[0] = lrint (b[0]) + 1;
12   a[1] = lrint (b[1]) + 2;
13   a[2] = lrint (b[2]) + 3;
14   a[3] = lrint (b[3]) + 4;
15   a[4] = lrint (b[4]) + 5;
16   a[5] = lrint (b[5]) + 6;
17   a[6] = lrint (b[6]) + 7;
18   a[7] = lrint (b[7]) + 8;
19 }
20
21 __attribute__((noinline, noclone)) void
22 f2 (void)
23 {
24   a[0] = lrint (b[0]);
25   a[1] = lrint (b[1]);
26   a[2] = lrint (b[2]);
27   a[3] = lrint (b[3]);
28   a[4] = lrint (b[4]);
29   a[5] = lrint (b[5]);
30   a[6] = lrint (b[6]);
31   a[7] = lrint (b[7]);
32 }
33
34 __attribute__((noinline, noclone)) int
35 main1 ()
36 {
37   int i;
38
39   for (i = 0; i < 8; i++)
40     {
41       asm ("");
42       b[i] = ((i & 1) ? -4 * i : 4 * i) + 0.25;
43     }
44   f1 ();
45   for (i = 0; i < 8; i++)
46     if (a[i] != ((i & 1) ? -4 * i : 4 * i) + 1 + i)
47       abort ();
48     else
49       a[i] = 131.25;
50   f2 ();
51   for (i = 0; i < 8; i++)
52     if (a[i] != ((i & 1) ? -4 * i : 4 * i))
53       abort ();
54   return 0;
55 }
56
57 int
58 main ()
59 {
60   check_vect ();
61   return main1 ();
62 }
63
64 /* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 2 "slp" { target vect_call_lrint } } } */
65 /* { dg-final { cleanup-tree-dump "slp" } } */