440 unsigned altLLVMIntrinsic,
const char *nameHint,
unsigned modifier,
443 mlir::Location loc = cgf.
getLoc(
expr->getExprLoc());
450 std::optional<llvm::APSInt> neonTypeConst = arg->getIntegerConstantExpr(ctx);
467 cir::VectorType vTy =
getNeonType(&cgf, neonType, loc, hasLegalHalfType,
468 false, allowBFloatArgsAndRet);
474 case NEON::BI__builtin_neon_splat_lane_v:
475 case NEON::BI__builtin_neon_splat_laneq_v:
476 case NEON::BI__builtin_neon_splatq_lane_v:
477 case NEON::BI__builtin_neon_splatq_laneq_v: {
478 uint64_t numElements = vTy.getSize();
479 if (builtinID == NEON::BI__builtin_neon_splatq_lane_v)
481 if (builtinID == NEON::BI__builtin_neon_splat_laneq_v)
486 case NEON::BI__builtin_neon_vpadd_v:
487 case NEON::BI__builtin_neon_vpaddq_v:
488 case NEON::BI__builtin_neon_vabs_v:
489 case NEON::BI__builtin_neon_vabsq_v:
490 case NEON::BI__builtin_neon_vadd_v:
491 case NEON::BI__builtin_neon_vaddq_v:
492 case NEON::BI__builtin_neon_vaddhn_v:
493 case NEON::BI__builtin_neon_vcale_v:
494 case NEON::BI__builtin_neon_vcaleq_v:
495 case NEON::BI__builtin_neon_vcalt_v:
496 case NEON::BI__builtin_neon_vcaltq_v:
497 case NEON::BI__builtin_neon_vcage_v:
498 case NEON::BI__builtin_neon_vcageq_v:
499 case NEON::BI__builtin_neon_vcagt_v:
500 case NEON::BI__builtin_neon_vcagtq_v:
502 std::string(
"unimplemented AArch64 builtin call: ") +
504 return mlir::Value{};
505 case NEON::BI__builtin_neon_vceqz_v:
506 case NEON::BI__builtin_neon_vceqzq_v:
508 vTy, cir::CmpOpKind::eq);
509 case NEON::BI__builtin_neon_vcgez_v:
510 case NEON::BI__builtin_neon_vcgezq_v:
511 case NEON::BI__builtin_neon_vclez_v:
512 case NEON::BI__builtin_neon_vclezq_v:
513 case NEON::BI__builtin_neon_vcgtz_v:
514 case NEON::BI__builtin_neon_vcgtzq_v:
515 case NEON::BI__builtin_neon_vcltz_v:
516 case NEON::BI__builtin_neon_vcltzq_v:
517 case NEON::BI__builtin_neon_vclz_v:
518 case NEON::BI__builtin_neon_vclzq_v:
519 case NEON::BI__builtin_neon_vcvt_f32_v:
520 case NEON::BI__builtin_neon_vcvtq_f32_v:
521 case NEON::BI__builtin_neon_vcvt_f16_s16:
522 case NEON::BI__builtin_neon_vcvt_f16_u16:
523 case NEON::BI__builtin_neon_vcvtq_f16_s16:
524 case NEON::BI__builtin_neon_vcvtq_f16_u16:
525 case NEON::BI__builtin_neon_vcvt_n_f16_s16:
526 case NEON::BI__builtin_neon_vcvt_n_f16_u16:
527 case NEON::BI__builtin_neon_vcvtq_n_f16_s16:
528 case NEON::BI__builtin_neon_vcvtq_n_f16_u16:
530 std::string(
"unimplemented AArch64 builtin call: ") +
532 return mlir::Value{};
533 case NEON::BI__builtin_neon_vcvt_n_f32_v:
534 case NEON::BI__builtin_neon_vcvt_n_f64_v:
535 case NEON::BI__builtin_neon_vcvtq_n_f32_v:
536 case NEON::BI__builtin_neon_vcvtq_n_f64_v: {
539 llvm::StringRef llvmIntrName =
541 usgn ? llvmIntrinsic : altLLVMIntrinsic));
543 {vTy, cstIntTy}, ops, llvmIntrName,
546 case NEON::BI__builtin_neon_vcvt_n_s16_f16:
547 case NEON::BI__builtin_neon_vcvt_n_s32_v:
548 case NEON::BI__builtin_neon_vcvt_n_u16_f16:
549 case NEON::BI__builtin_neon_vcvt_n_u32_v:
550 case NEON::BI__builtin_neon_vcvt_n_s64_v:
551 case NEON::BI__builtin_neon_vcvt_n_u64_v:
552 case NEON::BI__builtin_neon_vcvtq_n_s16_f16:
553 case NEON::BI__builtin_neon_vcvtq_n_s32_v:
554 case NEON::BI__builtin_neon_vcvtq_n_u16_f16:
555 case NEON::BI__builtin_neon_vcvtq_n_u32_v:
556 case NEON::BI__builtin_neon_vcvtq_n_s64_v:
557 case NEON::BI__builtin_neon_vcvtq_n_u64_v: {
561 static_cast<llvm::Intrinsic::ID
>(llvmIntrinsic));
564 {getFloatNeonType(cgf, neonType), cstIntTy}, ops,
568 case NEON::BI__builtin_neon_vcvt_s32_v:
569 case NEON::BI__builtin_neon_vcvt_u32_v:
570 case NEON::BI__builtin_neon_vcvt_s64_v:
571 case NEON::BI__builtin_neon_vcvt_u64_v:
572 case NEON::BI__builtin_neon_vcvt_s16_f16:
573 case NEON::BI__builtin_neon_vcvt_u16_f16:
574 case NEON::BI__builtin_neon_vcvtq_s32_v:
575 case NEON::BI__builtin_neon_vcvtq_u32_v:
576 case NEON::BI__builtin_neon_vcvtq_s64_v:
577 case NEON::BI__builtin_neon_vcvtq_u64_v:
578 case NEON::BI__builtin_neon_vcvtq_s16_f16:
579 case NEON::BI__builtin_neon_vcvtq_u16_f16:
580 case NEON::BI__builtin_neon_vcvta_s16_f16:
581 case NEON::BI__builtin_neon_vcvta_s32_v:
582 case NEON::BI__builtin_neon_vcvta_s64_v:
583 case NEON::BI__builtin_neon_vcvta_u16_f16:
584 case NEON::BI__builtin_neon_vcvta_u32_v:
585 case NEON::BI__builtin_neon_vcvta_u64_v:
586 case NEON::BI__builtin_neon_vcvtaq_s16_f16:
587 case NEON::BI__builtin_neon_vcvtaq_s32_v:
588 case NEON::BI__builtin_neon_vcvtaq_s64_v:
589 case NEON::BI__builtin_neon_vcvtaq_u16_f16:
590 case NEON::BI__builtin_neon_vcvtaq_u32_v:
591 case NEON::BI__builtin_neon_vcvtaq_u64_v:
592 case NEON::BI__builtin_neon_vcvtn_s16_f16:
593 case NEON::BI__builtin_neon_vcvtn_s32_v:
594 case NEON::BI__builtin_neon_vcvtn_s64_v:
595 case NEON::BI__builtin_neon_vcvtn_u16_f16:
596 case NEON::BI__builtin_neon_vcvtn_u32_v:
597 case NEON::BI__builtin_neon_vcvtn_u64_v:
598 case NEON::BI__builtin_neon_vcvtnq_s16_f16:
599 case NEON::BI__builtin_neon_vcvtnq_s32_v:
600 case NEON::BI__builtin_neon_vcvtnq_s64_v:
601 case NEON::BI__builtin_neon_vcvtnq_u16_f16:
602 case NEON::BI__builtin_neon_vcvtnq_u32_v:
603 case NEON::BI__builtin_neon_vcvtnq_u64_v:
604 case NEON::BI__builtin_neon_vcvtp_s16_f16:
605 case NEON::BI__builtin_neon_vcvtp_s32_v:
606 case NEON::BI__builtin_neon_vcvtp_s64_v:
607 case NEON::BI__builtin_neon_vcvtp_u16_f16:
608 case NEON::BI__builtin_neon_vcvtp_u32_v:
609 case NEON::BI__builtin_neon_vcvtp_u64_v:
610 case NEON::BI__builtin_neon_vcvtpq_s16_f16:
611 case NEON::BI__builtin_neon_vcvtpq_s32_v:
612 case NEON::BI__builtin_neon_vcvtpq_s64_v:
613 case NEON::BI__builtin_neon_vcvtpq_u16_f16:
614 case NEON::BI__builtin_neon_vcvtpq_u32_v:
615 case NEON::BI__builtin_neon_vcvtpq_u64_v:
616 case NEON::BI__builtin_neon_vcvtm_s16_f16:
617 case NEON::BI__builtin_neon_vcvtm_s32_v:
618 case NEON::BI__builtin_neon_vcvtm_s64_v:
619 case NEON::BI__builtin_neon_vcvtm_u16_f16:
620 case NEON::BI__builtin_neon_vcvtm_u32_v:
621 case NEON::BI__builtin_neon_vcvtm_u64_v:
622 case NEON::BI__builtin_neon_vcvtmq_s16_f16:
623 case NEON::BI__builtin_neon_vcvtmq_s32_v:
624 case NEON::BI__builtin_neon_vcvtmq_s64_v:
625 case NEON::BI__builtin_neon_vcvtmq_u16_f16:
626 case NEON::BI__builtin_neon_vcvtmq_u32_v:
627 case NEON::BI__builtin_neon_vcvtmq_u64_v:
628 case NEON::BI__builtin_neon_vcvtx_f32_v:
629 case NEON::BI__builtin_neon_vext_v:
630 case NEON::BI__builtin_neon_vextq_v:
631 case NEON::BI__builtin_neon_vfma_v:
632 case NEON::BI__builtin_neon_vfmaq_v:
633 case NEON::BI__builtin_neon_vld1_v:
634 case NEON::BI__builtin_neon_vld1q_v:
635 case NEON::BI__builtin_neon_vld1_x2_v:
636 case NEON::BI__builtin_neon_vld1q_x2_v:
637 case NEON::BI__builtin_neon_vld1_x3_v:
638 case NEON::BI__builtin_neon_vld1q_x3_v:
639 case NEON::BI__builtin_neon_vld1_x4_v:
640 case NEON::BI__builtin_neon_vld1q_x4_v:
641 case NEON::BI__builtin_neon_vld2_v:
642 case NEON::BI__builtin_neon_vld2q_v:
643 case NEON::BI__builtin_neon_vld3_v:
644 case NEON::BI__builtin_neon_vld3q_v:
645 case NEON::BI__builtin_neon_vld4_v:
646 case NEON::BI__builtin_neon_vld4q_v:
647 case NEON::BI__builtin_neon_vld2_dup_v:
648 case NEON::BI__builtin_neon_vld2q_dup_v:
649 case NEON::BI__builtin_neon_vld3_dup_v:
650 case NEON::BI__builtin_neon_vld3q_dup_v:
651 case NEON::BI__builtin_neon_vld4_dup_v:
652 case NEON::BI__builtin_neon_vld4q_dup_v:
653 case NEON::BI__builtin_neon_vld1_dup_v:
654 case NEON::BI__builtin_neon_vld1q_dup_v:
655 case NEON::BI__builtin_neon_vld2_lane_v:
656 case NEON::BI__builtin_neon_vld2q_lane_v:
657 case NEON::BI__builtin_neon_vld3_lane_v:
658 case NEON::BI__builtin_neon_vld3q_lane_v:
659 case NEON::BI__builtin_neon_vld4_lane_v:
660 case NEON::BI__builtin_neon_vld4q_lane_v:
661 case NEON::BI__builtin_neon_vmovl_v:
662 case NEON::BI__builtin_neon_vmovn_v:
663 case NEON::BI__builtin_neon_vmull_v:
664 case NEON::BI__builtin_neon_vpadal_v:
665 case NEON::BI__builtin_neon_vpadalq_v:
666 case NEON::BI__builtin_neon_vpaddl_v:
667 case NEON::BI__builtin_neon_vpaddlq_v:
668 case NEON::BI__builtin_neon_vqdmlal_v:
669 case NEON::BI__builtin_neon_vqdmlsl_v:
670 case NEON::BI__builtin_neon_vqdmulhq_lane_v:
671 case NEON::BI__builtin_neon_vqdmulh_lane_v:
672 case NEON::BI__builtin_neon_vqrdmulhq_lane_v:
673 case NEON::BI__builtin_neon_vqrdmulh_lane_v:
674 case NEON::BI__builtin_neon_vqdmulhq_laneq_v:
675 case NEON::BI__builtin_neon_vqdmulh_laneq_v:
676 case NEON::BI__builtin_neon_vqrdmulhq_laneq_v:
677 case NEON::BI__builtin_neon_vqrdmulh_laneq_v:
678 case NEON::BI__builtin_neon_vqshl_n_v:
679 case NEON::BI__builtin_neon_vqshlq_n_v:
680 case NEON::BI__builtin_neon_vqshlu_n_v:
681 case NEON::BI__builtin_neon_vqshluq_n_v:
682 case NEON::BI__builtin_neon_vrecpe_v:
683 case NEON::BI__builtin_neon_vrecpeq_v:
684 case NEON::BI__builtin_neon_vrsqrte_v:
685 case NEON::BI__builtin_neon_vrsqrteq_v:
686 case NEON::BI__builtin_neon_vrndi_v:
687 case NEON::BI__builtin_neon_vrndiq_v:
688 case NEON::BI__builtin_neon_vrshr_n_v:
689 case NEON::BI__builtin_neon_vrshrq_n_v:
690 case NEON::BI__builtin_neon_vsha512hq_u64:
691 case NEON::BI__builtin_neon_vsha512h2q_u64:
692 case NEON::BI__builtin_neon_vsha512su0q_u64:
693 case NEON::BI__builtin_neon_vsha512su1q_u64:
695 std::string(
"unimplemented AArch64 builtin call: ") +
697 return mlir::Value{};
698 case NEON::BI__builtin_neon_vshl_n_v:
699 case NEON::BI__builtin_neon_vshlq_n_v:
702 case NEON::BI__builtin_neon_vshll_n_v:
703 case NEON::BI__builtin_neon_vshrn_n_v:
705 std::string(
"unimplemented AArch64 builtin call: ") +
707 return mlir::Value{};
708 case NEON::BI__builtin_neon_vshr_n_v:
709 case NEON::BI__builtin_neon_vshrq_n_v:
711 case NEON::BI__builtin_neon_vst1_v:
712 case NEON::BI__builtin_neon_vst1q_v:
713 case NEON::BI__builtin_neon_vst2_v:
714 case NEON::BI__builtin_neon_vst2q_v:
715 case NEON::BI__builtin_neon_vst3_v:
716 case NEON::BI__builtin_neon_vst3q_v:
717 case NEON::BI__builtin_neon_vst4_v:
718 case NEON::BI__builtin_neon_vst4q_v:
719 case NEON::BI__builtin_neon_vst2_lane_v:
720 case NEON::BI__builtin_neon_vst2q_lane_v:
721 case NEON::BI__builtin_neon_vst3_lane_v:
722 case NEON::BI__builtin_neon_vst3q_lane_v:
723 case NEON::BI__builtin_neon_vst4_lane_v:
724 case NEON::BI__builtin_neon_vst4q_lane_v:
725 case NEON::BI__builtin_neon_vsm3partw1q_u32:
726 case NEON::BI__builtin_neon_vsm3partw2q_u32:
727 case NEON::BI__builtin_neon_vsm3ss1q_u32:
728 case NEON::BI__builtin_neon_vsm4ekeyq_u32:
729 case NEON::BI__builtin_neon_vsm4eq_u32:
730 case NEON::BI__builtin_neon_vsm3tt1aq_u32:
731 case NEON::BI__builtin_neon_vsm3tt1bq_u32:
732 case NEON::BI__builtin_neon_vsm3tt2aq_u32:
733 case NEON::BI__builtin_neon_vsm3tt2bq_u32:
734 case NEON::BI__builtin_neon_vst1_x2_v:
735 case NEON::BI__builtin_neon_vst1q_x2_v:
736 case NEON::BI__builtin_neon_vst1_x3_v:
737 case NEON::BI__builtin_neon_vst1q_x3_v:
738 case NEON::BI__builtin_neon_vst1_x4_v:
739 case NEON::BI__builtin_neon_vst1q_x4_v:
740 case NEON::BI__builtin_neon_vsubhn_v:
741 case NEON::BI__builtin_neon_vtrn_v:
742 case NEON::BI__builtin_neon_vtrnq_v:
743 case NEON::BI__builtin_neon_vtst_v:
744 case NEON::BI__builtin_neon_vtstq_v:
745 case NEON::BI__builtin_neon_vuzp_v:
746 case NEON::BI__builtin_neon_vuzpq_v:
747 case NEON::BI__builtin_neon_vxarq_u64:
748 case NEON::BI__builtin_neon_vzip_v:
749 case NEON::BI__builtin_neon_vzipq_v:
750 case NEON::BI__builtin_neon_vdot_s32:
751 case NEON::BI__builtin_neon_vdot_u32:
752 case NEON::BI__builtin_neon_vdotq_s32:
753 case NEON::BI__builtin_neon_vdotq_u32:
754 case NEON::BI__builtin_neon_vfmlal_low_f16:
755 case NEON::BI__builtin_neon_vfmlalq_low_f16:
756 case NEON::BI__builtin_neon_vfmlsl_low_f16:
757 case NEON::BI__builtin_neon_vfmlslq_low_f16:
758 case NEON::BI__builtin_neon_vfmlal_high_f16:
759 case NEON::BI__builtin_neon_vfmlalq_high_f16:
760 case NEON::BI__builtin_neon_vfmlsl_high_f16:
761 case NEON::BI__builtin_neon_vfmlslq_high_f16:
762 case NEON::BI__builtin_neon_vmmlaq_s32:
763 case NEON::BI__builtin_neon_vmmlaq_u32:
765 std::string(
"unimplemented AArch64 builtin call: ") +
767 return mlir::Value{};
768 case NEON::BI__builtin_neon_vmul_v:
769 case NEON::BI__builtin_neon_vmulq_v:
772 case NEON::BI__builtin_neon_vusmmlaq_s32:
773 case NEON::BI__builtin_neon_vusdot_s32:
774 case NEON::BI__builtin_neon_vusdotq_s32:
775 case NEON::BI__builtin_neon_vbfdot_f32:
776 case NEON::BI__builtin_neon_vbfdotq_f32:
777 case NEON::BI__builtin_neon___a32_vcvt_bf16_f32:
780 std::string(
"unimplemented AArch64 builtin call: ") +
782 return mlir::Value{};
785 std::string(
"unimplemented AArch64 builtin call: ") +
787 return mlir::Value{};
1207 NEON::BI__builtin_neon_splat_lane_bf16,
1208 NEON::BI__builtin_neon_splat_lane_v,
1211 NEON::BI__builtin_neon_splat_laneq_bf16,
1212 NEON::BI__builtin_neon_splat_laneq_v,
1215 NEON::BI__builtin_neon_splatq_lane_bf16,
1216 NEON::BI__builtin_neon_splatq_lane_v,
1219 NEON::BI__builtin_neon_splatq_laneq_bf16,
1220 NEON::BI__builtin_neon_splatq_laneq_v,
1223 NEON::BI__builtin_neon_vabd_f16,
1224 NEON::BI__builtin_neon_vabd_v,
1227 NEON::BI__builtin_neon_vabdq_f16,
1228 NEON::BI__builtin_neon_vabdq_v,
1231 NEON::BI__builtin_neon_vabs_f16,
1232 NEON::BI__builtin_neon_vabs_v,
1235 NEON::BI__builtin_neon_vabsq_f16,
1236 NEON::BI__builtin_neon_vabsq_v,
1239 NEON::BI__builtin_neon_vcage_f16,
1240 NEON::BI__builtin_neon_vcage_v,
1243 NEON::BI__builtin_neon_vcageq_f16,
1244 NEON::BI__builtin_neon_vcageq_v,
1247 NEON::BI__builtin_neon_vcagt_f16,
1248 NEON::BI__builtin_neon_vcagt_v,
1251 NEON::BI__builtin_neon_vcagtq_f16,
1252 NEON::BI__builtin_neon_vcagtq_v,
1255 NEON::BI__builtin_neon_vcale_f16,
1256 NEON::BI__builtin_neon_vcale_v,
1259 NEON::BI__builtin_neon_vcaleq_f16,
1260 NEON::BI__builtin_neon_vcaleq_v,
1263 NEON::BI__builtin_neon_vcalt_f16,
1264 NEON::BI__builtin_neon_vcalt_v,
1267 NEON::BI__builtin_neon_vcaltq_f16,
1268 NEON::BI__builtin_neon_vcaltq_v,
1271 NEON::BI__builtin_neon_vceqz_f16,
1272 NEON::BI__builtin_neon_vceqz_v,
1275 NEON::BI__builtin_neon_vceqzq_f16,
1276 NEON::BI__builtin_neon_vceqzq_v,
1279 NEON::BI__builtin_neon_vcgez_f16,
1280 NEON::BI__builtin_neon_vcgez_v,
1283 NEON::BI__builtin_neon_vcgezq_f16,
1284 NEON::BI__builtin_neon_vcgezq_v,
1287 NEON::BI__builtin_neon_vcgtz_f16,
1288 NEON::BI__builtin_neon_vcgtz_v,
1291 NEON::BI__builtin_neon_vcgtzq_f16,
1292 NEON::BI__builtin_neon_vcgtzq_v,
1295 NEON::BI__builtin_neon_vclez_f16,
1296 NEON::BI__builtin_neon_vclez_v,
1299 NEON::BI__builtin_neon_vclezq_f16,
1300 NEON::BI__builtin_neon_vclezq_v,
1303 NEON::BI__builtin_neon_vcltz_f16,
1304 NEON::BI__builtin_neon_vcltz_v,
1307 NEON::BI__builtin_neon_vcltzq_f16,
1308 NEON::BI__builtin_neon_vcltzq_v,
1311 NEON::BI__builtin_neon_vfma_f16,
1312 NEON::BI__builtin_neon_vfma_v,
1315 NEON::BI__builtin_neon_vfma_lane_f16,
1316 NEON::BI__builtin_neon_vfma_lane_v,
1319 NEON::BI__builtin_neon_vfma_laneq_f16,
1320 NEON::BI__builtin_neon_vfma_laneq_v,
1323 NEON::BI__builtin_neon_vfmaq_f16,
1324 NEON::BI__builtin_neon_vfmaq_v,
1327 NEON::BI__builtin_neon_vfmaq_lane_f16,
1328 NEON::BI__builtin_neon_vfmaq_lane_v,
1331 NEON::BI__builtin_neon_vfmaq_laneq_f16,
1332 NEON::BI__builtin_neon_vfmaq_laneq_v,
1334 {NEON::BI__builtin_neon_vld1_bf16_x2, NEON::BI__builtin_neon_vld1_x2_v},
1335 {NEON::BI__builtin_neon_vld1_bf16_x3, NEON::BI__builtin_neon_vld1_x3_v},
1336 {NEON::BI__builtin_neon_vld1_bf16_x4, NEON::BI__builtin_neon_vld1_x4_v},
1337 {NEON::BI__builtin_neon_vld1_bf16, NEON::BI__builtin_neon_vld1_v},
1338 {NEON::BI__builtin_neon_vld1_dup_bf16, NEON::BI__builtin_neon_vld1_dup_v},
1339 {NEON::BI__builtin_neon_vld1_lane_bf16, NEON::BI__builtin_neon_vld1_lane_v},
1340 {NEON::BI__builtin_neon_vld1q_bf16_x2, NEON::BI__builtin_neon_vld1q_x2_v},
1341 {NEON::BI__builtin_neon_vld1q_bf16_x3, NEON::BI__builtin_neon_vld1q_x3_v},
1342 {NEON::BI__builtin_neon_vld1q_bf16_x4, NEON::BI__builtin_neon_vld1q_x4_v},
1343 {NEON::BI__builtin_neon_vld1q_bf16, NEON::BI__builtin_neon_vld1q_v},
1344 {NEON::BI__builtin_neon_vld1q_dup_bf16, NEON::BI__builtin_neon_vld1q_dup_v},
1345 {NEON::BI__builtin_neon_vld1q_lane_bf16,
1346 NEON::BI__builtin_neon_vld1q_lane_v},
1347 {NEON::BI__builtin_neon_vld2_bf16, NEON::BI__builtin_neon_vld2_v},
1348 {NEON::BI__builtin_neon_vld2_dup_bf16, NEON::BI__builtin_neon_vld2_dup_v},
1349 {NEON::BI__builtin_neon_vld2_lane_bf16, NEON::BI__builtin_neon_vld2_lane_v},
1350 {NEON::BI__builtin_neon_vld2q_bf16, NEON::BI__builtin_neon_vld2q_v},
1351 {NEON::BI__builtin_neon_vld2q_dup_bf16, NEON::BI__builtin_neon_vld2q_dup_v},
1352 {NEON::BI__builtin_neon_vld2q_lane_bf16,
1353 NEON::BI__builtin_neon_vld2q_lane_v},
1354 {NEON::BI__builtin_neon_vld3_bf16, NEON::BI__builtin_neon_vld3_v},
1355 {NEON::BI__builtin_neon_vld3_dup_bf16, NEON::BI__builtin_neon_vld3_dup_v},
1356 {NEON::BI__builtin_neon_vld3_lane_bf16, NEON::BI__builtin_neon_vld3_lane_v},
1357 {NEON::BI__builtin_neon_vld3q_bf16, NEON::BI__builtin_neon_vld3q_v},
1358 {NEON::BI__builtin_neon_vld3q_dup_bf16, NEON::BI__builtin_neon_vld3q_dup_v},
1359 {NEON::BI__builtin_neon_vld3q_lane_bf16,
1360 NEON::BI__builtin_neon_vld3q_lane_v},
1361 {NEON::BI__builtin_neon_vld4_bf16, NEON::BI__builtin_neon_vld4_v},
1362 {NEON::BI__builtin_neon_vld4_dup_bf16, NEON::BI__builtin_neon_vld4_dup_v},
1363 {NEON::BI__builtin_neon_vld4_lane_bf16, NEON::BI__builtin_neon_vld4_lane_v},
1364 {NEON::BI__builtin_neon_vld4q_bf16, NEON::BI__builtin_neon_vld4q_v},
1365 {NEON::BI__builtin_neon_vld4q_dup_bf16, NEON::BI__builtin_neon_vld4q_dup_v},
1366 {NEON::BI__builtin_neon_vld4q_lane_bf16,
1367 NEON::BI__builtin_neon_vld4q_lane_v},
1369 NEON::BI__builtin_neon_vmax_f16,
1370 NEON::BI__builtin_neon_vmax_v,
1373 NEON::BI__builtin_neon_vmaxnm_f16,
1374 NEON::BI__builtin_neon_vmaxnm_v,
1377 NEON::BI__builtin_neon_vmaxnmq_f16,
1378 NEON::BI__builtin_neon_vmaxnmq_v,
1381 NEON::BI__builtin_neon_vmaxq_f16,
1382 NEON::BI__builtin_neon_vmaxq_v,
1385 NEON::BI__builtin_neon_vmin_f16,
1386 NEON::BI__builtin_neon_vmin_v,
1389 NEON::BI__builtin_neon_vminnm_f16,
1390 NEON::BI__builtin_neon_vminnm_v,
1393 NEON::BI__builtin_neon_vminnmq_f16,
1394 NEON::BI__builtin_neon_vminnmq_v,
1397 NEON::BI__builtin_neon_vminq_f16,
1398 NEON::BI__builtin_neon_vminq_v,
1401 NEON::BI__builtin_neon_vmulx_f16,
1402 NEON::BI__builtin_neon_vmulx_v,
1405 NEON::BI__builtin_neon_vmulxq_f16,
1406 NEON::BI__builtin_neon_vmulxq_v,
1409 NEON::BI__builtin_neon_vpadd_f16,
1410 NEON::BI__builtin_neon_vpadd_v,
1413 NEON::BI__builtin_neon_vpaddq_f16,
1414 NEON::BI__builtin_neon_vpaddq_v,
1417 NEON::BI__builtin_neon_vpmax_f16,
1418 NEON::BI__builtin_neon_vpmax_v,
1421 NEON::BI__builtin_neon_vpmaxnm_f16,
1422 NEON::BI__builtin_neon_vpmaxnm_v,
1425 NEON::BI__builtin_neon_vpmaxnmq_f16,
1426 NEON::BI__builtin_neon_vpmaxnmq_v,
1429 NEON::BI__builtin_neon_vpmaxq_f16,
1430 NEON::BI__builtin_neon_vpmaxq_v,
1433 NEON::BI__builtin_neon_vpmin_f16,
1434 NEON::BI__builtin_neon_vpmin_v,
1437 NEON::BI__builtin_neon_vpminnm_f16,
1438 NEON::BI__builtin_neon_vpminnm_v,
1441 NEON::BI__builtin_neon_vpminnmq_f16,
1442 NEON::BI__builtin_neon_vpminnmq_v,
1445 NEON::BI__builtin_neon_vpminq_f16,
1446 NEON::BI__builtin_neon_vpminq_v,
1449 NEON::BI__builtin_neon_vrecpe_f16,
1450 NEON::BI__builtin_neon_vrecpe_v,
1453 NEON::BI__builtin_neon_vrecpeq_f16,
1454 NEON::BI__builtin_neon_vrecpeq_v,
1457 NEON::BI__builtin_neon_vrecps_f16,
1458 NEON::BI__builtin_neon_vrecps_v,
1461 NEON::BI__builtin_neon_vrecpsq_f16,
1462 NEON::BI__builtin_neon_vrecpsq_v,
1465 NEON::BI__builtin_neon_vrnd_f16,
1466 NEON::BI__builtin_neon_vrnd_v,
1469 NEON::BI__builtin_neon_vrnda_f16,
1470 NEON::BI__builtin_neon_vrnda_v,
1473 NEON::BI__builtin_neon_vrndaq_f16,
1474 NEON::BI__builtin_neon_vrndaq_v,
1477 NEON::BI__builtin_neon_vrndi_f16,
1478 NEON::BI__builtin_neon_vrndi_v,
1481 NEON::BI__builtin_neon_vrndiq_f16,
1482 NEON::BI__builtin_neon_vrndiq_v,
1485 NEON::BI__builtin_neon_vrndm_f16,
1486 NEON::BI__builtin_neon_vrndm_v,
1489 NEON::BI__builtin_neon_vrndmq_f16,
1490 NEON::BI__builtin_neon_vrndmq_v,
1493 NEON::BI__builtin_neon_vrndn_f16,
1494 NEON::BI__builtin_neon_vrndn_v,
1497 NEON::BI__builtin_neon_vrndnq_f16,
1498 NEON::BI__builtin_neon_vrndnq_v,
1501 NEON::BI__builtin_neon_vrndp_f16,
1502 NEON::BI__builtin_neon_vrndp_v,
1505 NEON::BI__builtin_neon_vrndpq_f16,
1506 NEON::BI__builtin_neon_vrndpq_v,
1509 NEON::BI__builtin_neon_vrndq_f16,
1510 NEON::BI__builtin_neon_vrndq_v,
1513 NEON::BI__builtin_neon_vrndx_f16,
1514 NEON::BI__builtin_neon_vrndx_v,
1517 NEON::BI__builtin_neon_vrndxq_f16,
1518 NEON::BI__builtin_neon_vrndxq_v,
1521 NEON::BI__builtin_neon_vrsqrte_f16,
1522 NEON::BI__builtin_neon_vrsqrte_v,
1525 NEON::BI__builtin_neon_vrsqrteq_f16,
1526 NEON::BI__builtin_neon_vrsqrteq_v,
1529 NEON::BI__builtin_neon_vrsqrts_f16,
1530 NEON::BI__builtin_neon_vrsqrts_v,
1533 NEON::BI__builtin_neon_vrsqrtsq_f16,
1534 NEON::BI__builtin_neon_vrsqrtsq_v,
1537 NEON::BI__builtin_neon_vsqrt_f16,
1538 NEON::BI__builtin_neon_vsqrt_v,
1541 NEON::BI__builtin_neon_vsqrtq_f16,
1542 NEON::BI__builtin_neon_vsqrtq_v,
1544 {NEON::BI__builtin_neon_vst1_bf16_x2, NEON::BI__builtin_neon_vst1_x2_v},
1545 {NEON::BI__builtin_neon_vst1_bf16_x3, NEON::BI__builtin_neon_vst1_x3_v},
1546 {NEON::BI__builtin_neon_vst1_bf16_x4, NEON::BI__builtin_neon_vst1_x4_v},
1547 {NEON::BI__builtin_neon_vst1_bf16, NEON::BI__builtin_neon_vst1_v},
1548 {NEON::BI__builtin_neon_vst1_lane_bf16, NEON::BI__builtin_neon_vst1_lane_v},
1549 {NEON::BI__builtin_neon_vst1q_bf16_x2, NEON::BI__builtin_neon_vst1q_x2_v},
1550 {NEON::BI__builtin_neon_vst1q_bf16_x3, NEON::BI__builtin_neon_vst1q_x3_v},
1551 {NEON::BI__builtin_neon_vst1q_bf16_x4, NEON::BI__builtin_neon_vst1q_x4_v},
1552 {NEON::BI__builtin_neon_vst1q_bf16, NEON::BI__builtin_neon_vst1q_v},
1553 {NEON::BI__builtin_neon_vst1q_lane_bf16,
1554 NEON::BI__builtin_neon_vst1q_lane_v},
1555 {NEON::BI__builtin_neon_vst2_bf16, NEON::BI__builtin_neon_vst2_v},
1556 {NEON::BI__builtin_neon_vst2_lane_bf16, NEON::BI__builtin_neon_vst2_lane_v},
1557 {NEON::BI__builtin_neon_vst2q_bf16, NEON::BI__builtin_neon_vst2q_v},
1558 {NEON::BI__builtin_neon_vst2q_lane_bf16,
1559 NEON::BI__builtin_neon_vst2q_lane_v},
1560 {NEON::BI__builtin_neon_vst3_bf16, NEON::BI__builtin_neon_vst3_v},
1561 {NEON::BI__builtin_neon_vst3_lane_bf16, NEON::BI__builtin_neon_vst3_lane_v},
1562 {NEON::BI__builtin_neon_vst3q_bf16, NEON::BI__builtin_neon_vst3q_v},
1563 {NEON::BI__builtin_neon_vst3q_lane_bf16,
1564 NEON::BI__builtin_neon_vst3q_lane_v},
1565 {NEON::BI__builtin_neon_vst4_bf16, NEON::BI__builtin_neon_vst4_v},
1566 {NEON::BI__builtin_neon_vst4_lane_bf16, NEON::BI__builtin_neon_vst4_lane_v},
1567 {NEON::BI__builtin_neon_vst4q_bf16, NEON::BI__builtin_neon_vst4q_v},
1568 {NEON::BI__builtin_neon_vst4q_lane_bf16,
1569 NEON::BI__builtin_neon_vst4q_lane_v},
1573 {NEON::BI__builtin_neon_vldap1_lane_u64,
1574 NEON::BI__builtin_neon_vldap1_lane_s64},
1575 {NEON::BI__builtin_neon_vldap1_lane_f64,
1576 NEON::BI__builtin_neon_vldap1_lane_s64},
1577 {NEON::BI__builtin_neon_vldap1_lane_p64,
1578 NEON::BI__builtin_neon_vldap1_lane_s64},
1579 {NEON::BI__builtin_neon_vldap1q_lane_u64,
1580 NEON::BI__builtin_neon_vldap1q_lane_s64},
1581 {NEON::BI__builtin_neon_vldap1q_lane_f64,
1582 NEON::BI__builtin_neon_vldap1q_lane_s64},
1583 {NEON::BI__builtin_neon_vldap1q_lane_p64,
1584 NEON::BI__builtin_neon_vldap1q_lane_s64},
1585 {NEON::BI__builtin_neon_vstl1_lane_u64,
1586 NEON::BI__builtin_neon_vstl1_lane_s64},
1587 {NEON::BI__builtin_neon_vstl1_lane_f64,
1588 NEON::BI__builtin_neon_vstl1_lane_s64},
1589 {NEON::BI__builtin_neon_vstl1_lane_p64,
1590 NEON::BI__builtin_neon_vstl1_lane_s64},
1591 {NEON::BI__builtin_neon_vstl1q_lane_u64,
1592 NEON::BI__builtin_neon_vstl1q_lane_s64},
1593 {NEON::BI__builtin_neon_vstl1q_lane_f64,
1594 NEON::BI__builtin_neon_vstl1q_lane_s64},
1595 {NEON::BI__builtin_neon_vstl1q_lane_p64,
1596 NEON::BI__builtin_neon_vstl1q_lane_s64},
1602 llvm::Triple::ArchType arch) {
1611 if (builtinID == Builtin::BI__builtin_cpu_supports) {
1612 cgm.errorNYI(
expr->getSourceRange(),
1613 std::string(
"unimplemented AArch64 builtin call: ") +
1614 getContext().BuiltinInfo.getName(builtinID));
1615 return mlir::Value{};
1618 switch (builtinID) {
1621 case clang::AArch64::BI__builtin_arm_nop:
1622 case clang::AArch64::BI__builtin_arm_yield:
1623 case clang::AArch64::BI__yield:
1624 case clang::AArch64::BI__builtin_arm_wfe:
1625 case clang::AArch64::BI__wfe:
1626 case clang::AArch64::BI__builtin_arm_wfi:
1627 case clang::AArch64::BI__wfi:
1628 case clang::AArch64::BI__builtin_arm_sev:
1629 case clang::AArch64::BI__sev:
1630 case clang::AArch64::BI__builtin_arm_sevl:
1631 case clang::AArch64::BI__sevl:
1632 cgm.errorNYI(
expr->getSourceRange(),
1633 std::string(
"unimplemented AArch64 builtin call: ") +
1634 getContext().BuiltinInfo.getName(builtinID));
1635 return mlir::Value{};
1638 if (builtinID == clang::AArch64::BI__builtin_arm_trap) {
1639 cgm.errorNYI(
expr->getSourceRange(),
1640 std::string(
"unimplemented AArch64 builtin call: ") +
1641 getContext().BuiltinInfo.getName(builtinID));
1642 return mlir::Value{};
1645 if (builtinID == clang::AArch64::BI__builtin_arm_get_sme_state) {
1646 cgm.errorNYI(
expr->getSourceRange(),
1647 std::string(
"unimplemented AArch64 builtin call: ") +
1648 getContext().BuiltinInfo.getName(builtinID));
1649 return mlir::Value{};
1652 if (builtinID == clang::AArch64::BI__builtin_arm_rbit) {
1653 cgm.errorNYI(
expr->getSourceRange(),
1654 std::string(
"unimplemented AArch64 builtin call: ") +
1655 getContext().BuiltinInfo.getName(builtinID));
1656 return mlir::Value{};
1658 if (builtinID == clang::AArch64::BI__builtin_arm_rbit64) {
1659 cgm.errorNYI(
expr->getSourceRange(),
1660 std::string(
"unimplemented AArch64 builtin call: ") +
1661 getContext().BuiltinInfo.getName(builtinID));
1662 return mlir::Value{};
1665 if (builtinID == clang::AArch64::BI__builtin_arm_clz ||
1666 builtinID == clang::AArch64::BI__builtin_arm_clz64) {
1667 cgm.errorNYI(
expr->getSourceRange(),
1668 std::string(
"unimplemented AArch64 builtin call: ") +
1669 getContext().BuiltinInfo.getName(builtinID));
1670 return mlir::Value{};
1673 if (builtinID == clang::AArch64::BI__builtin_arm_cls) {
1674 cgm.errorNYI(
expr->getSourceRange(),
1675 std::string(
"unimplemented AArch64 builtin call: ") +
1676 getContext().BuiltinInfo.getName(builtinID));
1677 return mlir::Value{};
1679 if (builtinID == clang::AArch64::BI__builtin_arm_cls64) {
1680 cgm.errorNYI(
expr->getSourceRange(),
1681 std::string(
"unimplemented AArch64 builtin call: ") +
1682 getContext().BuiltinInfo.getName(builtinID));
1683 return mlir::Value{};
1686 if (builtinID == clang::AArch64::BI__builtin_arm_rint32zf ||
1687 builtinID == clang::AArch64::BI__builtin_arm_rint32z) {
1688 cgm.errorNYI(
expr->getSourceRange(),
1689 std::string(
"unimplemented AArch64 builtin call: ") +
1690 getContext().BuiltinInfo.getName(builtinID));
1691 return mlir::Value{};
1694 if (builtinID == clang::AArch64::BI__builtin_arm_rint64zf ||
1695 builtinID == clang::AArch64::BI__builtin_arm_rint64z) {
1696 cgm.errorNYI(
expr->getSourceRange(),
1697 std::string(
"unimplemented AArch64 builtin call: ") +
1698 getContext().BuiltinInfo.getName(builtinID));
1699 return mlir::Value{};
1702 if (builtinID == clang::AArch64::BI__builtin_arm_rint32xf ||
1703 builtinID == clang::AArch64::BI__builtin_arm_rint32x) {
1704 cgm.errorNYI(
expr->getSourceRange(),
1705 std::string(
"unimplemented AArch64 builtin call: ") +
1706 getContext().BuiltinInfo.getName(builtinID));
1707 return mlir::Value{};
1710 if (builtinID == clang::AArch64::BI__builtin_arm_rint64xf ||
1711 builtinID == clang::AArch64::BI__builtin_arm_rint64x) {
1712 cgm.errorNYI(
expr->getSourceRange(),
1713 std::string(
"unimplemented AArch64 builtin call: ") +
1714 getContext().BuiltinInfo.getName(builtinID));
1715 return mlir::Value{};
1718 if (builtinID == clang::AArch64::BI__builtin_arm_jcvt) {
1719 cgm.errorNYI(
expr->getSourceRange(),
1720 std::string(
"unimplemented AArch64 builtin call: ") +
1721 getContext().BuiltinInfo.getName(builtinID));
1722 return mlir::Value{};
1725 if (builtinID == clang::AArch64::BI__builtin_arm_ld64b ||
1726 builtinID == clang::AArch64::BI__builtin_arm_st64b ||
1727 builtinID == clang::AArch64::BI__builtin_arm_st64bv ||
1728 builtinID == clang::AArch64::BI__builtin_arm_st64bv0) {
1729 cgm.errorNYI(
expr->getSourceRange(),
1730 std::string(
"unimplemented AArch64 builtin call: ") +
1731 getContext().BuiltinInfo.getName(builtinID));
1732 return mlir::Value{};
1735 if (builtinID == clang::AArch64::BI__builtin_arm_rndr ||
1736 builtinID == clang::AArch64::BI__builtin_arm_rndrrs) {
1737 cgm.errorNYI(
expr->getSourceRange(),
1738 std::string(
"unimplemented AArch64 builtin call: ") +
1739 getContext().BuiltinInfo.getName(builtinID));
1740 return mlir::Value{};
1743 if (builtinID == clang::AArch64::BI__clear_cache) {
1744 cgm.errorNYI(
expr->getSourceRange(),
1745 std::string(
"unimplemented AArch64 builtin call: ") +
1746 getContext().BuiltinInfo.getName(builtinID));
1747 return mlir::Value{};
1750 if ((builtinID == clang::AArch64::BI__builtin_arm_ldrex ||
1751 builtinID == clang::AArch64::BI__builtin_arm_ldaex) &&
1753 cgm.errorNYI(
expr->getSourceRange(),
1754 std::string(
"unimplemented AArch64 builtin call: ") +
1755 getContext().BuiltinInfo.getName(builtinID));
1756 return mlir::Value{};
1758 if (builtinID == clang::AArch64::BI__builtin_arm_ldrex ||
1759 builtinID == clang::AArch64::BI__builtin_arm_ldaex) {
1760 cgm.errorNYI(
expr->getSourceRange(),
1761 std::string(
"unimplemented AArch64 builtin call: ") +
1762 getContext().BuiltinInfo.getName(builtinID));
1763 return mlir::Value{};
1766 if ((builtinID == clang::AArch64::BI__builtin_arm_strex ||
1767 builtinID == clang::AArch64::BI__builtin_arm_stlex) &&
1769 cgm.errorNYI(
expr->getSourceRange(),
1770 std::string(
"unimplemented AArch64 builtin call: ") +
1771 getContext().BuiltinInfo.getName(builtinID));
1772 return mlir::Value{};
1775 if (builtinID == clang::AArch64::BI__builtin_arm_strex ||
1776 builtinID == clang::AArch64::BI__builtin_arm_stlex) {
1777 cgm.errorNYI(
expr->getSourceRange(),
1778 std::string(
"unimplemented AArch64 builtin call: ") +
1779 getContext().BuiltinInfo.getName(builtinID));
1780 return mlir::Value{};
1783 if (builtinID == clang::AArch64::BI__getReg) {
1784 cgm.errorNYI(
expr->getSourceRange(),
1785 std::string(
"unimplemented AArch64 builtin call: ") +
1786 getContext().BuiltinInfo.getName(builtinID));
1787 return mlir::Value{};
1790 if (builtinID == clang::AArch64::BI__break) {
1791 cgm.errorNYI(
expr->getSourceRange(),
1792 std::string(
"unimplemented AArch64 builtin call: ") +
1793 getContext().BuiltinInfo.getName(builtinID));
1794 return mlir::Value{};
1797 if (builtinID == clang::AArch64::BI__builtin_arm_clrex) {
1798 cgm.errorNYI(
expr->getSourceRange(),
1799 std::string(
"unimplemented AArch64 builtin call: ") +
1800 getContext().BuiltinInfo.getName(builtinID));
1801 return mlir::Value{};
1804 if (builtinID == clang::AArch64::BI_ReadWriteBarrier) {
1805 cgm.errorNYI(
expr->getSourceRange(),
1806 std::string(
"unimplemented AArch64 builtin call: ") +
1807 getContext().BuiltinInfo.getName(builtinID));
1808 return mlir::Value{};
1812 Intrinsic::ID crcIntrinsicID = Intrinsic::not_intrinsic;
1813 switch (builtinID) {
1814 case clang::AArch64::BI__builtin_arm_crc32b:
1815 crcIntrinsicID = Intrinsic::aarch64_crc32b;
1817 case clang::AArch64::BI__builtin_arm_crc32cb:
1818 crcIntrinsicID = Intrinsic::aarch64_crc32cb;
1820 case clang::AArch64::BI__builtin_arm_crc32h:
1821 crcIntrinsicID = Intrinsic::aarch64_crc32h;
1823 case clang::AArch64::BI__builtin_arm_crc32ch:
1824 crcIntrinsicID = Intrinsic::aarch64_crc32ch;
1826 case clang::AArch64::BI__builtin_arm_crc32w:
1827 crcIntrinsicID = Intrinsic::aarch64_crc32w;
1829 case clang::AArch64::BI__builtin_arm_crc32cw:
1830 crcIntrinsicID = Intrinsic::aarch64_crc32cw;
1832 case clang::AArch64::BI__builtin_arm_crc32d:
1833 crcIntrinsicID = Intrinsic::aarch64_crc32x;
1835 case clang::AArch64::BI__builtin_arm_crc32cd:
1836 crcIntrinsicID = Intrinsic::aarch64_crc32cx;
1840 if (crcIntrinsicID != Intrinsic::not_intrinsic) {
1841 cgm.errorNYI(
expr->getSourceRange(),
1842 std::string(
"unimplemented AArch64 builtin call: ") +
1843 getContext().BuiltinInfo.getName(builtinID));
1844 return mlir::Value{};
1848 if (builtinID == AArch64::BI__builtin_arm_mops_memset_tag) {
1849 cgm.errorNYI(
expr->getSourceRange(),
1850 std::string(
"unimplemented AArch64 builtin call: ") +
1851 getContext().BuiltinInfo.getName(builtinID));
1852 return mlir::Value{};
1856 Intrinsic::ID mteIntrinsicID = Intrinsic::not_intrinsic;
1857 switch (builtinID) {
1858 case clang::AArch64::BI__builtin_arm_irg:
1859 mteIntrinsicID = Intrinsic::aarch64_irg;
1861 case clang::AArch64::BI__builtin_arm_addg:
1862 mteIntrinsicID = Intrinsic::aarch64_addg;
1864 case clang::AArch64::BI__builtin_arm_gmi:
1865 mteIntrinsicID = Intrinsic::aarch64_gmi;
1867 case clang::AArch64::BI__builtin_arm_ldg:
1868 mteIntrinsicID = Intrinsic::aarch64_ldg;
1870 case clang::AArch64::BI__builtin_arm_stg:
1871 mteIntrinsicID = Intrinsic::aarch64_stg;
1873 case clang::AArch64::BI__builtin_arm_subp:
1874 mteIntrinsicID = Intrinsic::aarch64_subp;
1878 if (mteIntrinsicID != Intrinsic::not_intrinsic) {
1879 cgm.errorNYI(
expr->getSourceRange(),
1880 std::string(
"unimplemented AArch64 builtin call: ") +
1881 getContext().BuiltinInfo.getName(builtinID));
1882 return mlir::Value{};
1885 if (builtinID == clang::AArch64::BI__builtin_arm_rsr ||
1886 builtinID == clang::AArch64::BI__builtin_arm_rsr64 ||
1887 builtinID == clang::AArch64::BI__builtin_arm_rsr128 ||
1888 builtinID == clang::AArch64::BI__builtin_arm_rsrp ||
1889 builtinID == clang::AArch64::BI__builtin_arm_wsr ||
1890 builtinID == clang::AArch64::BI__builtin_arm_wsr64 ||
1891 builtinID == clang::AArch64::BI__builtin_arm_wsr128 ||
1892 builtinID == clang::AArch64::BI__builtin_arm_wsrp) {
1893 cgm.errorNYI(
expr->getSourceRange(),
1894 std::string(
"unimplemented AArch64 builtin call: ") +
1895 getContext().BuiltinInfo.getName(builtinID));
1896 return mlir::Value{};
1899 if (builtinID == clang::AArch64::BI_ReadStatusReg ||
1900 builtinID == clang::AArch64::BI_WriteStatusReg ||
1901 builtinID == clang::AArch64::BI__sys) {
1902 cgm.errorNYI(
expr->getSourceRange(),
1903 std::string(
"unimplemented AArch64 builtin call: ") +
1904 getContext().BuiltinInfo.getName(builtinID));
1905 return mlir::Value{};
1908 if (builtinID == clang::AArch64::BI_AddressOfReturnAddress) {
1909 cgm.errorNYI(
expr->getSourceRange(),
1910 std::string(
"unimplemented AArch64 builtin call: ") +
1911 getContext().BuiltinInfo.getName(builtinID));
1912 return mlir::Value{};
1915 if (builtinID == clang::AArch64::BI__builtin_sponentry) {
1916 cgm.errorNYI(
expr->getSourceRange(),
1917 std::string(
"unimplemented AArch64 builtin call: ") +
1918 getContext().BuiltinInfo.getName(builtinID));
1919 return mlir::Value{};
1922 if (builtinID == clang::AArch64::BI__mulh ||
1923 builtinID == clang::AArch64::BI__umulh) {
1924 cgm.errorNYI(
expr->getSourceRange(),
1925 std::string(
"unimplemented AArch64 builtin call: ") +
1926 getContext().BuiltinInfo.getName(builtinID));
1927 return mlir::Value{};
1930 if (builtinID == AArch64::BI__writex18byte ||
1931 builtinID == AArch64::BI__writex18word ||
1932 builtinID == AArch64::BI__writex18dword ||
1933 builtinID == AArch64::BI__writex18qword) {
1934 cgm.errorNYI(
expr->getSourceRange(),
1935 std::string(
"unimplemented AArch64 builtin call: ") +
1936 getContext().BuiltinInfo.getName(builtinID));
1937 return mlir::Value{};
1940 if (builtinID == AArch64::BI__readx18byte ||
1941 builtinID == AArch64::BI__readx18word ||
1942 builtinID == AArch64::BI__readx18dword ||
1943 builtinID == AArch64::BI__readx18qword) {
1944 cgm.errorNYI(
expr->getSourceRange(),
1945 std::string(
"unimplemented AArch64 builtin call: ") +
1946 getContext().BuiltinInfo.getName(builtinID));
1947 return mlir::Value{};
1950 if (builtinID == AArch64::BI__addx18byte ||
1951 builtinID == AArch64::BI__addx18word ||
1952 builtinID == AArch64::BI__addx18dword ||
1953 builtinID == AArch64::BI__addx18qword ||
1954 builtinID == AArch64::BI__incx18byte ||
1955 builtinID == AArch64::BI__incx18word ||
1956 builtinID == AArch64::BI__incx18dword ||
1957 builtinID == AArch64::BI__incx18qword) {
1958 cgm.errorNYI(
expr->getSourceRange(),
1959 std::string(
"unimplemented AArch64 builtin call: ") +
1960 getContext().BuiltinInfo.getName(builtinID));
1961 return mlir::Value{};
1964 if (builtinID == AArch64::BI_CopyDoubleFromInt64 ||
1965 builtinID == AArch64::BI_CopyFloatFromInt32 ||
1966 builtinID == AArch64::BI_CopyInt32FromFloat ||
1967 builtinID == AArch64::BI_CopyInt64FromDouble) {
1968 cgm.errorNYI(
expr->getSourceRange(),
1969 std::string(
"unimplemented AArch64 builtin call: ") +
1970 getContext().BuiltinInfo.getName(builtinID));
1971 return mlir::Value{};
1974 if (builtinID == AArch64::BI_CountLeadingOnes ||
1975 builtinID == AArch64::BI_CountLeadingOnes64 ||
1976 builtinID == AArch64::BI_CountLeadingZeros ||
1977 builtinID == AArch64::BI_CountLeadingZeros64) {
1978 cgm.errorNYI(
expr->getSourceRange(),
1979 std::string(
"unimplemented AArch64 builtin call: ") +
1980 getContext().BuiltinInfo.getName(builtinID));
1981 return mlir::Value{};
1984 if (builtinID == AArch64::BI_CountLeadingSigns ||
1985 builtinID == AArch64::BI_CountLeadingSigns64) {
1986 cgm.errorNYI(
expr->getSourceRange(),
1987 std::string(
"unimplemented AArch64 builtin call: ") +
1988 getContext().BuiltinInfo.getName(builtinID));
1989 return mlir::Value{};
1992 if (builtinID == AArch64::BI_CountOneBits ||
1993 builtinID == AArch64::BI_CountOneBits64) {
1994 cgm.errorNYI(
expr->getSourceRange(),
1995 std::string(
"unimplemented AArch64 builtin call: ") +
1996 getContext().BuiltinInfo.getName(builtinID));
1997 return mlir::Value{};
2000 if (builtinID == AArch64::BI__prefetch) {
2001 cgm.errorNYI(
expr->getSourceRange(),
2002 std::string(
"unimplemented AArch64 builtin call: ") +
2003 getContext().BuiltinInfo.getName(builtinID));
2004 return mlir::Value{};
2007 if (builtinID == AArch64::BI__hlt) {
2008 cgm.errorNYI(
expr->getSourceRange(),
2009 std::string(
"unimplemented AArch64 builtin call: ") +
2010 getContext().BuiltinInfo.getName(builtinID));
2011 return mlir::Value{};
2014 if (builtinID == NEON::BI__builtin_neon_vcvth_bf16_f32) {
2015 cgm.errorNYI(
expr->getSourceRange(),
2016 std::string(
"unimplemented AArch64 builtin call: ") +
2017 getContext().BuiltinInfo.getName(builtinID));
2018 return mlir::Value{};
2027 return p.first == builtinID;
2030 builtinID = it->second;
2035 unsigned iceArguments = 0;
2044 unsigned numArgs =
expr->getNumArgs() - (hasExtraArg ? 1 : 0);
2045 for (
unsigned i = 0, e = numArgs; i != e; i++) {
2047 switch (builtinID) {
2048 case NEON::BI__builtin_neon_vld1_v:
2049 case NEON::BI__builtin_neon_vld1q_v:
2050 case NEON::BI__builtin_neon_vld1_dup_v:
2051 case NEON::BI__builtin_neon_vld1q_dup_v:
2052 case NEON::BI__builtin_neon_vld1_lane_v:
2053 case NEON::BI__builtin_neon_vld1q_lane_v:
2054 case NEON::BI__builtin_neon_vst1_v:
2055 case NEON::BI__builtin_neon_vst1q_v:
2056 case NEON::BI__builtin_neon_vst1_lane_v:
2057 case NEON::BI__builtin_neon_vst1q_lane_v:
2058 case NEON::BI__builtin_neon_vldap1_lane_s64:
2059 case NEON::BI__builtin_neon_vldap1q_lane_s64:
2060 case NEON::BI__builtin_neon_vstl1_lane_s64:
2061 case NEON::BI__builtin_neon_vstl1q_lane_s64:
2065 expr->getSourceRange(),
2066 std::string(
"unimplemented AArch64 builtin argument handling ") +
2067 getContext().BuiltinInfo.getName(builtinID));
2085 const Expr *arg =
expr->getArg(
expr->getNumArgs() - 1);
2089 if (std::optional<llvm::APSInt> result =
2093 bool usgn =
type.isUnsigned();
2095 mlir::Location loc =
getLoc(
expr->getExprLoc());
2108 switch (builtinID) {
2111 case NEON::BI__builtin_neon_vabsh_f16: {
2112 return cir::FAbsOp::create(builder, loc, ops);
2114 case NEON::BI__builtin_neon_vaddq_p128:
2115 case NEON::BI__builtin_neon_vldrq_p128:
2116 case NEON::BI__builtin_neon_vstrq_p128:
2117 case NEON::BI__builtin_neon_vcvts_f32_u32:
2118 case NEON::BI__builtin_neon_vcvtd_f64_u64:
2119 case NEON::BI__builtin_neon_vcvts_f32_s32:
2120 case NEON::BI__builtin_neon_vcvtd_f64_s64:
2121 case NEON::BI__builtin_neon_vcvth_f16_u16:
2122 case NEON::BI__builtin_neon_vcvth_f16_u32:
2123 case NEON::BI__builtin_neon_vcvth_f16_u64:
2124 case NEON::BI__builtin_neon_vcvth_f16_s16:
2125 case NEON::BI__builtin_neon_vcvth_f16_s32:
2126 case NEON::BI__builtin_neon_vcvth_f16_s64:
2127 case NEON::BI__builtin_neon_vcvtah_u16_f16:
2128 case NEON::BI__builtin_neon_vcvtmh_u16_f16:
2129 case NEON::BI__builtin_neon_vcvtnh_u16_f16:
2130 case NEON::BI__builtin_neon_vcvtph_u16_f16:
2131 case NEON::BI__builtin_neon_vcvth_u16_f16:
2132 case NEON::BI__builtin_neon_vcvtah_s16_f16:
2133 case NEON::BI__builtin_neon_vcvtmh_s16_f16:
2134 case NEON::BI__builtin_neon_vcvtnh_s16_f16:
2135 case NEON::BI__builtin_neon_vcvtph_s16_f16:
2136 case NEON::BI__builtin_neon_vcvth_s16_f16:
2137 case NEON::BI__builtin_neon_vcaleh_f16:
2138 case NEON::BI__builtin_neon_vcalth_f16:
2139 case NEON::BI__builtin_neon_vcageh_f16:
2140 case NEON::BI__builtin_neon_vcagth_f16:
2141 case NEON::BI__builtin_neon_vcvth_n_s16_f16:
2142 case NEON::BI__builtin_neon_vcvth_n_u16_f16:
2143 case NEON::BI__builtin_neon_vcvth_n_f16_s16:
2144 case NEON::BI__builtin_neon_vcvth_n_f16_u16:
2145 case NEON::BI__builtin_neon_vpaddd_s64:
2146 case NEON::BI__builtin_neon_vpaddd_f64:
2147 case NEON::BI__builtin_neon_vpadds_f32:
2148 cgm.errorNYI(
expr->getSourceRange(),
2149 std::string(
"unimplemented AArch64 builtin call: ") +
2150 getContext().BuiltinInfo.getName(builtinID));
2151 return mlir::Value{};
2152 case NEON::BI__builtin_neon_vceqzd_s64:
2153 case NEON::BI__builtin_neon_vceqzd_f64:
2154 case NEON::BI__builtin_neon_vceqzs_f32:
2155 case NEON::BI__builtin_neon_vceqzh_f16:
2157 *
this, builder, loc, ops[0],
2159 case NEON::BI__builtin_neon_vcgezd_s64:
2160 case NEON::BI__builtin_neon_vcgezd_f64:
2161 case NEON::BI__builtin_neon_vcgezs_f32:
2162 case NEON::BI__builtin_neon_vcgezh_f16:
2163 case NEON::BI__builtin_neon_vclezd_s64:
2164 case NEON::BI__builtin_neon_vclezd_f64:
2165 case NEON::BI__builtin_neon_vclezs_f32:
2166 case NEON::BI__builtin_neon_vclezh_f16:
2167 case NEON::BI__builtin_neon_vcgtzd_s64:
2168 case NEON::BI__builtin_neon_vcgtzd_f64:
2169 case NEON::BI__builtin_neon_vcgtzs_f32:
2170 case NEON::BI__builtin_neon_vcgtzh_f16:
2171 case NEON::BI__builtin_neon_vcltzd_s64:
2172 case NEON::BI__builtin_neon_vcltzd_f64:
2173 case NEON::BI__builtin_neon_vcltzs_f32:
2174 case NEON::BI__builtin_neon_vcltzh_f16:
2175 case NEON::BI__builtin_neon_vceqzd_u64: {
2177 *
this, builder, loc, ops[0],
2180 case NEON::BI__builtin_neon_vceqd_f64:
2181 case NEON::BI__builtin_neon_vcled_f64:
2182 case NEON::BI__builtin_neon_vcltd_f64:
2183 case NEON::BI__builtin_neon_vcged_f64:
2184 case NEON::BI__builtin_neon_vcgtd_f64:
2185 case NEON::BI__builtin_neon_vceqs_f32:
2186 case NEON::BI__builtin_neon_vcles_f32:
2187 case NEON::BI__builtin_neon_vclts_f32:
2188 case NEON::BI__builtin_neon_vcges_f32:
2189 case NEON::BI__builtin_neon_vcgts_f32:
2190 case NEON::BI__builtin_neon_vceqh_f16:
2191 case NEON::BI__builtin_neon_vcleh_f16:
2192 case NEON::BI__builtin_neon_vclth_f16:
2193 case NEON::BI__builtin_neon_vcgeh_f16:
2194 case NEON::BI__builtin_neon_vcgth_f16:
2195 case NEON::BI__builtin_neon_vceqd_s64:
2196 case NEON::BI__builtin_neon_vceqd_u64:
2197 case NEON::BI__builtin_neon_vcgtd_s64:
2198 case NEON::BI__builtin_neon_vcgtd_u64:
2199 case NEON::BI__builtin_neon_vcltd_s64:
2200 case NEON::BI__builtin_neon_vcltd_u64:
2201 case NEON::BI__builtin_neon_vcged_u64:
2202 case NEON::BI__builtin_neon_vcged_s64:
2203 case NEON::BI__builtin_neon_vcled_u64:
2204 case NEON::BI__builtin_neon_vcled_s64:
2205 cgm.errorNYI(
expr->getSourceRange(),
2206 std::string(
"unimplemented AArch64 builtin call: ") +
2207 getContext().BuiltinInfo.getName(builtinID));
2208 return mlir::Value{};
2209 case NEON::BI__builtin_neon_vnegd_s64: {
2210 return builder.createNeg(ops[0]);
2212 case NEON::BI__builtin_neon_vnegh_f16: {
2213 return builder.createFNeg(ops[0]);
2215 case NEON::BI__builtin_neon_vtstd_s64:
2216 case NEON::BI__builtin_neon_vtstd_u64:
2217 case NEON::BI__builtin_neon_vset_lane_i8:
2218 case NEON::BI__builtin_neon_vset_lane_i16:
2219 case NEON::BI__builtin_neon_vset_lane_i32:
2220 case NEON::BI__builtin_neon_vset_lane_i64:
2221 case NEON::BI__builtin_neon_vset_lane_bf16:
2222 case NEON::BI__builtin_neon_vset_lane_f32:
2223 case NEON::BI__builtin_neon_vsetq_lane_i8:
2224 case NEON::BI__builtin_neon_vsetq_lane_i16:
2225 case NEON::BI__builtin_neon_vsetq_lane_i32:
2226 case NEON::BI__builtin_neon_vsetq_lane_i64:
2227 case NEON::BI__builtin_neon_vsetq_lane_bf16:
2228 case NEON::BI__builtin_neon_vsetq_lane_f32:
2229 case NEON::BI__builtin_neon_vset_lane_f64:
2230 case NEON::BI__builtin_neon_vset_lane_mf8:
2231 case NEON::BI__builtin_neon_vsetq_lane_mf8:
2232 case NEON::BI__builtin_neon_vsetq_lane_f64:
2233 case NEON::BI__builtin_neon_vget_lane_i8:
2234 case NEON::BI__builtin_neon_vdupb_lane_i8:
2235 case NEON::BI__builtin_neon_vgetq_lane_i8:
2236 case NEON::BI__builtin_neon_vdupb_laneq_i8:
2237 case NEON::BI__builtin_neon_vget_lane_mf8:
2238 case NEON::BI__builtin_neon_vdupb_lane_mf8:
2239 case NEON::BI__builtin_neon_vgetq_lane_mf8:
2240 case NEON::BI__builtin_neon_vdupb_laneq_mf8:
2241 case NEON::BI__builtin_neon_vget_lane_i16:
2242 case NEON::BI__builtin_neon_vduph_lane_i16:
2243 case NEON::BI__builtin_neon_vgetq_lane_i16:
2244 case NEON::BI__builtin_neon_vduph_laneq_i16:
2245 case NEON::BI__builtin_neon_vget_lane_i32:
2246 case NEON::BI__builtin_neon_vdups_lane_i32:
2247 case NEON::BI__builtin_neon_vdups_lane_f32:
2248 case NEON::BI__builtin_neon_vgetq_lane_i32:
2249 case NEON::BI__builtin_neon_vdups_laneq_i32:
2250 case NEON::BI__builtin_neon_vget_lane_i64:
2251 case NEON::BI__builtin_neon_vdupd_lane_i64:
2252 case NEON::BI__builtin_neon_vdupd_lane_f64:
2253 case NEON::BI__builtin_neon_vgetq_lane_i64:
2254 case NEON::BI__builtin_neon_vdupd_laneq_i64:
2255 case NEON::BI__builtin_neon_vget_lane_f32:
2256 case NEON::BI__builtin_neon_vget_lane_f64:
2257 case NEON::BI__builtin_neon_vgetq_lane_f32:
2258 case NEON::BI__builtin_neon_vdups_laneq_f32:
2259 case NEON::BI__builtin_neon_vgetq_lane_f64:
2260 case NEON::BI__builtin_neon_vdupd_laneq_f64:
2261 cgm.errorNYI(
expr->getSourceRange(),
2262 std::string(
"unimplemented AArch64 builtin call: ") +
2263 getContext().BuiltinInfo.getName(builtinID));
2264 return mlir::Value{};
2265 case NEON::BI__builtin_neon_vaddh_f16:
2266 return builder.createFAdd(loc, ops[0], ops[1]);
2267 case NEON::BI__builtin_neon_vsubh_f16:
2268 return builder.createFSub(loc, ops[0], ops[1]);
2269 case NEON::BI__builtin_neon_vmulh_f16:
2270 return builder.createFMul(loc, ops[0], ops[1]);
2271 case NEON::BI__builtin_neon_vdivh_f16:
2272 return builder.createFDiv(loc, ops[0], ops[1]);
2273 case NEON::BI__builtin_neon_vfmah_f16:
2275 std::rotate(ops.begin(), ops.begin() + 1, ops.end());
2279 case NEON::BI__builtin_neon_vfmsh_f16:
2281 std::rotate(ops.begin(), ops.begin() + 1, ops.end());
2282 ops[0] = builder.createFNeg(ops[0]);
2285 case NEON::BI__builtin_neon_vaddd_s64:
2286 case NEON::BI__builtin_neon_vaddd_u64:
2287 case NEON::BI__builtin_neon_vsubd_s64:
2288 case NEON::BI__builtin_neon_vsubd_u64:
2289 case NEON::BI__builtin_neon_vqdmlalh_s16:
2290 case NEON::BI__builtin_neon_vqdmlslh_s16:
2291 case NEON::BI__builtin_neon_vqshlud_n_s64:
2292 case NEON::BI__builtin_neon_vqshld_n_u64:
2293 case NEON::BI__builtin_neon_vqshld_n_s64:
2294 case NEON::BI__builtin_neon_vrshrd_n_u64:
2295 case NEON::BI__builtin_neon_vrshrd_n_s64:
2296 cgm.errorNYI(
expr->getSourceRange(),
2297 std::string(
"unimplemented AArch64 builtin call: ") +
2298 getContext().BuiltinInfo.getName(builtinID));
2299 return mlir::Value{};
2300 case NEON::BI__builtin_neon_vrsrad_n_u64:
2301 case NEON::BI__builtin_neon_vrsrad_n_s64: {
2302 cir::IntType int64Type = builtinID == NEON::BI__builtin_neon_vrsrad_n_u64
2303 ? builder.getUInt64Ty()
2304 : builder.getSInt64Ty();
2305 ops[2] = builder.createNeg(ops[2]);
2306 const StringRef intrName = builtinID == NEON::BI__builtin_neon_vrsrad_n_u64
2307 ?
"aarch64.neon.urshl"
2308 :
"aarch64.neon.srshl";
2311 ops[1], builder.createIntCast(ops[2], builder.getSInt64Ty())};
2312 ops[1] = builder.emitIntrinsicCallOp(loc, intrName, int64Type, args);
2313 return builder.createAdd(loc, ops[0],
2314 builder.createBitcast(ops[1], int64Type));
2316 case NEON::BI__builtin_neon_vshld_n_s64:
2317 case NEON::BI__builtin_neon_vshld_n_u64: {
2319 std::optional<llvm::APSInt> amt =
2321 assert(amt &&
"Expected argument to be a constant");
2322 return builder.createShiftLeft(loc, ops[0], amt->getZExtValue());
2324 case NEON::BI__builtin_neon_vshrd_n_s64: {
2325 std::optional<llvm::APSInt> amt =
2327 assert(amt &&
"Expected argument to be a constant");
2328 return builder.createShiftRight(
2329 loc, ops[0], std::min(
static_cast<uint64_t
>(63), amt->getZExtValue()));
2331 case NEON::BI__builtin_neon_vshrd_n_u64: {
2332 std::optional<llvm::APSInt> amt =
2334 assert(amt &&
"Expected argument to be a constant");
2335 uint64_t shiftAmt = amt->getZExtValue();
2338 return builder.getConstInt(loc, builder.getUInt64Ty(), 0);
2339 return builder.createShiftRight(loc, ops[0], shiftAmt);
2341 case NEON::BI__builtin_neon_vsrad_n_s64:
2342 case NEON::BI__builtin_neon_vsrad_n_u64:
2343 case NEON::BI__builtin_neon_vqdmlalh_lane_s16:
2344 case NEON::BI__builtin_neon_vqdmlalh_laneq_s16:
2345 case NEON::BI__builtin_neon_vqdmlslh_lane_s16:
2346 case NEON::BI__builtin_neon_vqdmlslh_laneq_s16:
2347 case NEON::BI__builtin_neon_vqdmlals_s32:
2348 case NEON::BI__builtin_neon_vqdmlsls_s32:
2349 case NEON::BI__builtin_neon_vqdmlals_lane_s32:
2350 case NEON::BI__builtin_neon_vqdmlals_laneq_s32:
2351 case NEON::BI__builtin_neon_vqdmlsls_lane_s32:
2352 case NEON::BI__builtin_neon_vqdmlsls_laneq_s32: {
2353 cgm.errorNYI(
expr->getSourceRange(),
2354 std::string(
"unimplemented AArch64 builtin call: ") +
2355 getContext().BuiltinInfo.getName(builtinID));
2356 return mlir::Value{};
2358 case NEON::BI__builtin_neon_vget_lane_bf16:
2359 case NEON::BI__builtin_neon_vduph_lane_bf16:
2360 case NEON::BI__builtin_neon_vduph_lane_f16:
2361 case NEON::BI__builtin_neon_vgetq_lane_bf16:
2362 case NEON::BI__builtin_neon_vduph_laneq_bf16:
2363 case NEON::BI__builtin_neon_vduph_laneq_f16: {
2364 return cir::VecExtractOp::create(builder, loc, ops[0], ops[1]);
2366 case NEON::BI__builtin_neon_vcvt_bf16_f32:
2367 case NEON::BI__builtin_neon_vcvtq_low_bf16_f32:
2368 case NEON::BI__builtin_neon_vcvtq_high_bf16_f32:
2369 case clang::AArch64::BI_InterlockedAdd:
2370 case clang::AArch64::BI_InterlockedAdd_acq:
2371 case clang::AArch64::BI_InterlockedAdd_rel:
2372 case clang::AArch64::BI_InterlockedAdd_nf:
2373 case clang::AArch64::BI_InterlockedAdd64:
2374 case clang::AArch64::BI_InterlockedAdd64_acq:
2375 case clang::AArch64::BI_InterlockedAdd64_rel:
2376 case clang::AArch64::BI_InterlockedAdd64_nf:
2377 cgm.errorNYI(
expr->getSourceRange(),
2378 std::string(
"unimplemented AArch64 builtin call: ") +
2379 getContext().BuiltinInfo.getName(builtinID));
2380 return mlir::Value{};
2387 llvm::StringRef intrName;
2389 switch (builtinID) {
2391 return std::nullopt;
2392 case NEON::BI__builtin_neon_vbsl_v:
2393 case NEON::BI__builtin_neon_vbslq_v: {
2396 ops[0] = builder.createBitcast(ops[0], bitTy);
2397 ops[1] = builder.createBitcast(ops[1], bitTy);
2398 ops[2] = builder.createBitcast(ops[2], bitTy);
2400 ops[1] = builder.createAnd(loc, ops[0], ops[1]);
2401 ops[2] = builder.createAnd(loc, builder.createNot(ops[0]), ops[2]);
2402 ops[0] = builder.createOr(loc, ops[1], ops[2]);
2403 return builder.createBitcast(ops[0], ty);
2405 case NEON::BI__builtin_neon_vfma_lane_v:
2406 case NEON::BI__builtin_neon_vfmaq_lane_v:
2407 case NEON::BI__builtin_neon_vfma_laneq_v:
2408 case NEON::BI__builtin_neon_vfmaq_laneq_v:
2409 case NEON::BI__builtin_neon_vfmah_lane_f16:
2410 case NEON::BI__builtin_neon_vfmas_lane_f32:
2411 case NEON::BI__builtin_neon_vfmah_laneq_f16:
2412 case NEON::BI__builtin_neon_vfmas_laneq_f32:
2413 case NEON::BI__builtin_neon_vfmad_lane_f64:
2414 case NEON::BI__builtin_neon_vfmad_laneq_f64:
2415 cgm.errorNYI(
expr->getSourceRange(),
2416 std::string(
"unimplemented AArch64 builtin call: ") +
2417 getContext().BuiltinInfo.getName(builtinID));
2418 return mlir::Value{};
2419 case NEON::BI__builtin_neon_vmull_v: {
2420 intrName = usgn ?
"aarch64.neon.umull" :
"aarch64.neon.smull";
2422 intrName =
"aarch64.neon.pmull";
2423 cir::VectorType argTy = builder.getExtendedOrTruncatedElementVectorType(
2425 return emitNeonCall(
cgm, builder, {argTy, argTy}, ops, intrName, ty, loc);
2427 case NEON::BI__builtin_neon_vmax_v:
2428 case NEON::BI__builtin_neon_vmaxq_v:
2429 intrName = usgn ?
"aarch64.neon.umax" :
"aarch64.neon.smax";
2430 if (cir::isFPOrVectorOfFPType(ty))
2431 intrName =
"aarch64.neon.fmax";
2433 case NEON::BI__builtin_neon_vmaxh_f16:
2434 cgm.errorNYI(
expr->getSourceRange(),
2435 std::string(
"unimplemented AArch64 builtin call: ") +
2436 getContext().BuiltinInfo.getName(builtinID));
2437 return mlir::Value{};
2438 case NEON::BI__builtin_neon_vmin_v:
2439 case NEON::BI__builtin_neon_vminq_v:
2440 intrName = usgn ?
"aarch64.neon.umin" :
"aarch64.neon.smin";
2441 if (cir::isFPOrVectorOfFPType(ty))
2442 intrName =
"aarch64.neon.fmin";
2444 case NEON::BI__builtin_neon_vminh_f16:
2445 cgm.errorNYI(
expr->getSourceRange(),
2446 std::string(
"unimplemented AArch64 builtin call: ") +
2447 getContext().BuiltinInfo.getName(builtinID));
2448 return mlir::Value{};
2449 case NEON::BI__builtin_neon_vabd_v:
2450 case NEON::BI__builtin_neon_vabdq_v:
2451 intrName = usgn ?
"aarch64.neon.uabd" :
"aarch64.neon.sabd";
2452 if (cir::isFPOrVectorOfFPType(ty))
2453 intrName =
"aarch64.neon.fabd";
2455 case NEON::BI__builtin_neon_vpadal_v:
2456 case NEON::BI__builtin_neon_vpadalq_v:
2457 cgm.errorNYI(
expr->getSourceRange(),
2458 std::string(
"unimplemented AArch64 builtin call: ") +
2459 getContext().BuiltinInfo.getName(builtinID));
2460 return mlir::Value{};
2461 case NEON::BI__builtin_neon_vpmin_v:
2462 case NEON::BI__builtin_neon_vpminq_v:
2463 intrName = usgn ?
"aarch64.neon.uminp" :
"aarch64.neon.sminp";
2464 if (cir::isFPOrVectorOfFPType(ty))
2465 intrName =
"aarch64.neon.fminp";
2467 case NEON::BI__builtin_neon_vpmax_v:
2468 case NEON::BI__builtin_neon_vpmaxq_v:
2469 cgm.errorNYI(
expr->getSourceRange(),
2470 std::string(
"unimplemented AArch64 builtin call: ") +
2471 getContext().BuiltinInfo.getName(builtinID));
2472 return mlir::Value{};
2473 case NEON::BI__builtin_neon_vminnm_v:
2474 case NEON::BI__builtin_neon_vminnmq_v:
2475 intrName =
"aarch64.neon.fminnm";
2477 case NEON::BI__builtin_neon_vminnmh_f16:
2478 cgm.errorNYI(
expr->getSourceRange(),
2479 std::string(
"unimplemented AArch64 builtin call: ") +
2480 getContext().BuiltinInfo.getName(builtinID));
2481 return mlir::Value{};
2482 case NEON::BI__builtin_neon_vmaxnm_v:
2483 case NEON::BI__builtin_neon_vmaxnmq_v:
2484 intrName =
"aarch64.neon.fmaxnm";
2486 case NEON::BI__builtin_neon_vmaxnmh_f16:
2487 case NEON::BI__builtin_neon_vrecpss_f32:
2488 case NEON::BI__builtin_neon_vrecpsd_f64:
2489 case NEON::BI__builtin_neon_vrecpsh_f16:
2490 case NEON::BI__builtin_neon_vqshrun_n_v:
2491 case NEON::BI__builtin_neon_vqrshrun_n_v:
2492 case NEON::BI__builtin_neon_vqshrn_n_v:
2493 case NEON::BI__builtin_neon_vrshrn_n_v:
2494 case NEON::BI__builtin_neon_vqrshrn_n_v:
2495 case NEON::BI__builtin_neon_vrndah_f16:
2496 case NEON::BI__builtin_neon_vrnda_v:
2497 case NEON::BI__builtin_neon_vrndaq_v:
2498 case NEON::BI__builtin_neon_vrndih_f16:
2499 case NEON::BI__builtin_neon_vrndmh_f16:
2500 case NEON::BI__builtin_neon_vrndm_v:
2501 case NEON::BI__builtin_neon_vrndmq_v:
2502 case NEON::BI__builtin_neon_vrndnh_f16:
2503 case NEON::BI__builtin_neon_vrndn_v:
2504 case NEON::BI__builtin_neon_vrndnq_v:
2505 case NEON::BI__builtin_neon_vrndns_f32:
2506 case NEON::BI__builtin_neon_vrndph_f16:
2507 case NEON::BI__builtin_neon_vrndp_v:
2508 case NEON::BI__builtin_neon_vrndpq_v:
2509 case NEON::BI__builtin_neon_vrndxh_f16:
2510 case NEON::BI__builtin_neon_vrndx_v:
2511 case NEON::BI__builtin_neon_vrndxq_v:
2512 case NEON::BI__builtin_neon_vrndh_f16:
2513 case NEON::BI__builtin_neon_vrnd32x_f32:
2514 case NEON::BI__builtin_neon_vrnd32xq_f32:
2515 case NEON::BI__builtin_neon_vrnd32x_f64:
2516 case NEON::BI__builtin_neon_vrnd32xq_f64:
2517 case NEON::BI__builtin_neon_vrnd32z_f32:
2518 case NEON::BI__builtin_neon_vrnd32zq_f32:
2519 case NEON::BI__builtin_neon_vrnd32z_f64:
2520 case NEON::BI__builtin_neon_vrnd32zq_f64:
2521 case NEON::BI__builtin_neon_vrnd64x_f32:
2522 case NEON::BI__builtin_neon_vrnd64xq_f32:
2523 case NEON::BI__builtin_neon_vrnd64x_f64:
2524 case NEON::BI__builtin_neon_vrnd64xq_f64:
2525 case NEON::BI__builtin_neon_vrnd64z_f32:
2526 case NEON::BI__builtin_neon_vrnd64zq_f32:
2527 case NEON::BI__builtin_neon_vrnd64z_f64:
2528 case NEON::BI__builtin_neon_vrnd64zq_f64:
2529 case NEON::BI__builtin_neon_vrnd_v:
2530 case NEON::BI__builtin_neon_vrndq_v:
2531 cgm.errorNYI(
expr->getSourceRange(),
2532 std::string(
"unimplemented AArch64 builtin call: ") +
2533 getContext().BuiltinInfo.getName(builtinID));
2534 return mlir::Value{};
2535 case NEON::BI__builtin_neon_vcvt_f64_v:
2536 case NEON::BI__builtin_neon_vcvtq_f64_v:
2537 ops[0] = builder.createBitcast(ops[0], ty);
2540 return builder.createCast(loc, cir::CastKind::int_to_float, ops[0], ty);
2541 case NEON::BI__builtin_neon_vcvt_f64_f32:
2542 case NEON::BI__builtin_neon_vcvt_f32_f64:
2543 case NEON::BI__builtin_neon_vcvt_s32_v:
2544 case NEON::BI__builtin_neon_vcvt_u32_v:
2545 case NEON::BI__builtin_neon_vcvt_s64_v:
2546 case NEON::BI__builtin_neon_vcvt_u64_v:
2547 case NEON::BI__builtin_neon_vcvt_s16_f16:
2548 case NEON::BI__builtin_neon_vcvt_u16_f16:
2549 case NEON::BI__builtin_neon_vcvtq_s32_v:
2550 case NEON::BI__builtin_neon_vcvtq_u32_v:
2551 case NEON::BI__builtin_neon_vcvtq_s64_v:
2552 case NEON::BI__builtin_neon_vcvtq_u64_v:
2553 case NEON::BI__builtin_neon_vcvtq_s16_f16:
2554 case NEON::BI__builtin_neon_vcvtq_u16_f16:
2555 case NEON::BI__builtin_neon_vcvta_s16_f16:
2556 case NEON::BI__builtin_neon_vcvta_u16_f16:
2557 case NEON::BI__builtin_neon_vcvta_s32_v:
2558 case NEON::BI__builtin_neon_vcvtaq_s16_f16:
2559 case NEON::BI__builtin_neon_vcvtaq_s32_v:
2560 case NEON::BI__builtin_neon_vcvta_u32_v:
2561 case NEON::BI__builtin_neon_vcvtaq_u16_f16:
2562 case NEON::BI__builtin_neon_vcvtaq_u32_v:
2563 case NEON::BI__builtin_neon_vcvta_s64_v:
2564 case NEON::BI__builtin_neon_vcvtaq_s64_v:
2565 case NEON::BI__builtin_neon_vcvta_u64_v:
2566 case NEON::BI__builtin_neon_vcvtaq_u64_v:
2567 case NEON::BI__builtin_neon_vcvtm_s16_f16:
2568 case NEON::BI__builtin_neon_vcvtm_s32_v:
2569 case NEON::BI__builtin_neon_vcvtmq_s16_f16:
2570 case NEON::BI__builtin_neon_vcvtmq_s32_v:
2571 case NEON::BI__builtin_neon_vcvtm_u16_f16:
2572 case NEON::BI__builtin_neon_vcvtm_u32_v:
2573 case NEON::BI__builtin_neon_vcvtmq_u16_f16:
2574 case NEON::BI__builtin_neon_vcvtmq_u32_v:
2575 case NEON::BI__builtin_neon_vcvtm_s64_v:
2576 case NEON::BI__builtin_neon_vcvtmq_s64_v:
2577 case NEON::BI__builtin_neon_vcvtm_u64_v:
2578 case NEON::BI__builtin_neon_vcvtmq_u64_v:
2579 case NEON::BI__builtin_neon_vcvtn_s16_f16:
2580 case NEON::BI__builtin_neon_vcvtn_s32_v:
2581 case NEON::BI__builtin_neon_vcvtnq_s16_f16:
2582 case NEON::BI__builtin_neon_vcvtnq_s32_v:
2583 case NEON::BI__builtin_neon_vcvtn_u16_f16:
2584 case NEON::BI__builtin_neon_vcvtn_u32_v:
2585 case NEON::BI__builtin_neon_vcvtnq_u16_f16:
2586 case NEON::BI__builtin_neon_vcvtnq_u32_v:
2587 case NEON::BI__builtin_neon_vcvtn_s64_v:
2588 case NEON::BI__builtin_neon_vcvtnq_s64_v:
2589 case NEON::BI__builtin_neon_vcvtn_u64_v:
2590 case NEON::BI__builtin_neon_vcvtnq_u64_v:
2591 case NEON::BI__builtin_neon_vcvtp_s16_f16:
2592 case NEON::BI__builtin_neon_vcvtp_s32_v:
2593 case NEON::BI__builtin_neon_vcvtpq_s16_f16:
2594 case NEON::BI__builtin_neon_vcvtpq_s32_v:
2595 case NEON::BI__builtin_neon_vcvtp_u16_f16:
2596 case NEON::BI__builtin_neon_vcvtp_u32_v:
2597 case NEON::BI__builtin_neon_vcvtpq_u16_f16:
2598 case NEON::BI__builtin_neon_vcvtpq_u32_v:
2599 case NEON::BI__builtin_neon_vcvtp_s64_v:
2600 case NEON::BI__builtin_neon_vcvtpq_s64_v:
2601 case NEON::BI__builtin_neon_vcvtp_u64_v:
2602 case NEON::BI__builtin_neon_vcvtpq_u64_v:
2603 case NEON::BI__builtin_neon_vmulx_v:
2604 case NEON::BI__builtin_neon_vmulxq_v:
2605 case NEON::BI__builtin_neon_vmulxh_lane_f16:
2606 case NEON::BI__builtin_neon_vmulxh_laneq_f16:
2607 case NEON::BI__builtin_neon_vmul_lane_v:
2608 case NEON::BI__builtin_neon_vmul_laneq_v:
2609 case NEON::BI__builtin_neon_vpmaxnm_v:
2610 case NEON::BI__builtin_neon_vpmaxnmq_v:
2611 cgm.errorNYI(
expr->getSourceRange(),
2612 std::string(
"unimplemented AArch64 builtin call: ") +
2613 getContext().BuiltinInfo.getName(builtinID));
2614 return mlir::Value{};
2615 case NEON::BI__builtin_neon_vpminnm_v:
2616 case NEON::BI__builtin_neon_vpminnmq_v:
2617 intrName =
"aarch64.neon.fminnmp";
2619 case NEON::BI__builtin_neon_vsqrth_f16:
2620 case NEON::BI__builtin_neon_vsqrt_v:
2621 case NEON::BI__builtin_neon_vsqrtq_v:
2622 case NEON::BI__builtin_neon_vrbit_v:
2623 case NEON::BI__builtin_neon_vrbitq_v:
2624 case NEON::BI__builtin_neon_vmaxv_f16:
2625 case NEON::BI__builtin_neon_vmaxvq_f16:
2626 case NEON::BI__builtin_neon_vminv_f16:
2627 case NEON::BI__builtin_neon_vminvq_f16:
2628 case NEON::BI__builtin_neon_vmaxnmv_f16:
2629 case NEON::BI__builtin_neon_vmaxnmvq_f16:
2630 case NEON::BI__builtin_neon_vminnmv_f16:
2631 case NEON::BI__builtin_neon_vminnmvq_f16:
2632 case NEON::BI__builtin_neon_vmul_n_f64:
2633 case NEON::BI__builtin_neon_vaddlv_u8:
2634 case NEON::BI__builtin_neon_vaddlv_u16:
2635 case NEON::BI__builtin_neon_vaddlvq_u8:
2636 case NEON::BI__builtin_neon_vaddlvq_u16:
2637 case NEON::BI__builtin_neon_vaddlv_s8:
2638 case NEON::BI__builtin_neon_vaddlv_s16:
2639 case NEON::BI__builtin_neon_vaddlvq_s8:
2640 case NEON::BI__builtin_neon_vaddlvq_s16:
2641 case NEON::BI__builtin_neon_vsri_n_v:
2642 case NEON::BI__builtin_neon_vsriq_n_v:
2643 case NEON::BI__builtin_neon_vsli_n_v:
2644 case NEON::BI__builtin_neon_vsliq_n_v:
2645 case NEON::BI__builtin_neon_vsra_n_v:
2646 case NEON::BI__builtin_neon_vsraq_n_v:
2647 cgm.errorNYI(
expr->getSourceRange(),
2648 std::string(
"unimplemented AArch64 builtin call: ") +
2649 getContext().BuiltinInfo.getName(builtinID));
2650 return mlir::Value{};
2651 case NEON::BI__builtin_neon_vrsra_n_v:
2652 case NEON::BI__builtin_neon_vrsraq_n_v: {
2653 intrName = usgn ?
"aarch64.neon.urshl" :
"aarch64.neon.srshl";
2654 cir::VectorType shiftAmtVecTy =
2657 mlir::Value tmp =
emitNeonCall(
cgm, builder, {ty, shiftAmtVecTy}, tmpOps,
2661 ops[0] = builder.createBitcast(ops[0], ty);
2662 return builder.createAdd(loc, ops[0], tmp);
2664 case NEON::BI__builtin_neon_vld1_v:
2665 case NEON::BI__builtin_neon_vld1q_v:
2666 case NEON::BI__builtin_neon_vst1_v:
2667 case NEON::BI__builtin_neon_vst1q_v:
2668 case NEON::BI__builtin_neon_vld1_lane_v:
2669 case NEON::BI__builtin_neon_vld1q_lane_v:
2670 case NEON::BI__builtin_neon_vldap1_lane_s64:
2671 case NEON::BI__builtin_neon_vldap1q_lane_s64:
2672 case NEON::BI__builtin_neon_vld1_dup_v:
2673 case NEON::BI__builtin_neon_vld1q_dup_v:
2674 case NEON::BI__builtin_neon_vst1_lane_v:
2675 case NEON::BI__builtin_neon_vst1q_lane_v:
2676 case NEON::BI__builtin_neon_vstl1_lane_s64:
2677 case NEON::BI__builtin_neon_vstl1q_lane_s64:
2678 case NEON::BI__builtin_neon_vld2_v:
2679 case NEON::BI__builtin_neon_vld2q_v:
2680 case NEON::BI__builtin_neon_vld3_v:
2681 case NEON::BI__builtin_neon_vld3q_v:
2682 case NEON::BI__builtin_neon_vld4_v:
2683 case NEON::BI__builtin_neon_vld4q_v:
2684 case NEON::BI__builtin_neon_vld2_dup_v:
2685 case NEON::BI__builtin_neon_vld2q_dup_v:
2686 case NEON::BI__builtin_neon_vld3_dup_v:
2687 case NEON::BI__builtin_neon_vld3q_dup_v:
2688 case NEON::BI__builtin_neon_vld4_dup_v:
2689 case NEON::BI__builtin_neon_vld4q_dup_v:
2690 case NEON::BI__builtin_neon_vld2_lane_v:
2691 case NEON::BI__builtin_neon_vld2q_lane_v:
2692 case NEON::BI__builtin_neon_vld3_lane_v:
2693 case NEON::BI__builtin_neon_vld3q_lane_v:
2694 case NEON::BI__builtin_neon_vld4_lane_v:
2695 case NEON::BI__builtin_neon_vld4q_lane_v:
2696 case NEON::BI__builtin_neon_vst2_v:
2697 case NEON::BI__builtin_neon_vst2q_v:
2698 case NEON::BI__builtin_neon_vst2_lane_v:
2699 case NEON::BI__builtin_neon_vst2q_lane_v:
2700 case NEON::BI__builtin_neon_vst3_v:
2701 case NEON::BI__builtin_neon_vst3q_v:
2702 case NEON::BI__builtin_neon_vst3_lane_v:
2703 case NEON::BI__builtin_neon_vst3q_lane_v:
2704 case NEON::BI__builtin_neon_vst4_v:
2705 case NEON::BI__builtin_neon_vst4q_v:
2706 case NEON::BI__builtin_neon_vst4_lane_v:
2707 case NEON::BI__builtin_neon_vst4q_lane_v:
2708 case NEON::BI__builtin_neon_vtrn_v:
2709 case NEON::BI__builtin_neon_vtrnq_v:
2710 case NEON::BI__builtin_neon_vuzp_v:
2711 case NEON::BI__builtin_neon_vuzpq_v:
2712 case NEON::BI__builtin_neon_vzip_v:
2713 case NEON::BI__builtin_neon_vzipq_v:
2714 case NEON::BI__builtin_neon_vqtbl1q_v:
2715 case NEON::BI__builtin_neon_vqtbl2q_v:
2716 case NEON::BI__builtin_neon_vqtbl3q_v:
2717 case NEON::BI__builtin_neon_vqtbl4q_v:
2718 case NEON::BI__builtin_neon_vqtbx1q_v:
2719 case NEON::BI__builtin_neon_vqtbx2q_v:
2720 case NEON::BI__builtin_neon_vqtbx3q_v:
2721 case NEON::BI__builtin_neon_vqtbx4q_v:
2722 case NEON::BI__builtin_neon_vsqadd_v:
2723 case NEON::BI__builtin_neon_vsqaddq_v:
2724 case NEON::BI__builtin_neon_vuqadd_v:
2725 case NEON::BI__builtin_neon_vuqaddq_v:
2726 case NEON::BI__builtin_neon_vluti2_laneq_mf8:
2727 case NEON::BI__builtin_neon_vluti2_laneq_bf16:
2728 case NEON::BI__builtin_neon_vluti2_laneq_f16:
2729 case NEON::BI__builtin_neon_vluti2_laneq_p16:
2730 case NEON::BI__builtin_neon_vluti2_laneq_p8:
2731 case NEON::BI__builtin_neon_vluti2_laneq_s16:
2732 case NEON::BI__builtin_neon_vluti2_laneq_s8:
2733 case NEON::BI__builtin_neon_vluti2_laneq_u16:
2734 case NEON::BI__builtin_neon_vluti2_laneq_u8:
2735 case NEON::BI__builtin_neon_vluti2q_laneq_mf8:
2736 case NEON::BI__builtin_neon_vluti2q_laneq_bf16:
2737 case NEON::BI__builtin_neon_vluti2q_laneq_f16:
2738 case NEON::BI__builtin_neon_vluti2q_laneq_p16:
2739 case NEON::BI__builtin_neon_vluti2q_laneq_p8:
2740 case NEON::BI__builtin_neon_vluti2q_laneq_s16:
2741 case NEON::BI__builtin_neon_vluti2q_laneq_s8:
2742 case NEON::BI__builtin_neon_vluti2q_laneq_u16:
2743 case NEON::BI__builtin_neon_vluti2q_laneq_u8:
2744 case NEON::BI__builtin_neon_vluti2_lane_mf8:
2745 case NEON::BI__builtin_neon_vluti2_lane_bf16:
2746 case NEON::BI__builtin_neon_vluti2_lane_f16:
2747 case NEON::BI__builtin_neon_vluti2_lane_p16:
2748 case NEON::BI__builtin_neon_vluti2_lane_p8:
2749 case NEON::BI__builtin_neon_vluti2_lane_s16:
2750 case NEON::BI__builtin_neon_vluti2_lane_s8:
2751 case NEON::BI__builtin_neon_vluti2_lane_u16:
2752 case NEON::BI__builtin_neon_vluti2_lane_u8:
2753 case NEON::BI__builtin_neon_vluti2q_lane_mf8:
2754 case NEON::BI__builtin_neon_vluti2q_lane_bf16:
2755 case NEON::BI__builtin_neon_vluti2q_lane_f16:
2756 case NEON::BI__builtin_neon_vluti2q_lane_p16:
2757 case NEON::BI__builtin_neon_vluti2q_lane_p8:
2758 case NEON::BI__builtin_neon_vluti2q_lane_s16:
2759 case NEON::BI__builtin_neon_vluti2q_lane_s8:
2760 case NEON::BI__builtin_neon_vluti2q_lane_u16:
2761 case NEON::BI__builtin_neon_vluti2q_lane_u8:
2762 case NEON::BI__builtin_neon_vluti4q_lane_mf8:
2763 case NEON::BI__builtin_neon_vluti4q_lane_p8:
2764 case NEON::BI__builtin_neon_vluti4q_lane_s8:
2765 case NEON::BI__builtin_neon_vluti4q_lane_u8:
2766 case NEON::BI__builtin_neon_vluti4q_laneq_mf8:
2767 case NEON::BI__builtin_neon_vluti4q_laneq_p8:
2768 case NEON::BI__builtin_neon_vluti4q_laneq_s8:
2769 case NEON::BI__builtin_neon_vluti4q_laneq_u8:
2770 case NEON::BI__builtin_neon_vluti4q_lane_bf16_x2:
2771 case NEON::BI__builtin_neon_vluti4q_lane_f16_x2:
2772 case NEON::BI__builtin_neon_vluti4q_lane_p16_x2:
2773 case NEON::BI__builtin_neon_vluti4q_lane_s16_x2:
2774 case NEON::BI__builtin_neon_vluti4q_lane_u16_x2:
2775 case NEON::BI__builtin_neon_vluti4q_laneq_bf16_x2:
2776 case NEON::BI__builtin_neon_vluti4q_laneq_f16_x2:
2777 case NEON::BI__builtin_neon_vluti4q_laneq_p16_x2:
2778 case NEON::BI__builtin_neon_vluti4q_laneq_s16_x2:
2779 case NEON::BI__builtin_neon_vluti4q_laneq_u16_x2:
2780 case NEON::BI__builtin_neon_vmmlaq_f16_mf8_fpm:
2781 case NEON::BI__builtin_neon_vmmlaq_f32_mf8_fpm:
2782 case NEON::BI__builtin_neon_vcvt1_low_bf16_mf8_fpm:
2783 case NEON::BI__builtin_neon_vcvt1_bf16_mf8_fpm:
2784 case NEON::BI__builtin_neon_vcvt1_high_bf16_mf8_fpm:
2785 case NEON::BI__builtin_neon_vcvt2_low_bf16_mf8_fpm:
2786 case NEON::BI__builtin_neon_vcvt2_bf16_mf8_fpm:
2787 case NEON::BI__builtin_neon_vcvt2_high_bf16_mf8_fpm:
2788 case NEON::BI__builtin_neon_vcvt1_low_f16_mf8_fpm:
2789 case NEON::BI__builtin_neon_vcvt1_f16_mf8_fpm:
2790 case NEON::BI__builtin_neon_vcvt1_high_f16_mf8_fpm:
2791 case NEON::BI__builtin_neon_vcvt2_low_f16_mf8_fpm:
2792 case NEON::BI__builtin_neon_vcvt2_f16_mf8_fpm:
2793 case NEON::BI__builtin_neon_vcvt2_high_f16_mf8_fpm:
2794 case NEON::BI__builtin_neon_vcvt_mf8_f32_fpm:
2795 case NEON::BI__builtin_neon_vcvt_mf8_f16_fpm:
2796 case NEON::BI__builtin_neon_vcvtq_mf8_f16_fpm:
2797 case NEON::BI__builtin_neon_vcvt_high_mf8_f32_fpm:
2798 case NEON::BI__builtin_neon_vdot_f16_mf8_fpm:
2799 case NEON::BI__builtin_neon_vdotq_f16_mf8_fpm:
2800 case NEON::BI__builtin_neon_vdot_lane_f16_mf8_fpm:
2801 case NEON::BI__builtin_neon_vdotq_lane_f16_mf8_fpm:
2802 case NEON::BI__builtin_neon_vdot_laneq_f16_mf8_fpm:
2803 case NEON::BI__builtin_neon_vdotq_laneq_f16_mf8_fpm:
2804 case NEON::BI__builtin_neon_vdot_f32_mf8_fpm:
2805 case NEON::BI__builtin_neon_vdotq_f32_mf8_fpm:
2806 case NEON::BI__builtin_neon_vdot_lane_f32_mf8_fpm:
2807 case NEON::BI__builtin_neon_vdotq_lane_f32_mf8_fpm:
2808 case NEON::BI__builtin_neon_vdot_laneq_f32_mf8_fpm:
2809 case NEON::BI__builtin_neon_vdotq_laneq_f32_mf8_fpm:
2810 case NEON::BI__builtin_neon_vmlalbq_f16_mf8_fpm:
2811 case NEON::BI__builtin_neon_vmlaltq_f16_mf8_fpm:
2812 case NEON::BI__builtin_neon_vmlallbbq_f32_mf8_fpm:
2813 case NEON::BI__builtin_neon_vmlallbtq_f32_mf8_fpm:
2814 case NEON::BI__builtin_neon_vmlalltbq_f32_mf8_fpm:
2815 case NEON::BI__builtin_neon_vmlallttq_f32_mf8_fpm:
2816 case NEON::BI__builtin_neon_vmlalbq_lane_f16_mf8_fpm:
2817 case NEON::BI__builtin_neon_vmlalbq_laneq_f16_mf8_fpm:
2818 case NEON::BI__builtin_neon_vmlaltq_lane_f16_mf8_fpm:
2819 case NEON::BI__builtin_neon_vmlaltq_laneq_f16_mf8_fpm:
2820 case NEON::BI__builtin_neon_vmlallbbq_lane_f32_mf8_fpm:
2821 case NEON::BI__builtin_neon_vmlallbbq_laneq_f32_mf8_fpm:
2822 case NEON::BI__builtin_neon_vmlallbtq_lane_f32_mf8_fpm:
2823 case NEON::BI__builtin_neon_vmlallbtq_laneq_f32_mf8_fpm:
2824 case NEON::BI__builtin_neon_vmlalltbq_lane_f32_mf8_fpm:
2825 case NEON::BI__builtin_neon_vmlalltbq_laneq_f32_mf8_fpm:
2826 case NEON::BI__builtin_neon_vmlallttq_lane_f32_mf8_fpm:
2827 case NEON::BI__builtin_neon_vmlallttq_laneq_f32_mf8_fpm:
2828 case NEON::BI__builtin_neon_vamin_f16:
2829 case NEON::BI__builtin_neon_vaminq_f16:
2830 case NEON::BI__builtin_neon_vamin_f32:
2831 case NEON::BI__builtin_neon_vaminq_f32:
2832 case NEON::BI__builtin_neon_vaminq_f64:
2833 case NEON::BI__builtin_neon_vamax_f16:
2834 case NEON::BI__builtin_neon_vamaxq_f16:
2835 case NEON::BI__builtin_neon_vamax_f32:
2836 case NEON::BI__builtin_neon_vamaxq_f32:
2837 case NEON::BI__builtin_neon_vamaxq_f64:
2838 case NEON::BI__builtin_neon_vscale_f16:
2839 case NEON::BI__builtin_neon_vscaleq_f16:
2840 case NEON::BI__builtin_neon_vscale_f32:
2841 case NEON::BI__builtin_neon_vscaleq_f32:
2842 case NEON::BI__builtin_neon_vscaleq_f64:
2843 cgm.errorNYI(
expr->getSourceRange(),
2844 std::string(
"unimplemented AArch64 builtin call: ") +
2845 getContext().BuiltinInfo.getName(builtinID));
2846 return mlir::Value{};