OSDN Git Service

PR tree-optimization/40238
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vect / pr20122.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include "tree-vect.h"
5
6 short Kernshort[24] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
7 static void VecBug(short Kernel[8][24]) __attribute__((noinline));
8 static void VecBug2(short Kernel[8][24]) __attribute__((noinline));
9
10 /* Kernel may alias Kernshort - a global array.
11    Use versioning for aliasing.  */
12 static void VecBug(short Kernel[8][24])
13 {
14   int k,i;
15     for (k = 0; k<8; k++)
16         for (i = 0; i<24; i++)
17             Kernshort[i] = Kernel[k][i];
18 }
19
20 /* Vectorizable: Kernshort2 is local.  */
21 static void VecBug2(short Kernel[8][24])
22 {
23   int k,i;
24   short Kernshort2[24] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
25     for (k = 0; k<8; k++)
26         for (i = 0; i<24; i++)
27             Kernshort2[i] = Kernel[k][i];
28
29     for (k = 0; k<8; k++)
30         for (i = 0; i<24; i++)
31             if (Kernshort2[i] != Kernel[k][i])
32                 abort ();
33 }
34
35 int main (int argc, char **argv)
36 {
37     check_vect ();
38
39     short Kernel[8][24] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
40     int k,i;
41
42     for (k = 0; k<8; k++)
43         for (i = 0; i<24; i++)
44             Kernel[k][i] = 0;
45
46     VecBug(Kernel);
47     VecBug2(Kernel);
48
49     return 0;
50 }
51
52 /* The loops in VecBug and VecBug2 require versioning for alignment.
53    The loop in main is aligned.  */
54 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
55 /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
56 /* { dg-final { cleanup-tree-dump "vect" } } */