annotate gcc/testsuite/gcc.dg/vect/vect-alias-check-12.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 #define N 87
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 #define M 7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 typedef signed char sc;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 typedef unsigned char uc;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 typedef signed short ss;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 typedef unsigned short us;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 typedef int si;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 typedef unsigned int ui;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 typedef signed long long sll;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 typedef unsigned long long ull;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 #define FOR_EACH_TYPE(M) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 M (sc) M (uc) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 M (ss) M (us) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 M (si) M (ui) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 M (sll) M (ull) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 M (float) M (double)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 #define TEST_VALUE1(I) ((I) * 5 / 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 #define TEST_VALUE2(I) ((I) * 11 / 5)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 #define ADD_TEST(TYPE) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 void __attribute__((noinline, noclone)) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 test_##TYPE (TYPE *restrict a, TYPE *restrict b, \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 int step) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 step = step & M; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 for (int i = 0; i < N; ++i) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 TYPE r1 = a[i * step + 0] += 1; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 a[i * step + 1] += 2; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 a[i * step + 2] += 4; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 a[i * step + 3] += 8; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 b[i] += r1; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 } \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 } \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 void __attribute__((noinline, noclone)) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 ref_##TYPE (TYPE *restrict a, TYPE *restrict b, \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 int step) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 for (unsigned short i = 0; i < N; ++i) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 TYPE r1 = a[i * step + 0] += 1; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 a[i * step + 1] += 2; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 a[i * step + 2] += 4; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 a[i * step + 3] += 8; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 b[i] += r1; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 asm volatile (""); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 } \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 #define DO_TEST(TYPE) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 for (int j = 0; j <= M; ++j) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 TYPE a1[N * M], a2[N * M], b1[N], b2[N]; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 for (int i = 0; i < N * M; ++i) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 a1[i] = a2[i] = TEST_VALUE1 (i); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 for (int i = 0; i < N; ++i) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 b1[i] = b2[i] = TEST_VALUE2 (i); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 test_##TYPE (a1, b1, j); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 ref_##TYPE (a2, b2, j); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 if (__builtin_memcmp (a1, a2, sizeof (a1)) != 0) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 __builtin_abort (); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 if (__builtin_memcmp (b1, b2, sizeof (b1)) != 0) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 __builtin_abort (); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 FOR_EACH_TYPE (ADD_TEST)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 main (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 FOR_EACH_TYPE (DO_TEST)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* is outside \[0, 2\)} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* is outside \[0, 3\)} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* is outside \[0, 4\)} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 /* { dg-final { scan-tree-dump {run-time check [^\n]* unsigned \([^*]*\) >= 4} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 2[)]* is outside \[0, 4\)} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 2[)]* is outside \[0, 6\)} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 2[)]* is outside \[0, 8\)} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 /* { dg-final { scan-tree-dump {run-time check [^\n]* unsigned \([^*]* \* 2[)]* >= 8} "vect" { target vect_int } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 4[)]* is outside \[0, 8\)} "vect" { target { vect_int || vect_float } }} } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 4[)]* is outside \[0, 12\)} "vect" { target { vect_int || vect_float } }} } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 4[)]* is outside \[0, 16\)} "vect" { target { vect_int || vect_float } }} } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 /* { dg-final { scan-tree-dump {run-time check [^\n]* unsigned \([^*]* \* 4[)]* >= 16} "vect" { target { vect_int || vect_float } }} } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 8[)]* is outside \[0, 16\)} "vect" { target vect_double } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 8[)]* is outside \[0, 24\)} "vect" { target vect_double } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 /* { dg-final { scan-tree-dump {no alias between [^\n]* when [^\n]* [_a-z][^ ]* \* 8[)]* is outside \[0, 32\)} "vect" { target vect_double } } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 /* { dg-final { scan-tree-dump {run-time check [^\n]* unsigned \([^*]* \* 8[)]* >= 32} "vect" { target vect_double } } } */