111
|
1 /* { dg-require-effective-target vect_int } */
|
|
2
|
|
3 #include <stdarg.h>
|
|
4 #include "tree-vect.h"
|
|
5
|
|
6 #define N 16
|
|
7 #define DIFF 242
|
|
8
|
|
9 typedef struct {
|
|
10 unsigned char a;
|
|
11 unsigned char b;
|
|
12 unsigned char c;
|
|
13 unsigned char d;
|
|
14 } s;
|
|
15
|
|
16 unsigned char ub[N*2] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
|
|
17 unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
|
|
18
|
|
19 volatile int y = 0;
|
|
20
|
|
21 void
|
|
22 main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *arr)
|
|
23 {
|
|
24 int i;
|
|
25 unsigned char udiff = 2;
|
|
26 unsigned char umax = x;
|
|
27 unsigned char umin = x;
|
|
28 unsigned char ua1[N*2];
|
|
29 s *pIn = arr;
|
|
30 s out[N];
|
|
31
|
|
32 for (i = 0; i < N; i++) {
|
|
33 udiff += (unsigned char)(ub[i] - uc[i]);
|
|
34
|
|
35 ua1[2*i+1] = ub[2*i+1];
|
|
36 ua1[2*i] = ub[2*i];
|
|
37
|
|
38 out[i].d = pIn->d - 1;
|
|
39 out[i].b = pIn->b - 4;
|
|
40 out[i].c = pIn->c - 8;
|
|
41 out[i].a = pIn->a - 3;
|
|
42
|
|
43 pIn++;
|
|
44 }
|
|
45
|
|
46 for (i = 0; i < N; i++) {
|
|
47 if (ua1[2*i] != ub[2*i]
|
|
48 || ua1[2*i+1] != ub[2*i+1]
|
|
49 || out[i].a != arr[i].a - 3
|
|
50 || out[i].b != arr[i].b - 4
|
|
51 || out[i].c != arr[i].c - 8
|
|
52 || out[i].d != arr[i].d - 1)
|
|
53 abort();
|
|
54 }
|
|
55
|
|
56 /* check results: */
|
|
57 if (udiff != DIFF)
|
|
58 abort ();
|
|
59 }
|
|
60
|
|
61 int main (void)
|
|
62 {
|
|
63 int i;
|
|
64 s arr[N];
|
|
65
|
|
66 for (i = 0; i < N; i++)
|
|
67 {
|
|
68 arr[i].a = i + 9;
|
|
69 arr[i].b = i * 2 + 10;
|
|
70 arr[i].c = 17;
|
|
71 arr[i].d = i+34;
|
|
72 if (y) /* Avoid vectorization. */
|
|
73 abort ();
|
|
74 }
|
|
75 check_vect ();
|
|
76
|
|
77 main1 (100, 100, 1, arr);
|
|
78 main1 (0, 15, 0, arr);
|
|
79 return 0;
|
|
80 }
|
|
81
|
|
82 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && ilp32 } } } } */
|
|
83 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { xfail { vect_no_align && ilp32 } } } } */
|