annotate libgomp/testsuite/libgomp.c/scan-3.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* { dg-require-effective-target size32plus } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 extern void abort (void);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 float r = 1.0f, a[1024], b[1024];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 __attribute__((noipa)) void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 foo (float *a, float *b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 #pragma omp for reduction (inscan, *:r)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 for (int i = 0; i < 1024; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 r *= a[i];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 #pragma omp scan inclusive(r)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 b[i] = r;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 __attribute__((noipa)) float
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 bar (void)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 float s = -__builtin_inff ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 #pragma omp parallel for reduction (inscan, max:s)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 for (int i = 0; i < 1024; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 s = s > a[i] ? s : a[i];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 #pragma omp scan inclusive(s)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 b[i] = s;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 return s;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 int
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 main ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 float s = 1.0f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 for (int i = 0; i < 1024; ++i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 if (i < 80)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 a[i] = (i & 1) ? 0.25f : 0.5f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 else if (i < 200)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 a[i] = (i % 3) == 0 ? 2.0f : (i % 3) == 1 ? 4.0f : 1.0f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 else if (i < 280)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 a[i] = (i & 1) ? 0.25f : 0.5f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 else if (i < 380)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 a[i] = (i % 3) == 0 ? 2.0f : (i % 3) == 1 ? 4.0f : 1.0f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 switch (i % 6)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 case 0: a[i] = 0.25f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 case 1: a[i] = 2.0f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 case 2: a[i] = -1.0f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 case 3: a[i] = -4.0f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 case 4: a[i] = 0.5f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 case 5: a[i] = 1.0f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 default: a[i] = 0.0f; break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 b[i] = -19.0f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 asm ("" : "+g" (i));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 #pragma omp parallel
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 foo (a, b);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 if (r * 16384.0f != 0.125f)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 float m = -175.25f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 for (int i = 0; i < 1024; ++i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 s *= a[i];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 if (b[i] != s)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 a[i] = m - ((i % 3) == 1 ? 2.0f : (i % 3) == 2 ? 4.0f : 0.0f);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 b[i] = -231.75f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 m += 0.75f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 if (bar () != 592.0f)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 s = -__builtin_inff ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 for (int i = 0; i < 1024; ++i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 if (s < a[i])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 s = a[i];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 if (b[i] != s)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 return 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 }