1 
2 #ifndef FAUSTFLOAT
3 #define FAUSTFLOAT double
4 #endif
5 
6 #include "controlTools.h"
7 
main(int argc,char * argv[])8 int main(int argc, char* argv[])
9 {
10     int argc1 = argc - 2;
11  #ifdef WIN32
12     const char* argv1[50];
13 #else
14     const char* argv1[argc1];
15 #endif
16     bool is_vec = false;
17     for (int i = 0; i < argc - 2; i++) {
18         argv1[i] = argv[i + 2];
19         is_vec = is_vec || (strcmp(argv1[i], "-vec") == 0)
20                         || (strcmp(argv1[i], "-omp") == 0)
21                         || (strcmp(argv1[i], "-sch") == 0);
22     }
23 
24     llvm_dsp_factory* factory = nullptr;
25     int linenum = 0;
26     int nbsamples = 60000;
27 
28     bool inpl = isopt(argv, "-inpl");
29 
30     {
31         // Test factory generated from compilation
32         string error_msg;
33         factory = createDSPFactoryFromFile(argv[1], argc1, argv1, "", error_msg, 3);
34 
35         if (!factory) {
36             cerr << "ERROR in createDSPFactoryFromFile " << error_msg;
37             exit(-1);
38         }
39 
40         dsp* DSP = factory->createDSPInstance();
41         if (!DSP) {
42             cerr << "ERROR : createDSPInstance " << endl;
43             exit(-1);
44         }
45 
46         // print general informations
47         printHeader(DSP, nbsamples);
48 
49         runDSP1(factory, argv[1], linenum, nbsamples/4);
50         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
51         runPolyDSP1(factory, linenum, nbsamples/4, 4);
52         runPolyDSP1(factory, linenum, nbsamples/4, 1);
53 
54         // print general informations
55         printHeader(DSP, nbsamples);
56 
57         runDSP1(factory, argv[1], linenum, nbsamples/4, true);
58         runDSP1(factory, argv[1], linenum, nbsamples/4, true, false, true);
59         runPolyDSP1(factory, linenum, nbsamples/4, 4);
60         runPolyDSP1(factory, linenum, nbsamples/4, 1);
61 
62         /// 'inplace' only works in 'scalar' mode
63         if (!is_vec) {
64             // print general informations
65             printHeader(DSP, nbsamples);
66 
67             runDSP1(factory, argv[1], linenum, nbsamples/4, false, inpl);
68             runDSP1(factory, argv[1], linenum, nbsamples/4, false, inpl, true);
69             runPolyDSP1(factory, linenum, nbsamples/4, 4);
70             runPolyDSP1(factory, linenum, nbsamples/4, 1);
71         }
72     }
73 
74     {
75         string error_msg;
76         // Test writeDSPFactoryToBitcodeFile/readDSPFactoryFromBitcodeFile
77         stringstream str; str << "/var/tmp/llvm-factory" << factory << ".bc";
78         if (!writeDSPFactoryToBitcodeFile(factory, str.str())) {
79              cerr << "ERROR in writeDSPFactoryToBitcodeFile \n";
80         }
81         deleteDSPFactory(static_cast<llvm_dsp_factory*>(factory));
82         factory = readDSPFactoryFromBitcodeFile(str.str(), "", error_msg);
83 
84         if (!factory) {
85             cerr << "ERROR in readDSPFactoryFromBitcodeFile " << error_msg;
86             exit(-1);
87         }
88 
89         dsp* DSP = factory->createDSPInstance();
90         if (!DSP) {
91             cerr << "ERROR : createDSPInstance " << endl;
92             exit(-1);
93         }
94 
95         // print general informations
96         printHeader(DSP, nbsamples);
97 
98         runDSP1(factory, argv[1], linenum, nbsamples/4);
99         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
100         runPolyDSP1(factory, linenum, nbsamples/4, 4);
101         runPolyDSP1(factory, linenum, nbsamples/4, 1);
102     }
103 
104     {
105         string error_msg;
106         // Test writeDSPFactoryToBitcode/readDSPFactoryFromBitcode
107         string factory_str = writeDSPFactoryToBitcode(factory);
108         deleteDSPFactory(static_cast<llvm_dsp_factory*>(factory));
109         factory = readDSPFactoryFromBitcode(factory_str, "", error_msg);
110 
111         if (!factory) {
112             cerr << "ERROR in readDSPFactoryFromBitcode " << error_msg;
113             exit(-1);
114         }
115 
116         dsp* DSP = factory->createDSPInstance();
117         if (!DSP) {
118             cerr << "ERROR : createDSPInstance " << endl;
119             exit(-1);
120         }
121 
122         // print general informations
123         printHeader(DSP, nbsamples);
124 
125         runDSP1(factory, argv[1], linenum, nbsamples/4);
126         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
127         runPolyDSP1(factory, linenum, nbsamples/4, 4);
128         runPolyDSP1(factory, linenum, nbsamples/4, 1);
129     }
130 
131     {
132         string error_msg;
133         // Test writeDSPFactoryToIRFile/readDSPFactoryFromIRFile
134         stringstream str; str << "/var/tmp/llvm-factory" << factory << ".ll";
135         if (!writeDSPFactoryToIRFile(factory, str.str())) {
136             cerr << "ERROR in writeDSPFactoryToIRFile \n";
137         }
138         deleteDSPFactory(static_cast<llvm_dsp_factory*>(factory));
139         factory = readDSPFactoryFromIRFile(str.str(), "", error_msg);
140 
141         if (!factory) {
142             cerr << "ERROR in readDSPFactoryFromIRFile " << error_msg;
143             exit(-1);
144         }
145 
146         dsp* DSP = factory->createDSPInstance();
147         if (!DSP) {
148             cerr << "ERROR : createDSPInstance " << endl;
149             exit(-1);
150         }
151 
152         // print general informations
153         printHeader(DSP, nbsamples);
154 
155         runDSP1(factory, argv[1], linenum, nbsamples/4);
156         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
157         runPolyDSP1(factory, linenum, nbsamples/4, 4);
158         runPolyDSP1(factory, linenum, nbsamples/4, 1);
159     }
160 
161     {
162         string error_msg;
163         // Test writeDSPFactoryToIR/readDSPFactoryFromIR
164         string factory_str = writeDSPFactoryToIR(factory);
165         deleteDSPFactory(static_cast<llvm_dsp_factory*>(factory));
166         factory = readDSPFactoryFromIR(factory_str, "", error_msg);
167 
168         if (!factory) {
169             cerr << "ERROR in readDSPFactoryFromIRFile " << error_msg;
170             exit(-1);
171         }
172 
173         dsp* DSP = factory->createDSPInstance();
174         if (!DSP) {
175             cerr << "ERROR : createDSPInstance " << endl;
176             exit(-1);
177         }
178 
179         // print general informations
180         printHeader(DSP, nbsamples);
181 
182         runDSP1(factory, argv[1], linenum, nbsamples/4);
183         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
184         runPolyDSP1(factory, linenum, nbsamples/4, 4);
185         runPolyDSP1(factory, linenum, nbsamples/4, 1);
186     }
187 
188     {
189         string error_msg;
190         // Test writeDSPFactoryToMachineFile/readDSPFactoryFromMachineFile
191         string machine_file_name = "/var/tmp/" + string(argv[1]) + "-llvm-factory-machine";
192         if (!writeDSPFactoryToMachineFile(factory, machine_file_name, "")) {
193             cerr << "ERROR in writeDSPFactoryToMachineFile \n";
194         }
195         deleteDSPFactory(static_cast<llvm_dsp_factory*>(factory));
196         factory = readDSPFactoryFromMachineFile(machine_file_name, "", error_msg);
197 
198         if (!factory) {
199             cerr << "ERROR in readDSPFactoryFromMachineFile " << error_msg;
200             exit(-1);
201         }
202 
203         dsp* DSP = factory->createDSPInstance();
204         if (!DSP) {
205             cerr << "ERROR : createDSPInstance " << endl;
206             exit(-1);
207         }
208 
209         // print general informations
210         printHeader(DSP, nbsamples);
211 
212         runDSP1(factory, argv[1], linenum, nbsamples/4);
213         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
214         runPolyDSP1(factory, linenum, nbsamples/4, 4);
215         runPolyDSP1(factory, linenum, nbsamples/4, 1);
216     }
217 
218     {
219         string error_msg;
220         // Test writeDSPFactoryToMachine/readDSPFactoryFromMachine
221         string factory_str = writeDSPFactoryToMachine(factory, "");
222         deleteDSPFactory(static_cast<llvm_dsp_factory*>(factory));
223         factory = readDSPFactoryFromMachine(factory_str, "", error_msg);
224 
225         if (!factory) {
226             cerr << "ERROR in readDSPFactoryFromMachine " << error_msg;
227             exit(-1);
228         }
229 
230         dsp* DSP = factory->createDSPInstance();
231         if (!DSP) {
232             cerr << "ERROR : createDSPInstance " << endl;
233             exit(-1);
234         }
235 
236         // print general informations
237         printHeader(DSP, nbsamples);
238 
239         runDSP1(factory, argv[1], linenum, nbsamples/4);
240         runDSP1(factory, argv[1], linenum, nbsamples/4, false, false, true);
241         runPolyDSP1(factory, linenum, nbsamples/4, 4);
242         runPolyDSP1(factory, linenum, nbsamples/4, 1);
243     }
244 
245     return 0;
246 }
247