111
|
1 #include <stdarg.h>
|
|
2 #include "tree-vect.h"
|
|
3
|
|
4 #define N 128
|
|
5
|
|
6 typedef struct {
|
|
7 unsigned short a;
|
|
8 unsigned short b;
|
|
9 unsigned short c;
|
|
10 } s;
|
|
11
|
|
12 #define A(I) (I)
|
|
13 #define B(I) ((I) * 2)
|
|
14 #define C(I) ((unsigned short) ~((I) ^ 0x18))
|
|
15
|
|
16 void __attribute__ ((noinline))
|
|
17 check1 (s *res)
|
|
18 {
|
|
19 int i;
|
|
20
|
|
21 for (i = 0; i < N; i++)
|
|
22 if (res[i].a != C (i)
|
|
23 || res[i].b != A (i)
|
|
24 || res[i].c != B (i))
|
|
25 abort ();
|
|
26 }
|
|
27
|
|
28 void __attribute__ ((noinline))
|
|
29 check2 (unsigned short *res)
|
|
30 {
|
|
31 int i;
|
|
32
|
|
33 for (i = 0; i < N; i++)
|
|
34 if (res[i] != (unsigned short) (A (i) + B (i) + C (i)))
|
|
35 abort ();
|
|
36 }
|
|
37
|
|
38 void __attribute__ ((noinline))
|
|
39 check3 (s *res)
|
|
40 {
|
|
41 int i;
|
|
42
|
|
43 for (i = 0; i < N; i++)
|
|
44 if (res[i].a != i
|
|
45 || res[i].b != i
|
|
46 || res[i].c != i)
|
|
47 abort ();
|
|
48 }
|
|
49
|
|
50 void __attribute__ ((noinline))
|
|
51 check4 (unsigned short *res)
|
|
52 {
|
|
53 int i;
|
|
54
|
|
55 for (i = 0; i < N; i++)
|
|
56 if (res[i] != (unsigned short) (A (i) + B (i)))
|
|
57 abort ();
|
|
58 }
|
|
59
|
|
60 void __attribute__ ((noinline))
|
|
61 main1 (s *arr)
|
|
62 {
|
|
63 int i;
|
|
64 s *ptr = arr;
|
|
65 s res1[N];
|
|
66 unsigned short res2[N];
|
|
67
|
|
68 for (i = 0; i < N; i++)
|
|
69 {
|
|
70 res1[i].a = arr[i].c;
|
|
71 res1[i].b = arr[i].a;
|
|
72 res1[i].c = arr[i].b;
|
|
73 }
|
|
74 check1 (res1);
|
|
75
|
|
76 for (i = 0; i < N; i++)
|
|
77 res2[i] = arr[i].a + arr[i].b + arr[i].c;
|
|
78 check2 (res2);
|
|
79
|
|
80 for (i = 0; i < N; i++)
|
|
81 {
|
|
82 res1[i].a = i;
|
|
83 res1[i].b = i;
|
|
84 res1[i].c = i;
|
|
85 }
|
|
86 check3 (res1);
|
|
87
|
|
88 for (i = 0; i < N; i++)
|
|
89 res2[i] = arr[i].a + arr[i].b;
|
|
90 check4 (res2);
|
|
91 }
|
|
92
|
|
93 int main (void)
|
|
94 {
|
|
95 int i;
|
|
96 s arr[N];
|
|
97
|
|
98 check_vect ();
|
|
99
|
|
100 for (i = 0; i < N; i++)
|
|
101 {
|
|
102 arr[i].a = A (i);
|
|
103 arr[i].b = B (i);
|
|
104 arr[i].c = C (i);
|
|
105 }
|
|
106 main1 (arr);
|
|
107
|
|
108 return 0;
|
|
109 }
|
|
110
|
|
111 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target vect_strided3 } } } */
|