Lines Matching defs:F
52 static bool setDoesNotAccessMemory(Function &F) {
53 if (F.doesNotAccessMemory())
55 F.setDoesNotAccessMemory();
60 static bool setOnlyAccessesInaccessibleMemory(Function &F) {
61 if (F.onlyAccessesInaccessibleMemory())
63 F.setOnlyAccessesInaccessibleMemory();
68 static bool setOnlyReadsMemory(Function &F) {
69 if (F.onlyReadsMemory())
71 F.setOnlyReadsMemory();
76 static bool setOnlyWritesMemory(Function &F) {
77 if (F.onlyWritesMemory()) // writeonly or readnone
80 F.setOnlyWritesMemory();
84 static bool setOnlyAccessesArgMemory(Function &F) {
85 if (F.onlyAccessesArgMemory())
87 F.setOnlyAccessesArgMemory();
92 static bool setOnlyAccessesInaccessibleMemOrArgMem(Function &F) {
93 if (F.onlyAccessesInaccessibleMemOrArgMem())
95 F.setOnlyAccessesInaccessibleMemOrArgMem();
100 static bool setDoesNotThrow(Function &F) {
101 if (F.doesNotThrow())
103 F.setDoesNotThrow();
108 static bool setRetDoesNotAlias(Function &F) {
109 if (F.hasRetAttribute(Attribute::NoAlias))
111 F.addRetAttr(Attribute::NoAlias);
116 static bool setDoesNotCapture(Function &F, unsigned ArgNo) {
117 if (F.hasParamAttribute(ArgNo, Attribute::NoCapture))
119 F.addParamAttr(ArgNo, Attribute::NoCapture);
124 static bool setDoesNotAlias(Function &F, unsigned ArgNo) {
125 if (F.hasParamAttribute(ArgNo, Attribute::NoAlias))
127 F.addParamAttr(ArgNo, Attribute::NoAlias);
132 static bool setOnlyReadsMemory(Function &F, unsigned ArgNo) {
133 if (F.hasParamAttribute(ArgNo, Attribute::ReadOnly))
135 F.addParamAttr(ArgNo, Attribute::ReadOnly);
140 static bool setOnlyWritesMemory(Function &F, unsigned ArgNo) {
141 if (F.hasParamAttribute(ArgNo, Attribute::WriteOnly))
143 F.addParamAttr(ArgNo, Attribute::WriteOnly);
148 static bool setRetNoUndef(Function &F) {
149 if (!F.getReturnType()->isVoidTy() &&
150 !F.hasRetAttribute(Attribute::NoUndef)) {
151 F.addRetAttr(Attribute::NoUndef);
158 static bool setArgsNoUndef(Function &F) {
160 for (unsigned ArgNo = 0; ArgNo < F.arg_size(); ++ArgNo) {
161 if (!F.hasParamAttribute(ArgNo, Attribute::NoUndef)) {
162 F.addParamAttr(ArgNo, Attribute::NoUndef);
170 static bool setArgNoUndef(Function &F, unsigned ArgNo) {
171 if (F.hasParamAttribute(ArgNo, Attribute::NoUndef))
173 F.addParamAttr(ArgNo, Attribute::NoUndef);
178 static bool setRetAndArgsNoUndef(Function &F) {
180 UndefAdded |= setRetNoUndef(F);
181 UndefAdded |= setArgsNoUndef(F);
185 static bool setReturnedArg(Function &F, unsigned ArgNo) {
186 if (F.hasParamAttribute(ArgNo, Attribute::Returned))
188 F.addParamAttr(ArgNo, Attribute::Returned);
193 static bool setNonLazyBind(Function &F) {
194 if (F.hasFnAttribute(Attribute::NonLazyBind))
196 F.addFnAttr(Attribute::NonLazyBind);
200 static bool setDoesNotFreeMemory(Function &F) {
201 if (F.hasFnAttribute(Attribute::NoFree))
203 F.addFnAttr(Attribute::NoFree);
207 static bool setWillReturn(Function &F) {
208 if (F.hasFnAttribute(Attribute::WillReturn))
210 F.addFnAttr(Attribute::WillReturn);
215 static bool setAlignedAllocParam(Function &F, unsigned ArgNo) {
216 if (F.hasParamAttribute(ArgNo, Attribute::AllocAlign))
218 F.addParamAttr(ArgNo, Attribute::AllocAlign);
222 static bool setAllocatedPointerParam(Function &F, unsigned ArgNo) {
223 if (F.hasParamAttribute(ArgNo, Attribute::AllocatedPointer))
225 F.addParamAttr(ArgNo, Attribute::AllocatedPointer);
229 static bool setAllocSize(Function &F, unsigned ElemSizeArg,
231 if (F.hasFnAttribute(Attribute::AllocSize))
233 F.addFnAttr(Attribute::getWithAllocSizeArgs(F.getContext(), ElemSizeArg,
238 static bool setAllocFamily(Function &F, StringRef Family) {
239 if (F.hasFnAttribute("alloc-family"))
241 F.addFnAttr("alloc-family", Family);
245 static bool setAllocKind(Function &F, AllocFnKind K) {
246 if (F.hasFnAttribute(Attribute::AllocKind))
248 F.addFnAttr(
249 Attribute::get(F.getContext(), Attribute::AllocKind, uint64_t(K)));
255 Function *F = M->getFunction(Name);
256 if (!F)
258 return inferNonMandatoryLibFuncAttrs(*F, TLI);
261 bool llvm::inferNonMandatoryLibFuncAttrs(Function &F,
264 if (!(TLI.getLibFunc(F, TheLibFunc) && TLI.has(TheLibFunc)))
269 if (F.getParent() != nullptr && F.getParent()->getRtLibUseGOT())
270 Changed |= setNonLazyBind(F);
276 Changed |= setOnlyReadsMemory(F);
277 Changed |= setDoesNotThrow(F);
278 Changed |= setOnlyAccessesArgMemory(F);
279 Changed |= setWillReturn(F);
280 Changed |= setDoesNotCapture(F, 0);
284 Changed |= setOnlyAccessesArgMemory(F);
285 Changed |= setOnlyReadsMemory(F);
286 Changed |= setDoesNotThrow(F);
287 Changed |= setWillReturn(F);
296 Changed |= setDoesNotThrow(F);
297 Changed |= setWillReturn(F);
298 Changed |= setDoesNotCapture(F, 1);
299 Changed |= setOnlyReadsMemory(F, 0);
303 Changed |= setOnlyAccessesArgMemory(F);
304 Changed |= setDoesNotThrow(F);
305 Changed |= setWillReturn(F);
306 Changed |= setReturnedArg(F, 0);
307 Changed |= setDoesNotCapture(F, 1);
308 Changed |= setOnlyReadsMemory(F, 1);
309 Changed |= setDoesNotAlias(F, 0);
310 Changed |= setDoesNotAlias(F, 1);
314 Changed |= setReturnedArg(F, 0);
318 Changed |= setOnlyAccessesArgMemory(F);
319 Changed |= setDoesNotThrow(F);
320 Changed |= setWillReturn(F);
321 Changed |= setDoesNotCapture(F, 1);
322 Changed |= setOnlyWritesMemory(F, 0);
323 Changed |= setOnlyReadsMemory(F, 1);
324 Changed |= setDoesNotAlias(F, 0);
325 Changed |= setDoesNotAlias(F, 1);
328 Changed |= setDoesNotThrow(F);
329 Changed |= setWillReturn(F);
330 Changed |= setDoesNotCapture(F, 0);
331 Changed |= setDoesNotCapture(F, 1);
332 Changed |= setOnlyReadsMemory(F, 1);
338 Changed |= setDoesNotThrow(F);
339 Changed |= setOnlyAccessesArgMemory(F);
340 Changed |= setWillReturn(F);
341 Changed |= setOnlyReadsMemory(F);
342 Changed |= setDoesNotCapture(F, 0);
343 Changed |= setDoesNotCapture(F, 1);
350 Changed |= setOnlyReadsMemory(F);
351 Changed |= setDoesNotThrow(F);
352 Changed |= setWillReturn(F);
353 Changed |= setDoesNotCapture(F, 0);
354 Changed |= setDoesNotCapture(F, 1);
358 Changed |= setOnlyAccessesArgMemory(F);
359 Changed |= setOnlyReadsMemory(F);
360 Changed |= setDoesNotThrow(F);
361 Changed |= setWillReturn(F);
362 Changed |= setDoesNotCapture(F, 1);
366 Changed |= setDoesNotThrow(F);
367 Changed |= setWillReturn(F);
368 Changed |= setDoesNotCapture(F, 1);
369 Changed |= setOnlyReadsMemory(F, 1);
372 Changed |= setRetAndArgsNoUndef(F);
373 Changed |= setDoesNotThrow(F);
374 Changed |= setDoesNotCapture(F, 0);
375 Changed |= setOnlyReadsMemory(F, 0);
379 Changed |= setRetAndArgsNoUndef(F);
380 Changed |= setDoesNotThrow(F);
381 Changed |= setDoesNotCapture(F, 0);
384 Changed |= setArgNoUndef(F, 1);
387 Changed |= setAllocFamily(F, "malloc");
388 Changed |= setOnlyAccessesInaccessibleMemOrArgMem(F);
389 Changed |= setDoesNotThrow(F);
390 Changed |= setRetDoesNotAlias(F);
391 Changed |= setWillReturn(F);
392 Changed |= setDoesNotCapture(F, 0);
393 Changed |= setOnlyReadsMemory(F, 0);
397 Changed |= setRetAndArgsNoUndef(F);
398 Changed |= setDoesNotThrow(F);
399 Changed |= setDoesNotCapture(F, 0);
400 Changed |= setDoesNotCapture(F, 1);
401 Changed |= setOnlyReadsMemory(F, 0);
404 Changed |= setRetAndArgsNoUndef(F);
405 Changed |= setDoesNotThrow(F);
406 Changed |= setDoesNotCapture(F, 0);
407 Changed |= setDoesNotCapture(F, 1);
408 Changed |= setOnlyReadsMemory(F, 0);
409 Changed |= setOnlyReadsMemory(F, 1);
412 Changed |= setRetAndArgsNoUndef(F);
413 Changed |= setDoesNotThrow(F);
414 Changed |= setDoesNotCapture(F, 0);
415 Changed |= setDoesNotAlias(F, 0);
416 Changed |= setOnlyWritesMemory(F, 0);
417 Changed |= setDoesNotCapture(F, 1);
418 Changed |= setOnlyReadsMemory(F, 1);
421 Changed |= setRetAndArgsNoUndef(F);
422 Changed |= setDoesNotThrow(F);
423 Changed |= setDoesNotCapture(F, 0);
424 Changed |= setDoesNotAlias(F, 0);
425 Changed |= setOnlyWritesMemory(F, 0);
426 Changed |= setDoesNotCapture(F, 2);
427 Changed |= setOnlyReadsMemory(F, 2);
430 Changed |= setRetAndArgsNoUndef(F);
431 Changed |= setDoesNotThrow(F);
432 Changed |= setWillReturn(F);
433 Changed |= setDoesNotCapture(F, 1);
434 Changed |= setDoesNotCapture(F, 2);
435 Changed |= setOnlyReadsMemory(F, 1);
439 Changed |= setRetAndArgsNoUndef(F);
440 Changed |= setDoesNotCapture(F, 0);
441 Changed |= setOnlyReadsMemory(F, 0);
444 Changed |= setAlignedAllocParam(F, 0);
445 Changed |= setAllocSize(F, 1, std::nullopt);
446 Changed |= setAllocKind(F, AllocFnKind::Alloc | AllocFnKind::Uninitialized | AllocFnKind::Aligned);
451 Changed |= setAllocFamily(F, TheLibFunc == LibFunc_vec_malloc ? "vec_malloc"
453 Changed |= setAllocKind(F, AllocFnKind::Alloc | AllocFnKind::Uninitialized);
454 Changed |= setAllocSize(F, 0, std::nullopt);
455 Changed |= setOnlyAccessesInaccessibleMemory(F);
456 Changed |= setRetAndArgsNoUndef(F);
457 Changed |= setDoesNotThrow(F);
458 Changed |= setRetDoesNotAlias(F);
459 Changed |= setWillReturn(F);
462 Changed |= setOnlyAccessesArgMemory(F);
463 Changed |= setOnlyReadsMemory(F);
464 Changed |= setDoesNotThrow(F);
465 Changed |= setWillReturn(F);
466 Changed |= setDoesNotCapture(F, 0);
467 Changed |= setDoesNotCapture(F, 1);
471 Changed |= setDoesNotThrow(F);
472 Changed |= setOnlyAccessesArgMemory(F);
473 Changed |= setOnlyReadsMemory(F);
474 Changed |= setWillReturn(F);
479 Changed |= setDoesNotThrow(F);
480 Changed |= setWillReturn(F);
481 Changed |= setOnlyAccessesArgMemory(F);
482 Changed |= setOnlyWritesMemory(F);
483 Changed |= setDoesNotCapture(F, 1);
486 Changed |= setDoesNotThrow(F);
487 Changed |= setOnlyAccessesArgMemory(F);
488 Changed |= setWillReturn(F);
489 Changed |= setDoesNotAlias(F, 0);
490 Changed |= setReturnedArg(F, 0);
491 Changed |= setOnlyWritesMemory(F, 0);
492 Changed |= setDoesNotAlias(F, 1);
493 Changed |= setDoesNotCapture(F, 1);
494 Changed |= setOnlyReadsMemory(F, 1);
497 Changed |= setDoesNotThrow(F);
498 Changed |= setOnlyAccessesArgMemory(F);
499 Changed |= setWillReturn(F);
500 Changed |= setReturnedArg(F, 0);
501 Changed |= setOnlyWritesMemory(F, 0);
502 Changed |= setDoesNotCapture(F, 1);
503 Changed |= setOnlyReadsMemory(F, 1);
507 Changed |= setWillReturn(F);
510 Changed |= setDoesNotThrow(F);
511 Changed |= setOnlyAccessesArgMemory(F);
512 Changed |= setDoesNotAlias(F, 0);
513 Changed |= setOnlyWritesMemory(F, 0);
514 Changed |= setDoesNotAlias(F, 1);
515 Changed |= setDoesNotCapture(F, 1);
516 Changed |= setOnlyReadsMemory(F, 1);
519 Changed |= setAllocFamily(F, "malloc");
520 Changed |= setAllocKind(F, AllocFnKind::Alloc | AllocFnKind::Aligned |
522 Changed |= setAllocSize(F, 1, std::nullopt);
523 Changed |= setAlignedAllocParam(F, 0);
524 Changed |= setOnlyAccessesInaccessibleMemory(F);
525 Changed |= setRetNoUndef(F);
526 Changed |= setDoesNotThrow(F);
527 Changed |= setRetDoesNotAlias(F);
528 Changed |= setWillReturn(F);
531 Changed |= setRetAndArgsNoUndef(F);
532 Changed |= setDoesNotThrow(F);
533 Changed |= setDoesNotCapture(F, 0);
534 Changed |= setOnlyReadsMemory(F, 0);
537 Changed |= setRetAndArgsNoUndef(F);
538 Changed |= setDoesNotThrow(F);
539 Changed |= setWillReturn(F);
540 Changed |= setDoesNotCapture(F, 0);
546 F, TheLibFunc == LibFunc_vec_realloc ? "vec_malloc" : "malloc");
547 Changed |= setAllocKind(F, AllocFnKind::Realloc);
548 Changed |= setAllocatedPointerParam(F, 0);
549 Changed |= setAllocSize(F, 1, std::nullopt);
550 Changed |= setOnlyAccessesInaccessibleMemOrArgMem(F);
551 Changed |= setRetNoUndef(F);
552 Changed |= setDoesNotThrow(F);
553 Changed |= setRetDoesNotAlias(F);
554 Changed |= setWillReturn(F);
555 Changed |= setDoesNotCapture(F, 0);
556 Changed |= setArgNoUndef(F, 1);
560 Changed |= setRetAndArgsNoUndef(F);
561 Changed |= setDoesNotCapture(F, 1);
564 Changed |= setRetAndArgsNoUndef(F);
565 Changed |= setDoesNotThrow(F);
566 Changed |= setDoesNotCapture(F, 0);
571 Changed |= setRetAndArgsNoUndef(F);
572 Changed |= setDoesNotThrow(F);
573 Changed |= setDoesNotCapture(F, 0);
574 Changed |= setOnlyReadsMemory(F, 0);
577 Changed |= setRetAndArgsNoUndef(F);
578 Changed |= setDoesNotThrow(F);
579 Changed |= setDoesNotCapture(F, 0);
580 Changed |= setDoesNotCapture(F, 1);
581 Changed |= setOnlyReadsMemory(F, 0);
582 Changed |= setOnlyReadsMemory(F, 1);
585 Changed |= setRetAndArgsNoUndef(F);
586 Changed |= setDoesNotThrow(F);
587 Changed |= setDoesNotCapture(F, 0);
588 Changed |= setDoesNotCapture(F, 1);
589 Changed |= setOnlyReadsMemory(F, 0);
593 Changed |= setRetAndArgsNoUndef(F);
594 Changed |= setDoesNotCapture(F, 1);
595 Changed |= setOnlyReadsMemory(F, 1);
598 Changed |= setDoesNotThrow(F);
599 Changed |= setOnlyAccessesArgMemory(F);
600 Changed |= setWillReturn(F);
601 Changed |= setDoesNotCapture(F, 0);
602 Changed |= setOnlyReadsMemory(F, 0);
603 Changed |= setOnlyWritesMemory(F, 1);
604 Changed |= setDoesNotCapture(F, 1);
607 Changed |= setDoesNotThrow(F);
608 Changed |= setOnlyAccessesArgMemory(F);
609 Changed |= setOnlyReadsMemory(F);
610 Changed |= setWillReturn(F);
611 Changed |= setDoesNotCapture(F, 0);
612 Changed |= setDoesNotCapture(F, 1);
615 Changed |= setDoesNotThrow(F);
616 Changed |= setOnlyAccessesArgMemory(F);
617 Changed |= setWillReturn(F);
618 Changed |= setDoesNotCapture(F, 0);
619 Changed |= setOnlyWritesMemory(F, 0);
623 Changed |= setAllocFamily(F, TheLibFunc == LibFunc_vec_calloc ? "vec_malloc"
625 Changed |= setAllocKind(F, AllocFnKind::Alloc | AllocFnKind::Zeroed);
626 Changed |= setAllocSize(F, 0, 1);
627 Changed |= setOnlyAccessesInaccessibleMemory(F);
628 Changed |= setRetAndArgsNoUndef(F);
629 Changed |= setDoesNotThrow(F);
630 Changed |= setRetDoesNotAlias(F);
631 Changed |= setWillReturn(F);
635 Changed |= setRetAndArgsNoUndef(F);
636 Changed |= setDoesNotThrow(F);
637 Changed |= setDoesNotCapture(F, 0);
638 Changed |= setOnlyReadsMemory(F, 0);
643 Changed |= setRetAndArgsNoUndef(F);
644 Changed |= setDoesNotThrow(F);
645 Changed |= setDoesNotCapture(F, 0);
651 Changed |= setDoesNotThrow(F);
652 Changed |= setOnlyReadsMemory(F);
653 Changed |= setWillReturn(F);
654 Changed |= setDoesNotCapture(F, 0);
657 Changed |= setRetAndArgsNoUndef(F);
658 Changed |= setDoesNotThrow(F);
659 Changed |= setDoesNotCapture(F, 0);
660 Changed |= setOnlyReadsMemory(F, 0);
663 Changed |= setRetAndArgsNoUndef(F);
664 Changed |= setDoesNotThrow(F);
665 Changed |= setRetDoesNotAlias(F);
666 Changed |= setDoesNotCapture(F, 0);
667 Changed |= setDoesNotCapture(F, 1);
668 Changed |= setOnlyReadsMemory(F, 0);
669 Changed |= setOnlyReadsMemory(F, 1);
672 Changed |= setRetAndArgsNoUndef(F);
673 Changed |= setDoesNotThrow(F);
674 Changed |= setRetDoesNotAlias(F);
675 Changed |= setDoesNotCapture(F, 1);
676 Changed |= setOnlyReadsMemory(F, 1);
679 Changed |= setRetAndArgsNoUndef(F);
680 Changed |= setDoesNotThrow(F);
681 Changed |= setDoesNotCapture(F, 0);
685 Changed |= setAllocFamily(F, TheLibFunc == LibFunc_vec_free ? "vec_malloc"
687 Changed |= setAllocKind(F, AllocFnKind::Free);
688 Changed |= setAllocatedPointerParam(F, 0);
689 Changed |= setOnlyAccessesInaccessibleMemOrArgMem(F);
690 Changed |= setArgsNoUndef(F);
691 Changed |= setDoesNotThrow(F);
692 Changed |= setWillReturn(F);
693 Changed |= setDoesNotCapture(F, 0);
708 Changed |= setRetAndArgsNoUndef(F);
709 Changed |= setDoesNotThrow(F);
710 Changed |= setDoesNotCapture(F, 0);
713 Changed |= setRetAndArgsNoUndef(F);
714 Changed |= setDoesNotThrow(F);
715 Changed |= setDoesNotCapture(F, 0);
716 Changed |= setOnlyReadsMemory(F);
721 Changed |= setRetAndArgsNoUndef(F);
722 Changed |= setDoesNotThrow(F);
723 Changed |= setDoesNotCapture(F, 1);
728 Changed |= setDoesNotThrow(F);
729 Changed |= setWillReturn(F);
730 Changed |= setOnlyAccessesArgMemory(F);
731 Changed |= setOnlyWritesMemory(F);
732 Changed |= setDoesNotCapture(F, 1);
735 Changed |= setRetAndArgsNoUndef(F);
736 Changed |= setDoesNotThrow(F);
737 Changed |= setDoesNotCapture(F, 1);
741 Changed |= setRetAndArgsNoUndef(F);
742 Changed |= setDoesNotThrow(F);
743 Changed |= setDoesNotCapture(F, 2);
747 Changed |= setRetAndArgsNoUndef(F);
748 Changed |= setDoesNotThrow(F);
749 Changed |= setDoesNotCapture(F, 0);
750 Changed |= setDoesNotCapture(F, 3);
754 Changed |= setRetAndArgsNoUndef(F);
755 Changed |= setDoesNotThrow(F);
756 Changed |= setDoesNotCapture(F, 0);
757 Changed |= setDoesNotCapture(F, 3);
762 Changed |= setRetAndArgsNoUndef(F);
763 Changed |= setDoesNotThrow(F);
764 Changed |= setDoesNotCapture(F, 0);
765 Changed |= setDoesNotCapture(F, 1);
766 Changed |= setOnlyReadsMemory(F, 0);
770 Changed |= setRetAndArgsNoUndef(F);
771 Changed |= setDoesNotThrow(F);
772 Changed |= setDoesNotCapture(F, 0);
773 Changed |= setDoesNotCapture(F, 1);
774 Changed |= setOnlyReadsMemory(F, 1);
777 Changed |= setRetAndArgsNoUndef(F);
778 Changed |= setDoesNotThrow(F);
779 Changed |= setDoesNotCapture(F, 0);
780 Changed |= setDoesNotCapture(F, 1);
783 Changed |= setRetAndArgsNoUndef(F);
784 Changed |= setDoesNotThrow(F);
785 Changed |= setDoesNotCapture(F, 0);
788 Changed |= setRetAndArgsNoUndef(F);
789 Changed |= setDoesNotThrow(F);
790 Changed |= setDoesNotCapture(F, 0);
793 Changed |= setRetAndArgsNoUndef(F);
794 Changed |= setDoesNotThrow(F);
795 Changed |= setDoesNotCapture(F, 0);
798 Changed |= setRetAndArgsNoUndef(F);
799 Changed |= setDoesNotThrow(F);
800 Changed |= setOnlyReadsMemory(F);
801 Changed |= setDoesNotCapture(F, 0);
806 Changed |= setRetAndArgsNoUndef(F);
807 Changed |= setDoesNotThrow(F);
810 Changed |= setRetAndArgsNoUndef(F);
811 Changed |= setDoesNotThrow(F);
812 Changed |= setDoesNotCapture(F, 1);
815 Changed |= setRetAndArgsNoUndef(F);
816 Changed |= setDoesNotThrow(F);
817 Changed |= setDoesNotCapture(F, 0);
818 Changed |= setOnlyReadsMemory(F, 0);
821 Changed |= setRetAndArgsNoUndef(F);
822 Changed |= setDoesNotThrow(F);
823 Changed |= setDoesNotCapture(F, 1);
826 Changed |= setRetAndArgsNoUndef(F);
827 Changed |= setDoesNotThrow(F);
828 Changed |= setDoesNotCapture(F, 0);
831 Changed |= setRetAndArgsNoUndef(F);
832 Changed |= setDoesNotThrow(F);
833 Changed |= setDoesNotCapture(F, 0);
834 Changed |= setOnlyReadsMemory(F, 0);
837 Changed |= setRetAndArgsNoUndef(F);
838 Changed |= setDoesNotThrow(F);
839 Changed |= setDoesNotCapture(F, 0);
840 Changed |= setOnlyReadsMemory(F, 0);
844 Changed |= setRetAndArgsNoUndef(F);
845 Changed |= setDoesNotThrow(F);
846 Changed |= setDoesNotCapture(F, 0);
847 Changed |= setDoesNotCapture(F, 1);
848 Changed |= setOnlyReadsMemory(F, 0);
849 Changed |= setOnlyReadsMemory(F, 1);
853 Changed |= setRetAndArgsNoUndef(F);
854 Changed |= setDoesNotThrow(F);
855 Changed |= setDoesNotCapture(F, 1);
860 Changed |= setRetAndArgsNoUndef(F);
861 Changed |= setDoesNotThrow(F);
862 Changed |= setDoesNotCapture(F, 0);
863 Changed |= setOnlyReadsMemory(F, 0);
867 Changed |= setRetAndArgsNoUndef(F);
868 Changed |= setDoesNotCapture(F, 1);
872 Changed |= setRetAndArgsNoUndef(F);
873 Changed |= setDoesNotCapture(F, 1);
874 Changed |= setOnlyReadsMemory(F, 1);
878 Changed |= setRetAndArgsNoUndef(F);
879 Changed |= setDoesNotThrow(F);
882 Changed |= setRetAndArgsNoUndef(F);
883 Changed |= setDoesNotThrow(F);
884 Changed |= setRetDoesNotAlias(F);
885 Changed |= setDoesNotCapture(F, 0);
886 Changed |= setDoesNotCapture(F, 1);
887 Changed |= setOnlyReadsMemory(F, 0);
888 Changed |= setOnlyReadsMemory(F, 1);
891 Changed |= setRetAndArgsNoUndef(F);
892 Changed |= setDoesNotThrow(F);
893 Changed |= setDoesNotCapture(F, 0);
896 Changed |= setRetAndArgsNoUndef(F);
897 Changed |= setDoesNotThrow(F);
898 Changed |= setDoesNotCapture(F, 0);
899 Changed |= setOnlyReadsMemory(F, 0);
902 Changed |= setRetAndArgsNoUndef(F);
903 Changed |= setDoesNotThrow(F);
904 Changed |= setDoesNotCapture(F, 0);
905 Changed |= setDoesNotCapture(F, 1);
906 Changed |= setOnlyReadsMemory(F, 0);
907 Changed |= setOnlyReadsMemory(F, 1);
910 Changed |= setRetAndArgsNoUndef(F);
911 Changed |= setDoesNotThrow(F);
912 Changed |= setDoesNotCapture(F, 0);
913 Changed |= setDoesNotCapture(F, 1);
914 Changed |= setOnlyReadsMemory(F, 1);
917 Changed |= setRetAndArgsNoUndef(F);
918 Changed |= setDoesNotThrow(F);
919 Changed |= setDoesNotCapture(F, 0);
920 Changed |= setOnlyReadsMemory(F, 0);
924 Changed |= setRetAndArgsNoUndef(F);
925 Changed |= setDoesNotThrow(F);
926 Changed |= setDoesNotCapture(F, 0);
927 Changed |= setDoesNotCapture(F, 1);
928 Changed |= setOnlyReadsMemory(F, 1);
931 Changed |= setRetAndArgsNoUndef(F);
932 Changed |= setDoesNotThrow(F);
933 Changed |= setDoesNotCapture(F, 0);
934 Changed |= setDoesNotCapture(F, 2);
935 Changed |= setOnlyReadsMemory(F, 2);
939 Changed |= setRetAndArgsNoUndef(F);
940 Changed |= setDoesNotCapture(F, 0);
941 Changed |= setOnlyReadsMemory(F, 0);
944 Changed |= setRetAndArgsNoUndef(F);
945 Changed |= setDoesNotThrow(F);
946 Changed |= setRetDoesNotAlias(F);
947 Changed |= setDoesNotCapture(F, 0);
948 Changed |= setOnlyReadsMemory(F, 0);
951 Changed |= setRetAndArgsNoUndef(F);
952 Changed |= setDoesNotThrow(F);
953 Changed |= setRetDoesNotAlias(F);
956 Changed |= setRetAndArgsNoUndef(F);
957 Changed |= setDoesNotThrow(F);
958 Changed |= setDoesNotCapture(F, 0);
964 Changed |= setDoesNotThrow(F);
965 Changed |= setDoesNotAccessMemory(F);
968 Changed |= setRetAndArgsNoUndef(F);
969 Changed |= setDoesNotThrow(F);
970 Changed |= setDoesNotCapture(F, 0);
971 Changed |= setDoesNotCapture(F, 1);
972 Changed |= setOnlyReadsMemory(F, 0);
975 Changed |= setRetAndArgsNoUndef(F);
976 Changed |= setDoesNotThrow(F);
977 Changed |= setDoesNotCapture(F, 0);
978 Changed |= setOnlyReadsMemory(F, 0);
983 Changed |= setRetAndArgsNoUndef(F);
984 Changed |= setDoesNotCapture(F, 3);
987 Changed |= setArgNoUndef(F, 1);
990 Changed |= setDoesNotThrow(F);
991 Changed |= setRetDoesNotAlias(F);
992 Changed |= setWillReturn(F);
993 Changed |= setDoesNotCapture(F, 0);
994 Changed |= setOnlyReadsMemory(F, 0);
997 Changed |= setDoesNotThrow(F);
998 Changed |= setDoesNotCapture(F, 1);
999 Changed |= setOnlyReadsMemory(F, 1);
1002 Changed |= setRetAndArgsNoUndef(F);
1003 Changed |= setDoesNotThrow(F);
1004 Changed |= setDoesNotCapture(F, 0);
1007 Changed |= setRetAndArgsNoUndef(F);
1008 Changed |= setDoesNotThrow(F);
1009 Changed |= setDoesNotCapture(F, 1);
1012 Changed |= setRetAndArgsNoUndef(F);
1013 Changed |= setDoesNotThrow(F);
1014 Changed |= setDoesNotCapture(F, 0);
1015 Changed |= setOnlyReadsMemory(F, 0);
1020 Changed |= setRetAndArgsNoUndef(F);
1021 Changed |= setDoesNotThrow(F);
1022 Changed |= setDoesNotCapture(F, 0);
1023 Changed |= setDoesNotCapture(F, 1);
1024 Changed |= setOnlyReadsMemory(F, 0);
1027 Changed |= setRetAndArgsNoUndef(F);
1028 Changed |= setDoesNotThrow(F);
1029 Changed |= setDoesNotCapture(F, 0);
1030 Changed |= setDoesNotCapture(F, 1);
1031 Changed |= setOnlyReadsMemory(F, 0);
1032 Changed |= setOnlyReadsMemory(F, 1);
1035 Changed |= setRetAndArgsNoUndef(F);
1036 Changed |= setDoesNotThrow(F);
1037 Changed |= setRetDoesNotAlias(F);
1038 Changed |= setDoesNotCapture(F, 0);
1039 Changed |= setDoesNotCapture(F, 1);
1040 Changed |= setOnlyReadsMemory(F, 0);
1041 Changed |= setOnlyReadsMemory(F, 1);
1045 Changed |= setRetAndArgsNoUndef(F);
1046 Changed |= setDoesNotThrow(F);
1047 Changed |= setDoesNotCapture(F, 0);
1050 Changed |= setRetAndArgsNoUndef(F);
1051 Changed |= setDoesNotThrow(F);
1052 Changed |= setRetDoesNotAlias(F);
1056 Changed |= setRetAndArgsNoUndef(F);
1057 Changed |= setDoesNotThrow(F);
1058 Changed |= setDoesNotCapture(F, 1);
1062 Changed |= setRetAndArgsNoUndef(F);
1063 Changed |= setDoesNotCapture(F, 0);
1064 Changed |= setOnlyReadsMemory(F, 0);
1070 Changed |= setRetAndArgsNoUndef(F);
1071 Changed |= setDoesNotThrow(F);
1072 Changed |= setDoesNotCapture(F, 0);
1073 Changed |= setDoesNotCapture(F, 1);
1078 Changed |= setDoesNotCapture(F, 0);
1079 Changed |= setDoesNotCapture(F, 1);
1080 Changed |= setOnlyReadsMemory(F, 1);
1083 Changed |= setWillReturn(F);
1086 Changed |= setOnlyAccessesArgMemory(F);
1087 Changed |= setOnlyWritesMemory(F, 0);
1088 Changed |= setDoesNotThrow(F);
1092 Changed |= setRetAndArgsNoUndef(F);
1093 Changed |= setDoesNotAccessMemory(F);
1094 Changed |= setDoesNotThrow(F);
1099 Changed |= setWillReturn(F);
1104 Changed |= setDoesNotCapture(F, 2);
1234 Changed |= setDoesNotThrow(F);
1235 Changed |= setDoesNotFreeMemory(F);
1236 Changed |= setOnlyWritesMemory(F);
1237 Changed |= setWillReturn(F);
1246 if (!isLibFreeFunction(&F, TheLibFunc) && !isReallocLikeFn(&F))
1247 Changed |= setDoesNotFreeMemory(F);
1251 static void setArgExtAttr(Function &F, unsigned ArgNo,
1254 if (ExtAttr != Attribute::None && !F.hasParamAttribute(ArgNo, ExtAttr))
1255 F.addParamAttr(ArgNo, ExtAttr);
1258 static void setRetExtAttr(Function &F,
1261 if (ExtAttr != Attribute::None && !F.hasRetAttribute(ExtAttr))
1262 F.addRetAttr(ExtAttr);
1266 void llvm::markRegisterParameterAttributes(Function *F) {
1267 if (!F->arg_size() || F->isVarArg())
1270 const CallingConv::ID CC = F->getCallingConv();
1274 const Module *M = F->getParent();
1281 for (Argument &A : F->args()) {
1296 F->addParamAttr(A.getArgNo(), Attribute::InReg);
1315 // zero extensions as needed. F is retreived with cast<> because we demand
1317 Function *F = cast<Function>(C.getCallee());
1318 assert(F->getFunctionType() == T && "Function type does not match.");
1322 setArgExtAttr(*F, 0, TLI);
1330 setArgExtAttr(*F, 1, TLI);
1333 setArgExtAttr(*F, 2, TLI);
1340 setRetExtAttr(*F, TLI);
1368 markRegisterParameterAttributes(F);
1387 if (auto *F = dyn_cast<Function>(GV))
1388 return TLI->isValidProtoForLibFunc(*F->getFunctionType(), TheLibFunc, *M);
1462 if (const Function *F =
1464 CI->setCallingConv(F->getCallingConv());
1546 if (const Function *F =
1548 CI->setCallingConv(F->getCallingConv());
1722 if (const Function *F =
1724 CI->setCallingConv(F->getCallingConv());
1772 if (const Function *F =
1774 CI->setCallingConv(F->getCallingConv());
1823 if (const Function *F =
1825 CI->setCallingConv(F->getCallingConv());
1841 if (const Function *F =
1843 CI->setCallingConv(F->getCallingConv());
1855 FunctionCallee F = getOrInsertLibFunc(M, *TLI, LibFunc_fputc, IntTy,
1859 CallInst *CI = B.CreateCall(F, {Char, File}, FPutcName);
1862 dyn_cast<Function>(F.getCallee()->stripPointerCasts()))
1875 FunctionCallee F = getOrInsertLibFunc(M, *TLI, LibFunc_fputs, IntTy,
1879 CallInst *CI = B.CreateCall(F, {Str, File}, FPutsName);
1882 dyn_cast<Function>(F.getCallee()->stripPointerCasts()))
1895 FunctionCallee F = getOrInsertLibFunc(M, *TLI, LibFunc_fwrite,
1902 B.CreateCall(F, {Ptr, Size,
1906 dyn_cast<Function>(F.getCallee()->stripPointerCasts()))
1924 if (const Function *F =
1926 CI->setCallingConv(F->getCallingConv());
1944 if (const auto *F =
1946 CI->setCallingConv(F->getCallingConv());
1964 if (const Function *F =
1966 CI->setCallingConv(F->getCallingConv());
1985 if (const Function *F =
1987 CI->setCallingConv(F->getCallingConv());
2005 if (const Function *F =
2007 CI->setCallingConv(F->getCallingConv());
2028 if (const Function *F =
2030 CI->setCallingConv(F->getCallingConv());