/builds/2mk6rsew/0/parcoach/parcoach/src/aSSA/ExtInfo.cpp
Line | Count | Source |
1 | | #include "parcoach/ExtInfo.h" |
2 | | |
3 | | #include "Utils.h" |
4 | | |
5 | | #include "llvm/IR/Module.h" |
6 | | |
7 | | using namespace llvm; |
8 | | |
9 | | namespace parcoach { |
10 | | struct FuncModPair { |
11 | | char const *Name; |
12 | | const ExtInfo::ModInfo ModInfo; |
13 | | }; |
14 | | |
15 | | static const FuncModPair FuncModPairs[] = { |
16 | | // {"func_name", { <nb_params>, <retval_is_pointer>, { |
17 | | // <param_1_is_modified_pointer, ..., <param_n-1_is_modified_pointer> } } } |
18 | | |
19 | | // MILC HACK |
20 | | {"myrand", {1, false, {false}}}, |
21 | | {"cmul", {2, false, {true, false}}}, |
22 | | {"cadd", {2, false, {true, false}}}, |
23 | | {"csub", {2, false, {true, false}}}, |
24 | | {"__snprintf_chk", {4, false, {true, false, false, false}}}, |
25 | | {"__strncat_chk", {3, false, {false, false, false}}}, |
26 | | |
27 | | /* LLVM intrinsics */ |
28 | | {"llvm.bswap.v4i32", {1, false, {false}}}, |
29 | | {"llvm.bswap.i32", {1, false, {false}}}, |
30 | | {"llvm.fabs.f64", {1, false, {false}}}, |
31 | | {"llvm.fabs.v2f64", {1, false, {false}}}, |
32 | | {"llvm.fabs.f32", {1, false, {false}}}, |
33 | | {"llvm.fabs.f64", {1, false, {false}}}, |
34 | | {"llvm.lifetime.start", {2, false, {false, false}}}, |
35 | | {"llvm.lifetime.end", {2, false, {false, false}}}, |
36 | | {"llvm.lifetime.start.p0", {2, false, {false, false}}}, |
37 | | {"llvm.lifetime.end.p0", {2, false, {false, false}}}, |
38 | | {"llvm.memcpy.p0i8.p0i8.i32", |
39 | | {5, false, {true, false, false, false, false}}}, |
40 | | {"llvm.memcpy.p0i8.p0i8.i64", |
41 | | {5, false, {true, false, false, false, false}}}, |
42 | | {"llvm.memcpy.p0.p0.i64", {4, false, {true, false, false, false}}}, |
43 | | {"llvm.memmove.p0i8.p0i8.i32", |
44 | | {5, false, {true, true, false, false, false}}}, |
45 | | {"llvm.memmove.p0i8.p0i8.i64", |
46 | | {5, false, {true, true, false, false, false}}}, |
47 | | {"llvm.memmove.p0.p0.i64", {4, false, {true, true, false, false}}}, |
48 | | {"llvm.memset.p0i8.i32", {5, false, {true, false, false, false, false}}}, |
49 | | {"llvm.memset.p0i8.i64", {5, false, {true, false, false, false, false}}}, |
50 | | {"llvm.memset.p0.i64", {4, false, {true, false, false, false}}}, |
51 | | {"llvm.minnum.v2f64", {2, false, {false, false}}}, |
52 | | {"llvm.sqrt.f64", {1, false, {false}}}, |
53 | | {"llvm.stackrestore", {1, false, {false}}}, |
54 | | {"llvm.stacksave", {0, true, {}}}, |
55 | | {"llvm.trap", {0, false, {}}}, |
56 | | {"llvm.va_start", {1, false, {true}}}, |
57 | | {"llvm.va_end", {1, false, {true}}}, |
58 | | {"llvm.x86.sse2.mfence", {0, false, {}}}, |
59 | | {"llvm.prefetch", {4, false, {true, false, false, false}}}, |
60 | | |
61 | | /* libc */ |
62 | | {"abort", {0, false, {}}}, |
63 | | {"abs", {1, false, {false}}}, |
64 | | {"acos", {1, false, {false}}}, |
65 | | {"access", {2, false, {false, false}}}, |
66 | | {"asprintf", {3, false, {true, false, false}}}, |
67 | | {"atan", {1, false, {false}}}, |
68 | | {"atanf", {1, false, {false}}}, |
69 | | {"atan2", {2, false, {false, false}}}, |
70 | | {"atof", {1, false, {false}}}, |
71 | | {"atoi", {1, false, {false}}}, |
72 | | {"atol", {1, false, {false}}}, |
73 | | {"asctime", {1, true, {false}}}, |
74 | | {"calloc", {2, true, {false, false}}}, |
75 | | {"ceil", {1, false, {false}}}, |
76 | | {"clock", {0, false, {}}}, |
77 | | {"clock_gettime", {2, false, {false, true}}}, |
78 | | {"close", {1, false, {false}}}, |
79 | | {"ctime", {1, true, {false}}}, |
80 | | {"cos", {1, false, {false}}}, |
81 | | {"cosh", {1, false, {false}}}, |
82 | | {"erfc", {1, false, {false}}}, |
83 | | {"exit", {1, false, {false}}}, |
84 | | {"exp", {1, false, {false}}}, |
85 | | {"fabs", {1, false, {false}}}, |
86 | | {"fabsf", {1, false, {false}}}, |
87 | | {"cabs", {1, false, {false}}}, |
88 | | {"cabsf", {1, false, {false}}}, |
89 | | {"labs", {1, false, {false}}}, |
90 | | {"fclose", {1, false, {true}}}, |
91 | | {"feof", {1, false, {false}}}, |
92 | | {"fflush", {1, false, {false}}}, |
93 | | {"fgetc", {1, false, {false}}}, |
94 | | {"fgets", {3, true, {true, false, false}}}, |
95 | | {"fgetpos", {2, false, {false, true}}}, |
96 | | {"floor", {1, false, {false}}}, |
97 | | {"fmax", {2, false, {false, false}}}, |
98 | | {"fmin", {2, false, {false, false}}}, |
99 | | {"fopen", {2, true, {false, false}}}, |
100 | | {"fprintf", {3, false, {true, false, false}}}, |
101 | | {"fputc", {2, false, {false, true}}}, |
102 | | {"fputs", {2, false, {false, false}}}, |
103 | | {"fread", {4, false, {true, false, false, true}}}, |
104 | | {"free", {1, false, {true}}}, |
105 | | {"freopen", {3, true, {false, false, false}}}, |
106 | | {"fseeko", {3, false, {false, false, false}}}, |
107 | | {"fsetpos", {2, false, {false, false}}}, |
108 | | {"fsync", {1, false, {false}}}, |
109 | | {"fwrite", {4, false, {false, false, false, true}}}, |
110 | | {"getchar", {0, false, {}}}, |
111 | | {"getenv", {1, true, {false}}}, |
112 | | {"gethostname", {2, false, {true, false}}}, |
113 | | {"getopt", {3, false, {false, false, false}}}, |
114 | | {"getopt_long", {5, false, {false, false, false, false, true}}}, |
115 | | {"getpagesize", {0, false, {}}}, |
116 | | {"getrusage", {2, false, {false, true}}}, |
117 | | {"gettimeofday", {2, false, {true, true}}}, |
118 | | {"gmtime", {1, true, {false}}}, |
119 | | {"hypot", {2, false, {false, false}}}, |
120 | | {"ldexp", {2, false, {false, false}}}, |
121 | | {"localtime", {1, true, {false}}}, |
122 | | {"log", {1, false, {false}}}, |
123 | | {"malloc", {1, true, {false}}}, |
124 | | {"memset", {3, true, {true, false, false}}}, |
125 | | {"memcpy", {3, true, {true, false, false}}}, |
126 | | {"memmove", {3, true, {true, false, false}}}, |
127 | | {"mkdir", {2, false, {false, false}}}, |
128 | | {"move_pages", {6, false, {false, false, false, false, true, false}}}, |
129 | | {"numa_num_configured_nodes", {0, false, {}}}, |
130 | | {"pow", {2, false, {false, false}}}, |
131 | | {"printf", {2, false, {false, false}}}, |
132 | | {"vfprintf", {3, false, {true, false, false}}}, |
133 | | {"putchar", {1, false, {false}}}, |
134 | | {"putenv", {1, false, {true}}}, |
135 | | {"puts", {1, false, {false}}}, |
136 | | {"qsort", {4, false, {true, false, false, false}}}, |
137 | | {"rand", {0, false, {}}}, |
138 | | {"random", {0, false, {}}}, |
139 | | {"read", {3, false, {false, true, false}}}, |
140 | | {"realloc", {2, true, {true, false}}}, |
141 | | {"realpath", {2, true, {false, true}}}, |
142 | | {"regcomp", {3, false, {true, false, false}}}, |
143 | | {"regexec", {5, false, {false, false, false, false, false}}}, |
144 | | {"regfree", {1, false, {true}}}, |
145 | | {"rewind", {1, false, {false}}}, |
146 | | {"signal", {2, false, {false}}}, |
147 | | {"sin", {1, false, {false}}}, |
148 | | {"sleep", {1, false, {false}}}, |
149 | | {"snprintf", {4, false, {true, false, false, false}}}, |
150 | | {"sprintf", {3, false, {true, false, false}}}, |
151 | | {"sqrt", {1, false, {false}}}, |
152 | | {"sqrtf", {1, false, {false}}}, |
153 | | {"srand", {1, false, {false}}}, |
154 | | {"srandom", {1, false, {false}}}, |
155 | | {"strcasecmp", {2, false, {false, false}}}, |
156 | | {"strcat", {2, true, {true, false}}}, |
157 | | {"strchr", {2, true, {false, false}}}, |
158 | | {"strcmp", {2, false, {false, false}}}, |
159 | | {"strcpy", {2, true, {true, false}}}, |
160 | | {"strcspn", {2, false, {false, false}}}, |
161 | | {"strftime", {4, false, {true, false, false, false}}}, |
162 | | {"strerror", {1, true, {false}}}, |
163 | | {"strlen", {1, false, {false}}}, |
164 | | {"strncasecmp", {3, false, {false, false, false}}}, |
165 | | {"strncat", {3, true, {true, false, false}}}, |
166 | | {"strncmp", {3, false, {false, false, false}}}, |
167 | | {"strncpy", {3, true, {true, false, false}}}, |
168 | | {"strpbrk", {2, true, {false, false}}}, |
169 | | {"strrchr", {2, true, {false, false}}}, |
170 | | {"strspn", {2, false, {false, false}}}, |
171 | | {"strstr", {2, true, {false, false}}}, |
172 | | {"strtod", {2, false, {false, true}}}, |
173 | | {"strtok", {2, true, {true, false}}}, |
174 | | {"strtol", {3, false, {false, true, false}}}, |
175 | | {"system", {1, false, {false}}}, |
176 | | {"tanh", {1, false, {false}}}, |
177 | | {"time", {1, false, {true}}}, |
178 | | {"tolower", {1, false, {false}}}, |
179 | | {"toupper", {1, false, {false}}}, |
180 | | {"uname", {1, false, {true}}}, |
181 | | {"ungetc", {2, false, {false, false}}}, |
182 | | {"unlink", {1, false, {false}}}, |
183 | | {"vsprintf", {3, false, {true, false, false}}}, |
184 | | {"write", {3, false, {false, false, false}}}, |
185 | | {"_IO_getc", {1, false, {false}}}, |
186 | | {"_IO_putc", {2, false, {false, false}}}, |
187 | | {"__assert_fail", {4, false, {false, false, false, false}}}, |
188 | | {"__ctype_b_loc", {0, true, {}}}, |
189 | | {"__errno_location", {0, true, {}}}, |
190 | | {"__isnan", {1, false, {false}}}, |
191 | | {"__isnanf", {1, false, {false}}}, |
192 | | {"__isoc99_fscanf", {3, false, {true, false, true}}}, |
193 | | {"__isoc99_scanf", {2, false, {false, true}}}, |
194 | | {"__isoc99_sscanf", {3, false, {false, false, true}}}, |
195 | | {"__log_finite", {1, false, {false}}}, |
196 | | {"__strdup", {1, true, {false}}}, |
197 | | {"perror", {4, false, {true, false, false, false}}}, |
198 | | |
199 | | {"fopen64", {2, true, {false, false}}}, |
200 | | {"freopen64", {3, true, {false, false, false}}}, |
201 | | {"fseeko64", {3, false, {false, false, false}}}, |
202 | | {"open64", {3, false, {false, false, false}}}, |
203 | | {"lseek64", {3, false, {false, false, false}}}, |
204 | | {"stat64", {2, false, {false, true}}}, |
205 | | {"statfs64", {2, false, {false, true}}}, |
206 | | /* PARCOACH tests */ |
207 | | /* we need a sample variable function which changes its last param */ |
208 | | /* FIXME: it's not clean, find a way to change that. */ |
209 | | {"parcoach_var_mod", {2, false, {false, true}}}, |
210 | | |
211 | | /* MPI */ |
212 | | {"MPI_Abort", {2, false, {false, false}}}, |
213 | | {"MPI_Address", {2, false, {false, true}}}, |
214 | | {"MPI_Allgather", |
215 | | {7, false, {false, false, false, true, false, false, false}}}, |
216 | | {"MPI_Allgatherv", |
217 | | {8, false, {false, false, false, true, false, false, false, false}}}, |
218 | | {"MPI_Allreduce", {6, false, {false, true, false, false, false, false}}}, |
219 | | {"MPI_Alltoall", |
220 | | {7, false, {false, false, false, true, false, false, true}}}, |
221 | | {"MPI_Alltoallv", |
222 | | {9, |
223 | | false, |
224 | | {false, false, false, false, true, false, false, false, false}}}, |
225 | | {"MPI_Alloc_mem", {3, false, {false, false, true}}}, |
226 | | {"MPI_Alltoallw", |
227 | | {9, |
228 | | false, |
229 | | {false, false, false, false, true, false, false, false, false}}}, |
230 | | {"MPI_Attr_get", {4, false, {false, false, true, true}}}, |
231 | | {"MPI_Barrier", {1, false, {false}}}, |
232 | | {"MPI_Bcast", {5, false, {true, false, false, false, false}}}, |
233 | | {"MPI_Bsend", {6, false, {false, false, false, false, false, false}}}, |
234 | | {"MPI_Bsend_init", |
235 | | {7, false, {false, false, false, false, false, false, false}}}, |
236 | | {"MPI_Buffer_attach", {2, false, {false, false}}}, |
237 | | {"MPI_Buffer_detach", {2, false, {true, false}}}, |
238 | | {"MPI_Comm_create", {3, false, {false, false, true}}}, |
239 | | {"MPI_Comm_dup", {2, false, {false, true}}}, |
240 | | {"MPI_Comm_free", {1, false, {true}}}, |
241 | | {"MPI_Comm_group", {2, false, {false, true}}}, |
242 | | {"MPI_Comm_group_incl", {4, false, {false, false, false, true}}}, |
243 | | {"MPI_Comm_rank", {2, false, {false, true}}}, |
244 | | {"MPI_Comm_size", {2, false, {false, true}}}, |
245 | | {"MPI_Comm_split", {4, false, {false, false, false, true}}}, |
246 | | {"MPI_Cart_create", {6, false, {false, false, false, false, false, false}}}, |
247 | | {"MPI_Cart_get", {5, false, {false, false, true, true, true}}}, |
248 | | {"MPI_Cart_shift", {5, false, {false, false, false, false, false}}}, |
249 | | {"MPI_Cart_coords", {4, false, {false, false, false, true}}}, |
250 | | {"MPI_Cart_sub", {3, false, {false, false, true}}}, |
251 | | {"MPI_Comm_create_group", {4, false, {false, false, false, true}}}, |
252 | | {"MPI_Comm_compare", {3, false, {false, false, true}}}, |
253 | | {"MPI_Errhandler_create", {2, false, {false, true}}}, |
254 | | {"MPI_Errhandler_set", {2, false, {false, false}}}, |
255 | | {"MPI_Error_string", {3, false, {false, true, true}}}, |
256 | | {"MPI_Exscan", {6, false, {false, true, false, false, false, false}}}, |
257 | | {"MPI_Get_version", {2, false, {true, true}}}, |
258 | | {"MPI_File_close", {1, false, {true}}}, |
259 | | {"MPI_File_delete", {2, false, {false, false}}}, |
260 | | {"MPI_File_get_info", {2, false, {false, true}}}, |
261 | | {"MPI_File_get_size", {2, false, {false, false}}}, |
262 | | {"MPI_File_open", {5, false, {false, false, false, false, true}}}, |
263 | | {"MPI_File_preallocate", {2, false, {false, false}}}, |
264 | | {"MPI_File_read", {5, false, {false, true, false, false, true}}}, |
265 | | {"MPI_File_read_all", {5, false, {false, true, false, false, true}}}, |
266 | | {"MPI_File_read_at", {6, false, {false, false, true, false, false, true}}}, |
267 | | {"MPI_File_read_at_all", |
268 | | {6, false, {false, false, true, false, false, true}}}, |
269 | | {"MPI_File_set_view", |
270 | | {6, false, {false, false, false, false, false, false}}}, |
271 | | {"MPI_File_seek", {3, false, {false, false, false}}}, |
272 | | {"MPI_File_write", {5, false, {false, false, false, false, true}}}, |
273 | | {"MPI_File_write_all", {5, false, {false, false, false, false, true}}}, |
274 | | {"MPI_File_write_at", |
275 | | {6, false, {false, false, false, false, false, true}}}, |
276 | | {"MPI_File_write_at_all", |
277 | | {6, false, {false, false, false, false, false, true}}}, |
278 | | {"MPI_Finalize", {0, false, {}}}, |
279 | | {"MPI_Free_mem", {1, false, {true}}}, |
280 | | {"MPI_Gather", |
281 | | {8, false, {false, false, false, true, false, false, false, false}}}, |
282 | | {"MPI_Gatherv", |
283 | | {10, |
284 | | false, |
285 | | {false, false, false, true, false, false, false, false, false, true}}}, |
286 | | {"MPI_Get_count", {3, false, {false, false, true}}}, |
287 | | {"MPI_Get_processor_name", {2, false, {true, true}}}, |
288 | | {"MPI_Group_free", {1, false, {true}}}, |
289 | | {"MPI_Group_incl", {4, false, {false, false, false, true}}}, |
290 | | {"MPI_Group_range_incl", {4, false, {false, false, false, true}}}, |
291 | | {"MPI_Get", |
292 | | {8, false, {true, false, false, false, false, false, false, false}}}, |
293 | | {"MPI_Group_excl", {4, false, {false, false, false, true}}}, |
294 | | {"MPI_Group_range_excl", {4, false, {false, false, false, true}}}, |
295 | | {"MPI_Iallgather", |
296 | | {8, false, {false, false, false, true, false, false, false, false}}}, |
297 | | {"MPI_Iallgatherv", |
298 | | {9, |
299 | | false, |
300 | | {false, false, false, true, false, false, false, false, false}}}, |
301 | | {"MPI_Iallreduce", |
302 | | {7, false, {false, true, false, false, false, false, false}}}, |
303 | | {"MPI_Ialltoall", |
304 | | {8, false, {false, false, false, true, false, false, true, false}}}, |
305 | | {"MPI_Ialltoallv", |
306 | | {10, |
307 | | false, |
308 | | {false, false, false, false, true, false, false, false, false, false}}}, |
309 | | {"MPI_Ibarrier", {2, false, {false, false}}}, |
310 | | {"MPI_Ibcast", {6, false, {true, false, false, false, false, false}}}, |
311 | | {"MPI_Ibsend", |
312 | | {7, false, {false, false, false, false, false, false, false}}}, |
313 | | {"MPI_Iexscan", |
314 | | {7, false, {false, true, false, false, false, false, false}}}, |
315 | | {"MPI_Igather", |
316 | | {9, |
317 | | false, |
318 | | {false, false, false, true, false, false, false, false, false}}}, |
319 | | {"MPI_Intercomm_create", |
320 | | {6, false, {false, false, false, false, false, true}}}, |
321 | | {"MPI_Info_create", {1, false, {true}}}, |
322 | | {"MPI_Info_get", {5, false, {false, false, false, true, true}}}, |
323 | | {"MPI_Info_get_nkeys", {2, false, {false, true}}}, |
324 | | {"MPI_Info_get_nthkey", {3, false, {false, false, true}}}, |
325 | | {"MPI_Info_set", {3, false, {true, false, false}}}, |
326 | | {"MPI_Init", {2, false, {false, false}}}, |
327 | | {"MPI_Init_thread", {4, false, {false, false, false, true}}}, |
328 | | {"MPI_Irsend", |
329 | | {7, false, {false, false, false, false, false, false, false}}}, |
330 | | {"MPI_Iscatter", |
331 | | {9, |
332 | | false, |
333 | | {false, false, false, true, false, false, false, false, false}}}, |
334 | | {"MPI_Iscan", {7, false, {false, true, false, false, false, false, false}}}, |
335 | | {"MPI_Iprobe", {5, false, {false, false, false, true, true}}}, |
336 | | {"MPI_Irecv", {7, false, {true, false, false, false, false, false, true}}}, |
337 | | {"MPI_Ireduce", |
338 | | {8, false, {false, true, false, false, false, false, false, false}}}, |
339 | | {"MPI_Isend", {7, false, {false, false, false, false, false, false, true}}}, |
340 | | {"MPI_Issend", |
341 | | {7, false, {false, false, false, false, false, false, true}}}, |
342 | | {"MPI_Op_create", {3, false, {false, false, true}}}, |
343 | | {"MPI_Op_free", {1, false, {true}}}, |
344 | | {"MPI_Probe", {4, false, {false, false, false, true}}}, |
345 | | {"MPI_Put", |
346 | | {8, false, {false, false, false, false, false, false, false, false}}}, |
347 | | {"MPI_Recv", {7, false, {true, false, false, false, false, false, true}}}, |
348 | | {"MPI_Reduce", |
349 | | {7, false, {false, true, false, false, false, false, false}}}, |
350 | | {"MPI_Reduce_scatter_block", |
351 | | {6, false, {false, true, false, false, false, false}}}, |
352 | | {"MPI_Reduce_scatter", |
353 | | {6, false, {false, true, false, false, false, false}}}, |
354 | | {"MPI_Rsend_init", |
355 | | {7, false, {false, false, false, false, false, false, false}}}, |
356 | | {"MPI_Request_free", {1, false, {false}}}, |
357 | | {"MPI_Recv_init", |
358 | | {7, false, {false, false, false, false, false, false, false}}}, |
359 | | {"MPI_Scan", {6, false, {false, true, false, false, false, false}}}, |
360 | | {"MPI_Scatter", |
361 | | {8, false, {false, false, false, true, false, false, false, false}}}, |
362 | | {"MPI_Scatterv", |
363 | | {9, |
364 | | false, |
365 | | {false, false, false, false, true, false, false, false, false}}}, |
366 | | {"MPI_Send", {6, false, {false, false, false, false, false, false}}}, |
367 | | {"MPI_Sendrecv", |
368 | | {12, |
369 | | false, |
370 | | {false, false, false, false, false, true, false, false, false, false, |
371 | | false, true}}}, |
372 | | {"MPI_Ssend", {6, false, {false, false, false, false, false, false}}}, |
373 | | {"MPI_Startall", {2, false, {false, false}}}, |
374 | | {"MPI_Start", {1, false, {false}}}, |
375 | | {"MPI_Ssend_init", |
376 | | {7, false, {false, false, false, false, false, false, false}}}, |
377 | | {"MPI_Send_init", |
378 | | {7, false, {false, false, false, false, false, false, false}}}, |
379 | | {"MPI_Test", {3, false, {false, false, true}}}, |
380 | | {"MPI_Testall", {4, false, {false, false, true, true}}}, |
381 | | {"MPI_Type_create_subarray", |
382 | | {7, false, {false, false, false, false, false, false, true}}}, |
383 | | {"MPI_Type_commit", {1, false, {false}}}, |
384 | | {"MPI_Type_contiguous", {3, false, {false, false, true}}}, |
385 | | {"MPI_Type_free", {1, false, {true}}}, |
386 | | {"MPI_Type_struct", {5, false, {false, false, false, false, true}}}, |
387 | | {"MPI_Type_vector", {5, false, {false, false, false, false, true}}}, |
388 | | {"MPI_Type_size", {2, false, {false, true}}}, |
389 | | {"MPI_Testany", {5, false, {false, false, false, false, false}}}, |
390 | | {"MPI_Testsome", {5, false, {false, false, true, true, true}}}, |
391 | | {"MPI_Win_fence", {2, false, {false, false}}}, |
392 | | {"MPI_Win_complete", {1, false, {false}}}, |
393 | | {"MPI_Win_post", {3, false, {false, false, false}}}, |
394 | | {"MPI_Win_wait", {1, false, {false}}}, |
395 | | {"MPI_Win_free", {1, false, {true}}}, |
396 | | {"MPI_Win_lock", {4, false, {false, false, false, false}}}, |
397 | | {"MPI_Win_lock_all", {2, false, {false, false}}}, |
398 | | {"MPI_Win_unlock", {2, false, {false, false}}}, |
399 | | {"MPI_Win_unlock_all", {1, false, {false}}}, |
400 | | {"MPI_Win_flush", {2, false, {false, false}}}, |
401 | | {"MPI_Wait", {2, false, {true, true}}}, |
402 | | {"MPI_Waitall", {3, false, {false, true, true}}}, |
403 | | {"MPI_Waitany", {4, false, {false, false, true, true}}}, |
404 | | {"MPI_Waitsome", {5, false, {false, false, true, true, true}}}, |
405 | | {"MPI_Wtick", {0, false, {}}}, |
406 | | {"MPI_Wtime", {0, false, {}}}, |
407 | | {"MPI_Win_create", {6, false, {false, false, false, false, false, true}}}, |
408 | | {"MPI_Win_allocate", {6, false, {false, false, false, false, false, true}}}, |
409 | | {"MPI_Win_start", {3, false, {false, false, false}}}, |
410 | | |
411 | | /* OpenMP */ |
412 | | {"omp_get_num_threads", {0, false, {}}}, |
413 | | {"omp_get_thread_num", {0, false, {}}}, |
414 | | {"__kmpc_fork_call", {4, false, {false, false, false, false}}}, |
415 | | {"__kmpc_barrier", {2, false, {false, false}}}, |
416 | | {"__kmpc_single", {2, false, {false, false}}}, |
417 | | {"__kmpc_end_single", {2, false, {false, false}}}, |
418 | | {"__kmpc_for_static_init_4", |
419 | | {9, |
420 | | false, |
421 | | {false, false, false, false, false, false, false, false, false}}}, |
422 | | {"__kmpc_for_static_fini", {2, false, {false, false}}}, |
423 | | {"__kmpc_global_thread_num", {1, false, {false}}}, |
424 | | {"__kmpc_reduce_nowait", |
425 | | {7, false, {false, false, false, false, false, false, false}}}, |
426 | | {"__kmpc_end_reduce_nowait", {3, false, {false, false, false}}}, |
427 | | {"omp_get_max_threads", {0, false, {}}}, |
428 | | {"__kmpc_master", {2, false, {true, false}}}, |
429 | | {"__kmpc_end_master", {2, false, {true, false}}}, |
430 | | {"omp_get_wtime", {0, false, {}}}, |
431 | | {"__kmpc_dispatch_init_4", |
432 | | {7, false, {true, false, false, false, false, false, false}}}, |
433 | | {"__kmpc_dispatch_next_4", |
434 | | {6, false, {true, false, true, true, true, true}}}, |
435 | | {"__kmpc_critical", {3, false, {true, false, true}}}, |
436 | | {"__kmpc_end_critical", {3, false, {true, false, true}}}, |
437 | | |
438 | | /* UPC */ |
439 | | {"upcri_err", {4, false, {true, false, false, false}}}, |
440 | | {"upcri_stack_check", {4, false, {true, false, true, false}}}, |
441 | | {"gasneti_checkinit", {0, false, {}}}, |
442 | | {"_upcr_notify", {2, false, {false, false}}}, |
443 | | {"_upcr_wait", {2, false, {false, false}}}, |
444 | | {"_upcr_startup_pshalloc", {1, false, {true}}}, |
445 | | {"_upcr_all_alloc", {2, false, {false, false}}}, |
446 | | {"_upcr_free", {1, false, {false}}}, |
447 | | {"_upcr_memget_nb", {3, true, {true, false, false}}}, |
448 | | {"_upcr_waitsync", {1, false, {true}}}, |
449 | | {"gasnete_get_bulk", {4, false, {true, false, true, false}}}, |
450 | | {"gasnete_put_bulk", {4, false, {false, true, true, false}}}, |
451 | | {"gasneti_trace_setsourceline", {1, false, {true}}}, |
452 | | {"_upcri_checkvalid_pshared", {4, false, {false, false, true, false}}}, |
453 | | {"gasneti_stat_intval_accumulate", {2, false, {true, false}}}, |
454 | | {"gasneti_dynsprintf", |
455 | | {7, true, {true, false, false, false, false, false, false}}}, |
456 | | {"gasneti_trace_output", {3, false, {true, true, false}}}, |
457 | | {"gasneti_build_loc_str", {3, false, {false, false, false}}}, |
458 | | {"gasneti_fatalerror", {1, false, {true}}}, // may not be correct |
459 | | {"gasnete_get_nb_bulk", {4, true, {true, false, true, false}}}, |
460 | | {"gasnete_try_syncnb", {1, false, {false}}}, |
461 | | {"sched_yield", {0, false, {}}}, |
462 | | {"_gasneti_memcheck_one", {1, false, {true}}}, |
463 | | {"gasnetc_AMPoll", {0, false, {}}}, |
464 | | {"gasneti_vis_progressfn", {0, false, {}}}, |
465 | | {"_bupc_dump_shared", {3, false, {false, true, false}}}, |
466 | | {"_upcri_checkvalid_shared", {4, false, {false, false, true, false}}}, |
467 | | {"_gasneti_extern_free", {2, false, {true, true}}}, |
468 | | {"posix_memalign", {3, false, {true, false, false}}}, |
469 | | {"_upcr_alloc", {1, false, {false}}}, |
470 | | {"pthread_mutex_init", {2, false, {true, true}}}, |
471 | | {"upcr_global_exit", {1, false, {false}}}, |
472 | | {"pthread_mutex_destroy", {1, false, {true}}}, |
473 | | {"_upcr_memput_nb", {3, true, {true, false, false}}}, |
474 | | {"_bupc_waitsync_all", {2, false, {true, false}}}, |
475 | | {"_bupc_sem_alloc", {1, true, {false}}}, |
476 | | {"_bupc_sem_postN", {2, false, {true, false}}}, |
477 | | {"_upcr_all_reduceD", |
478 | | {8, false, {true, false, false, false, false, true, false, false}}}, |
479 | | {"_upcr_all_broadcast", {4, false, {true, false, false, false}}}, |
480 | | //{"", { , , {}} }, |
481 | | //{"", { , , {}} }, |
482 | | |
483 | | /* gsl */ |
484 | | {"gsl_integration_qag", |
485 | | {10, |
486 | | true, |
487 | | {false, false, false, false, false, false, false, true, true, true}}}, |
488 | | {"gsl_integration_workspace_alloc", {1, true, {false}}}, |
489 | | {"gsl_integration_workspace_free", {1, false, {true}}}, |
490 | | {"gsl_rng_alloc", {1, true, {false}}}, |
491 | | {"gsl_rng_set", {2, false, {false, false}}}, |
492 | | {"gsl_rng_size", {1, false, {false}}}, |
493 | | {"gsl_rng_state", {1, true, {false}}}, |
494 | | {"gsl_rng_uniform", {1, false, {false}}}, |
495 | | |
496 | | /* cblas */ |
497 | | {"cblas_idamax", {3, false, {false, false, false}}}, |
498 | | {"cblas_dgemv", |
499 | | {12, |
500 | | false, |
501 | | {false, false, false, false, false, false, false, false, false, false, |
502 | | true, false}}}, |
503 | | {"cblas_sscal", {4, false, {false, false, true, false}}}, |
504 | | {"cblas_dscal", {4, false, {false, false, true, false}}}, |
505 | | {"cblas_cscal", {4, false, {false, false, true, false}}}, |
506 | | {"cblas_zscal", {4, false, {false, false, true, false}}}, |
507 | | {"cblas_csscal", {4, false, {false, false, true, false}}}, |
508 | | {"cblas_zdscal", {4, false, {false, false, true, false}}}, |
509 | | {"cblas_saxpy", {6, false, {false, false, false, false, true, false}}}, |
510 | | {"cblas_daxpy", {6, false, {false, false, false, false, true, false}}}, |
511 | | {"cblas_caxpy", {6, false, {false, false, false, false, true, false}}}, |
512 | | {"cblas_zaxpy", {6, false, {false, false, false, false, true, false}}}, |
513 | | {"cblas_sger", |
514 | | {10, |
515 | | false, |
516 | | {false, false, false, false, false, false, false, false, true, false}}}, |
517 | | {"cblas_dger", |
518 | | {10, |
519 | | false, |
520 | | {false, false, false, false, false, false, false, false, true, false}}}, |
521 | | {"cblas_cgerc", |
522 | | {10, |
523 | | false, |
524 | | {false, false, false, false, false, false, false, false, true, false}}}, |
525 | | {"cblas_zgerc", |
526 | | {10, |
527 | | false, |
528 | | {false, false, false, false, false, false, false, false, true, false}}}, |
529 | | {"cblas_cgeru", |
530 | | {10, |
531 | | false, |
532 | | {false, false, false, false, false, false, false, false, true, false}}}, |
533 | | {"cblas_zgeru", |
534 | | {10, |
535 | | false, |
536 | | {false, false, false, false, false, false, false, false, true, false}}}, |
537 | | {"cblas_strsm", |
538 | | {12, |
539 | | false, |
540 | | {false, false, false, false, false, false, false, false, false, false, |
541 | | true, false}}}, |
542 | | {"cblas_dtrsm", |
543 | | {12, |
544 | | false, |
545 | | {false, false, false, false, false, false, false, false, false, false, |
546 | | true, false}}}, |
547 | | {"cblas_ctrsm", |
548 | | {12, |
549 | | false, |
550 | | {false, false, false, false, false, false, false, false, false, false, |
551 | | true, false}}}, |
552 | | {"cblas_ztrsm", |
553 | | {12, |
554 | | false, |
555 | | {false, false, false, false, false, false, false, false, false, false, |
556 | | true, false}}}, |
557 | | {"cblas_strsv", |
558 | | {9, |
559 | | false, |
560 | | {false, false, false, false, false, false, false, true, false}}}, |
561 | | {"cblas_dtrsv", |
562 | | {9, |
563 | | false, |
564 | | {false, false, false, false, false, false, false, true, false}}}, |
565 | | {"cblas_ctrsv", |
566 | | {9, |
567 | | false, |
568 | | {false, false, false, false, false, false, false, true, false}}}, |
569 | | {"cblas_ztrsv", |
570 | | {9, |
571 | | false, |
572 | | {false, false, false, false, false, false, false, true, false}}}, |
573 | | {"cblas_sgemm", |
574 | | {14, |
575 | | false, |
576 | | {false, false, false, false, false, false, false, false, false, false, |
577 | | false, false, true, false}}}, |
578 | | {"cblas_dgemm", |
579 | | {14, |
580 | | false, |
581 | | {false, false, false, false, false, false, false, false, false, false, |
582 | | false, false, true, false}}}, |
583 | | {"cblas_cgemm", |
584 | | {14, |
585 | | false, |
586 | | {false, false, false, false, false, false, false, false, false, false, |
587 | | false, false, true, false}}}, |
588 | | {"cblas_zgemm", |
589 | | {14, |
590 | | false, |
591 | | {false, false, false, false, false, false, false, false, false, false, |
592 | | false, false, true, false}}}, |
593 | | {"cblas_dcopy", {5, false, {false, false, false, false, true, false}}}, |
594 | | {"cblas_dasum", {3, false, {false, false, false}}}, |
595 | | {"cblas_dzasum", {3, false, {false, false, false}}}, |
596 | | {"cblas_sasum", {3, false, {false, false, false}}}, |
597 | | {"cblas_scasum", {3, false, {false, false, false}}}, |
598 | | {"cblas_dnrm2", {3, false, {false, false, false}}}, |
599 | | {"cblas_dznrm2", {3, false, {false, false, false}}}, |
600 | | {"cblas_scnrm2", {3, false, {false, false, false}}}, |
601 | | {"cblas_snrm2", {3, false, {false, false, false}}}, |
602 | | |
603 | | /* CUDA |
604 | | * see: http://llvm.org/docs/NVPTXUsage.html#llvm-nvvm-read-ptx-sreg |
605 | | */ |
606 | | { |
607 | | "llvm.nvvm.read.ptx.sreg.tid.x", |
608 | | {0, false, {}}, |
609 | | }, |
610 | | { |
611 | | "llvm.nvvm.read.ptx.sreg.tid.y", |
612 | | {0, false, {}}, |
613 | | }, |
614 | | { |
615 | | "llvm.nvvm.read.ptx.sreg.tid.z", |
616 | | {0, false, {}}, |
617 | | }, |
618 | | { |
619 | | "llvm.nvvm.read.ptx.sreg.ctaid.x", |
620 | | {0, false, {}}, |
621 | | }, |
622 | | { |
623 | | "llvm.nvvm.read.ptx.sreg.ctaid.y", |
624 | | {0, false, {}}, |
625 | | }, |
626 | | { |
627 | | "llvm.nvvm.read.ptx.sreg.ctaid.z", |
628 | | {0, false, {}}, |
629 | | }, |
630 | | { |
631 | | "llvm.nvvm.read.ptx.sreg.nctaid.x", |
632 | | {0, false, {}}, |
633 | | }, |
634 | | { |
635 | | "llvm.nvvm.read.ptx.sreg.nctaid.y", |
636 | | {0, false, {}}, |
637 | | }, |
638 | | { |
639 | | "llvm.nvvm.read.ptx.sreg.nctaid.z", |
640 | | {0, false, {}}, |
641 | | }, |
642 | | { |
643 | | "llvm.nvvm.read.ptx.sreg.ntid.x", |
644 | | {0, false, {}}, |
645 | | }, |
646 | | { |
647 | | "llvm.nvvm.read.ptx.sreg.ntid.y", |
648 | | {0, false, {}}, |
649 | | }, |
650 | | { |
651 | | "llvm.nvvm.read.ptx.sreg.ntid.z", |
652 | | {0, false, {}}, |
653 | | }, |
654 | | { |
655 | | "llvm.nvvm.read.ptx.sreg.warpsize", |
656 | | {0, false, {}}, |
657 | | }, |
658 | | { |
659 | | "llvm.nvvm.barrier0", |
660 | | {0, false, {}}, |
661 | | }, |
662 | | { |
663 | | "llvm.nvvm.fabs.ftz.f", |
664 | | {1, false, {false}}, |
665 | | }, |
666 | | { |
667 | | "llvm.nvvm.fabs.f", |
668 | | {1, false, {false}}, |
669 | | }, |
670 | | { |
671 | | "llvm.nvvm.fabs.d", |
672 | | {1, false, {false}}, |
673 | | }, |
674 | | { |
675 | | "llvm.nvvm.fmax.d", |
676 | | {2, false, {false, false}}, |
677 | | }, |
678 | | { |
679 | | "llvm.nvvm.fmax.ftz.f", |
680 | | {2, false, {false, false}}, |
681 | | }, |
682 | | { |
683 | | "llvm.nvvm.fmax.f", |
684 | | {2, false, {false, false}}, |
685 | | }, |
686 | | { |
687 | | "llvm.nvvm.min.ui", |
688 | | {2, false, {false, false}}, |
689 | | }, |
690 | | { |
691 | | "llvm.nvvm.min.i", |
692 | | {2, false, {false, false}}, |
693 | | }, |
694 | | { |
695 | | "llvm.nvvm.max.i", |
696 | | {2, false, {false, false}}, |
697 | | }, |
698 | | { |
699 | | "llvm.annotation.i1", |
700 | | {4, false, {false, true, true, false}}, |
701 | | }, |
702 | | { |
703 | | "llvm.nvvm.fmin.ftz.f", |
704 | | {2, false, {false, false}}, |
705 | | }, |
706 | | { |
707 | | "llvm.nvvm.fmin.f", |
708 | | {2, false, {false, false}}, |
709 | | }, |
710 | | { |
711 | | "llvm.nvvm.lg2.approx.ftz.f", |
712 | | {1, false, {false}}, |
713 | | }, |
714 | | { |
715 | | "llvm.nvvm.lg2.approx.f", |
716 | | {1, false, {false}}, |
717 | | }, |
718 | | { |
719 | | "llvm.nvvm.ex2.approx.ftz.f", |
720 | | {1, false, {false}}, |
721 | | }, |
722 | | { |
723 | | "llvm.nvvm.ex2.approx.f", |
724 | | {1, false, {false}}, |
725 | | }, |
726 | | { |
727 | | "llvm.nvvm.sqrt.f", |
728 | | {1, false, {false}}, |
729 | | }, |
730 | | { |
731 | | "llvm.nvvm.sqrt.rn.d", |
732 | | {1, false, {false}}, |
733 | | }, |
734 | | { |
735 | | "llvm.nvvm.rsqrt.approx.ftz.f", |
736 | | {1, false, {false}}, |
737 | | }, |
738 | | { |
739 | | "llvm.nvvm.rsqrt.approx.f", |
740 | | {1, false, {false}}, |
741 | | }, |
742 | | { |
743 | | "llvm.nvvm.floor.ftz.f", |
744 | | {1, false, {false}}, |
745 | | }, |
746 | | { |
747 | | "llvm.nvvm.floor.f", |
748 | | {1, false, {false}}, |
749 | | }, |
750 | | { |
751 | | "llvm.nvvm.mul24.i", |
752 | | {2, false, {false, false}}, |
753 | | }, |
754 | | { |
755 | | "llvm.nvvm.mul.rn.ftz.f", |
756 | | {2, false, {false, false}}, |
757 | | }, |
758 | | { |
759 | | "llvm.nvvm.mul.rn.f", |
760 | | {2, false, {false, false}}, |
761 | | }, |
762 | | { |
763 | | "llvm.nvvm.d2i.hi", |
764 | | {1, false, {false}}, |
765 | | }, |
766 | | { |
767 | | "llvm.nvvm.d2i.lo", |
768 | | {1, false, {false}}, |
769 | | }, |
770 | | { |
771 | | "llvm.nvvm.d2i.rn", |
772 | | {1, false, {false}}, |
773 | | }, |
774 | | { |
775 | | "llvm.nvvm.mul.rn.d", |
776 | | {2, false, {false, false}}, |
777 | | }, |
778 | | { |
779 | | "llvm.nvvm.add.rn.d", |
780 | | {2, false, {false, false}}, |
781 | | }, |
782 | | { |
783 | | "llvm.nvvm.add.rn.ftz.f", |
784 | | {2, false, {false, false}}, |
785 | | }, |
786 | | { |
787 | | "llvm.nvvm.add.rn.f", |
788 | | {2, false, {false, false}}, |
789 | | }, |
790 | | { |
791 | | "llvm.nvvm.fma.rn.d", |
792 | | {3, false, {false, false, false}}, |
793 | | }, |
794 | | { |
795 | | "llvm.nvvm.fma.rn.ftz.f", |
796 | | {3, false, {false, false, false}}, |
797 | | }, |
798 | | { |
799 | | "llvm.nvvm.fma.rn.f", |
800 | | {3, false, {false, false, false}}, |
801 | | }, |
802 | | { |
803 | | "llvm.nvvm.abs.i", |
804 | | {1, false, {false}}, |
805 | | }, |
806 | | { |
807 | | "llvm.nvvm.lohi.i2d", |
808 | | {2, false, {false, false}}, |
809 | | }, |
810 | | { |
811 | | "llvm.nvvm.clz.ll", |
812 | | {1, false, {false}}, |
813 | | }, |
814 | | { |
815 | | "llvm.nvvm.ceil.d", |
816 | | {1, false, {false}}, |
817 | | }, |
818 | | { |
819 | | "llvm.nvvm.trunc.ftz.f", |
820 | | {1, false, {false}}, |
821 | | }, |
822 | | { |
823 | | "llvm.nvvm.trunc.f", |
824 | | {1, false, {false}}, |
825 | | }, |
826 | | { |
827 | | "__nvvm_reflect", |
828 | | {1, false, {true}}, |
829 | | }, |
830 | | { |
831 | | "__assertfail", |
832 | | {5, false, {false, false, false, false, false}}, |
833 | | }, |
834 | | { |
835 | | "llvm.nvvm.atomic.load.add.f32.p0f32", |
836 | | {2, false, {true, false}}, |
837 | | }, |
838 | | { |
839 | | "llvm.nvvm.membar.cta", |
840 | | {0, false, {}}, |
841 | | }, |
842 | | { |
843 | | "llvm.nvvm.brev32", |
844 | | {1, false, {false}}, |
845 | | }, |
846 | | { |
847 | | "llvm.nvvm.clz.i", |
848 | | {1, false, {false}}, |
849 | | }, |
850 | | { |
851 | | "llvm.nvvm.popc.i", |
852 | | {1, false, {false}}, |
853 | | }, |
854 | | |
855 | | /* Functions from NAS */ |
856 | | {"memset_pattern16", {3, false, {false, false, false}}}, |
857 | | {"\01_fopen", {2, true, {false, false}}}, |
858 | | {"initADCpar", {1, false, {true}}}, |
859 | | {"ParseParFile", {2, false, {true, true}}}, |
860 | | {"ShowADCPar", {1, false, {true}}}, |
861 | | {"GenerateADC", {1, false, {false}}}, |
862 | | {"NewAdcViewCntl", {2, true, {true, false}}}, |
863 | | {"PartitionCube", {1, false, {true}}}, |
864 | | {"ComputeGivenGroupbys", {1, false, {true}}}, |
865 | | {"CloseAdcView", {1, false, {true}}}, |
866 | | {"timer_stop", {1, false, {false}}}, |
867 | | {"timer_start", {1, false, {false}}}, |
868 | | {"timer_clear", {1, false, {false}}}, |
869 | | {"timer_read", {1, false, {false}}}, |
870 | | {"c_print_results", |
871 | | {20, false, {true, false, false, false, false, false, false, |
872 | | false, false, true, false, true, true, true, |
873 | | true, true, true, true, true, true}}}, |
874 | | |
875 | | /* Functions from Coral AMG */ |
876 | | {"\01_strtod", {2, false, {false, true}}}, |
877 | | {"sscanf", {3, false, {false, false, true}}}, |
878 | | {"llvm.objectsize.i64.p0i8", {2, false, {false, false}}}, |
879 | | {"__memcpy_chk", {3, false, {true, false, false}}}, |
880 | | {"\01_clock", {0, false, {}}}, |
881 | | {"__strncpy_chk", {3, true, {true, false, false}}}, |
882 | | {"__sprintf_chk", {3, false, {true, false, false}}}, |
883 | | {"llvm.pow.f64", {2, false, {false, false}}}, |
884 | | {"fscanf", {3, false, {false, false, true}}}, |
885 | | |
886 | | /* Functions from MPI-PHYLIP */ |
887 | | {"scanf", {2, false, {false, true}}}, |
888 | | {"putc", {2, false, {false, false}}}, |
889 | | {"getc", {1, false, {false}}}, |
890 | | {"islower", {1, false, {false}}}, |
891 | | {"isdigit", {1, false, {false}}}, |
892 | | {"isalpha", {1, false, {false}}}, |
893 | | {"\01_fputs", {2, false, {false, false}}}, |
894 | | {"\01_freopen", {3, true, {false, false, false}}}, |
895 | | {"__strcpy_chk", |
896 | | {3, false, {true, false, false}}}, // not sure for this one.. |
897 | | {"__memset_chk", |
898 | | {4, false, {true, false, false, false}}}, // not sure for this one.. |
899 | | {"uppercase", {1, false, {true}}}, |
900 | | {"isupper", {1, false, {true}}}, |
901 | | |
902 | | /* Functions from Gadget2 */ |
903 | | {"\01_fwrite", {4, false, {false, false, false, true}}}, |
904 | | {"\01_strerror", {1, true, {false}}}, |
905 | | {"\01_system", {1, false, {true}}}, |
906 | | {"__strcat_chk", {3, true, {true, true, false}}}, |
907 | | {"__error", {0, false, {}}}, |
908 | | {"__memmove_chk", {4, true, {true, true, false, false}}}, |
909 | | |
910 | | /* Functions from IOR */ |
911 | | {"\01_sleep", {1, false, {false}}}, |
912 | | {"\01_putenv", {1, false, {true}}}, |
913 | | {"statvfs", {2, false, {true, true}}}, |
914 | | {"\01_realpath$DARWIN_EXTSN", {2, true, {true, true}}}, |
915 | | {"\01_regcomp", {3, false, {true, true, false}}}, |
916 | | {"\01_open", {2, false, {true, false}}}, |
917 | | {"lseek", {3, false, {false, false, false}}}, |
918 | | {"\01_read", {3, false, {false, true, false}}}, |
919 | | {"\01_write", {3, false, {false, true, false}}}, |
920 | | {"\01_close", {1, false, {false}}}, |
921 | | {"isspace", {1, false, {false}}}, |
922 | | {"\01_getopt", {3, false, {false, true, true}}}, |
923 | | {"\01_fsync", {1, false, {false}}}, |
924 | | {"\01_stat$INODE64", {2, false, {true, true}}}, |
925 | | |
926 | | /* Functions from CoMD */ |
927 | | {"__assert_rtn", {4, false, {true, true, false, true}}}, |
928 | | |
929 | | /* Functions from miniAMR */ |
930 | | {"__exp10", {1, false, {false}}}, |
931 | | |
932 | | /* Functions from Hydro */ |
933 | | {"ComputeQEforRow", |
934 | | {12, |
935 | | false, |
936 | | {false, false, false, false, false, false, false, false, false, false, |
937 | | false, false}}}, |
938 | | |
939 | | /* Functions from HPL */ |
940 | | {"__vsprintf_chk", {5, false, {false, false, false, false, false}}}, |
941 | | |
942 | | /* LAPACKE */ |
943 | | {"LAPACKE_dlamch", {1, false, {false}}}, |
944 | | {"LAPACKE_clange", {6, false, {false, false, false, false, false, false}}}, |
945 | | {"LAPACKE_clascl_work", |
946 | | {10, |
947 | | false, |
948 | | {false, false, false, false, false, false, false, false, true, false}}}, |
949 | | {"LAPACKE_claset_work", |
950 | | {8, false, {false, false, false, false, false, false, true, false}}}, |
951 | | {"LAPACKE_dlange", {6, false, {false, false, false, false, false, false}}}, |
952 | | {"LAPACKE_dlascl_work", |
953 | | {10, |
954 | | false, |
955 | | {false, false, false, false, false, false, false, false, true, false}}}, |
956 | | {"LAPACKE_dlaset_work", |
957 | | {8, false, {false, false, false, false, false, false, true, false}}}, |
958 | | {"LAPACKE_slamch", {1, false, {false}}}, |
959 | | {"LAPACKE_slange", {6, false, {false, false, false, false, false, false}}}, |
960 | | {"LAPACKE_slascl_work", |
961 | | {10, |
962 | | false, |
963 | | {false, false, false, false, false, false, false, false, true, false}}}, |
964 | | {"LAPACKE_slaset_work", |
965 | | {8, false, {false, false, false, false, false, false, true, false}}}, |
966 | | {"LAPACKE_zlange", {6, false, {false, false, false, false, false, false}}}, |
967 | | {"LAPACKE_zlascl_work", |
968 | | {10, |
969 | | false, |
970 | | {false, false, false, false, false, false, false, false, true, false}}}, |
971 | | {"LAPACKE_zlaset_work", |
972 | | {8, false, {false, false, false, false, false, false, true, false}}}, |
973 | | |
974 | | {"__muldc3", {2, false, {false, false}}}, |
975 | | {"__mulsc3", {2, false, {false, false}}}, |
976 | | |
977 | | {NULL, {0, false, {}}}}; |
978 | | |
979 | | struct FuncDepPair { |
980 | | char const *Name; |
981 | | const ExtInfo::DepInfo DepInfo; |
982 | | }; |
983 | | |
984 | | // TODO |
985 | | #if 0 |
986 | | static const funcDepPair funcDepPairs[] = { |
987 | | /* LLVM intrinsics */ |
988 | | {"llvm.fabs.f64", {1, {}, {0}}}, |
989 | | {"llvm.fabs.v2f64", {1, {}, {0}}}, |
990 | | {"llvm.lifetime.end", {2, {}, {}}}, |
991 | | {"llvm.lifetime.start", {2, {}, {}}}, |
992 | | {"llvm.memcpy.p0i8.p0i8.i32", {5, {{0, {1, 2}}}, {}}}, |
993 | | {"llvm.memcpy.p0i8.p0i8.i64", {5, {{0, {1, 2}}}, {}}}, |
994 | | {"llvm.memmove.p0i8.p0i8.i32", {5, {{0, {1, 2}}, {1, {2}}}, {}}}, |
995 | | {"llvm.memmove.p0i8.p0i8.i64", {5, {{0, {1, 2}}, {1, {2}}}, {}}}, |
996 | | {"llvm.memset.p0i8.i32", {5, {{0, {1, 2}}}, {}}}, |
997 | | {"llvm.memset.p0i8.i64", {5, {{0, {1, 2}}}, {}}}, |
998 | | {"llvm.minnum.v2f64", {2, {}, {0, 1}}}, |
999 | | {"llvm.trap", {0, {}, {}}}, |
1000 | | |
1001 | | /* libc */ |
1002 | | {"abort", {0, {}, {}}}, |
1003 | | {"atof", {1, {}, {0}}}, |
1004 | | {"atoi", {1, {}, {0}}}, |
1005 | | {"calloc", {2, {}, {0, 1}}}, |
1006 | | {"ceil", {1, {}, {0}}}, |
1007 | | {"clock", {0, {}, {}}}, |
1008 | | {"clock_gettime", {2, {{1, {0}}}, {}}}, |
1009 | | {"cos", {1, {}, {0}}}, |
1010 | | {"erfc", {1, {}, {0}}}, |
1011 | | {"exit", {1, {}, {}}}, |
1012 | | {"exp", {1, {}, {0}}}, |
1013 | | {"fabs", {1, {}, {0}}}, |
1014 | | {"fabsf", {1, {}, {0}}}, |
1015 | | {"fclose", {1, {}, {}}}, |
1016 | | {"feof", {1, {}, {}}}, |
1017 | | {"fflush", {1, {}, {}}}, |
1018 | | {"fgets", {3, {{0, {1, 2}}}, {1, 2}}}, |
1019 | | {"floor", {1, {}, {0}}}, |
1020 | | {"fmax", {2, {}, {0, 1}}}, |
1021 | | {"fmin", {2, {}, {0, 1}}}, |
1022 | | {"fopen", {2, {}, {}}}, |
1023 | | {"fprintf", {3, {}, {}}}, |
1024 | | {"fputc", {2, {}, {}}}, |
1025 | | {"fread", {4, {{0, {1, 2, 3}}}, {}}}, |
1026 | | {"free", {1, {}, {}}}, |
1027 | | {"fwrite", {4, {{3, {0, 1, 2}}}, {}}}, |
1028 | | {"gethostname", {2, {{1, {0}}}, {}}}, |
1029 | | {"ldexp", {2, {}, {0, 1}}}, |
1030 | | {"log", {1, {}, {0}}}, |
1031 | | {"malloc", {1, {}, {}}}, |
1032 | | {"mkdir", {2, {}, {}}}, |
1033 | | {"move_pages", {6, {}, {}}}, |
1034 | | {"numa_num_configured_nodes", {0, {}, {}}}, |
1035 | | {"pow", {2, {}, {0, 1}}}, |
1036 | | {"printf", {2, {}, {}}}, |
1037 | | {"putchar", {1, {}, {}}}, |
1038 | | {"puts", {1, {}, {}}}, |
1039 | | {"qsort", {4, {}, {}}}, |
1040 | | {"realloc", {2, {{0, {0, 1}}}, {0, 1}}}, |
1041 | | {"sin", {1, {}, {0}}}, |
1042 | | {"sprintf", {3, {{0, {1, 2}}}, {}}}, |
1043 | | {"sqrt", {1, {}, {0}}}, |
1044 | | {"strcat", {2, {{0, {1}}}, {0, 1}}}, |
1045 | | {"strchr", {2, {}, {0, 1}}}, |
1046 | | {"strcmp", {2, {}, {0, 1}}}, |
1047 | | {"strcpy", {2, {}, {}}}, |
1048 | | {"strcspn", {2, {}, {0, 1}}}, |
1049 | | {"strerror", {1, {}, {}}}, |
1050 | | {"strlen", {1, {}, {0}}}, |
1051 | | {"strncmp", {3, {}, {0, 1, 2}}}, |
1052 | | {"strncpy", {3, {{0, {1, 2}}}, {1, 2}}}, |
1053 | | {"strspn", {2, {}, {0, 1}}}, |
1054 | | {"strtod", {2, {}, {0}}}, |
1055 | | {"strtol", {3, {}, {}}}, |
1056 | | {"system", {1, {}, {}}}, |
1057 | | {"unlink", {1, {}, {}}}, |
1058 | | {"__assert_fail", {4, {}, {}}}, |
1059 | | {"__errno_location", {0, {}, {}}}, |
1060 | | {"__isoc99_fscanf", {3, {{2, {0, 1}}}, {}}}, |
1061 | | {"__isoc99_scanf", {2, {{1, {0}}}, {}}}, |
1062 | | {"__isoc99_sscanf", {3, {{2, {0, 1}}}, {}}}, |
1063 | | |
1064 | | /* MPI */ |
1065 | | {"MPI_Abort", {2, {}, {}}}, |
1066 | | {"MPI_Address", {2, {}, {}}}, |
1067 | | {"MPI_Allgather", {7, {}, {}}}, |
1068 | | {"MPI_Allgatherv", {8, {}, {}}}, |
1069 | | {"MPI_Allreduce", {6, {}, {}}}, |
1070 | | {"MPI_Alltoall", {7, {}, {}}}, |
1071 | | {"MPI_Alltoallv", {9, {}, {}}}, |
1072 | | {"MPI_Barrier", {1, {}, {}}}, |
1073 | | {"MPI_Bcast", {5, {}, {}}}, |
1074 | | {"MPI_Comm_create", {3, {}, {}}}, |
1075 | | {"MPI_Comm_group", {2, {}, {}}}, |
1076 | | {"MPI_Comm_group_incl", {4, {}, {}}}, |
1077 | | {"MPI_Comm_rank", {2, {}, {}}}, |
1078 | | {"MPI_Comm_size", {2, {}, {}}}, |
1079 | | {"MPI_Finalize", {0, {}, {}}}, |
1080 | | {"MPI_Gather", {8, {}, {}}}, |
1081 | | {"MPI_Gatherv", {10, {}, {}}}, |
1082 | | {"MPI_Get_count", {3, {}, {}}}, |
1083 | | {"MPI_Group_free", {1, {}, {}}}, |
1084 | | {"MPI_Group_incl", {4, {}, {}}}, |
1085 | | {"MPI_Init", {2, {}, {}}}, |
1086 | | {"MPI_Iprobe", {5, {}, {}}}, |
1087 | | {"MPI_Irecv", {7, {}, {}}}, |
1088 | | {"MPI_Isend", {7, {}, {}}}, |
1089 | | {"MPI_Op_create", {3, {}, {}}}, |
1090 | | {"MPI_Op_free", {1, {}, {}}}, |
1091 | | {"MPI_Probe", {4, {}, {}}}, |
1092 | | {"MPI_Recv", {7, {}, {}}}, |
1093 | | {"MPI_Reduce", {7, {}, {}}}, |
1094 | | {"MPI_Scan", {6, {}, {}}}, |
1095 | | {"MPI_Scatter", {8, {}, {}}}, |
1096 | | {"MPI_Scatterv", {9, {}, {}}}, |
1097 | | {"MPI_Send", {6, {}, {}}}, |
1098 | | {"MPI_Sendrecv", {12, {}, {}}}, |
1099 | | {"MPI_Ssend", {6, {}, {}}}, |
1100 | | {"MPI_Test", {3, {}, {}}}, |
1101 | | {"MPI_Testall", {4, {}, {}}}, |
1102 | | {"MPI_Type_commit", {1, {}, {}}}, |
1103 | | {"MPI_Type_free", {1, {}, {}}}, |
1104 | | {"MPI_Type_struct", {5, {}, {}}}, |
1105 | | {"MPI_Wait", {2, {}, {}}}, |
1106 | | {"MPI_Waitall", {3, {}, {}}}, |
1107 | | {"MPI_Wtime", {0, {}, {}}}, |
1108 | | |
1109 | | /* OpenMP */ |
1110 | | {"omp_get_num_threads", {0, {}, {}}}, |
1111 | | {"omp_get_thread_num", {0, {}, {}}}, |
1112 | | {"__kmpc_fork_call", {4, {}, {}}}, |
1113 | | {"__kmpc_barrier", {2, {}, {}}}, |
1114 | | {"__kmpc_single", {2, {}, {}}}, |
1115 | | {"__kmpc_end_single", {2, {}, {}}}, |
1116 | | {"__kmpc_for_static_init_4", {9, {}, {}}}, |
1117 | | {"__kmpc_for_static_fini", {2, {}, {}}}, |
1118 | | |
1119 | | /* gsl */ |
1120 | | {"gsl_integration_qag", {10, {}, {}}}, |
1121 | | {"gsl_integration_workspace_alloc", {1, {}, {}}}, |
1122 | | {"gsl_integration_workspace_free", {1, {}, {}}}, |
1123 | | {"gsl_rng_alloc", {1, {}, {}}}, |
1124 | | {"gsl_rng_set", {2, {}, {}}}, |
1125 | | {"gsl_rng_size", {1, {}, {}}}, |
1126 | | {"gsl_rng_state", {1, {}, {}}}, |
1127 | | {"gsl_rng_uniform", {1, {}, {}}}, |
1128 | | |
1129 | | {NULL, {0, {}, {}}}}; |
1130 | | |
1131 | | const ExtInfo::DepInfo *ExtInfo::getExtDepInfo(const llvm::Function *F) const { |
1132 | | auto I = extDepInfoMap.find(F->getName()); |
1133 | | |
1134 | | if (I != extDepInfoMap.end()) |
1135 | | return I->second; |
1136 | | |
1137 | | return nullptr; |
1138 | | } |
1139 | | #endif |
1140 | | |
1141 | 1.76k | ExtInfo::ExtInfo(Module &M) { |
1142 | 990k | for (FuncModPair const *I = FuncModPairs; I->Name != nullptr; ++I) { |
1143 | 989k | ExtModInfoMap[I->Name] = &I->ModInfo; |
1144 | 989k | } |
1145 | | |
1146 | | // for (const funcDepPair *i = funcDepPairs; i->name; ++i) |
1147 | | // extDepInfoMap[i->name] = &i->depInfo; |
1148 | | |
1149 | 1.76k | SmallVector<StringRef> MissingInfo; |
1150 | 1.76k | MissingInfo.reserve(M.size()); |
1151 | 19.8k | for (Function &F : M) { |
1152 | 19.8k | if (!F.isDeclaration() || isIntrinsicDbgFunction(&F)) { |
1153 | 3.61k | continue; |
1154 | 3.61k | } |
1155 | | |
1156 | 16.2k | if (getExtModInfo(&F) == nullptr) { |
1157 | 2 | MissingInfo.emplace_back(F.getName()); |
1158 | 2 | } |
1159 | 16.2k | } |
1160 | 1.76k | if (!MissingInfo.empty()) { |
1161 | 1 | errs() << "Parcoach is missing some information about external functions: "; |
1162 | 1 | bool First = true; |
1163 | 2 | for (StringRef Name : MissingInfo) { |
1164 | 2 | if (!First) { |
1165 | 1 | errs() << ", "; |
1166 | 1 | } |
1167 | 2 | First = false; |
1168 | 2 | errs() << Name; |
1169 | 2 | } |
1170 | 1 | errs() << ".\n" |
1171 | 1 | << "The alias analyses may be innaccurate, you may want to add " |
1172 | 1 | << "these functions to ExtInfo.cpp.\n"; |
1173 | 1 | } |
1174 | 1.76k | } |
1175 | | |
1176 | 1.76k | ExtInfo::~ExtInfo() {} |
1177 | | |
1178 | 126k | ExtInfo::ModInfo const *ExtInfo::getExtModInfo(llvm::Function const *F) const { |
1179 | 126k | auto I = ExtModInfoMap.find(F->getName()); |
1180 | | |
1181 | 126k | if (I != ExtModInfoMap.end()) { |
1182 | 126k | return I->second; |
1183 | 126k | } |
1184 | | |
1185 | 4 | return nullptr; |
1186 | 126k | } |
1187 | | |
1188 | | AnalysisKey ExtInfoAnalysis::Key; |
1189 | | std::unique_ptr<ExtInfo> |
1190 | 1.76k | ExtInfoAnalysis::run(Module &M, ModuleAnalysisManager & /*unused*/) { |
1191 | 1.76k | TimeTraceScope TTS("parcoach::ExtInfo"); |
1192 | 1.76k | return std::make_unique<ExtInfo>(M); |
1193 | 1.76k | } |
1194 | | |
1195 | | } // namespace parcoach |