docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
libfunc_lifting.h
Go to the documentation of this file.
2
4
5namespace docc {
6namespace lifting {
7
9private:
10 sdfg::control_flow::State& visit_tasklet(
11 const llvm::BasicBlock* block, const llvm::CallBase* instruction, sdfg::control_flow::State& current_state
12 );
13
14 sdfg::control_flow::State& visit_math(
15 const llvm::BasicBlock* block, const llvm::CallBase* instruction, sdfg::control_flow::State& current_state
16 );
17
18 sdfg::control_flow::State& visit_calloc(
19 const llvm::BasicBlock* block, const llvm::CallBase* instruction, sdfg::control_flow::State& current_state
20 );
21
22 sdfg::control_flow::State& visit_free(
23 const llvm::BasicBlock* block, const llvm::CallBase* instruction, sdfg::control_flow::State& current_state
24 );
25
26 sdfg::control_flow::State& visit_malloc(
27 const llvm::BasicBlock* block, const llvm::CallBase* instruction, sdfg::control_flow::State& current_state
28 );
29
30 static bool is_tasklet(llvm::Intrinsic::ID iid) {
31 switch (iid) {
32 case llvm::LibFunc_abs:
33 case llvm::LibFunc_labs:
34 case llvm::LibFunc_llabs:
35 return true;
36 default:
37 return false;
38 }
39 }
40
41 static sdfg::data_flow::TaskletCode as_tasklet(llvm::Intrinsic::ID iid) {
42 switch (iid) {
43 case llvm::Intrinsic::expect:
44 case llvm::LibFunc_abs:
45 case llvm::LibFunc_labs:
46 case llvm::LibFunc_llabs:
48 default:
49 throw std::runtime_error("Intrinsic not mapped to a tasklet");
50 }
51 }
52
53 static bool is_math(llvm::LibFunc lf) {
54 switch (lf) {
55 case llvm::LibFunc_acos_finite:
56 case llvm::LibFunc_acosf_finite:
57 case llvm::LibFunc_acosh_finite:
58 case llvm::LibFunc_acoshf_finite:
59 case llvm::LibFunc_acoshl_finite:
60 case llvm::LibFunc_acosl_finite:
61 case llvm::LibFunc_asin_finite:
62 case llvm::LibFunc_asinf_finite:
63 case llvm::LibFunc_asinl_finite:
64 case llvm::LibFunc_atan2_finite:
65 case llvm::LibFunc_atan2f_finite:
66 case llvm::LibFunc_atan2l_finite:
67 case llvm::LibFunc_atanh_finite:
68 case llvm::LibFunc_atanhf_finite:
69 case llvm::LibFunc_atanhl_finite:
70 case llvm::LibFunc_cosh_finite:
71 case llvm::LibFunc_coshf_finite:
72 case llvm::LibFunc_coshl_finite:
73 case llvm::LibFunc_exp10_finite:
74 case llvm::LibFunc_exp10f_finite:
75 case llvm::LibFunc_exp10l_finite:
76 case llvm::LibFunc_exp2_finite:
77 case llvm::LibFunc_exp2f_finite:
78 case llvm::LibFunc_exp2l_finite:
79 case llvm::LibFunc_exp_finite:
80 case llvm::LibFunc_expf_finite:
81 case llvm::LibFunc_expl_finite:
82 case llvm::LibFunc_log10_finite:
83 case llvm::LibFunc_log10f_finite:
84 case llvm::LibFunc_log10l_finite:
85 case llvm::LibFunc_log2_finite:
86 case llvm::LibFunc_log2f_finite:
87 case llvm::LibFunc_log2l_finite:
88 case llvm::LibFunc_log_finite:
89 case llvm::LibFunc_logf_finite:
90 case llvm::LibFunc_logl_finite:
91 case llvm::LibFunc_pow_finite:
92 case llvm::LibFunc_powf_finite:
93 case llvm::LibFunc_powl_finite:
94 case llvm::LibFunc_sinh_finite:
95 case llvm::LibFunc_sinhf_finite:
96 case llvm::LibFunc_sinhl_finite:
97 case llvm::LibFunc_sqrt_finite:
98 case llvm::LibFunc_sqrtf_finite:
99 case llvm::LibFunc_sqrtl_finite:
100 case llvm::LibFunc_acos:
101 case llvm::LibFunc_acosf:
102 case llvm::LibFunc_acosh:
103 case llvm::LibFunc_acoshf:
104 case llvm::LibFunc_acoshl:
105 case llvm::LibFunc_acosl:
106 case llvm::LibFunc_asin:
107 case llvm::LibFunc_asinf:
108 case llvm::LibFunc_asinh:
109 case llvm::LibFunc_asinhf:
110 case llvm::LibFunc_asinhl:
111 case llvm::LibFunc_asinl:
112 case llvm::LibFunc_atan:
113 case llvm::LibFunc_atan2:
114 case llvm::LibFunc_atan2f:
115 case llvm::LibFunc_atan2l:
116 case llvm::LibFunc_atanf:
117 case llvm::LibFunc_atanh:
118 case llvm::LibFunc_atanhf:
119 case llvm::LibFunc_atanhl:
120 case llvm::LibFunc_atanl:
121 case llvm::LibFunc_cos:
122 case llvm::LibFunc_cosf:
123 case llvm::LibFunc_cosh:
124 case llvm::LibFunc_coshf:
125 case llvm::LibFunc_coshl:
126 case llvm::LibFunc_cosl:
127 case llvm::LibFunc_exp:
128 case llvm::LibFunc_exp10:
129 case llvm::LibFunc_exp10f:
130 case llvm::LibFunc_exp10l:
131 case llvm::LibFunc_exp2:
132 case llvm::LibFunc_exp2f:
133 case llvm::LibFunc_exp2l:
134 case llvm::LibFunc_expf:
135 case llvm::LibFunc_expl:
136 case llvm::LibFunc_expm1:
137 case llvm::LibFunc_expm1f:
138 case llvm::LibFunc_expm1l:
139 case llvm::LibFunc_fabs:
140 case llvm::LibFunc_fabsf:
141 case llvm::LibFunc_fabsl:
142 case llvm::LibFunc_floor:
143 case llvm::LibFunc_floorf:
144 case llvm::LibFunc_floorl:
145 case llvm::LibFunc_fmax:
146 case llvm::LibFunc_fmaxf:
147 case llvm::LibFunc_fmaxl:
148 case llvm::LibFunc_fmin:
149 case llvm::LibFunc_fminf:
150 case llvm::LibFunc_fminl:
151 case llvm::LibFunc_fmod:
152 case llvm::LibFunc_fmodf:
153 case llvm::LibFunc_fmodl:
154 case llvm::LibFunc_ldexp:
155 case llvm::LibFunc_ldexpf:
156 case llvm::LibFunc_ldexpl:
157 case llvm::LibFunc_log:
158 case llvm::LibFunc_log10:
159 case llvm::LibFunc_log10f:
160 case llvm::LibFunc_log10l:
161 case llvm::LibFunc_log1p:
162 case llvm::LibFunc_log1pf:
163 case llvm::LibFunc_log1pl:
164 case llvm::LibFunc_log2:
165 case llvm::LibFunc_log2f:
166 case llvm::LibFunc_log2l:
167 case llvm::LibFunc_logb:
168 case llvm::LibFunc_logbf:
169 case llvm::LibFunc_logbl:
170 case llvm::LibFunc_logf:
171 case llvm::LibFunc_logl:
172 case llvm::LibFunc_nearbyint:
173 case llvm::LibFunc_nearbyintf:
174 case llvm::LibFunc_nearbyintl:
175 case llvm::LibFunc_pow:
176 case llvm::LibFunc_powf:
177 case llvm::LibFunc_powl:
178 case llvm::LibFunc_rint:
179 case llvm::LibFunc_rintf:
180 case llvm::LibFunc_rintl:
181 case llvm::LibFunc_round:
182 case llvm::LibFunc_roundeven:
183 case llvm::LibFunc_roundevenf:
184 case llvm::LibFunc_roundevenl:
185 case llvm::LibFunc_roundf:
186 case llvm::LibFunc_roundl:
187 case llvm::LibFunc_sin:
188 case llvm::LibFunc_sinf:
189 case llvm::LibFunc_sinh:
190 case llvm::LibFunc_sinhf:
191 case llvm::LibFunc_sinhl:
192 case llvm::LibFunc_sinl:
193 case llvm::LibFunc_sqrt:
194 case llvm::LibFunc_sqrtf:
195 case llvm::LibFunc_sqrtl:
196 case llvm::LibFunc_tan:
197 case llvm::LibFunc_tanf:
198 case llvm::LibFunc_tanh:
199 case llvm::LibFunc_tanhf:
200 case llvm::LibFunc_tanhl:
201 case llvm::LibFunc_tanl:
202 return true;
203 default:
204 return false;
205 }
206 }
207
208 static sdfg::math::cmath::CMathFunction as_math_function(llvm::LibFunc lf) {
209 switch (lf) {
210 // case llvm::LibFunc_acos_finite:
211 // return "__acos_finite";
212 // case llvm::LibFunc_acosf_finite:
213 // return "__acosf_finite";
214 // case llvm::LibFunc_acosh_finite:
215 // return "__acosh_finite";
216 // case llvm::LibFunc_acoshf_finite:
217 // return "__acoshf_finite";
218 // case llvm::LibFunc_acoshl_finite:
219 // return "__acoshl_finite";
220 // case llvm::LibFunc_acosl_finite:
221 // return "__acosl_finite";
222 // case llvm::LibFunc_asin_finite:
223 // return "__asin_finite";
224 // case llvm::LibFunc_asinf_finite:
225 // return "__asinf_finite";
226 // case llvm::LibFunc_asinl_finite:
227 // return "__asinl_finite";
228 // case llvm::LibFunc_atan2_finite:
229 // return "__atan2_finite";
230 // case llvm::LibFunc_atan2f_finite:
231 // return "__atan2f_finite";
232 // case llvm::LibFunc_atan2l_finite:
233 // return "__atan2l_finite";
234 // case llvm::LibFunc_atanh_finite:
235 // return "__atanh_finite";
236 // case llvm::LibFunc_atanhf_finite:
237 // return "__atanhf_finite";
238 // case llvm::LibFunc_atanhl_finite:
239 // return "__atanhl_finite";
240 // case llvm::LibFunc_cosh_finite:
241 // return "__cosh_finite";
242 // case llvm::LibFunc_coshf_finite:
243 // return "__coshf_finite";
244 // case llvm::LibFunc_coshl_finite:
245 // return "__coshl_finite";
246 // case llvm::LibFunc_exp10_finite:
247 // return "__exp10_finite";
248 // case llvm::LibFunc_exp10f_finite:
249 // return "__exp10f_finite";
250 // case llvm::LibFunc_exp10l_finite:
251 // return "__exp10l_finite";
252 // case llvm::LibFunc_exp2_finite:
253 // return "__exp2_finite";
254 // case llvm::LibFunc_exp2f_finite:
255 // return "__exp2f_finite";
256 // case llvm::LibFunc_exp2l_finite:
257 // return "__exp2l_finite";
258 // case llvm::LibFunc_exp_finite:
259 // return "__exp_finite";
260 // case llvm::LibFunc_expf_finite:
261 // return "__expf_finite";
262 // case llvm::LibFunc_expl_finite:
263 // return "__expl_finite";
264 // case llvm::LibFunc_log10_finite:
265 // return "__log10_finite";
266 // case llvm::LibFunc_log10f_finite:
267 // return "__log10f_finite";
268 // case llvm::LibFunc_log10l_finite:
269 // return "__log10l_finite";
270 // case llvm::LibFunc_log2_finite:
271 // return "__log2_finite";
272 // case llvm::LibFunc_log2f_finite:
273 // return "__log2f_finite";
274 // case llvm::LibFunc_log2l_finite:
275 // return "__log2l_finite";
276 // case llvm::LibFunc_log_finite:
277 // return "__log_finite";
278 // case llvm::LibFunc_logf_finite:
279 // return "__logf_finite";
280 // case llvm::LibFunc_logl_finite:
281 // return "__logl_finite";
282 // case llvm::LibFunc_pow_finite:
283 // return "__pow_finite";
284 // case llvm::LibFunc_powf_finite:
285 // return "__powf_finite";
286 // case llvm::LibFunc_powl_finite:
287 // return "__powl_finite";
288 // case llvm::LibFunc_sinh_finite:
289 // return "__sinh_finite";
290 // case llvm::LibFunc_sinhf_finite:
291 // return "__sinhf_finite";
292 // case llvm::LibFunc_sinhl_finite:
293 // return "__sinhl_finite";
294 // case llvm::LibFunc_sqrt_finite:
295 // return "__sqrt_finite";
296 // case llvm::LibFunc_sqrtf_finite:
297 // return "__sqrtf_finite";
298 // case llvm::LibFunc_sqrtl_finite:
299 // return "__sqrtl_finite";
300 case llvm::LibFunc_acos:
301 case llvm::LibFunc_acosf:
302 case llvm::LibFunc_acosl:
304 case llvm::LibFunc_acosh:
305 case llvm::LibFunc_acoshf:
306 case llvm::LibFunc_acoshl:
308 case llvm::LibFunc_asin:
309 case llvm::LibFunc_asinf:
310 case llvm::LibFunc_asinl:
312 case llvm::LibFunc_asinh:
313 case llvm::LibFunc_asinhf:
314 case llvm::LibFunc_asinhl:
316 case llvm::LibFunc_atan:
317 case llvm::LibFunc_atanl:
318 case llvm::LibFunc_atanf:
320 case llvm::LibFunc_atan2:
321 case llvm::LibFunc_atan2f:
322 case llvm::LibFunc_atan2l:
324 case llvm::LibFunc_atanh:
325 case llvm::LibFunc_atanhf:
326 case llvm::LibFunc_atanhl:
328 case llvm::LibFunc_cos:
329 case llvm::LibFunc_cosf:
330 case llvm::LibFunc_cosl:
332 case llvm::LibFunc_cosh:
333 case llvm::LibFunc_coshf:
334 case llvm::LibFunc_coshl:
336 case llvm::LibFunc_exp:
337 case llvm::LibFunc_expf:
338 case llvm::LibFunc_expl:
340 case llvm::LibFunc_exp10:
341 case llvm::LibFunc_exp10f:
342 case llvm::LibFunc_exp10l:
344 case llvm::LibFunc_exp2:
345 case llvm::LibFunc_exp2f:
346 case llvm::LibFunc_exp2l:
348 case llvm::LibFunc_expm1:
349 case llvm::LibFunc_expm1f:
350 case llvm::LibFunc_expm1l:
352 case llvm::LibFunc_fabs:
353 case llvm::LibFunc_fabsf:
354 case llvm::LibFunc_fabsl:
356 case llvm::LibFunc_floor:
357 case llvm::LibFunc_floorf:
358 case llvm::LibFunc_floorl:
360 case llvm::LibFunc_fmax:
361 case llvm::LibFunc_fmaxf:
362 case llvm::LibFunc_fmaxl:
364 case llvm::LibFunc_fmin:
365 case llvm::LibFunc_fminf:
366 case llvm::LibFunc_fminl:
368 case llvm::LibFunc_fmod:
369 case llvm::LibFunc_fmodf:
370 case llvm::LibFunc_fmodl:
372 case llvm::LibFunc_ldexp:
373 case llvm::LibFunc_ldexpf:
374 case llvm::LibFunc_ldexpl:
376 case llvm::LibFunc_log:
377 case llvm::LibFunc_logf:
378 case llvm::LibFunc_logl:
380 case llvm::LibFunc_log10:
381 case llvm::LibFunc_log10f:
382 case llvm::LibFunc_log10l:
384 case llvm::LibFunc_log1p:
385 case llvm::LibFunc_log1pf:
386 case llvm::LibFunc_log1pl:
388 case llvm::LibFunc_log2:
389 case llvm::LibFunc_log2f:
390 case llvm::LibFunc_log2l:
392 case llvm::LibFunc_logb:
393 case llvm::LibFunc_logbf:
394 case llvm::LibFunc_logbl:
396 case llvm::LibFunc_nearbyint:
397 case llvm::LibFunc_nearbyintf:
398 case llvm::LibFunc_nearbyintl:
400 case llvm::LibFunc_pow:
401 case llvm::LibFunc_powf:
402 case llvm::LibFunc_powl:
404 case llvm::LibFunc_rint:
405 case llvm::LibFunc_rintf:
406 case llvm::LibFunc_rintl:
408 case llvm::LibFunc_round:
409 case llvm::LibFunc_roundf:
410 case llvm::LibFunc_roundl:
412 case llvm::LibFunc_roundeven:
413 case llvm::LibFunc_roundevenf:
414 case llvm::LibFunc_roundevenl:
416 case llvm::LibFunc_sin:
417 case llvm::LibFunc_sinf:
418 case llvm::LibFunc_sinl:
420 case llvm::LibFunc_sinh:
421 case llvm::LibFunc_sinhf:
422 case llvm::LibFunc_sinhl:
424 case llvm::LibFunc_sqrt:
425 case llvm::LibFunc_sqrtf:
426 case llvm::LibFunc_sqrtl:
428 case llvm::LibFunc_tan:
429 case llvm::LibFunc_tanf:
430 case llvm::LibFunc_tanl:
432 case llvm::LibFunc_tanh:
433 case llvm::LibFunc_tanhf:
434 case llvm::LibFunc_tanhl:
436 default:
437 throw std::runtime_error("libfunc not mapped to a function");
438 }
439 }
440
441public:
443 llvm::TargetLibraryInfo& TLI,
444 const llvm::DataLayout& DL,
445 const llvm::Function& function,
446 sdfg::FunctionType target_type,
448 std::map<const llvm::BasicBlock*, std::set<const sdfg::control_flow::State*>>& state_mapping,
449 std::map<const sdfg::control_flow::State*, std::set<const llvm::BasicBlock*>>& pred_mapping,
450 std::unordered_map<const llvm::Value*, std::string>& constants_mapping,
451 std::unordered_map<const llvm::Type*, std::string> anonymous_types_mapping
452 )
454 TLI,
455 DL,
456 function,
457 target_type,
458 builder,
459 state_mapping,
460 pred_mapping,
461 constants_mapping,
462 anonymous_types_mapping
463 ) {
464 }
465
467 const llvm::BasicBlock* block, const llvm::CallBase* instruction, sdfg::control_flow::State& current_state
468 ) override;
469
470 static bool is_supported(llvm::LibFunc& lf) {
471 switch (lf) {
472 case llvm::LibFunc_msvc_new_int:
473 return false;
474 case llvm::LibFunc_msvc_new_int_nothrow:
475 return false;
476 case llvm::LibFunc_msvc_new_longlong:
477 return false;
478 case llvm::LibFunc_msvc_new_longlong_nothrow:
479 return false;
480 case llvm::LibFunc_msvc_delete_ptr32:
481 return false;
482 case llvm::LibFunc_msvc_delete_ptr32_nothrow:
483 return false;
484 case llvm::LibFunc_msvc_delete_ptr32_int:
485 return false;
486 case llvm::LibFunc_msvc_delete_ptr64:
487 return false;
488 case llvm::LibFunc_msvc_delete_ptr64_nothrow:
489 return false;
490 case llvm::LibFunc_msvc_delete_ptr64_longlong:
491 return false;
492 case llvm::LibFunc_msvc_new_array_int:
493 return false;
494 case llvm::LibFunc_msvc_new_array_int_nothrow:
495 return false;
496 case llvm::LibFunc_msvc_new_array_longlong:
497 return false;
498 case llvm::LibFunc_msvc_new_array_longlong_nothrow:
499 return false;
500 case llvm::LibFunc_msvc_delete_array_ptr32:
501 return false;
502 case llvm::LibFunc_msvc_delete_array_ptr32_nothrow:
503 return false;
504 case llvm::LibFunc_msvc_delete_array_ptr32_int:
505 return false;
506 case llvm::LibFunc_msvc_delete_array_ptr64:
507 return false;
508 case llvm::LibFunc_msvc_delete_array_ptr64_nothrow:
509 return false;
510 case llvm::LibFunc_msvc_delete_array_ptr64_longlong:
511 return false;
512 case llvm::LibFunc_under_IO_getc:
513 return false;
514 case llvm::LibFunc_under_IO_putc:
515 return false;
516 case llvm::LibFunc_ZdaPv:
517 return false;
518 case llvm::LibFunc_ZdaPvRKSt9nothrow_t:
519 return false;
520 case llvm::LibFunc_ZdaPvSt11align_val_t:
521 return false;
522 case llvm::LibFunc_ZdaPvSt11align_val_tRKSt9nothrow_t:
523 return false;
524 case llvm::LibFunc_ZdaPvj:
525 return false;
526 case llvm::LibFunc_ZdaPvjSt11align_val_t:
527 return false;
528 case llvm::LibFunc_ZdaPvm:
529 return false;
530 case llvm::LibFunc_ZdaPvmSt11align_val_t:
531 return false;
532 case llvm::LibFunc_ZdlPv:
533 return false;
534 case llvm::LibFunc_ZdlPvRKSt9nothrow_t:
535 return false;
536 case llvm::LibFunc_ZdlPvSt11align_val_t:
537 return false;
538 case llvm::LibFunc_ZdlPvSt11align_val_tRKSt9nothrow_t:
539 return false;
540 case llvm::LibFunc_ZdlPvj:
541 return false;
542 case llvm::LibFunc_ZdlPvjSt11align_val_t:
543 return false;
544 case llvm::LibFunc_ZdlPvm:
545 return false;
546 case llvm::LibFunc_ZdlPvmSt11align_val_t:
547 return false;
548 case llvm::LibFunc_Znaj:
549 return false;
550 case llvm::LibFunc_ZnajRKSt9nothrow_t:
551 return false;
552 case llvm::LibFunc_ZnajSt11align_val_t:
553 return false;
554 case llvm::LibFunc_ZnajSt11align_val_tRKSt9nothrow_t:
555 return false;
556 case llvm::LibFunc_Znam:
557 return false;
558 case llvm::LibFunc_Znam12__hot_cold_t:
559 return false;
560 case llvm::LibFunc_ZnamRKSt9nothrow_t:
561 return false;
562 case llvm::LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t:
563 return false;
564 case llvm::LibFunc_ZnamSt11align_val_t:
565 return false;
566 case llvm::LibFunc_ZnamSt11align_val_t12__hot_cold_t:
567 return false;
568 case llvm::LibFunc_ZnamSt11align_val_tRKSt9nothrow_t:
569 return false;
570 case llvm::LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t:
571 return false;
572 case llvm::LibFunc_Znwj:
573 return false;
574 case llvm::LibFunc_ZnwjRKSt9nothrow_t:
575 return false;
576 case llvm::LibFunc_ZnwjSt11align_val_t:
577 return false;
578 case llvm::LibFunc_ZnwjSt11align_val_tRKSt9nothrow_t:
579 return false;
580 case llvm::LibFunc_Znwm:
581 return false;
582 case llvm::LibFunc_Znwm12__hot_cold_t:
583 return false;
584 case llvm::LibFunc_ZnwmRKSt9nothrow_t:
585 return false;
586 case llvm::LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t:
587 return false;
588 case llvm::LibFunc_ZnwmSt11align_val_t:
589 return false;
590 case llvm::LibFunc_ZnwmSt11align_val_t12__hot_cold_t:
591 return false;
592 case llvm::LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t:
593 return false;
594 case llvm::LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t:
595 return false;
596 case llvm::LibFunc_size_returning_new:
597 case llvm::LibFunc_size_returning_new_hot_cold:
598 case llvm::LibFunc_size_returning_new_aligned:
599 case llvm::LibFunc_size_returning_new_aligned_hot_cold:
600 return false;
601 case llvm::LibFunc_acos_finite:
602 return true;
603 case llvm::LibFunc_acosf_finite:
604 return true;
605 case llvm::LibFunc_acosh_finite:
606 return true;
607 case llvm::LibFunc_acoshf_finite:
608 return true;
609 case llvm::LibFunc_acoshl_finite:
610 return true;
611 case llvm::LibFunc_acosl_finite:
612 return true;
613 case llvm::LibFunc_asin_finite:
614 return true;
615 case llvm::LibFunc_asinf_finite:
616 return true;
617 case llvm::LibFunc_asinl_finite:
618 return true;
619 case llvm::LibFunc_atan2_finite:
620 return true;
621 case llvm::LibFunc_atan2f_finite:
622 return true;
623 case llvm::LibFunc_atan2l_finite:
624 return true;
625 case llvm::LibFunc_atanh_finite:
626 return true;
627 case llvm::LibFunc_atanhf_finite:
628 return true;
629 case llvm::LibFunc_atanhl_finite:
630 return true;
631 case llvm::LibFunc_atomic_load:
632 return false;
633 case llvm::LibFunc_atomic_store:
634 return false;
635 case llvm::LibFunc_cosh_finite:
636 return true;
637 case llvm::LibFunc_coshf_finite:
638 return true;
639 case llvm::LibFunc_coshl_finite:
640 return true;
641 case llvm::LibFunc_cospi:
642 return false;
643 case llvm::LibFunc_cospif:
644 return false;
645 case llvm::LibFunc_cxa_atexit:
646 return false;
647 case llvm::LibFunc_atexit:
648 case llvm::LibFunc_abort:
649 case llvm::LibFunc_exit:
650 case llvm::LibFunc_Exit:
651 case llvm::LibFunc_terminate:
652 case llvm::LibFunc_cxa_throw:
653 return false;
654 case llvm::LibFunc_cxa_guard_abort:
655 return false;
656 case llvm::LibFunc_cxa_guard_acquire:
657 return false;
658 case llvm::LibFunc_cxa_guard_release:
659 return false;
660 case llvm::LibFunc_exp10_finite:
661 return true;
662 case llvm::LibFunc_exp10f_finite:
663 return true;
664 case llvm::LibFunc_exp10l_finite:
665 return true;
666 case llvm::LibFunc_exp2_finite:
667 return true;
668 case llvm::LibFunc_exp2f_finite:
669 return true;
670 case llvm::LibFunc_exp2l_finite:
671 return true;
672 case llvm::LibFunc_exp_finite:
673 return true;
674 case llvm::LibFunc_expf_finite:
675 return true;
676 case llvm::LibFunc_expl_finite:
677 return true;
678 case llvm::LibFunc_dunder_isoc99_scanf:
679 return false;
680 case llvm::LibFunc_dunder_isoc99_sscanf:
681 return false;
682 case llvm::LibFunc___kmpc_alloc_shared:
683 return false;
684 case llvm::LibFunc___kmpc_free_shared:
685 return false;
686 case llvm::LibFunc_log10_finite:
687 return true;
688 case llvm::LibFunc_log10f_finite:
689 return true;
690 case llvm::LibFunc_log10l_finite:
691 return true;
692 case llvm::LibFunc_log2_finite:
693 return true;
694 case llvm::LibFunc_log2f_finite:
695 return true;
696 case llvm::LibFunc_log2l_finite:
697 return true;
698 case llvm::LibFunc_log_finite:
699 return true;
700 case llvm::LibFunc_logf_finite:
701 return true;
702 case llvm::LibFunc_logl_finite:
703 return true;
704 case llvm::LibFunc_memccpy_chk:
705 return false;
706 case llvm::LibFunc_memcpy_chk:
707 return false;
708 case llvm::LibFunc_memmove_chk:
709 return false;
710 case llvm::LibFunc_mempcpy_chk:
711 return false;
712 case llvm::LibFunc_memset_chk:
713 return false;
714 case llvm::LibFunc_nvvm_reflect:
715 return false;
716 case llvm::LibFunc_pow_finite:
717 return true;
718 case llvm::LibFunc_powf_finite:
719 return true;
720 case llvm::LibFunc_powl_finite:
721 return true;
722 case llvm::LibFunc_sincospi_stret:
723 return false;
724 case llvm::LibFunc_sincospif_stret:
725 return false;
726 case llvm::LibFunc_sinh_finite:
727 return true;
728 case llvm::LibFunc_sinhf_finite:
729 return true;
730 case llvm::LibFunc_sinhl_finite:
731 return true;
732 case llvm::LibFunc_sinpi:
733 return false;
734 case llvm::LibFunc_sinpif:
735 return false;
736 case llvm::LibFunc_small_fprintf:
737 return false;
738 case llvm::LibFunc_small_printf:
739 return false;
740 case llvm::LibFunc_small_sprintf:
741 return false;
742 case llvm::LibFunc_snprintf_chk:
743 return false;
744 case llvm::LibFunc_sprintf_chk:
745 return false;
746 case llvm::LibFunc_sqrt_finite:
747 return true;
748 case llvm::LibFunc_sqrtf_finite:
749 return true;
750 case llvm::LibFunc_sqrtl_finite:
751 return true;
752 case llvm::LibFunc_stpcpy_chk:
753 return false;
754 case llvm::LibFunc_stpncpy_chk:
755 return false;
756 case llvm::LibFunc_strcat_chk:
757 return false;
758 case llvm::LibFunc_strcpy_chk:
759 return false;
760 case llvm::LibFunc_dunder_strdup:
761 return false;
762 case llvm::LibFunc_strlcat_chk:
763 return false;
764 case llvm::LibFunc_strlcpy_chk:
765 return false;
766 case llvm::LibFunc_strlen_chk:
767 return false;
768 case llvm::LibFunc_strncat_chk:
769 return false;
770 case llvm::LibFunc_strncpy_chk:
771 return false;
772 case llvm::LibFunc_dunder_strndup:
773 return false;
774 case llvm::LibFunc_dunder_strtok_r:
775 return false;
776 case llvm::LibFunc_vsnprintf_chk:
777 return false;
778 case llvm::LibFunc_vsprintf_chk:
779 return false;
780 case llvm::LibFunc_abs:
781 return true;
782 case llvm::LibFunc_labs:
783 return true;
784 case llvm::LibFunc_llabs:
785 return true;
786 case llvm::LibFunc_access:
787 return false;
788 case llvm::LibFunc_acos:
789 return true;
790 case llvm::LibFunc_acosf:
791 return true;
792 case llvm::LibFunc_acosh:
793 return true;
794 case llvm::LibFunc_acoshf:
795 return true;
796 case llvm::LibFunc_acoshl:
797 return true;
798 case llvm::LibFunc_acosl:
799 return true;
800 case llvm::LibFunc_aligned_alloc:
801 return false;
802 case llvm::LibFunc_asin:
803 return true;
804 case llvm::LibFunc_asinf:
805 return true;
806 case llvm::LibFunc_asinh:
807 return true;
808 case llvm::LibFunc_asinhf:
809 return true;
810 case llvm::LibFunc_asinhl:
811 return true;
812 case llvm::LibFunc_asinl:
813 return true;
814 case llvm::LibFunc_atan:
815 return true;
816 case llvm::LibFunc_atan2:
817 return true;
818 case llvm::LibFunc_atan2f:
819 return true;
820 case llvm::LibFunc_atan2l:
821 return true;
822 case llvm::LibFunc_atanf:
823 return true;
824 case llvm::LibFunc_atanh:
825 return true;
826 case llvm::LibFunc_atanhf:
827 return true;
828 case llvm::LibFunc_atanhl:
829 return true;
830 case llvm::LibFunc_atanl:
831 return true;
832 case llvm::LibFunc_atof:
833 return false;
834 case llvm::LibFunc_atoi:
835 return false;
836 case llvm::LibFunc_atol:
837 return false;
838 case llvm::LibFunc_atoll:
839 return false;
840 case llvm::LibFunc_bcmp:
841 return false;
842 case llvm::LibFunc_bcopy:
843 return false;
844 case llvm::LibFunc_bzero:
845 return false;
846 case llvm::LibFunc_cabs:
847 return false;
848 case llvm::LibFunc_cabsf:
849 return false;
850 case llvm::LibFunc_cabsl:
851 return false;
852 case llvm::LibFunc_calloc:
853 return true;
854 case llvm::LibFunc_cbrt:
855 return false;
856 case llvm::LibFunc_cbrtf:
857 return false;
858 case llvm::LibFunc_cbrtl:
859 return false;
860 case llvm::LibFunc_ceil:
861 return false;
862 case llvm::LibFunc_ceilf:
863 return false;
864 case llvm::LibFunc_ceill:
865 return false;
866 case llvm::LibFunc_chmod:
867 return false;
868 case llvm::LibFunc_chown:
869 return false;
870 case llvm::LibFunc_clearerr:
871 return false;
872 case llvm::LibFunc_closedir:
873 return false;
874 case llvm::LibFunc_copysign:
875 return false;
876 case llvm::LibFunc_copysignf:
877 return false;
878 case llvm::LibFunc_copysignl:
879 return false;
880 case llvm::LibFunc_cos:
881 return true;
882 case llvm::LibFunc_cosf:
883 return true;
884 case llvm::LibFunc_cosh:
885 return true;
886 case llvm::LibFunc_coshf:
887 return true;
888 case llvm::LibFunc_coshl:
889 return true;
890 case llvm::LibFunc_cosl:
891 return true;
892 case llvm::LibFunc_ctermid:
893 return false;
894 case llvm::LibFunc_erf:
895 return false;
896 case llvm::LibFunc_erff:
897 return false;
898 case llvm::LibFunc_erfl:
899 return false;
900 case llvm::LibFunc_tgamma:
901 case llvm::LibFunc_tgammaf:
902 case llvm::LibFunc_tgammal:
903 return false;
904 case llvm::LibFunc_execl:
905 return false;
906 case llvm::LibFunc_execle:
907 return false;
908 case llvm::LibFunc_execlp:
909 return false;
910 case llvm::LibFunc_execv:
911 return false;
912 case llvm::LibFunc_execvP:
913 return false;
914 case llvm::LibFunc_execve:
915 return false;
916 case llvm::LibFunc_execvp:
917 return false;
918 case llvm::LibFunc_execvpe:
919 return false;
920 case llvm::LibFunc_exp:
921 return true;
922 case llvm::LibFunc_exp10:
923 return true;
924 case llvm::LibFunc_exp10f:
925 return true;
926 case llvm::LibFunc_exp10l:
927 return true;
928 case llvm::LibFunc_exp2:
929 return true;
930 case llvm::LibFunc_exp2f:
931 return true;
932 case llvm::LibFunc_exp2l:
933 return true;
934 case llvm::LibFunc_expf:
935 return true;
936 case llvm::LibFunc_expl:
937 return true;
938 case llvm::LibFunc_expm1:
939 return true;
940 case llvm::LibFunc_expm1f:
941 return true;
942 case llvm::LibFunc_expm1l:
943 return true;
944 case llvm::LibFunc_fabs:
945 return true;
946 case llvm::LibFunc_fabsf:
947 return true;
948 case llvm::LibFunc_fabsl:
949 return true;
950 case llvm::LibFunc_fclose:
951 return false;
952 case llvm::LibFunc_fdopen:
953 return false;
954 case llvm::LibFunc_feof:
955 return false;
956 case llvm::LibFunc_ferror:
957 return false;
958 case llvm::LibFunc_fflush:
959 return false;
960 case llvm::LibFunc_ffs:
961 return false;
962 case llvm::LibFunc_ffsl:
963 return false;
964 case llvm::LibFunc_ffsll:
965 return false;
966 case llvm::LibFunc_fgetc:
967 return false;
968 case llvm::LibFunc_fgetc_unlocked:
969 return false;
970 case llvm::LibFunc_fgetpos:
971 return false;
972 case llvm::LibFunc_fgets:
973 return false;
974 case llvm::LibFunc_fgets_unlocked:
975 return false;
976 case llvm::LibFunc_fileno:
977 return false;
978 case llvm::LibFunc_fiprintf:
979 return false;
980 case llvm::LibFunc_flockfile:
981 return false;
982 case llvm::LibFunc_floor:
983 return true;
984 case llvm::LibFunc_floorf:
985 return true;
986 case llvm::LibFunc_floorl:
987 return true;
988 case llvm::LibFunc_fls:
989 return false;
990 case llvm::LibFunc_flsl:
991 return false;
992 case llvm::LibFunc_flsll:
993 return false;
994 case llvm::LibFunc_fmax:
995 return true;
996 case llvm::LibFunc_fmaxf:
997 return true;
998 case llvm::LibFunc_fmaxl:
999 return true;
1000 case llvm::LibFunc_fmin:
1001 return true;
1002 case llvm::LibFunc_fminf:
1003 return true;
1004 case llvm::LibFunc_fminl:
1005 return true;
1006 case llvm::LibFunc_fmaximum_num:
1007 case llvm::LibFunc_fmaximum_numf:
1008 case llvm::LibFunc_fmaximum_numl:
1009 case llvm::LibFunc_fminimum_num:
1010 case llvm::LibFunc_fminimum_numf:
1011 case llvm::LibFunc_fminimum_numl:
1012 return false;
1013 case llvm::LibFunc_fmod:
1014 return true;
1015 case llvm::LibFunc_fmodf:
1016 return true;
1017 case llvm::LibFunc_fmodl:
1018 return true;
1019 case llvm::LibFunc_fopen:
1020 return false;
1021 case llvm::LibFunc_fopen64:
1022 return false;
1023 case llvm::LibFunc_fork:
1024 return false;
1025 case llvm::LibFunc_fprintf:
1026 return false;
1027 case llvm::LibFunc_fputc:
1028 return false;
1029 case llvm::LibFunc_fputc_unlocked:
1030 return false;
1031 case llvm::LibFunc_fputs:
1032 return false;
1033 case llvm::LibFunc_fputs_unlocked:
1034 return false;
1035 case llvm::LibFunc_fread:
1036 return false;
1037 case llvm::LibFunc_fread_unlocked:
1038 return false;
1039 case llvm::LibFunc_free:
1040 return true;
1041 case llvm::LibFunc_frexp:
1042 return false;
1043 case llvm::LibFunc_frexpf:
1044 return false;
1045 case llvm::LibFunc_frexpl:
1046 return false;
1047 case llvm::LibFunc_fscanf:
1048 return false;
1049 case llvm::LibFunc_fseek:
1050 return false;
1051 case llvm::LibFunc_fseeko:
1052 return false;
1053 case llvm::LibFunc_fseeko64:
1054 return false;
1055 case llvm::LibFunc_fsetpos:
1056 return false;
1057 case llvm::LibFunc_fstat:
1058 return false;
1059 case llvm::LibFunc_fstat64:
1060 return false;
1061 case llvm::LibFunc_fstatvfs:
1062 return false;
1063 case llvm::LibFunc_fstatvfs64:
1064 return false;
1065 case llvm::LibFunc_ftell:
1066 return false;
1067 case llvm::LibFunc_ftello:
1068 return false;
1069 case llvm::LibFunc_ftello64:
1070 return false;
1071 case llvm::LibFunc_ftrylockfile:
1072 return false;
1073 case llvm::LibFunc_funlockfile:
1074 return false;
1075 case llvm::LibFunc_fwrite:
1076 return false;
1077 case llvm::LibFunc_fwrite_unlocked:
1078 return false;
1079 case llvm::LibFunc_getc:
1080 return false;
1081 case llvm::LibFunc_getc_unlocked:
1082 return false;
1083 case llvm::LibFunc_getchar:
1084 return false;
1085 case llvm::LibFunc_getchar_unlocked:
1086 return false;
1087 case llvm::LibFunc_getenv:
1088 return false;
1089 case llvm::LibFunc_getitimer:
1090 return false;
1091 case llvm::LibFunc_getlogin_r:
1092 return false;
1093 case llvm::LibFunc_getpwnam:
1094 return false;
1095 case llvm::LibFunc_gets:
1096 return false;
1097 case llvm::LibFunc_gettimeofday:
1098 return false;
1099 case llvm::LibFunc_htonl:
1100 return false;
1101 case llvm::LibFunc_htons:
1102 return false;
1103 case llvm::LibFunc_hypot:
1104 case llvm::LibFunc_hypotf:
1105 case llvm::LibFunc_hypotl:
1106 return false;
1107 case llvm::LibFunc_iprintf:
1108 return false;
1109 case llvm::LibFunc_isascii:
1110 return false;
1111 case llvm::LibFunc_isdigit:
1112 return false;
1113 case llvm::LibFunc_lchown:
1114 return false;
1115 case llvm::LibFunc_ldexp:
1116 return true;
1117 case llvm::LibFunc_ldexpf:
1118 return true;
1119 case llvm::LibFunc_ldexpl:
1120 return true;
1121 case llvm::LibFunc_log:
1122 return true;
1123 case llvm::LibFunc_log10:
1124 return true;
1125 case llvm::LibFunc_log10f:
1126 return true;
1127 case llvm::LibFunc_log10l:
1128 return true;
1129 case llvm::LibFunc_log1p:
1130 return true;
1131 case llvm::LibFunc_log1pf:
1132 return true;
1133 case llvm::LibFunc_log1pl:
1134 return true;
1135 case llvm::LibFunc_log2:
1136 return true;
1137 case llvm::LibFunc_log2f:
1138 return true;
1139 case llvm::LibFunc_log2l:
1140 return true;
1141 case llvm::LibFunc_ilogb:
1142 case llvm::LibFunc_ilogbf:
1143 case llvm::LibFunc_ilogbl:
1144 return false;
1145 case llvm::LibFunc_logb:
1146 return true;
1147 case llvm::LibFunc_logbf:
1148 return true;
1149 case llvm::LibFunc_logbl:
1150 return true;
1151 case llvm::LibFunc_logf:
1152 return true;
1153 case llvm::LibFunc_logl:
1154 return true;
1155 case llvm::LibFunc_lstat:
1156 return false;
1157 case llvm::LibFunc_lstat64:
1158 return false;
1159 case llvm::LibFunc_malloc:
1160 return true;
1161 case llvm::LibFunc_memalign:
1162 return false;
1163 case llvm::LibFunc_memccpy:
1164 return false;
1165 case llvm::LibFunc_memchr:
1166 return false;
1167 case llvm::LibFunc_memcmp:
1168 return false;
1169 case llvm::LibFunc_memcpy:
1170 return false;
1171 case llvm::LibFunc_memmove:
1172 return false;
1173 case llvm::LibFunc_mempcpy:
1174 return false;
1175 case llvm::LibFunc_memrchr:
1176 return false;
1177 case llvm::LibFunc_memset:
1178 return false;
1179 case llvm::LibFunc_memset_pattern16:
1180 return false;
1181 case llvm::LibFunc_memset_pattern4:
1182 return false;
1183 case llvm::LibFunc_memset_pattern8:
1184 return false;
1185 case llvm::LibFunc_mkdir:
1186 return false;
1187 case llvm::LibFunc_mktime:
1188 return false;
1189 case llvm::LibFunc_modf:
1190 return false;
1191 case llvm::LibFunc_modff:
1192 return false;
1193 case llvm::LibFunc_modfl:
1194 return false;
1195 case llvm::LibFunc_nan:
1196 case llvm::LibFunc_nanf:
1197 case llvm::LibFunc_nanl:
1198 return false;
1199 case llvm::LibFunc_nearbyint:
1200 return true;
1201 case llvm::LibFunc_nearbyintf:
1202 return true;
1203 case llvm::LibFunc_nearbyintl:
1204 return true;
1205 case llvm::LibFunc_ntohl:
1206 return false;
1207 case llvm::LibFunc_ntohs:
1208 return false;
1209 case llvm::LibFunc_open:
1210 return false;
1211 case llvm::LibFunc_open64:
1212 return false;
1213 case llvm::LibFunc_opendir:
1214 return false;
1215 case llvm::LibFunc_pclose:
1216 return false;
1217 case llvm::LibFunc_perror:
1218 return false;
1219 case llvm::LibFunc_popen:
1220 return false;
1221 case llvm::LibFunc_posix_memalign:
1222 return false;
1223 case llvm::LibFunc_pow:
1224 return true;
1225 case llvm::LibFunc_powf:
1226 return true;
1227 case llvm::LibFunc_powl:
1228 return true;
1229 case llvm::LibFunc_pread:
1230 return false;
1231 case llvm::LibFunc_printf:
1232 return false;
1233 case llvm::LibFunc_putc:
1234 return false;
1235 case llvm::LibFunc_putc_unlocked:
1236 return false;
1237 case llvm::LibFunc_putchar:
1238 return false;
1239 case llvm::LibFunc_putchar_unlocked:
1240 return false;
1241 case llvm::LibFunc_puts:
1242 return false;
1243 case llvm::LibFunc_pvalloc:
1244 return false;
1245 case llvm::LibFunc_pwrite:
1246 return false;
1247 case llvm::LibFunc_qsort:
1248 return false;
1249 case llvm::LibFunc_read:
1250 return false;
1251 case llvm::LibFunc_readlink:
1252 return false;
1253 case llvm::LibFunc_realloc:
1254 return false;
1255 case llvm::LibFunc_reallocf:
1256 return false;
1257 case llvm::LibFunc_reallocarray:
1258 return false;
1259 case llvm::LibFunc_realpath:
1260 return false;
1261 case llvm::LibFunc_remainder:
1262 return false;
1263 case llvm::LibFunc_remainderf:
1264 return false;
1265 case llvm::LibFunc_remainderl:
1266 return false;
1267 case llvm::LibFunc_remquo:
1268 return false;
1269 case llvm::LibFunc_remquof:
1270 return false;
1271 case llvm::LibFunc_remquol:
1272 return false;
1273 case llvm::LibFunc_fdim:
1274 case llvm::LibFunc_fdimf:
1275 case llvm::LibFunc_fdiml:
1276 return false;
1277 case llvm::LibFunc_remove:
1278 return false;
1279 case llvm::LibFunc_rename:
1280 return false;
1281 case llvm::LibFunc_rewind:
1282 return false;
1283 case llvm::LibFunc_rint:
1284 return true;
1285 case llvm::LibFunc_rintf:
1286 return true;
1287 case llvm::LibFunc_rintl:
1288 return true;
1289 case llvm::LibFunc_rmdir:
1290 return false;
1291 case llvm::LibFunc_round:
1292 return true;
1293 case llvm::LibFunc_roundeven:
1294 return true;
1295 case llvm::LibFunc_roundevenf:
1296 return true;
1297 case llvm::LibFunc_roundevenl:
1298 return true;
1299 case llvm::LibFunc_roundf:
1300 return true;
1301 case llvm::LibFunc_roundl:
1302 return true;
1303 case llvm::LibFunc_scalbln:
1304 case llvm::LibFunc_scalblnf:
1305 case llvm::LibFunc_scalblnl:
1306 case llvm::LibFunc_scalbn:
1307 case llvm::LibFunc_scalbnf:
1308 case llvm::LibFunc_scalbnl:
1309 return false;
1310 case llvm::LibFunc_scanf:
1311 return false;
1312 case llvm::LibFunc_setbuf:
1313 return false;
1314 case llvm::LibFunc_setitimer:
1315 return false;
1316 case llvm::LibFunc_setvbuf:
1317 return false;
1318 case llvm::LibFunc_sin:
1319 return true;
1320 case llvm::LibFunc_sinf:
1321 return true;
1322 case llvm::LibFunc_sinh:
1323 return true;
1324 case llvm::LibFunc_sinhf:
1325 return true;
1326 case llvm::LibFunc_sinhl:
1327 return true;
1328 case llvm::LibFunc_sinl:
1329 return true;
1330 case llvm::LibFunc_sincos:
1331 case llvm::LibFunc_sincosf:
1332 case llvm::LibFunc_sincosl:
1333 return false;
1334 case llvm::LibFunc_siprintf:
1335 return false;
1336 case llvm::LibFunc_snprintf:
1337 return false;
1338 case llvm::LibFunc_sprintf:
1339 return false;
1340 case llvm::LibFunc_sqrt:
1341 return true;
1342 case llvm::LibFunc_sqrtf:
1343 return true;
1344 case llvm::LibFunc_sqrtl:
1345 return true;
1346 case llvm::LibFunc_sscanf:
1347 return false;
1348 case llvm::LibFunc_stat:
1349 return false;
1350 case llvm::LibFunc_stat64:
1351 return false;
1352 case llvm::LibFunc_statvfs:
1353 return false;
1354 case llvm::LibFunc_statvfs64:
1355 return false;
1356 case llvm::LibFunc_stpcpy:
1357 return false;
1358 case llvm::LibFunc_stpncpy:
1359 return false;
1360 case llvm::LibFunc_strcasecmp:
1361 return false;
1362 case llvm::LibFunc_strcat:
1363 return false;
1364 case llvm::LibFunc_strchr:
1365 return false;
1366 case llvm::LibFunc_strcmp:
1367 return false;
1368 case llvm::LibFunc_strcoll:
1369 return false;
1370 case llvm::LibFunc_strcpy:
1371 return false;
1372 case llvm::LibFunc_strcspn:
1373 return false;
1374 case llvm::LibFunc_strdup:
1375 return false;
1376 case llvm::LibFunc_strlcat:
1377 return false;
1378 case llvm::LibFunc_strlcpy:
1379 return false;
1380 case llvm::LibFunc_strlen:
1381 return false;
1382 case llvm::LibFunc_strncasecmp:
1383 return false;
1384 case llvm::LibFunc_strncat:
1385 return false;
1386 case llvm::LibFunc_strncmp:
1387 return false;
1388 case llvm::LibFunc_strncpy:
1389 return false;
1390 case llvm::LibFunc_strndup:
1391 return false;
1392 case llvm::LibFunc_strnlen:
1393 return false;
1394 case llvm::LibFunc_strpbrk:
1395 return false;
1396 case llvm::LibFunc_strrchr:
1397 return false;
1398 case llvm::LibFunc_strspn:
1399 return false;
1400 case llvm::LibFunc_strstr:
1401 return false;
1402 case llvm::LibFunc_strtod:
1403 return false;
1404 case llvm::LibFunc_strtof:
1405 return false;
1406 case llvm::LibFunc_strtok:
1407 return false;
1408 case llvm::LibFunc_strtok_r:
1409 return false;
1410 case llvm::LibFunc_strtol:
1411 return false;
1412 case llvm::LibFunc_strtold:
1413 return false;
1414 case llvm::LibFunc_strtoll:
1415 return false;
1416 case llvm::LibFunc_strtoul:
1417 return false;
1418 case llvm::LibFunc_strtoull:
1419 return false;
1420 case llvm::LibFunc_strxfrm:
1421 return false;
1422 case llvm::LibFunc_system:
1423 return false;
1424 case llvm::LibFunc_tan:
1425 return true;
1426 case llvm::LibFunc_tanf:
1427 return true;
1428 case llvm::LibFunc_tanh:
1429 return true;
1430 case llvm::LibFunc_tanhf:
1431 return true;
1432 case llvm::LibFunc_tanhl:
1433 return true;
1434 case llvm::LibFunc_tanl:
1435 return true;
1436 case llvm::LibFunc_times:
1437 return false;
1438 case llvm::LibFunc_tmpfile:
1439 return false;
1440 case llvm::LibFunc_tmpfile64:
1441 return false;
1442 case llvm::LibFunc_toascii:
1443 return false;
1444 case llvm::LibFunc_trunc:
1445 return false;
1446 case llvm::LibFunc_truncf:
1447 return false;
1448 case llvm::LibFunc_truncl:
1449 return false;
1450 case llvm::LibFunc_uname:
1451 return false;
1452 case llvm::LibFunc_ungetc:
1453 return false;
1454 case llvm::LibFunc_unlink:
1455 return false;
1456 case llvm::LibFunc_unsetenv:
1457 return false;
1458 case llvm::LibFunc_utime:
1459 return false;
1460 case llvm::LibFunc_utimes:
1461 return false;
1462 case llvm::LibFunc_valloc:
1463 return false;
1464 case llvm::LibFunc_vec_calloc:
1465 return false;
1466 case llvm::LibFunc_vec_free:
1467 return false;
1468 case llvm::LibFunc_vec_malloc:
1469 return false;
1470 case llvm::LibFunc_vec_realloc:
1471 return false;
1472 case llvm::LibFunc_vfprintf:
1473 return false;
1474 case llvm::LibFunc_vfscanf:
1475 return false;
1476 case llvm::LibFunc_vprintf:
1477 return false;
1478 case llvm::LibFunc_vscanf:
1479 return false;
1480 case llvm::LibFunc_vsnprintf:
1481 return false;
1482 case llvm::LibFunc_vsprintf:
1483 return false;
1484 case llvm::LibFunc_vsscanf:
1485 return false;
1486 case llvm::LibFunc_wcslen:
1487 return false;
1488 case llvm::LibFunc_write:
1489 return false;
1490 case llvm::NumLibFuncs:
1491 return false;
1492 case llvm::NotLibFunc:
1493 return false;
1494 default:
1495 throw std::runtime_error("Unknown LibFunc type:" + std::to_string(static_cast<size_t>(lf)));
1496 }
1497 };
1498};
1499
1500} // namespace lifting
1501} // namespace docc
FunctionLifting(llvm::TargetLibraryInfo &TLI, const llvm::DataLayout &DL, const llvm::Function &function, sdfg::FunctionType target_type, sdfg::builder::SDFGBuilder &builder, std::map< const llvm::BasicBlock *, std::set< const sdfg::control_flow::State * > > &state_mapping, std::map< const sdfg::control_flow::State *, std::set< const llvm::BasicBlock * > > &pred_mapping, std::unordered_map< const llvm::Value *, std::string > &constants_mapping, std::unordered_map< const llvm::Type *, std::string > &anonymous_types_mapping)
Definition function_lifting.h:41
sdfg::control_flow::State & visit(const llvm::BasicBlock *block, const llvm::CallBase *instruction, sdfg::control_flow::State &current_state) override
LibFuncLifting(llvm::TargetLibraryInfo &TLI, const llvm::DataLayout &DL, const llvm::Function &function, sdfg::FunctionType target_type, sdfg::builder::SDFGBuilder &builder, std::map< const llvm::BasicBlock *, std::set< const sdfg::control_flow::State * > > &state_mapping, std::map< const sdfg::control_flow::State *, std::set< const llvm::BasicBlock * > > &pred_mapping, std::unordered_map< const llvm::Value *, std::string > &constants_mapping, std::unordered_map< const llvm::Type *, std::string > anonymous_types_mapping)
Definition libfunc_lifting.h:442
static bool is_supported(llvm::LibFunc &lf)
Definition libfunc_lifting.h:470
Definition sdfg_builder.h:13
A state in a Stateful DataFlow Graph (SDFG).
Definition state.h:38
Definition exceptions.h:9
Definition targets.h:8
Definition function_builder.h:10
TaskletCode
Operation codes for tasklet computations.
Definition tasklet.h:94
@ int_abs
Integer absolute value.
Definition tasklet.h:152
CMathFunction
Enumeration of C math library functions.
Definition cmath_node.h:21
@ atanh
Definition cmath_node.h:37
@ cosh
Definition cmath_node.h:33
@ acosh
Definition cmath_node.h:36
@ nearbyint
Definition cmath_node.h:70
@ pow
Definition cmath_node.h:50
@ fabs
Definition cmath_node.h:62
@ cos
Definition cmath_node.h:24
@ tan
Definition cmath_node.h:25
@ tanh
Definition cmath_node.h:34
@ asin
Definition cmath_node.h:26
@ fmax
Definition cmath_node.h:90
@ atan
Definition cmath_node.h:28
@ floor
Definition cmath_node.h:64
@ expm1
Definition cmath_node.h:43
@ log2
Definition cmath_node.h:46
@ sin
Definition cmath_node.h:23
@ rint
Definition cmath_node.h:71
@ fmin
Definition cmath_node.h:91
@ fmod
Definition cmath_node.h:74
@ round
Definition cmath_node.h:66
@ log1p
Definition cmath_node.h:47
@ logb
Definition cmath_node.h:84
@ sinh
Definition cmath_node.h:32
@ exp
Definition cmath_node.h:40
@ roundeven
Definition cmath_node.h:69
@ acos
Definition cmath_node.h:27
@ atan2
Definition cmath_node.h:29
@ exp10
Definition cmath_node.h:42
@ log10
Definition cmath_node.h:45
@ log
Definition cmath_node.h:44
@ sqrt
Definition cmath_node.h:51
@ exp2
Definition cmath_node.h:41
@ ldexp
Definition cmath_node.h:79
@ asinh
Definition cmath_node.h:35
StringEnum FunctionType
Definition function.h:37