OSDN Git Service

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