add90(TYPE a[restrict N],TYPE b[restrict N],TYPE c[restrict N])1 void add90 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
2 {
3 for (int i=0; i < N; i+=2)
4 {
5 c[i] = a[i] - b[i+1];
6 c[i+1] = a[i+1] + b[i];
7 }
8 }
9
10 /* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
11
add270(TYPE a[restrict N],TYPE b[restrict N],TYPE c[restrict N])12 void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
13 {
14 for (int i=0; i < N; i+=2)
15 {
16 c[i] = a[i] + b[i+1];
17 c[i+1] = a[i+1] - b[i];
18 }
19 }
20
21 /* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
22
addMixed(TYPE a[restrict N],TYPE b[restrict N],TYPE c[restrict N])23 void addMixed (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
24 {
25 for (int i=0; i < N; i+=4)
26 {
27 c[i] = a[i] - b[i+1];
28 c[i+1] = a[i+1] + b[i];
29 c[i+2] = a[i+2] + b[i+3];
30 c[i+3] = a[i+3] - b[i+2];
31 }
32 }
33
add90HandUnrolled(TYPE a[restrict N],TYPE b[restrict N],TYPE c[restrict N])34 void add90HandUnrolled (TYPE a[restrict N], TYPE b[restrict N],
35 TYPE c[restrict N])
36 {
37 for (int i=0; i < (N /2); i+=4)
38 {
39 c[i] = a[i] - b[i+1];
40 c[i+2] = a[i+2] - b[i+3];
41 c[i+1] = a[i+1] + b[i];
42 c[i+3] = a[i+3] + b[i+2];
43 }
44 }
45
46 /* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
47
add90Hybrid(TYPE a[restrict N],TYPE b[restrict N],TYPE c[restrict N],TYPE d[restrict N])48 void add90Hybrid (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N],
49 TYPE d[restrict N])
50 {
51 for (int i=0; i < N; i+=2)
52 {
53 c[i] = a[i] - b[i+1];
54 c[i+1] = a[i+1] + b[i];
55 d[i] = a[i] - b[i];
56 d[i+1] = a[i+1] - b[i+1];
57 }
58 }
59
60 /* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */