1 /* { dg-do run } */
2
3 /* float reductions. */
4
5 #include <stdlib.h>
6 #include "reduction.h"
7
8 #define ng 8
9 #define nw 4
10 #define vl 32
11
12 static void
13 test_reductions (void)
14 {
15 const int n = 10;
16 int i;
17 float array[n];
18
19 for (i = 0; i < n; i++)
20 array[i] = i+1;
21
22 /* Gang reductions. */
23 check_reduction_op (float, +, 0, array[i], num_gangs (ng), gang);
24 check_reduction_op (float, *, 1, array[i], num_gangs (ng), gang);
25
26 /* Worker reductions. */
27 check_reduction_op (float, +, 0, array[i], num_workers (nw), worker);
28 check_reduction_op (float, *, 1, array[i], num_workers (nw), worker);
29
30 /* Vector reductions. */
31 check_reduction_op (float, +, 0, array[i], vector_length (vl), vector);
32 check_reduction_op (float, *, 1, array[i], vector_length (vl), vector);
33
34 /* Combined reductions. */
35 check_reduction_op (float, +, 0, array[i], num_gangs (ng) num_workers (nw)
36 vector_length (vl), gang worker vector);
37 check_reduction_op (float, *, 1, array[i], num_gangs (ng) num_workers (nw)
38 vector_length (vl), gang worker vector);
39 }
40
41 static void
42 test_reductions_minmax (void)
43 {
44 const int n = 1000;
45 int i;
46 float array[n];
47
48 for (i = 0; i < n; i++)
49 array[i] = i;
50
51 /* Gang reductions. */
52 check_reduction_macro (float, min, n + 1, array[i], num_gangs (ng), gang);
53 check_reduction_macro (float, max, -1, array[i], num_gangs (ng), gang);
54
55 /* Worker reductions. */
56 check_reduction_macro (float, min, n + 1, array[i], num_workers (nw),
57 worker);
58 check_reduction_macro (float, max, -1, array[i], num_workers (nw), worker);
59
60 /* Vector reductions. */
61 check_reduction_macro (float, min, n + 1, array[i], vector_length (vl),
62 vector);
63 check_reduction_macro (float, max, -1, array[i], vector_length (vl), vector);
64
65 /* Combined reductions. */
66 check_reduction_macro (float, min, n + 1, array[i], num_gangs (ng)
67 num_workers (nw) vector_length (vl), gang worker
68 vector);
69 check_reduction_macro (float, max, -1, array[i], num_gangs (ng)
70 num_workers (nw)vector_length (vl), gang worker
71 vector);
72 }
73
74 int
75 main (void)
76 {
77 test_reductions ();
78 test_reductions_minmax ();
79 return 0;
80 }