icc doesn't like -fomit-frame-pointer without -O
[libfirm] / ir / be / test / vadd_store.c
1 /************************************************************************
2  * Program:  vadd_store.c
3  * Function: Add 2 vectors (lying in memory) and store the result in
4  *           a another vector in memory.
5  *           Used as a test for the simd optimization.
6  * Author:   Andreas Schoesser
7  * Date:     2007-02-13
8  ************************************************************************/
9
10 #include <stdio.h>
11 #include <malloc.h>
12 #include <stdlib.h>
13
14 #if 0
15 void vadd_store(void)
16 {
17         /*Also possible: Local pointers instead of function parameters: */
18         //int *a = (int *) alloca(8), *b = (int *) alloca(8), *c = (int *) alloca(8);
19         int a[2], b[2], c[2];
20         int i;
21
22         printf("1. vload -> vadd -> vstore\n===================\n\n");
23
24         for(i = 0; i < 2; i++)
25         {
26                 a[i] = rand() % 10;
27                 b[i] = rand() % 10;
28         }
29
30
31 /*  Also possible: Local arrays, but may be optimized so that no pattern is found
32         int a[2], b[2], c[2];      */
33
34
35 /*  Version 1: Directly adding.  */
36
37         c[0] = a[0] + b[0];
38         c[1] = a[1] + b[1];
39
40
41
42 /*      Version 2: Adding of local variables
43
44         int a0, a1, b0, b1, c0, c1;
45
46         a0 = a[0];
47         a1 = a[1];
48         b0 = b[0];
49         b1 = b[1];
50
51         c0 = a0 + b0;
52         c1 = a1 + b1;
53
54         c[0] = c0;
55         c[1] = c1; */
56
57
58
59 /*  Version 3: Mixed adding of locals and pointers
60
61         int a0, b1, c0;
62
63         a0 = a[0];
64         b1 = b[1];
65
66         c0 = a0 + b[0];
67         c[1] = a[1] + b1;
68
69         c[0] = c0; */
70
71         for(i = 0; i < 2; i++)
72                 printf("%d + %d = %d\n", a[i], b[i], c[i]);
73         printf("\n");
74
75 }
76 #endif
77
78 #if 1
79 void vadd_loop(void)
80 {
81         /* Version 4: Manually unrolled loop  */
82
83         int i, j;
84         int d[5][5], e[5][5], f[5][5];
85
86         //printf("2. vload -> vadd -> vstore, multi dimensional array, in loop\n==========================================\n\n");
87
88         for(j = 0; j < 4; j++)
89                 for(i = 0; i < 2; i++)
90                 {
91                         e[j][i] = rand() % 10;
92                         f[j][i] = rand() % 10;
93                 }
94
95         for(j = 0; j < 4; j++)
96                 //for(i = 0; i < 2; i ++ )
97         {
98                 d[j][0] = e[j][0] + f[j][0];
99                 d[j][1] = e[j][1] + f[j][1];
100         }
101
102         for(j = 0; j < 4; j++)
103         {
104                 for(i = 0; i < 2; i++)
105                         printf("%d + %d = %d\n", e[j][i], f[j][i], d[j][i]);
106                 printf("\n");
107         }
108 }
109 #endif
110
111 int main()
112 {
113         srand(12345);
114
115         //vadd_store();
116         vadd_loop();
117
118         return 0;
119 }