annotate gcc/testsuite/gcc.dg/vect/slp-19c.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-require-effective-target vect_int } */
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 #include <stdarg.h>
kono
parents:
diff changeset
4 #include "tree-vect.h"
kono
parents:
diff changeset
5
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
6 #if VECTOR_BITS > 128
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
7 #define N (VECTOR_BITS * 2 / 32)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
8 #else
111
kono
parents:
diff changeset
9 #define N 16
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
10 #endif
111
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 int
kono
parents:
diff changeset
13 main1 ()
kono
parents:
diff changeset
14 {
kono
parents:
diff changeset
15 unsigned int i;
kono
parents:
diff changeset
16 unsigned int out[N*8];
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
17 #if N == 16
111
kono
parents:
diff changeset
18 unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
19 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
20 unsigned int in[N * 8];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
21 for (unsigned int i = 0; i < N * 8; ++i)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
22 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
23 in[i] = i & 63;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
24 asm volatile ("" ::: "memory");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
25 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
26 #endif
111
kono
parents:
diff changeset
27 unsigned int ia[N*2], a0, a1, a2, a3;
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 /* The last stmt requires interleaving of not power of 2 size - not
kono
parents:
diff changeset
30 vectorizable. */
kono
parents:
diff changeset
31 for (i = 0; i < N/2; i++)
kono
parents:
diff changeset
32 {
kono
parents:
diff changeset
33 out[i*12] = in[i*12];
kono
parents:
diff changeset
34 out[i*12 + 1] = in[i*12 + 1];
kono
parents:
diff changeset
35 out[i*12 + 2] = in[i*12 + 2];
kono
parents:
diff changeset
36 out[i*12 + 3] = in[i*12 + 3];
kono
parents:
diff changeset
37 out[i*12 + 4] = in[i*12 + 4];
kono
parents:
diff changeset
38 out[i*12 + 5] = in[i*12 + 5];
kono
parents:
diff changeset
39 out[i*12 + 6] = in[i*12 + 6];
kono
parents:
diff changeset
40 out[i*12 + 7] = in[i*12 + 7];
kono
parents:
diff changeset
41 out[i*12 + 8] = in[i*12 + 8];
kono
parents:
diff changeset
42 out[i*12 + 9] = in[i*12 + 9];
kono
parents:
diff changeset
43 out[i*12 + 10] = in[i*12 + 10];
kono
parents:
diff changeset
44 out[i*12 + 11] = in[i*12 + 11];
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 ia[i] = in[i*12 + 7];
kono
parents:
diff changeset
47 }
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 /* check results: */
kono
parents:
diff changeset
50 for (i = 0; i < N/2; i++)
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 if (out[i*12] != in[i*12]
kono
parents:
diff changeset
53 || out[i*12 + 1] != in[i*12 + 1]
kono
parents:
diff changeset
54 || out[i*12 + 2] != in[i*12 + 2]
kono
parents:
diff changeset
55 || out[i*12 + 3] != in[i*12 + 3]
kono
parents:
diff changeset
56 || out[i*12 + 4] != in[i*12 + 4]
kono
parents:
diff changeset
57 || out[i*12 + 5] != in[i*12 + 5]
kono
parents:
diff changeset
58 || out[i*12 + 6] != in[i*12 + 6]
kono
parents:
diff changeset
59 || out[i*12 + 7] != in[i*12 + 7]
kono
parents:
diff changeset
60 || out[i*12 + 8] != in[i*12 + 8]
kono
parents:
diff changeset
61 || out[i*12 + 9] != in[i*12 + 9]
kono
parents:
diff changeset
62 || out[i*12 + 10] != in[i*12 + 10]
kono
parents:
diff changeset
63 || out[i*12 + 11] != in[i*12 + 11]
kono
parents:
diff changeset
64 || ia[i] != in[i*12 + 7])
kono
parents:
diff changeset
65 abort ();
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 /* Hybrid SLP with unrolling by 2. */
kono
parents:
diff changeset
69 for (i = 0; i < N; i++)
kono
parents:
diff changeset
70 {
kono
parents:
diff changeset
71 out[i*6] = in[i*6];
kono
parents:
diff changeset
72 out[i*6 + 1] = in[i*6 + 1];
kono
parents:
diff changeset
73 out[i*6 + 2] = in[i*6 + 2];
kono
parents:
diff changeset
74 out[i*6 + 3] = in[i*6 + 3];
kono
parents:
diff changeset
75 out[i*6 + 4] = in[i*6 + 4];
kono
parents:
diff changeset
76 out[i*6 + 5] = in[i*6 + 5];
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 ia[i] = i;
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 /* check results: */
kono
parents:
diff changeset
82 for (i = 0; i < N/2; i++)
kono
parents:
diff changeset
83 {
kono
parents:
diff changeset
84 if (out[i*6] != in[i*6]
kono
parents:
diff changeset
85 || out[i*6 + 1] != in[i*6 + 1]
kono
parents:
diff changeset
86 || out[i*6 + 2] != in[i*6 + 2]
kono
parents:
diff changeset
87 || out[i*6 + 3] != in[i*6 + 3]
kono
parents:
diff changeset
88 || out[i*6 + 4] != in[i*6 + 4]
kono
parents:
diff changeset
89 || out[i*6 + 5] != in[i*6 + 5]
kono
parents:
diff changeset
90 || ia[i] != i)
kono
parents:
diff changeset
91 abort ();
kono
parents:
diff changeset
92 }
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 return 0;
kono
parents:
diff changeset
95 }
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 int main (void)
kono
parents:
diff changeset
98 {
kono
parents:
diff changeset
99 check_vect ();
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 main1 ();
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 return 0;
kono
parents:
diff changeset
104 }
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
kono
parents:
diff changeset
107 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */