376 unsigned builtinID) {
379 case Builtin::BIacos:
380 case Builtin::BIacosf:
381 case Builtin::BIacosl:
382 case Builtin::BI__builtin_acos:
383 case Builtin::BI__builtin_acosf:
384 case Builtin::BI__builtin_acosf16:
385 case Builtin::BI__builtin_acosl:
386 case Builtin::BI__builtin_acosf128:
387 case Builtin::BI__builtin_elementwise_acos:
388 case Builtin::BIasin:
389 case Builtin::BIasinf:
390 case Builtin::BIasinl:
391 case Builtin::BI__builtin_asin:
392 case Builtin::BI__builtin_asinf:
393 case Builtin::BI__builtin_asinf16:
394 case Builtin::BI__builtin_asinl:
395 case Builtin::BI__builtin_asinf128:
396 case Builtin::BI__builtin_elementwise_asin:
397 case Builtin::BIatan:
398 case Builtin::BIatanf:
399 case Builtin::BIatanl:
400 case Builtin::BI__builtin_atan:
401 case Builtin::BI__builtin_atanf:
402 case Builtin::BI__builtin_atanf16:
403 case Builtin::BI__builtin_atanl:
404 case Builtin::BI__builtin_atanf128:
405 case Builtin::BI__builtin_elementwise_atan:
406 case Builtin::BIatan2:
407 case Builtin::BIatan2f:
408 case Builtin::BIatan2l:
409 case Builtin::BI__builtin_atan2:
410 case Builtin::BI__builtin_atan2f:
411 case Builtin::BI__builtin_atan2f16:
412 case Builtin::BI__builtin_atan2l:
413 case Builtin::BI__builtin_atan2f128:
414 case Builtin::BI__builtin_elementwise_atan2:
416 case Builtin::BIceil:
417 case Builtin::BIceilf:
418 case Builtin::BIceill:
419 case Builtin::BI__builtin_ceil:
420 case Builtin::BI__builtin_ceilf:
421 case Builtin::BI__builtin_ceilf16:
422 case Builtin::BI__builtin_ceill:
423 case Builtin::BI__builtin_ceilf128:
425 case Builtin::BI__builtin_elementwise_ceil:
426 case Builtin::BIcopysign:
427 case Builtin::BIcopysignf:
428 case Builtin::BIcopysignl:
429 case Builtin::BI__builtin_copysign:
430 case Builtin::BI__builtin_copysignf:
431 case Builtin::BI__builtin_copysignf16:
432 case Builtin::BI__builtin_copysignl:
433 case Builtin::BI__builtin_copysignf128:
436 case Builtin::BIcosf:
437 case Builtin::BIcosl:
438 case Builtin::BI__builtin_cos:
439 case Builtin::BI__builtin_cosf:
440 case Builtin::BI__builtin_cosf16:
441 case Builtin::BI__builtin_cosl:
442 case Builtin::BI__builtin_cosf128:
444 case Builtin::BI__builtin_elementwise_cos:
445 case Builtin::BIcosh:
446 case Builtin::BIcoshf:
447 case Builtin::BIcoshl:
448 case Builtin::BI__builtin_cosh:
449 case Builtin::BI__builtin_coshf:
450 case Builtin::BI__builtin_coshf16:
451 case Builtin::BI__builtin_coshl:
452 case Builtin::BI__builtin_coshf128:
453 case Builtin::BI__builtin_elementwise_cosh:
456 case Builtin::BIexpf:
457 case Builtin::BIexpl:
458 case Builtin::BI__builtin_exp:
459 case Builtin::BI__builtin_expf:
460 case Builtin::BI__builtin_expf16:
461 case Builtin::BI__builtin_expl:
462 case Builtin::BI__builtin_expf128:
464 case Builtin::BI__builtin_elementwise_exp:
466 case Builtin::BIexp2:
467 case Builtin::BIexp2f:
468 case Builtin::BIexp2l:
469 case Builtin::BI__builtin_exp2:
470 case Builtin::BI__builtin_exp2f:
471 case Builtin::BI__builtin_exp2f16:
472 case Builtin::BI__builtin_exp2l:
473 case Builtin::BI__builtin_exp2f128:
475 case Builtin::BI__builtin_elementwise_exp2:
476 case Builtin::BI__builtin_exp10:
477 case Builtin::BI__builtin_exp10f:
478 case Builtin::BI__builtin_exp10f16:
479 case Builtin::BI__builtin_exp10l:
480 case Builtin::BI__builtin_exp10f128:
481 case Builtin::BI__builtin_elementwise_exp10:
483 case Builtin::BIfabs:
484 case Builtin::BIfabsf:
485 case Builtin::BIfabsl:
486 case Builtin::BI__builtin_fabs:
487 case Builtin::BI__builtin_fabsf:
488 case Builtin::BI__builtin_fabsf16:
489 case Builtin::BI__builtin_fabsl:
490 case Builtin::BI__builtin_fabsf128:
492 case Builtin::BIfloor:
493 case Builtin::BIfloorf:
494 case Builtin::BIfloorl:
495 case Builtin::BI__builtin_floor:
496 case Builtin::BI__builtin_floorf:
497 case Builtin::BI__builtin_floorf16:
498 case Builtin::BI__builtin_floorl:
499 case Builtin::BI__builtin_floorf128:
501 case Builtin::BI__builtin_elementwise_floor:
503 case Builtin::BIfmaf:
504 case Builtin::BIfmal:
505 case Builtin::BI__builtin_fma:
506 case Builtin::BI__builtin_fmaf:
507 case Builtin::BI__builtin_fmaf16:
508 case Builtin::BI__builtin_fmal:
509 case Builtin::BI__builtin_fmaf128:
510 case Builtin::BI__builtin_elementwise_fma:
511 case Builtin::BIfmax:
512 case Builtin::BIfmaxf:
513 case Builtin::BIfmaxl:
514 case Builtin::BI__builtin_fmax:
515 case Builtin::BI__builtin_fmaxf:
516 case Builtin::BI__builtin_fmaxf16:
517 case Builtin::BI__builtin_fmaxl:
518 case Builtin::BI__builtin_fmaxf128:
519 case Builtin::BIfmin:
520 case Builtin::BIfminf:
521 case Builtin::BIfminl:
522 case Builtin::BI__builtin_fmin:
523 case Builtin::BI__builtin_fminf:
524 case Builtin::BI__builtin_fminf16:
525 case Builtin::BI__builtin_fminl:
526 case Builtin::BI__builtin_fminf128:
527 case Builtin::BIfmaximum_num:
528 case Builtin::BIfmaximum_numf:
529 case Builtin::BIfmaximum_numl:
530 case Builtin::BI__builtin_fmaximum_num:
531 case Builtin::BI__builtin_fmaximum_numf:
532 case Builtin::BI__builtin_fmaximum_numf16:
533 case Builtin::BI__builtin_fmaximum_numl:
534 case Builtin::BI__builtin_fmaximum_numf128:
535 case Builtin::BIfminimum_num:
536 case Builtin::BIfminimum_numf:
537 case Builtin::BIfminimum_numl:
538 case Builtin::BI__builtin_fminimum_num:
539 case Builtin::BI__builtin_fminimum_numf:
540 case Builtin::BI__builtin_fminimum_numf16:
541 case Builtin::BI__builtin_fminimum_numl:
542 case Builtin::BI__builtin_fminimum_numf128:
543 case Builtin::BIfmod:
544 case Builtin::BIfmodf:
545 case Builtin::BIfmodl:
546 case Builtin::BI__builtin_fmod:
547 case Builtin::BI__builtin_fmodf:
548 case Builtin::BI__builtin_fmodf16:
549 case Builtin::BI__builtin_fmodl:
550 case Builtin::BI__builtin_fmodf128:
551 case Builtin::BI__builtin_elementwise_fmod:
553 case Builtin::BIlogf:
554 case Builtin::BIlogl:
555 case Builtin::BI__builtin_log:
556 case Builtin::BI__builtin_logf:
557 case Builtin::BI__builtin_logf16:
558 case Builtin::BI__builtin_logl:
559 case Builtin::BI__builtin_logf128:
560 case Builtin::BI__builtin_elementwise_log:
561 case Builtin::BIlog10:
562 case Builtin::BIlog10f:
563 case Builtin::BIlog10l:
564 case Builtin::BI__builtin_log10:
565 case Builtin::BI__builtin_log10f:
566 case Builtin::BI__builtin_log10f16:
567 case Builtin::BI__builtin_log10l:
568 case Builtin::BI__builtin_log10f128:
569 case Builtin::BI__builtin_elementwise_log10:
570 case Builtin::BIlog2:
571 case Builtin::BIlog2f:
572 case Builtin::BIlog2l:
573 case Builtin::BI__builtin_log2:
574 case Builtin::BI__builtin_log2f:
575 case Builtin::BI__builtin_log2f16:
576 case Builtin::BI__builtin_log2l:
577 case Builtin::BI__builtin_log2f128:
578 case Builtin::BI__builtin_elementwise_log2:
579 case Builtin::BInearbyint:
580 case Builtin::BInearbyintf:
581 case Builtin::BInearbyintl:
582 case Builtin::BI__builtin_nearbyint:
583 case Builtin::BI__builtin_nearbyintf:
584 case Builtin::BI__builtin_nearbyintl:
585 case Builtin::BI__builtin_nearbyintf128:
586 case Builtin::BI__builtin_elementwise_nearbyint:
588 case Builtin::BIpowf:
589 case Builtin::BIpowl:
590 case Builtin::BI__builtin_pow:
591 case Builtin::BI__builtin_powf:
592 case Builtin::BI__builtin_powf16:
593 case Builtin::BI__builtin_powl:
594 case Builtin::BI__builtin_powf128:
595 case Builtin::BI__builtin_elementwise_pow:
596 case Builtin::BIrint:
597 case Builtin::BIrintf:
598 case Builtin::BIrintl:
599 case Builtin::BI__builtin_rint:
600 case Builtin::BI__builtin_rintf:
601 case Builtin::BI__builtin_rintf16:
602 case Builtin::BI__builtin_rintl:
603 case Builtin::BI__builtin_rintf128:
604 case Builtin::BI__builtin_elementwise_rint:
605 case Builtin::BIround:
606 case Builtin::BIroundf:
607 case Builtin::BIroundl:
608 case Builtin::BI__builtin_round:
609 case Builtin::BI__builtin_roundf:
610 case Builtin::BI__builtin_roundf16:
611 case Builtin::BI__builtin_roundl:
612 case Builtin::BI__builtin_roundf128:
613 case Builtin::BI__builtin_elementwise_round:
614 case Builtin::BIroundeven:
615 case Builtin::BIroundevenf:
616 case Builtin::BIroundevenl:
617 case Builtin::BI__builtin_roundeven:
618 case Builtin::BI__builtin_roundevenf:
619 case Builtin::BI__builtin_roundevenf16:
620 case Builtin::BI__builtin_roundevenl:
621 case Builtin::BI__builtin_roundevenf128:
622 case Builtin::BI__builtin_elementwise_roundeven:
624 case Builtin::BIsinf:
625 case Builtin::BIsinl:
626 case Builtin::BI__builtin_sin:
627 case Builtin::BI__builtin_sinf:
628 case Builtin::BI__builtin_sinf16:
629 case Builtin::BI__builtin_sinl:
630 case Builtin::BI__builtin_sinf128:
631 case Builtin::BI__builtin_elementwise_sin:
632 case Builtin::BIsinh:
633 case Builtin::BIsinhf:
634 case Builtin::BIsinhl:
635 case Builtin::BI__builtin_sinh:
636 case Builtin::BI__builtin_sinhf:
637 case Builtin::BI__builtin_sinhf16:
638 case Builtin::BI__builtin_sinhl:
639 case Builtin::BI__builtin_sinhf128:
640 case Builtin::BI__builtin_elementwise_sinh:
641 case Builtin::BI__builtin_sincospi:
642 case Builtin::BI__builtin_sincospif:
643 case Builtin::BI__builtin_sincospil:
644 case Builtin::BIsincos:
645 case Builtin::BIsincosf:
646 case Builtin::BIsincosl:
647 case Builtin::BI__builtin_sincos:
648 case Builtin::BI__builtin_sincosf:
649 case Builtin::BI__builtin_sincosf16:
650 case Builtin::BI__builtin_sincosl:
651 case Builtin::BI__builtin_sincosf128:
652 case Builtin::BIsqrt:
653 case Builtin::BIsqrtf:
654 case Builtin::BIsqrtl:
655 case Builtin::BI__builtin_sqrt:
656 case Builtin::BI__builtin_sqrtf:
657 case Builtin::BI__builtin_sqrtf16:
658 case Builtin::BI__builtin_sqrtl:
659 case Builtin::BI__builtin_sqrtf128:
660 case Builtin::BI__builtin_elementwise_sqrt:
662 case Builtin::BItanf:
663 case Builtin::BItanl:
664 case Builtin::BI__builtin_tan:
665 case Builtin::BI__builtin_tanf:
666 case Builtin::BI__builtin_tanf16:
667 case Builtin::BI__builtin_tanl:
668 case Builtin::BI__builtin_tanf128:
669 case Builtin::BI__builtin_elementwise_tan:
670 case Builtin::BItanh:
671 case Builtin::BItanhf:
672 case Builtin::BItanhl:
673 case Builtin::BI__builtin_tanh:
674 case Builtin::BI__builtin_tanhf:
675 case Builtin::BI__builtin_tanhf16:
676 case Builtin::BI__builtin_tanhl:
677 case Builtin::BI__builtin_tanhf128:
678 case Builtin::BI__builtin_elementwise_tanh:
679 case Builtin::BItrunc:
680 case Builtin::BItruncf:
681 case Builtin::BItruncl:
682 case Builtin::BI__builtin_trunc:
683 case Builtin::BI__builtin_truncf:
684 case Builtin::BI__builtin_truncf16:
685 case Builtin::BI__builtin_truncl:
686 case Builtin::BI__builtin_truncf128:
687 case Builtin::BI__builtin_elementwise_trunc:
688 case Builtin::BIlround:
689 case Builtin::BIlroundf:
690 case Builtin::BIlroundl:
691 case Builtin::BI__builtin_lround:
692 case Builtin::BI__builtin_lroundf:
693 case Builtin::BI__builtin_lroundl:
694 case Builtin::BI__builtin_lroundf128:
695 case Builtin::BIllround:
696 case Builtin::BIllroundf:
697 case Builtin::BIllroundl:
698 case Builtin::BI__builtin_llround:
699 case Builtin::BI__builtin_llroundf:
700 case Builtin::BI__builtin_llroundl:
701 case Builtin::BI__builtin_llroundf128:
702 case Builtin::BIlrint:
703 case Builtin::BIlrintf:
704 case Builtin::BIlrintl:
705 case Builtin::BI__builtin_lrint:
706 case Builtin::BI__builtin_lrintf:
707 case Builtin::BI__builtin_lrintl:
708 case Builtin::BI__builtin_lrintf128:
709 case Builtin::BIllrint:
710 case Builtin::BIllrintf:
711 case Builtin::BIllrintl:
712 case Builtin::BI__builtin_llrint:
713 case Builtin::BI__builtin_llrintf:
714 case Builtin::BI__builtin_llrintl:
715 case Builtin::BI__builtin_llrintf128:
716 case Builtin::BI__builtin_ldexp:
717 case Builtin::BI__builtin_ldexpf:
718 case Builtin::BI__builtin_ldexpl:
719 case Builtin::BI__builtin_ldexpf16:
720 case Builtin::BI__builtin_ldexpf128:
721 case Builtin::BI__builtin_elementwise_ldexp:
760 unsigned builtinIDIfNoAsmLabel = fd->
hasAttr<AsmLabelAttr>() ? 0 : builtinID;
762 bool generateFPMathIntrinsics =
765 if (generateFPMathIntrinsics) {
777 switch (builtinIDIfNoAsmLabel) {
782 case Builtin::BI__builtin_stdarg_start:
783 case Builtin::BI__builtin_va_start:
784 case Builtin::BI__va_start: {
785 mlir::Value vaList = builtinID == Builtin::BI__va_start
793 case Builtin::BI__builtin_va_end:
796 case Builtin::BI__builtin_va_copy: {
799 cir::VACopyOp::create(builder, dstPtr.getLoc(), dstPtr, srcPtr);
802 case Builtin::BI__assume:
803 case Builtin::BI__builtin_assume: {
808 cir::AssumeOp::create(builder, loc, argValue);
812 case Builtin::BI__builtin_assume_separate_storage: {
815 cir::AssumeSepStorageOp::create(builder, loc, value0, value1);
819 case Builtin::BI__builtin_assume_aligned: {
822 mlir::Value offsetValue =
825 std::optional<llvm::APSInt> alignment =
827 assert(alignment.has_value() &&
828 "the second argument to __builtin_assume_aligned must be an "
829 "integral constant expression");
833 alignment->getSExtValue(), offsetValue);
837 case Builtin::BI__builtin_complex: {
840 mlir::Value complex = builder.createComplexCreate(loc, real, imag);
844 case Builtin::BI__builtin_creal:
845 case Builtin::BI__builtin_crealf:
846 case Builtin::BI__builtin_creall:
847 case Builtin::BIcreal:
848 case Builtin::BIcrealf:
849 case Builtin::BIcreall: {
851 mlir::Value real = builder.createComplexReal(loc, complex);
855 case Builtin::BI__builtin_cimag:
856 case Builtin::BI__builtin_cimagf:
857 case Builtin::BI__builtin_cimagl:
858 case Builtin::BIcimag:
859 case Builtin::BIcimagf:
860 case Builtin::BIcimagl: {
862 mlir::Value imag = builder.createComplexImag(loc, complex);
866 case Builtin::BI__builtin_conj:
867 case Builtin::BI__builtin_conjf:
868 case Builtin::BI__builtin_conjl:
869 case Builtin::BIconj:
870 case Builtin::BIconjf:
871 case Builtin::BIconjl: {
874 cir::UnaryOpKind::Not, complex);
878 case Builtin::BI__builtin_clrsb:
879 case Builtin::BI__builtin_clrsbl:
880 case Builtin::BI__builtin_clrsbll:
883 case Builtin::BI__builtin_ctzs:
884 case Builtin::BI__builtin_ctz:
885 case Builtin::BI__builtin_ctzl:
886 case Builtin::BI__builtin_ctzll:
887 case Builtin::BI__builtin_ctzg:
891 case Builtin::BI__builtin_clzs:
892 case Builtin::BI__builtin_clz:
893 case Builtin::BI__builtin_clzl:
894 case Builtin::BI__builtin_clzll:
895 case Builtin::BI__builtin_clzg:
899 case Builtin::BI__builtin_ffs:
900 case Builtin::BI__builtin_ffsl:
901 case Builtin::BI__builtin_ffsll:
904 case Builtin::BI__builtin_parity:
905 case Builtin::BI__builtin_parityl:
906 case Builtin::BI__builtin_parityll:
909 case Builtin::BI__lzcnt16:
910 case Builtin::BI__lzcnt:
911 case Builtin::BI__lzcnt64:
915 case Builtin::BI__popcnt16:
916 case Builtin::BI__popcnt:
917 case Builtin::BI__popcnt64:
918 case Builtin::BI__builtin_popcount:
919 case Builtin::BI__builtin_popcountl:
920 case Builtin::BI__builtin_popcountll:
921 case Builtin::BI__builtin_popcountg:
924 case Builtin::BI__builtin_expect:
925 case Builtin::BI__builtin_expect_with_probability: {
929 mlir::FloatAttr probAttr;
930 if (builtinIDIfNoAsmLabel == Builtin::BI__builtin_expect_with_probability) {
931 llvm::APFloat probability(0.0);
933 [[maybe_unused]]
bool evalSucceeded =
935 assert(evalSucceeded &&
936 "probability should be able to evaluate as float");
937 bool loseInfo =
false;
938 probability.convert(llvm::APFloat::IEEEdouble(),
939 llvm::RoundingMode::Dynamic, &loseInfo);
940 probAttr = mlir::FloatAttr::get(mlir::Float64Type::get(&
getMLIRContext()),
944 auto result = cir::ExpectOp::create(builder, loc, argValue.getType(),
945 argValue, expectedValue, probAttr);
949 case Builtin::BI__builtin_bswap16:
950 case Builtin::BI__builtin_bswap32:
951 case Builtin::BI__builtin_bswap64:
952 case Builtin::BI_byteswap_ushort:
953 case Builtin::BI_byteswap_ulong:
954 case Builtin::BI_byteswap_uint64: {
956 return RValue::get(cir::ByteSwapOp::create(builder, loc, arg));
959 case Builtin::BI__builtin_bitreverse8:
960 case Builtin::BI__builtin_bitreverse16:
961 case Builtin::BI__builtin_bitreverse32:
962 case Builtin::BI__builtin_bitreverse64: {
964 return RValue::get(cir::BitReverseOp::create(builder, loc, arg));
967 case Builtin::BI__builtin_rotateleft8:
968 case Builtin::BI__builtin_rotateleft16:
969 case Builtin::BI__builtin_rotateleft32:
970 case Builtin::BI__builtin_rotateleft64:
973 case Builtin::BI__builtin_rotateright8:
974 case Builtin::BI__builtin_rotateright16:
975 case Builtin::BI__builtin_rotateright32:
976 case Builtin::BI__builtin_rotateright64:
979 case Builtin::BI__builtin_coro_id:
980 case Builtin::BI__builtin_coro_promise:
981 case Builtin::BI__builtin_coro_resume:
982 case Builtin::BI__builtin_coro_noop:
983 case Builtin::BI__builtin_coro_destroy:
984 case Builtin::BI__builtin_coro_done:
985 case Builtin::BI__builtin_coro_alloc:
986 case Builtin::BI__builtin_coro_begin:
987 case Builtin::BI__builtin_coro_end:
988 case Builtin::BI__builtin_coro_suspend:
989 case Builtin::BI__builtin_coro_align:
993 case Builtin::BI__builtin_coro_frame: {
996 case Builtin::BI__builtin_coro_free:
997 case Builtin::BI__builtin_coro_size: {
999 mlir::Type ty =
cgm.getTypes().getFunctionType(
1000 cgm.getTypes().arrangeGlobalDeclaration(gd));
1003 cgm.getOrCreateCIRFunction(nd->getName(), ty, gd,
false);
1004 fnOp.setBuiltin(
true);
1009 case Builtin::BI__builtin_constant_p: {
1022 mlir::cast<cir::IntType>(resultType), 0));
1030 mlir::cast<cir::IntType>(resultType), 0));
1036 "__builtin_constant_p: Obj-C object pointer");
1039 argValue = builder.createBitcast(argValue,
convertType(argType));
1041 mlir::Value result = cir::IsConstantOp::create(
1044 result = builder.createBoolToInt(result, resultType);
1047 case Builtin::BI__builtin_dynamic_object_size:
1048 case Builtin::BI__builtin_object_size: {
1055 bool isDynamic = builtinID == Builtin::BI__builtin_dynamic_object_size;
1057 nullptr, isDynamic));
1060 case Builtin::BI__builtin_prefetch: {
1061 auto evaluateOperandAsInt = [&](
const Expr *arg) {
1063 [[maybe_unused]]
bool evalSucceed =
1064 arg->EvaluateAsInt(res,
cgm.getASTContext());
1065 assert(evalSucceed &&
"expression should be able to evaluate as int");
1069 bool isWrite =
false;
1071 isWrite = evaluateOperandAsInt(e->
getArg(1));
1075 locality = evaluateOperandAsInt(e->
getArg(2));
1078 cir::PrefetchOp::create(builder, loc, address, locality, isWrite);
1081 case Builtin::BI__builtin_readcyclecounter:
1082 case Builtin::BI__builtin_readsteadycounter:
1083 case Builtin::BI__builtin___clear_cache:
1085 case Builtin::BI__builtin_trap:
1088 case Builtin::BI__builtin_verbose_trap:
1089 case Builtin::BI__debugbreak:
1091 case Builtin::BI__builtin_unreachable:
1094 case Builtin::BI__builtin_powi:
1095 case Builtin::BI__builtin_powif:
1096 case Builtin::BI__builtin_powil:
1097 case Builtin::BI__builtin_frexpl:
1098 case Builtin::BI__builtin_frexp:
1099 case Builtin::BI__builtin_frexpf:
1100 case Builtin::BI__builtin_frexpf128:
1101 case Builtin::BI__builtin_frexpf16:
1102 case Builtin::BImodf:
1103 case Builtin::BImodff:
1104 case Builtin::BImodfl:
1105 case Builtin::BI__builtin_modf:
1106 case Builtin::BI__builtin_modff:
1107 case Builtin::BI__builtin_modfl:
1108 case Builtin::BI__builtin_isgreater:
1109 case Builtin::BI__builtin_isgreaterequal:
1110 case Builtin::BI__builtin_isless:
1111 case Builtin::BI__builtin_islessequal:
1112 case Builtin::BI__builtin_islessgreater:
1113 case Builtin::BI__builtin_isunordered:
1120 case Builtin::BI__builtin_isnan: {
1126 builder.createIsFPClass(loc, v, cir::FPClassTest::Nan),
1130 case Builtin::BI__builtin_issignaling: {
1135 builder.createIsFPClass(loc, v, cir::FPClassTest::SignalingNaN),
1139 case Builtin::BI__builtin_isinf: {
1145 builder.createIsFPClass(loc, v, cir::FPClassTest::Infinity),
1148 case Builtin::BIfinite:
1149 case Builtin::BI__finite:
1150 case Builtin::BIfinitef:
1151 case Builtin::BI__finitef:
1152 case Builtin::BIfinitel:
1153 case Builtin::BI__finitel:
1154 case Builtin::BI__builtin_isfinite: {
1160 builder.createIsFPClass(loc, v, cir::FPClassTest::Finite),
1164 case Builtin::BI__builtin_isnormal: {
1169 builder.createIsFPClass(loc, v, cir::FPClassTest::Normal),
1173 case Builtin::BI__builtin_issubnormal: {
1178 builder.createIsFPClass(loc, v, cir::FPClassTest::Subnormal),
1182 case Builtin::BI__builtin_iszero: {
1187 builder.createIsFPClass(loc, v, cir::FPClassTest::Zero),
1190 case Builtin::BI__builtin_isfpclass: {
1197 uint64_t test = result.
Val.
getInt().getLimitedValue();
1201 builder.createIsFPClass(loc, v, cir::FPClassTest(test)),
1204 case Builtin::BI__builtin_nondeterministic_value:
1205 case Builtin::BI__builtin_elementwise_abs:
1207 case Builtin::BI__builtin_elementwise_acos:
1209 case Builtin::BI__builtin_elementwise_asin:
1211 case Builtin::BI__builtin_elementwise_atan:
1213 case Builtin::BI__builtin_elementwise_atan2:
1214 case Builtin::BI__builtin_elementwise_ceil:
1215 case Builtin::BI__builtin_elementwise_exp:
1216 case Builtin::BI__builtin_elementwise_exp2:
1217 case Builtin::BI__builtin_elementwise_exp10:
1218 case Builtin::BI__builtin_elementwise_ldexp:
1219 case Builtin::BI__builtin_elementwise_log:
1220 case Builtin::BI__builtin_elementwise_log2:
1221 case Builtin::BI__builtin_elementwise_log10:
1222 case Builtin::BI__builtin_elementwise_pow:
1223 case Builtin::BI__builtin_elementwise_bitreverse:
1225 case Builtin::BI__builtin_elementwise_cos:
1227 case Builtin::BI__builtin_elementwise_cosh:
1228 case Builtin::BI__builtin_elementwise_floor:
1229 case Builtin::BI__builtin_elementwise_popcount:
1230 case Builtin::BI__builtin_elementwise_roundeven:
1231 case Builtin::BI__builtin_elementwise_round:
1232 case Builtin::BI__builtin_elementwise_rint:
1233 case Builtin::BI__builtin_elementwise_nearbyint:
1234 case Builtin::BI__builtin_elementwise_sin:
1235 case Builtin::BI__builtin_elementwise_sinh:
1236 case Builtin::BI__builtin_elementwise_tan:
1237 case Builtin::BI__builtin_elementwise_tanh:
1238 case Builtin::BI__builtin_elementwise_trunc:
1239 case Builtin::BI__builtin_elementwise_canonicalize:
1240 case Builtin::BI__builtin_elementwise_copysign:
1241 case Builtin::BI__builtin_elementwise_fma:
1242 case Builtin::BI__builtin_elementwise_fshl:
1243 case Builtin::BI__builtin_elementwise_fshr:
1244 case Builtin::BI__builtin_elementwise_add_sat:
1245 case Builtin::BI__builtin_elementwise_sub_sat:
1246 case Builtin::BI__builtin_elementwise_max:
1247 case Builtin::BI__builtin_elementwise_min:
1248 case Builtin::BI__builtin_elementwise_maxnum:
1249 case Builtin::BI__builtin_elementwise_minnum:
1250 case Builtin::BI__builtin_elementwise_maximum:
1251 case Builtin::BI__builtin_elementwise_minimum:
1252 case Builtin::BI__builtin_elementwise_maximumnum:
1253 case Builtin::BI__builtin_elementwise_minimumnum:
1254 case Builtin::BI__builtin_reduce_max:
1255 case Builtin::BI__builtin_reduce_min:
1256 case Builtin::BI__builtin_reduce_add:
1257 case Builtin::BI__builtin_reduce_mul:
1258 case Builtin::BI__builtin_reduce_xor:
1259 case Builtin::BI__builtin_reduce_or:
1260 case Builtin::BI__builtin_reduce_and:
1261 case Builtin::BI__builtin_reduce_maximum:
1262 case Builtin::BI__builtin_reduce_minimum:
1263 case Builtin::BI__builtin_matrix_transpose:
1264 case Builtin::BI__builtin_matrix_column_major_load:
1265 case Builtin::BI__builtin_matrix_column_major_store:
1266 case Builtin::BI__builtin_masked_load:
1267 case Builtin::BI__builtin_masked_expand_load:
1268 case Builtin::BI__builtin_masked_gather:
1269 case Builtin::BI__builtin_masked_store:
1270 case Builtin::BI__builtin_masked_compress_store:
1271 case Builtin::BI__builtin_masked_scatter:
1272 case Builtin::BI__builtin_isinf_sign:
1273 case Builtin::BI__builtin_flt_rounds:
1274 case Builtin::BI__builtin_set_flt_rounds:
1275 case Builtin::BI__builtin_fpclassify:
1277 case Builtin::BIalloca:
1278 case Builtin::BI_alloca:
1279 case Builtin::BI__builtin_alloca_uninitialized:
1280 case Builtin::BI__builtin_alloca:
1282 case Builtin::BI__builtin_alloca_with_align_uninitialized:
1283 case Builtin::BI__builtin_alloca_with_align:
1284 case Builtin::BI__builtin_infer_alloc_token:
1285 case Builtin::BIbzero:
1286 case Builtin::BI__builtin_bzero:
1287 case Builtin::BIbcopy:
1288 case Builtin::BI__builtin_bcopy:
1290 case Builtin::BImemcpy:
1291 case Builtin::BI__builtin_memcpy:
1292 case Builtin::BImempcpy:
1293 case Builtin::BI__builtin_mempcpy:
1294 case Builtin::BI__builtin_memcpy_inline:
1295 case Builtin::BI__builtin_char_memchr:
1296 case Builtin::BI__builtin___memcpy_chk:
1297 case Builtin::BI__builtin_objc_memmove_collectable:
1298 case Builtin::BI__builtin___memmove_chk:
1299 case Builtin::BI__builtin_trivially_relocate:
1300 case Builtin::BImemmove:
1301 case Builtin::BI__builtin_memmove:
1302 case Builtin::BImemset:
1303 case Builtin::BI__builtin_memset:
1304 case Builtin::BI__builtin_memset_inline:
1305 case Builtin::BI__builtin___memset_chk:
1306 case Builtin::BI__builtin_wmemchr:
1307 case Builtin::BI__builtin_wmemcmp:
1309 case Builtin::BI__builtin_dwarf_cfa:
1311 case Builtin::BI__builtin_return_address: {
1315 builder.getConstAPInt(loc, builder.getUInt32Ty(), level)));
1317 case Builtin::BI_ReturnAddress: {
1320 builder.getConstInt(loc, builder.getUInt32Ty(), 0)));
1322 case Builtin::BI__builtin_frame_address: {
1325 mlir::Value addr = cir::FrameAddrOp::create(
1327 builder.getConstAPInt(loc, builder.getUInt32Ty(), level));
1329 builder.createCast(loc, cir::CastKind::bitcast, addr,
voidPtrTy));
1331 case Builtin::BI__builtin_extract_return_addr:
1332 case Builtin::BI__builtin_frob_return_addr:
1333 case Builtin::BI__builtin_dwarf_sp_column:
1334 case Builtin::BI__builtin_init_dwarf_reg_size_table:
1335 case Builtin::BI__builtin_eh_return:
1336 case Builtin::BI__builtin_unwind_init:
1337 case Builtin::BI__builtin_extend_pointer:
1338 case Builtin::BI__builtin_setjmp:
1339 case Builtin::BI__builtin_longjmp:
1340 case Builtin::BI__builtin_launder:
1341 case Builtin::BI__sync_fetch_and_add:
1342 case Builtin::BI__sync_fetch_and_sub:
1343 case Builtin::BI__sync_fetch_and_or:
1344 case Builtin::BI__sync_fetch_and_and:
1345 case Builtin::BI__sync_fetch_and_xor:
1346 case Builtin::BI__sync_fetch_and_nand:
1347 case Builtin::BI__sync_add_and_fetch:
1348 case Builtin::BI__sync_sub_and_fetch:
1349 case Builtin::BI__sync_and_and_fetch:
1350 case Builtin::BI__sync_or_and_fetch:
1351 case Builtin::BI__sync_xor_and_fetch:
1352 case Builtin::BI__sync_nand_and_fetch:
1353 case Builtin::BI__sync_val_compare_and_swap:
1354 case Builtin::BI__sync_bool_compare_and_swap:
1355 case Builtin::BI__sync_lock_test_and_set:
1356 case Builtin::BI__sync_lock_release:
1357 case Builtin::BI__sync_swap:
1358 case Builtin::BI__sync_fetch_and_add_1:
1359 case Builtin::BI__sync_fetch_and_add_2:
1360 case Builtin::BI__sync_fetch_and_add_4:
1361 case Builtin::BI__sync_fetch_and_add_8:
1362 case Builtin::BI__sync_fetch_and_add_16:
1363 case Builtin::BI__sync_fetch_and_sub_1:
1364 case Builtin::BI__sync_fetch_and_sub_2:
1365 case Builtin::BI__sync_fetch_and_sub_4:
1366 case Builtin::BI__sync_fetch_and_sub_8:
1367 case Builtin::BI__sync_fetch_and_sub_16:
1368 case Builtin::BI__sync_fetch_and_or_1:
1369 case Builtin::BI__sync_fetch_and_or_2:
1370 case Builtin::BI__sync_fetch_and_or_4:
1371 case Builtin::BI__sync_fetch_and_or_8:
1372 case Builtin::BI__sync_fetch_and_or_16:
1373 case Builtin::BI__sync_fetch_and_and_1:
1374 case Builtin::BI__sync_fetch_and_and_2:
1375 case Builtin::BI__sync_fetch_and_and_4:
1376 case Builtin::BI__sync_fetch_and_and_8:
1377 case Builtin::BI__sync_fetch_and_and_16:
1378 case Builtin::BI__sync_fetch_and_xor_1:
1379 case Builtin::BI__sync_fetch_and_xor_2:
1380 case Builtin::BI__sync_fetch_and_xor_4:
1381 case Builtin::BI__sync_fetch_and_xor_8:
1382 case Builtin::BI__sync_fetch_and_xor_16:
1383 case Builtin::BI__sync_fetch_and_nand_1:
1384 case Builtin::BI__sync_fetch_and_nand_2:
1385 case Builtin::BI__sync_fetch_and_nand_4:
1386 case Builtin::BI__sync_fetch_and_nand_8:
1387 case Builtin::BI__sync_fetch_and_nand_16:
1388 case Builtin::BI__sync_fetch_and_min:
1389 case Builtin::BI__sync_fetch_and_max:
1390 case Builtin::BI__sync_fetch_and_umin:
1391 case Builtin::BI__sync_fetch_and_umax:
1394 case Builtin::BI__sync_add_and_fetch_1:
1395 case Builtin::BI__sync_add_and_fetch_2:
1396 case Builtin::BI__sync_add_and_fetch_4:
1397 case Builtin::BI__sync_add_and_fetch_8:
1398 case Builtin::BI__sync_add_and_fetch_16:
1400 cir::BinOpKind::Add);
1401 case Builtin::BI__sync_sub_and_fetch_1:
1402 case Builtin::BI__sync_sub_and_fetch_2:
1403 case Builtin::BI__sync_sub_and_fetch_4:
1404 case Builtin::BI__sync_sub_and_fetch_8:
1405 case Builtin::BI__sync_sub_and_fetch_16:
1407 cir::BinOpKind::Sub);
1408 case Builtin::BI__sync_and_and_fetch_1:
1409 case Builtin::BI__sync_and_and_fetch_2:
1410 case Builtin::BI__sync_and_and_fetch_4:
1411 case Builtin::BI__sync_and_and_fetch_8:
1412 case Builtin::BI__sync_and_and_fetch_16:
1414 cir::BinOpKind::And);
1415 case Builtin::BI__sync_or_and_fetch_1:
1416 case Builtin::BI__sync_or_and_fetch_2:
1417 case Builtin::BI__sync_or_and_fetch_4:
1418 case Builtin::BI__sync_or_and_fetch_8:
1419 case Builtin::BI__sync_or_and_fetch_16:
1421 cir::BinOpKind::Or);
1422 case Builtin::BI__sync_xor_and_fetch_1:
1423 case Builtin::BI__sync_xor_and_fetch_2:
1424 case Builtin::BI__sync_xor_and_fetch_4:
1425 case Builtin::BI__sync_xor_and_fetch_8:
1426 case Builtin::BI__sync_xor_and_fetch_16:
1428 cir::BinOpKind::Xor);
1429 case Builtin::BI__sync_nand_and_fetch_1:
1430 case Builtin::BI__sync_nand_and_fetch_2:
1431 case Builtin::BI__sync_nand_and_fetch_4:
1432 case Builtin::BI__sync_nand_and_fetch_8:
1433 case Builtin::BI__sync_nand_and_fetch_16:
1435 cir::BinOpKind::And,
true);
1436 case Builtin::BI__sync_val_compare_and_swap_1:
1437 case Builtin::BI__sync_val_compare_and_swap_2:
1438 case Builtin::BI__sync_val_compare_and_swap_4:
1439 case Builtin::BI__sync_val_compare_and_swap_8:
1440 case Builtin::BI__sync_val_compare_and_swap_16:
1441 case Builtin::BI__sync_bool_compare_and_swap_1:
1442 case Builtin::BI__sync_bool_compare_and_swap_2:
1443 case Builtin::BI__sync_bool_compare_and_swap_4:
1444 case Builtin::BI__sync_bool_compare_and_swap_8:
1445 case Builtin::BI__sync_bool_compare_and_swap_16:
1446 case Builtin::BI__sync_swap_1:
1447 case Builtin::BI__sync_swap_2:
1448 case Builtin::BI__sync_swap_4:
1449 case Builtin::BI__sync_swap_8:
1450 case Builtin::BI__sync_swap_16:
1451 case Builtin::BI__sync_lock_test_and_set_1:
1452 case Builtin::BI__sync_lock_test_and_set_2:
1453 case Builtin::BI__sync_lock_test_and_set_4:
1454 case Builtin::BI__sync_lock_test_and_set_8:
1455 case Builtin::BI__sync_lock_test_and_set_16:
1456 case Builtin::BI__sync_lock_release_1:
1457 case Builtin::BI__sync_lock_release_2:
1458 case Builtin::BI__sync_lock_release_4:
1459 case Builtin::BI__sync_lock_release_8:
1460 case Builtin::BI__sync_lock_release_16:
1461 case Builtin::BI__sync_synchronize:
1462 case Builtin::BI__builtin_nontemporal_load:
1463 case Builtin::BI__builtin_nontemporal_store:
1464 case Builtin::BI__c11_atomic_is_lock_free:
1465 case Builtin::BI__atomic_is_lock_free:
1466 case Builtin::BI__atomic_test_and_set:
1467 case Builtin::BI__atomic_clear:
1469 case Builtin::BI__atomic_thread_fence:
1470 case Builtin::BI__c11_atomic_thread_fence: {
1474 case Builtin::BI__atomic_signal_fence:
1475 case Builtin::BI__c11_atomic_signal_fence: {
1479 case Builtin::BI__scoped_atomic_thread_fence:
1480 case Builtin::BI__builtin_signbit:
1481 case Builtin::BI__builtin_signbitf:
1482 case Builtin::BI__builtin_signbitl:
1483 case Builtin::BI__warn_memset_zero_len:
1484 case Builtin::BI__annotation:
1485 case Builtin::BI__builtin_annotation:
1486 case Builtin::BI__builtin_addcb:
1487 case Builtin::BI__builtin_addcs:
1488 case Builtin::BI__builtin_addc:
1489 case Builtin::BI__builtin_addcl:
1490 case Builtin::BI__builtin_addcll:
1491 case Builtin::BI__builtin_subcb:
1492 case Builtin::BI__builtin_subcs:
1493 case Builtin::BI__builtin_subc:
1494 case Builtin::BI__builtin_subcl:
1495 case Builtin::BI__builtin_subcll:
1498 case Builtin::BI__builtin_add_overflow:
1499 case Builtin::BI__builtin_sub_overflow:
1500 case Builtin::BI__builtin_mul_overflow: {
1508 WidthAndSignedness leftInfo =
1510 WidthAndSignedness rightInfo =
1512 WidthAndSignedness resultInfo =
1518 WidthAndSignedness encompassingInfo =
1521 auto encompassingCIRTy = cir::IntType::get(
1522 &
getMLIRContext(), encompassingInfo.width, encompassingInfo.isSigned);
1523 auto resultCIRTy = mlir::cast<cir::IntType>(
cgm.convertType(resultQTy));
1530 if (left.getType() != encompassingCIRTy)
1532 builder.createCast(cir::CastKind::integral, left, encompassingCIRTy);
1533 if (right.getType() != encompassingCIRTy)
1535 builder.createCast(cir::CastKind::integral, right, encompassingCIRTy);
1538 cir::BinOpOverflowKind opKind;
1539 switch (builtinID) {
1541 llvm_unreachable(
"Unknown overflow builtin id.");
1542 case Builtin::BI__builtin_add_overflow:
1543 opKind = cir::BinOpOverflowKind::Add;
1545 case Builtin::BI__builtin_sub_overflow:
1546 opKind = cir::BinOpOverflowKind::Sub;
1548 case Builtin::BI__builtin_mul_overflow:
1549 opKind = cir::BinOpOverflowKind::Mul;
1554 auto arithOp = cir::BinOpOverflowOp::create(builder, loc, resultCIRTy,
1555 opKind, left, right);
1569 builder.createStore(loc, arithOp.getResult(), resultPtr, isVolatile);
1574 case Builtin::BI__builtin_uadd_overflow:
1575 case Builtin::BI__builtin_uaddl_overflow:
1576 case Builtin::BI__builtin_uaddll_overflow:
1577 case Builtin::BI__builtin_usub_overflow:
1578 case Builtin::BI__builtin_usubl_overflow:
1579 case Builtin::BI__builtin_usubll_overflow:
1580 case Builtin::BI__builtin_umul_overflow:
1581 case Builtin::BI__builtin_umull_overflow:
1582 case Builtin::BI__builtin_umulll_overflow:
1583 case Builtin::BI__builtin_sadd_overflow:
1584 case Builtin::BI__builtin_saddl_overflow:
1585 case Builtin::BI__builtin_saddll_overflow:
1586 case Builtin::BI__builtin_ssub_overflow:
1587 case Builtin::BI__builtin_ssubl_overflow:
1588 case Builtin::BI__builtin_ssubll_overflow:
1589 case Builtin::BI__builtin_smul_overflow:
1590 case Builtin::BI__builtin_smull_overflow:
1591 case Builtin::BI__builtin_smulll_overflow: {
1600 cir::BinOpOverflowKind arithKind;
1601 switch (builtinID) {
1603 llvm_unreachable(
"Unknown overflow builtin id.");
1604 case Builtin::BI__builtin_uadd_overflow:
1605 case Builtin::BI__builtin_uaddl_overflow:
1606 case Builtin::BI__builtin_uaddll_overflow:
1607 case Builtin::BI__builtin_sadd_overflow:
1608 case Builtin::BI__builtin_saddl_overflow:
1609 case Builtin::BI__builtin_saddll_overflow:
1610 arithKind = cir::BinOpOverflowKind::Add;
1612 case Builtin::BI__builtin_usub_overflow:
1613 case Builtin::BI__builtin_usubl_overflow:
1614 case Builtin::BI__builtin_usubll_overflow:
1615 case Builtin::BI__builtin_ssub_overflow:
1616 case Builtin::BI__builtin_ssubl_overflow:
1617 case Builtin::BI__builtin_ssubll_overflow:
1618 arithKind = cir::BinOpOverflowKind::Sub;
1620 case Builtin::BI__builtin_umul_overflow:
1621 case Builtin::BI__builtin_umull_overflow:
1622 case Builtin::BI__builtin_umulll_overflow:
1623 case Builtin::BI__builtin_smul_overflow:
1624 case Builtin::BI__builtin_smull_overflow:
1625 case Builtin::BI__builtin_smulll_overflow:
1626 arithKind = cir::BinOpOverflowKind::Mul;
1632 auto resultCIRTy = mlir::cast<cir::IntType>(
cgm.convertType(resultQTy));
1635 cir::BinOpOverflowOp arithOp = cir::BinOpOverflowOp::create(
1636 builder, loc, resultCIRTy, arithKind, x, y);
1640 builder.createStore(loc,
emitToMemory(arithOp.getResult(), resultQTy),
1641 resultPtr, isVolatile);
1646 case Builtin::BIaddressof:
1647 case Builtin::BI__addressof:
1648 case Builtin::BI__builtin_addressof:
1649 case Builtin::BI__builtin_function_start:
1651 case Builtin::BI__builtin_operator_new:
1654 case Builtin::BI__builtin_operator_delete:
1658 case Builtin::BI__builtin_is_aligned:
1659 case Builtin::BI__builtin_align_up:
1660 case Builtin::BI__builtin_align_down:
1661 case Builtin::BI__noop:
1662 case Builtin::BI__builtin_call_with_static_chain:
1663 case Builtin::BI_InterlockedExchange8:
1664 case Builtin::BI_InterlockedExchange16:
1665 case Builtin::BI_InterlockedExchange:
1666 case Builtin::BI_InterlockedExchangePointer:
1667 case Builtin::BI_InterlockedCompareExchangePointer:
1668 case Builtin::BI_InterlockedCompareExchangePointer_nf:
1669 case Builtin::BI_InterlockedCompareExchange8:
1670 case Builtin::BI_InterlockedCompareExchange16:
1671 case Builtin::BI_InterlockedCompareExchange:
1672 case Builtin::BI_InterlockedCompareExchange64:
1673 case Builtin::BI_InterlockedIncrement16:
1674 case Builtin::BI_InterlockedIncrement:
1675 case Builtin::BI_InterlockedDecrement16:
1676 case Builtin::BI_InterlockedDecrement:
1677 case Builtin::BI_InterlockedAnd8:
1678 case Builtin::BI_InterlockedAnd16:
1679 case Builtin::BI_InterlockedAnd:
1680 case Builtin::BI_InterlockedExchangeAdd8:
1681 case Builtin::BI_InterlockedExchangeAdd16:
1682 case Builtin::BI_InterlockedExchangeAdd:
1683 case Builtin::BI_InterlockedExchangeSub8:
1684 case Builtin::BI_InterlockedExchangeSub16:
1685 case Builtin::BI_InterlockedExchangeSub:
1686 case Builtin::BI_InterlockedOr8:
1687 case Builtin::BI_InterlockedOr16:
1688 case Builtin::BI_InterlockedOr:
1689 case Builtin::BI_InterlockedXor8:
1690 case Builtin::BI_InterlockedXor16:
1691 case Builtin::BI_InterlockedXor:
1692 case Builtin::BI_bittest64:
1693 case Builtin::BI_bittest:
1694 case Builtin::BI_bittestandcomplement64:
1695 case Builtin::BI_bittestandcomplement:
1696 case Builtin::BI_bittestandreset64:
1697 case Builtin::BI_bittestandreset:
1698 case Builtin::BI_bittestandset64:
1699 case Builtin::BI_bittestandset:
1700 case Builtin::BI_interlockedbittestandreset:
1701 case Builtin::BI_interlockedbittestandreset64:
1702 case Builtin::BI_interlockedbittestandreset64_acq:
1703 case Builtin::BI_interlockedbittestandreset64_rel:
1704 case Builtin::BI_interlockedbittestandreset64_nf:
1705 case Builtin::BI_interlockedbittestandset64:
1706 case Builtin::BI_interlockedbittestandset64_acq:
1707 case Builtin::BI_interlockedbittestandset64_rel:
1708 case Builtin::BI_interlockedbittestandset64_nf:
1709 case Builtin::BI_interlockedbittestandset:
1710 case Builtin::BI_interlockedbittestandset_acq:
1711 case Builtin::BI_interlockedbittestandset_rel:
1712 case Builtin::BI_interlockedbittestandset_nf:
1713 case Builtin::BI_interlockedbittestandreset_acq:
1714 case Builtin::BI_interlockedbittestandreset_rel:
1715 case Builtin::BI_interlockedbittestandreset_nf:
1716 case Builtin::BI__iso_volatile_load8:
1717 case Builtin::BI__iso_volatile_load16:
1718 case Builtin::BI__iso_volatile_load32:
1719 case Builtin::BI__iso_volatile_load64:
1720 case Builtin::BI__iso_volatile_store8:
1721 case Builtin::BI__iso_volatile_store16:
1722 case Builtin::BI__iso_volatile_store32:
1723 case Builtin::BI__iso_volatile_store64:
1724 case Builtin::BI__builtin_ptrauth_sign_constant:
1725 case Builtin::BI__builtin_ptrauth_auth:
1726 case Builtin::BI__builtin_ptrauth_auth_and_resign:
1727 case Builtin::BI__builtin_ptrauth_blend_discriminator:
1728 case Builtin::BI__builtin_ptrauth_sign_generic_data:
1729 case Builtin::BI__builtin_ptrauth_sign_unauthenticated:
1730 case Builtin::BI__builtin_ptrauth_strip:
1731 case Builtin::BI__builtin_get_vtable_pointer:
1732 case Builtin::BI__exception_code:
1733 case Builtin::BI_exception_code:
1734 case Builtin::BI__exception_info:
1735 case Builtin::BI_exception_info:
1736 case Builtin::BI__abnormal_termination:
1737 case Builtin::BI_abnormal_termination:
1738 case Builtin::BI_setjmpex:
1739 case Builtin::BI_setjmp:
1740 case Builtin::BImove:
1741 case Builtin::BImove_if_noexcept:
1742 case Builtin::BIforward:
1743 case Builtin::BIforward_like:
1744 case Builtin::BIas_const:
1745 case Builtin::BI__GetExceptionInfo:
1746 case Builtin::BI__fastfail:
1747 case Builtin::BIread_pipe:
1748 case Builtin::BIwrite_pipe:
1749 case Builtin::BIreserve_read_pipe:
1750 case Builtin::BIreserve_write_pipe:
1751 case Builtin::BIwork_group_reserve_read_pipe:
1752 case Builtin::BIwork_group_reserve_write_pipe:
1753 case Builtin::BIsub_group_reserve_read_pipe:
1754 case Builtin::BIsub_group_reserve_write_pipe:
1755 case Builtin::BIcommit_read_pipe:
1756 case Builtin::BIcommit_write_pipe:
1757 case Builtin::BIwork_group_commit_read_pipe:
1758 case Builtin::BIwork_group_commit_write_pipe:
1759 case Builtin::BIsub_group_commit_read_pipe:
1760 case Builtin::BIsub_group_commit_write_pipe:
1761 case Builtin::BIget_pipe_num_packets:
1762 case Builtin::BIget_pipe_max_packets:
1763 case Builtin::BIto_global:
1764 case Builtin::BIto_local:
1765 case Builtin::BIto_private:
1766 case Builtin::BIenqueue_kernel:
1767 case Builtin::BIget_kernel_work_group_size:
1768 case Builtin::BIget_kernel_preferred_work_group_size_multiple:
1769 case Builtin::BIget_kernel_max_sub_group_size_for_ndrange:
1770 case Builtin::BIget_kernel_sub_group_count_for_ndrange:
1771 case Builtin::BI__builtin_store_half:
1772 case Builtin::BI__builtin_store_halff:
1773 case Builtin::BI__builtin_load_half:
1774 case Builtin::BI__builtin_load_halff:
1776 case Builtin::BI__builtin_printf:
1777 case Builtin::BIprintf:
1779 case Builtin::BI__builtin_canonicalize:
1780 case Builtin::BI__builtin_canonicalizef:
1781 case Builtin::BI__builtin_canonicalizef16:
1782 case Builtin::BI__builtin_canonicalizel:
1783 case Builtin::BI__builtin_thread_pointer:
1784 case Builtin::BI__builtin_os_log_format:
1785 case Builtin::BI__xray_customevent:
1786 case Builtin::BI__xray_typedevent:
1787 case Builtin::BI__builtin_ms_va_start:
1788 case Builtin::BI__builtin_ms_va_end:
1789 case Builtin::BI__builtin_ms_va_copy:
1790 case Builtin::BI__builtin_get_device_side_mangled_name:
1797 if (
getContext().BuiltinInfo.isLibFunction(builtinID))
1799 cgm.getBuiltinLibFunction(fd, builtinID));
1817 if (std::optional<mlir::Value> rst =
1819 mlir::Value v = rst.value();
1827 if (mlir::isa<cir::VoidType>(v.getType()))
1834 llvm_unreachable(
"No current target builtin returns complex");
1836 llvm_unreachable(
"Bad evaluation kind in EmitBuiltinExpr");
1840 std::string(
"unimplemented builtin call: ") +
1841 getContext().BuiltinInfo.getName(builtinID));