3479 uint32_t BuiltinID) {
3484 switch (BuiltinID) {
3485 case Builtin::BI__builtin_is_constant_evaluated:
3488 case Builtin::BI__builtin_assume:
3489 case Builtin::BI__assume:
3492 case Builtin::BI__builtin_strcmp:
3493 case Builtin::BIstrcmp:
3494 case Builtin::BI__builtin_strncmp:
3495 case Builtin::BIstrncmp:
3496 case Builtin::BI__builtin_wcsncmp:
3497 case Builtin::BIwcsncmp:
3498 case Builtin::BI__builtin_wcscmp:
3499 case Builtin::BIwcscmp:
3502 case Builtin::BI__builtin_strlen:
3503 case Builtin::BIstrlen:
3504 case Builtin::BI__builtin_wcslen:
3505 case Builtin::BIwcslen:
3508 case Builtin::BI__builtin_nan:
3509 case Builtin::BI__builtin_nanf:
3510 case Builtin::BI__builtin_nanl:
3511 case Builtin::BI__builtin_nanf16:
3512 case Builtin::BI__builtin_nanf128:
3515 case Builtin::BI__builtin_nans:
3516 case Builtin::BI__builtin_nansf:
3517 case Builtin::BI__builtin_nansl:
3518 case Builtin::BI__builtin_nansf16:
3519 case Builtin::BI__builtin_nansf128:
3522 case Builtin::BI__builtin_huge_val:
3523 case Builtin::BI__builtin_huge_valf:
3524 case Builtin::BI__builtin_huge_vall:
3525 case Builtin::BI__builtin_huge_valf16:
3526 case Builtin::BI__builtin_huge_valf128:
3527 case Builtin::BI__builtin_inf:
3528 case Builtin::BI__builtin_inff:
3529 case Builtin::BI__builtin_infl:
3530 case Builtin::BI__builtin_inff16:
3531 case Builtin::BI__builtin_inff128:
3534 case Builtin::BI__builtin_copysign:
3535 case Builtin::BI__builtin_copysignf:
3536 case Builtin::BI__builtin_copysignl:
3537 case Builtin::BI__builtin_copysignf128:
3540 case Builtin::BI__builtin_fmin:
3541 case Builtin::BI__builtin_fminf:
3542 case Builtin::BI__builtin_fminl:
3543 case Builtin::BI__builtin_fminf16:
3544 case Builtin::BI__builtin_fminf128:
3547 case Builtin::BI__builtin_fminimum_num:
3548 case Builtin::BI__builtin_fminimum_numf:
3549 case Builtin::BI__builtin_fminimum_numl:
3550 case Builtin::BI__builtin_fminimum_numf16:
3551 case Builtin::BI__builtin_fminimum_numf128:
3554 case Builtin::BI__builtin_fmax:
3555 case Builtin::BI__builtin_fmaxf:
3556 case Builtin::BI__builtin_fmaxl:
3557 case Builtin::BI__builtin_fmaxf16:
3558 case Builtin::BI__builtin_fmaxf128:
3561 case Builtin::BI__builtin_fmaximum_num:
3562 case Builtin::BI__builtin_fmaximum_numf:
3563 case Builtin::BI__builtin_fmaximum_numl:
3564 case Builtin::BI__builtin_fmaximum_numf16:
3565 case Builtin::BI__builtin_fmaximum_numf128:
3568 case Builtin::BI__builtin_isnan:
3571 case Builtin::BI__builtin_issignaling:
3574 case Builtin::BI__builtin_isinf:
3577 case Builtin::BI__builtin_isinf_sign:
3580 case Builtin::BI__builtin_isfinite:
3583 case Builtin::BI__builtin_isnormal:
3586 case Builtin::BI__builtin_issubnormal:
3589 case Builtin::BI__builtin_iszero:
3592 case Builtin::BI__builtin_signbit:
3593 case Builtin::BI__builtin_signbitf:
3594 case Builtin::BI__builtin_signbitl:
3597 case Builtin::BI__builtin_isgreater:
3598 case Builtin::BI__builtin_isgreaterequal:
3599 case Builtin::BI__builtin_isless:
3600 case Builtin::BI__builtin_islessequal:
3601 case Builtin::BI__builtin_islessgreater:
3602 case Builtin::BI__builtin_isunordered:
3605 case Builtin::BI__builtin_isfpclass:
3608 case Builtin::BI__builtin_fpclassify:
3611 case Builtin::BI__builtin_fabs:
3612 case Builtin::BI__builtin_fabsf:
3613 case Builtin::BI__builtin_fabsl:
3614 case Builtin::BI__builtin_fabsf128:
3617 case Builtin::BI__builtin_abs:
3618 case Builtin::BI__builtin_labs:
3619 case Builtin::BI__builtin_llabs:
3622 case Builtin::BI__builtin_popcount:
3623 case Builtin::BI__builtin_popcountl:
3624 case Builtin::BI__builtin_popcountll:
3625 case Builtin::BI__builtin_popcountg:
3626 case Builtin::BI__popcnt16:
3627 case Builtin::BI__popcnt:
3628 case Builtin::BI__popcnt64:
3631 case Builtin::BI__builtin_parity:
3632 case Builtin::BI__builtin_parityl:
3633 case Builtin::BI__builtin_parityll:
3636 return APInt(Val.getBitWidth(), Val.popcount() % 2);
3638 case Builtin::BI__builtin_clrsb:
3639 case Builtin::BI__builtin_clrsbl:
3640 case Builtin::BI__builtin_clrsbll:
3643 return APInt(Val.getBitWidth(),
3644 Val.getBitWidth() - Val.getSignificantBits());
3646 case Builtin::BI__builtin_bitreverse8:
3647 case Builtin::BI__builtin_bitreverse16:
3648 case Builtin::BI__builtin_bitreverse32:
3649 case Builtin::BI__builtin_bitreverse64:
3651 S, OpPC,
Call, [](
const APSInt &Val) {
return Val.reverseBits(); });
3653 case Builtin::BI__builtin_classify_type:
3656 case Builtin::BI__builtin_expect:
3657 case Builtin::BI__builtin_expect_with_probability:
3660 case Builtin::BI__builtin_rotateleft8:
3661 case Builtin::BI__builtin_rotateleft16:
3662 case Builtin::BI__builtin_rotateleft32:
3663 case Builtin::BI__builtin_rotateleft64:
3664 case Builtin::BI_rotl8:
3665 case Builtin::BI_rotl16:
3666 case Builtin::BI_rotl:
3667 case Builtin::BI_lrotl:
3668 case Builtin::BI_rotl64:
3671 return Value.rotl(Amount);
3674 case Builtin::BI__builtin_rotateright8:
3675 case Builtin::BI__builtin_rotateright16:
3676 case Builtin::BI__builtin_rotateright32:
3677 case Builtin::BI__builtin_rotateright64:
3678 case Builtin::BI_rotr8:
3679 case Builtin::BI_rotr16:
3680 case Builtin::BI_rotr:
3681 case Builtin::BI_lrotr:
3682 case Builtin::BI_rotr64:
3685 return Value.rotr(Amount);
3688 case Builtin::BI__builtin_ffs:
3689 case Builtin::BI__builtin_ffsl:
3690 case Builtin::BI__builtin_ffsll:
3693 return APInt(Val.getBitWidth(),
3694 Val.isZero() ? 0u : Val.countTrailingZeros() + 1u);
3697 case Builtin::BIaddressof:
3698 case Builtin::BI__addressof:
3699 case Builtin::BI__builtin_addressof:
3703 case Builtin::BIas_const:
3704 case Builtin::BIforward:
3705 case Builtin::BIforward_like:
3706 case Builtin::BImove:
3707 case Builtin::BImove_if_noexcept:
3711 case Builtin::BI__builtin_eh_return_data_regno:
3714 case Builtin::BI__builtin_launder:
3718 case Builtin::BI__builtin_add_overflow:
3719 case Builtin::BI__builtin_sub_overflow:
3720 case Builtin::BI__builtin_mul_overflow:
3721 case Builtin::BI__builtin_sadd_overflow:
3722 case Builtin::BI__builtin_uadd_overflow:
3723 case Builtin::BI__builtin_uaddl_overflow:
3724 case Builtin::BI__builtin_uaddll_overflow:
3725 case Builtin::BI__builtin_usub_overflow:
3726 case Builtin::BI__builtin_usubl_overflow:
3727 case Builtin::BI__builtin_usubll_overflow:
3728 case Builtin::BI__builtin_umul_overflow:
3729 case Builtin::BI__builtin_umull_overflow:
3730 case Builtin::BI__builtin_umulll_overflow:
3731 case Builtin::BI__builtin_saddl_overflow:
3732 case Builtin::BI__builtin_saddll_overflow:
3733 case Builtin::BI__builtin_ssub_overflow:
3734 case Builtin::BI__builtin_ssubl_overflow:
3735 case Builtin::BI__builtin_ssubll_overflow:
3736 case Builtin::BI__builtin_smul_overflow:
3737 case Builtin::BI__builtin_smull_overflow:
3738 case Builtin::BI__builtin_smulll_overflow:
3741 case Builtin::BI__builtin_addcb:
3742 case Builtin::BI__builtin_addcs:
3743 case Builtin::BI__builtin_addc:
3744 case Builtin::BI__builtin_addcl:
3745 case Builtin::BI__builtin_addcll:
3746 case Builtin::BI__builtin_subcb:
3747 case Builtin::BI__builtin_subcs:
3748 case Builtin::BI__builtin_subc:
3749 case Builtin::BI__builtin_subcl:
3750 case Builtin::BI__builtin_subcll:
3753 case Builtin::BI__builtin_clz:
3754 case Builtin::BI__builtin_clzl:
3755 case Builtin::BI__builtin_clzll:
3756 case Builtin::BI__builtin_clzs:
3757 case Builtin::BI__builtin_clzg:
3758 case Builtin::BI__lzcnt16:
3759 case Builtin::BI__lzcnt:
3760 case Builtin::BI__lzcnt64:
3763 case Builtin::BI__builtin_ctz:
3764 case Builtin::BI__builtin_ctzl:
3765 case Builtin::BI__builtin_ctzll:
3766 case Builtin::BI__builtin_ctzs:
3767 case Builtin::BI__builtin_ctzg:
3770 case Builtin::BI__builtin_elementwise_clzg:
3771 case Builtin::BI__builtin_elementwise_ctzg:
3775 case Builtin::BI__builtin_bswap16:
3776 case Builtin::BI__builtin_bswap32:
3777 case Builtin::BI__builtin_bswap64:
3780 case Builtin::BI__atomic_always_lock_free:
3781 case Builtin::BI__atomic_is_lock_free:
3784 case Builtin::BI__c11_atomic_is_lock_free:
3787 case Builtin::BI__builtin_complex:
3790 case Builtin::BI__builtin_is_aligned:
3791 case Builtin::BI__builtin_align_up:
3792 case Builtin::BI__builtin_align_down:
3795 case Builtin::BI__builtin_assume_aligned:
3798 case clang::X86::BI__builtin_ia32_bextr_u32:
3799 case clang::X86::BI__builtin_ia32_bextr_u64:
3800 case clang::X86::BI__builtin_ia32_bextri_u32:
3801 case clang::X86::BI__builtin_ia32_bextri_u64:
3804 unsigned BitWidth = Val.getBitWidth();
3805 uint64_t Shift = Idx.extractBitsAsZExtValue(8, 0);
3806 uint64_t Length = Idx.extractBitsAsZExtValue(8, 8);
3807 if (Length > BitWidth) {
3812 if (Length == 0 || Shift >= BitWidth)
3813 return APInt(BitWidth, 0);
3815 uint64_t
Result = Val.getZExtValue() >> Shift;
3816 Result &= llvm::maskTrailingOnes<uint64_t>(Length);
3820 case clang::X86::BI__builtin_ia32_bzhi_si:
3821 case clang::X86::BI__builtin_ia32_bzhi_di:
3824 unsigned BitWidth = Val.getBitWidth();
3825 uint64_t Index = Idx.extractBitsAsZExtValue(8, 0);
3828 if (Index < BitWidth)
3829 Result.clearHighBits(BitWidth - Index);
3834 case clang::X86::BI__builtin_ia32_lzcnt_u16:
3835 case clang::X86::BI__builtin_ia32_lzcnt_u32:
3836 case clang::X86::BI__builtin_ia32_lzcnt_u64:
3839 return APInt(Src.getBitWidth(), Src.countLeadingZeros());
3842 case clang::X86::BI__builtin_ia32_tzcnt_u16:
3843 case clang::X86::BI__builtin_ia32_tzcnt_u32:
3844 case clang::X86::BI__builtin_ia32_tzcnt_u64:
3847 return APInt(Src.getBitWidth(), Src.countTrailingZeros());
3850 case clang::X86::BI__builtin_ia32_pdep_si:
3851 case clang::X86::BI__builtin_ia32_pdep_di:
3854 unsigned BitWidth = Val.getBitWidth();
3857 for (
unsigned I = 0, P = 0; I != BitWidth; ++I) {
3859 Result.setBitVal(I, Val[P++]);
3865 case clang::X86::BI__builtin_ia32_pext_si:
3866 case clang::X86::BI__builtin_ia32_pext_di:
3869 unsigned BitWidth = Val.getBitWidth();
3872 for (
unsigned I = 0, P = 0; I != BitWidth; ++I) {
3874 Result.setBitVal(P++, Val[I]);
3880 case clang::X86::BI__builtin_ia32_addcarryx_u32:
3881 case clang::X86::BI__builtin_ia32_addcarryx_u64:
3882 case clang::X86::BI__builtin_ia32_subborrow_u32:
3883 case clang::X86::BI__builtin_ia32_subborrow_u64:
3887 case Builtin::BI__builtin_os_log_format_buffer_size:
3890 case Builtin::BI__builtin_ptrauth_string_discriminator:
3893 case Builtin::BI__builtin_infer_alloc_token:
3896 case Builtin::BI__noop:
3900 case Builtin::BI__builtin_operator_new:
3903 case Builtin::BI__builtin_operator_delete:
3906 case Builtin::BI__arithmetic_fence:
3909 case Builtin::BI__builtin_reduce_add:
3910 case Builtin::BI__builtin_reduce_mul:
3911 case Builtin::BI__builtin_reduce_and:
3912 case Builtin::BI__builtin_reduce_or:
3913 case Builtin::BI__builtin_reduce_xor:
3914 case Builtin::BI__builtin_reduce_min:
3915 case Builtin::BI__builtin_reduce_max:
3918 case Builtin::BI__builtin_elementwise_popcount:
3919 case Builtin::BI__builtin_elementwise_bitreverse:
3923 case Builtin::BI__builtin_elementwise_abs:
3926 case Builtin::BI__builtin_memcpy:
3927 case Builtin::BImemcpy:
3928 case Builtin::BI__builtin_wmemcpy:
3929 case Builtin::BIwmemcpy:
3930 case Builtin::BI__builtin_memmove:
3931 case Builtin::BImemmove:
3932 case Builtin::BI__builtin_wmemmove:
3933 case Builtin::BIwmemmove:
3936 case Builtin::BI__builtin_memcmp:
3937 case Builtin::BImemcmp:
3938 case Builtin::BI__builtin_bcmp:
3939 case Builtin::BIbcmp:
3940 case Builtin::BI__builtin_wmemcmp:
3941 case Builtin::BIwmemcmp:
3944 case Builtin::BImemchr:
3945 case Builtin::BI__builtin_memchr:
3946 case Builtin::BIstrchr:
3947 case Builtin::BI__builtin_strchr:
3948 case Builtin::BIwmemchr:
3949 case Builtin::BI__builtin_wmemchr:
3950 case Builtin::BIwcschr:
3951 case Builtin::BI__builtin_wcschr:
3952 case Builtin::BI__builtin_char_memchr:
3955 case Builtin::BI__builtin_object_size:
3956 case Builtin::BI__builtin_dynamic_object_size:
3959 case Builtin::BI__builtin_is_within_lifetime:
3962 case Builtin::BI__builtin_elementwise_add_sat:
3965 return LHS.isSigned() ? LHS.sadd_sat(RHS) : LHS.uadd_sat(RHS);
3968 case Builtin::BI__builtin_elementwise_sub_sat:
3971 return LHS.isSigned() ? LHS.ssub_sat(RHS) : LHS.usub_sat(RHS);
3973 case X86::BI__builtin_ia32_extract128i256:
3974 case X86::BI__builtin_ia32_vextractf128_pd256:
3975 case X86::BI__builtin_ia32_vextractf128_ps256:
3976 case X86::BI__builtin_ia32_vextractf128_si256:
3979 case X86::BI__builtin_ia32_extractf32x4_256_mask:
3980 case X86::BI__builtin_ia32_extractf32x4_mask:
3981 case X86::BI__builtin_ia32_extractf32x8_mask:
3982 case X86::BI__builtin_ia32_extractf64x2_256_mask:
3983 case X86::BI__builtin_ia32_extractf64x2_512_mask:
3984 case X86::BI__builtin_ia32_extractf64x4_mask:
3985 case X86::BI__builtin_ia32_extracti32x4_256_mask:
3986 case X86::BI__builtin_ia32_extracti32x4_mask:
3987 case X86::BI__builtin_ia32_extracti32x8_mask:
3988 case X86::BI__builtin_ia32_extracti64x2_256_mask:
3989 case X86::BI__builtin_ia32_extracti64x2_512_mask:
3990 case X86::BI__builtin_ia32_extracti64x4_mask:
3993 case clang::X86::BI__builtin_ia32_pmulhrsw128:
3994 case clang::X86::BI__builtin_ia32_pmulhrsw256:
3995 case clang::X86::BI__builtin_ia32_pmulhrsw512:
3998 return (llvm::APIntOps::mulsExtended(LHS, RHS).ashr(14) + 1)
3999 .extractBits(16, 1);
4002 case clang::X86::BI__builtin_ia32_movmskps:
4003 case clang::X86::BI__builtin_ia32_movmskpd:
4004 case clang::X86::BI__builtin_ia32_pmovmskb128:
4005 case clang::X86::BI__builtin_ia32_pmovmskb256:
4006 case clang::X86::BI__builtin_ia32_movmskps256:
4007 case clang::X86::BI__builtin_ia32_movmskpd256: {
4011 case X86::BI__builtin_ia32_psignb128:
4012 case X86::BI__builtin_ia32_psignb256:
4013 case X86::BI__builtin_ia32_psignw128:
4014 case X86::BI__builtin_ia32_psignw256:
4015 case X86::BI__builtin_ia32_psignd128:
4016 case X86::BI__builtin_ia32_psignd256:
4020 return APInt::getZero(AElem.getBitWidth());
4021 if (BElem.isNegative())
4026 case clang::X86::BI__builtin_ia32_pavgb128:
4027 case clang::X86::BI__builtin_ia32_pavgw128:
4028 case clang::X86::BI__builtin_ia32_pavgb256:
4029 case clang::X86::BI__builtin_ia32_pavgw256:
4030 case clang::X86::BI__builtin_ia32_pavgb512:
4031 case clang::X86::BI__builtin_ia32_pavgw512:
4033 llvm::APIntOps::avgCeilU);
4035 case clang::X86::BI__builtin_ia32_pmaddubsw128:
4036 case clang::X86::BI__builtin_ia32_pmaddubsw256:
4037 case clang::X86::BI__builtin_ia32_pmaddubsw512:
4042 unsigned BitWidth = 2 * LoLHS.getBitWidth();
4043 return (LoLHS.zext(BitWidth) * LoRHS.sext(BitWidth))
4044 .sadd_sat((HiLHS.zext(BitWidth) * HiRHS.sext(BitWidth)));
4047 case clang::X86::BI__builtin_ia32_pmaddwd128:
4048 case clang::X86::BI__builtin_ia32_pmaddwd256:
4049 case clang::X86::BI__builtin_ia32_pmaddwd512:
4054 unsigned BitWidth = 2 * LoLHS.getBitWidth();
4055 return (LoLHS.sext(BitWidth) * LoRHS.sext(BitWidth)) +
4056 (HiLHS.sext(BitWidth) * HiRHS.sext(BitWidth));
4059 case clang::X86::BI__builtin_ia32_pmulhuw128:
4060 case clang::X86::BI__builtin_ia32_pmulhuw256:
4061 case clang::X86::BI__builtin_ia32_pmulhuw512:
4063 llvm::APIntOps::mulhu);
4065 case clang::X86::BI__builtin_ia32_pmulhw128:
4066 case clang::X86::BI__builtin_ia32_pmulhw256:
4067 case clang::X86::BI__builtin_ia32_pmulhw512:
4069 llvm::APIntOps::mulhs);
4071 case clang::X86::BI__builtin_ia32_psllv2di:
4072 case clang::X86::BI__builtin_ia32_psllv4di:
4073 case clang::X86::BI__builtin_ia32_psllv4si:
4074 case clang::X86::BI__builtin_ia32_psllv8di:
4075 case clang::X86::BI__builtin_ia32_psllv8hi:
4076 case clang::X86::BI__builtin_ia32_psllv8si:
4077 case clang::X86::BI__builtin_ia32_psllv16hi:
4078 case clang::X86::BI__builtin_ia32_psllv16si:
4079 case clang::X86::BI__builtin_ia32_psllv32hi:
4080 case clang::X86::BI__builtin_ia32_psllwi128:
4081 case clang::X86::BI__builtin_ia32_psllwi256:
4082 case clang::X86::BI__builtin_ia32_psllwi512:
4083 case clang::X86::BI__builtin_ia32_pslldi128:
4084 case clang::X86::BI__builtin_ia32_pslldi256:
4085 case clang::X86::BI__builtin_ia32_pslldi512:
4086 case clang::X86::BI__builtin_ia32_psllqi128:
4087 case clang::X86::BI__builtin_ia32_psllqi256:
4088 case clang::X86::BI__builtin_ia32_psllqi512:
4091 if (RHS.uge(LHS.getBitWidth())) {
4092 return APInt::getZero(LHS.getBitWidth());
4094 return LHS.shl(RHS.getZExtValue());
4097 case clang::X86::BI__builtin_ia32_psrav4si:
4098 case clang::X86::BI__builtin_ia32_psrav8di:
4099 case clang::X86::BI__builtin_ia32_psrav8hi:
4100 case clang::X86::BI__builtin_ia32_psrav8si:
4101 case clang::X86::BI__builtin_ia32_psrav16hi:
4102 case clang::X86::BI__builtin_ia32_psrav16si:
4103 case clang::X86::BI__builtin_ia32_psrav32hi:
4104 case clang::X86::BI__builtin_ia32_psravq128:
4105 case clang::X86::BI__builtin_ia32_psravq256:
4106 case clang::X86::BI__builtin_ia32_psrawi128:
4107 case clang::X86::BI__builtin_ia32_psrawi256:
4108 case clang::X86::BI__builtin_ia32_psrawi512:
4109 case clang::X86::BI__builtin_ia32_psradi128:
4110 case clang::X86::BI__builtin_ia32_psradi256:
4111 case clang::X86::BI__builtin_ia32_psradi512:
4112 case clang::X86::BI__builtin_ia32_psraqi128:
4113 case clang::X86::BI__builtin_ia32_psraqi256:
4114 case clang::X86::BI__builtin_ia32_psraqi512:
4117 if (RHS.uge(LHS.getBitWidth())) {
4118 return LHS.ashr(LHS.getBitWidth() - 1);
4120 return LHS.ashr(RHS.getZExtValue());
4123 case clang::X86::BI__builtin_ia32_psrlv2di:
4124 case clang::X86::BI__builtin_ia32_psrlv4di:
4125 case clang::X86::BI__builtin_ia32_psrlv4si:
4126 case clang::X86::BI__builtin_ia32_psrlv8di:
4127 case clang::X86::BI__builtin_ia32_psrlv8hi:
4128 case clang::X86::BI__builtin_ia32_psrlv8si:
4129 case clang::X86::BI__builtin_ia32_psrlv16hi:
4130 case clang::X86::BI__builtin_ia32_psrlv16si:
4131 case clang::X86::BI__builtin_ia32_psrlv32hi:
4132 case clang::X86::BI__builtin_ia32_psrlwi128:
4133 case clang::X86::BI__builtin_ia32_psrlwi256:
4134 case clang::X86::BI__builtin_ia32_psrlwi512:
4135 case clang::X86::BI__builtin_ia32_psrldi128:
4136 case clang::X86::BI__builtin_ia32_psrldi256:
4137 case clang::X86::BI__builtin_ia32_psrldi512:
4138 case clang::X86::BI__builtin_ia32_psrlqi128:
4139 case clang::X86::BI__builtin_ia32_psrlqi256:
4140 case clang::X86::BI__builtin_ia32_psrlqi512:
4143 if (RHS.uge(LHS.getBitWidth())) {
4144 return APInt::getZero(LHS.getBitWidth());
4146 return LHS.lshr(RHS.getZExtValue());
4148 case clang::X86::BI__builtin_ia32_packsswb128:
4149 case clang::X86::BI__builtin_ia32_packsswb256:
4150 case clang::X86::BI__builtin_ia32_packsswb512:
4151 case clang::X86::BI__builtin_ia32_packssdw128:
4152 case clang::X86::BI__builtin_ia32_packssdw256:
4153 case clang::X86::BI__builtin_ia32_packssdw512:
4155 return APInt(Src).truncSSat(Src.getBitWidth() / 2);
4157 case clang::X86::BI__builtin_ia32_packusdw128:
4158 case clang::X86::BI__builtin_ia32_packusdw256:
4159 case clang::X86::BI__builtin_ia32_packusdw512:
4160 case clang::X86::BI__builtin_ia32_packuswb128:
4161 case clang::X86::BI__builtin_ia32_packuswb256:
4162 case clang::X86::BI__builtin_ia32_packuswb512:
4164 unsigned DstBits = Src.getBitWidth() / 2;
4165 if (Src.isNegative())
4166 return APInt::getZero(DstBits);
4167 if (Src.isIntN(DstBits))
4168 return APInt(Src).trunc(DstBits);
4169 return APInt::getAllOnes(DstBits);
4172 case clang::X86::BI__builtin_ia32_vprotbi:
4173 case clang::X86::BI__builtin_ia32_vprotdi:
4174 case clang::X86::BI__builtin_ia32_vprotqi:
4175 case clang::X86::BI__builtin_ia32_vprotwi:
4176 case clang::X86::BI__builtin_ia32_prold128:
4177 case clang::X86::BI__builtin_ia32_prold256:
4178 case clang::X86::BI__builtin_ia32_prold512:
4179 case clang::X86::BI__builtin_ia32_prolq128:
4180 case clang::X86::BI__builtin_ia32_prolq256:
4181 case clang::X86::BI__builtin_ia32_prolq512:
4184 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS.rotl(RHS); });
4186 case clang::X86::BI__builtin_ia32_prord128:
4187 case clang::X86::BI__builtin_ia32_prord256:
4188 case clang::X86::BI__builtin_ia32_prord512:
4189 case clang::X86::BI__builtin_ia32_prorq128:
4190 case clang::X86::BI__builtin_ia32_prorq256:
4191 case clang::X86::BI__builtin_ia32_prorq512:
4194 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS.rotr(RHS); });
4196 case Builtin::BI__builtin_elementwise_max:
4197 case Builtin::BI__builtin_elementwise_min:
4200 case clang::X86::BI__builtin_ia32_phaddw128:
4201 case clang::X86::BI__builtin_ia32_phaddw256:
4202 case clang::X86::BI__builtin_ia32_phaddd128:
4203 case clang::X86::BI__builtin_ia32_phaddd256:
4206 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS + RHS; });
4207 case clang::X86::BI__builtin_ia32_phaddsw128:
4208 case clang::X86::BI__builtin_ia32_phaddsw256:
4211 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS.sadd_sat(RHS); });
4212 case clang::X86::BI__builtin_ia32_phsubw128:
4213 case clang::X86::BI__builtin_ia32_phsubw256:
4214 case clang::X86::BI__builtin_ia32_phsubd128:
4215 case clang::X86::BI__builtin_ia32_phsubd256:
4218 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS - RHS; });
4219 case clang::X86::BI__builtin_ia32_phsubsw128:
4220 case clang::X86::BI__builtin_ia32_phsubsw256:
4223 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS.ssub_sat(RHS); });
4224 case clang::X86::BI__builtin_ia32_haddpd:
4225 case clang::X86::BI__builtin_ia32_haddps:
4226 case clang::X86::BI__builtin_ia32_haddpd256:
4227 case clang::X86::BI__builtin_ia32_haddps256:
4230 [](
const APFloat &LHS,
const APFloat &RHS, llvm::RoundingMode RM) {
4235 case clang::X86::BI__builtin_ia32_hsubpd:
4236 case clang::X86::BI__builtin_ia32_hsubps:
4237 case clang::X86::BI__builtin_ia32_hsubpd256:
4238 case clang::X86::BI__builtin_ia32_hsubps256:
4241 [](
const APFloat &LHS,
const APFloat &RHS, llvm::RoundingMode RM) {
4243 F.subtract(RHS, RM);
4247 case clang::X86::BI__builtin_ia32_pmuldq128:
4248 case clang::X86::BI__builtin_ia32_pmuldq256:
4249 case clang::X86::BI__builtin_ia32_pmuldq512:
4254 return llvm::APIntOps::mulsExtended(LoLHS, LoRHS);
4257 case clang::X86::BI__builtin_ia32_pmuludq128:
4258 case clang::X86::BI__builtin_ia32_pmuludq256:
4259 case clang::X86::BI__builtin_ia32_pmuludq512:
4264 return llvm::APIntOps::muluExtended(LoLHS, LoRHS);
4267 case Builtin::BI__builtin_elementwise_fma:
4271 llvm::RoundingMode RM) {
4273 F.fusedMultiplyAdd(Y, Z, RM);
4277 case X86::BI__builtin_ia32_vpmadd52luq128:
4278 case X86::BI__builtin_ia32_vpmadd52luq256:
4279 case X86::BI__builtin_ia32_vpmadd52luq512:
4282 return A + (B.trunc(52) *
C.trunc(52)).zext(64);
4284 case X86::BI__builtin_ia32_vpmadd52huq128:
4285 case X86::BI__builtin_ia32_vpmadd52huq256:
4286 case X86::BI__builtin_ia32_vpmadd52huq512:
4289 return A + llvm::APIntOps::mulhu(B.trunc(52),
C.trunc(52)).zext(64);
4292 case X86::BI__builtin_ia32_vpshldd128:
4293 case X86::BI__builtin_ia32_vpshldd256:
4294 case X86::BI__builtin_ia32_vpshldd512:
4295 case X86::BI__builtin_ia32_vpshldq128:
4296 case X86::BI__builtin_ia32_vpshldq256:
4297 case X86::BI__builtin_ia32_vpshldq512:
4298 case X86::BI__builtin_ia32_vpshldw128:
4299 case X86::BI__builtin_ia32_vpshldw256:
4300 case X86::BI__builtin_ia32_vpshldw512:
4304 return llvm::APIntOps::fshl(Hi, Lo, Amt);
4307 case X86::BI__builtin_ia32_vpshrdd128:
4308 case X86::BI__builtin_ia32_vpshrdd256:
4309 case X86::BI__builtin_ia32_vpshrdd512:
4310 case X86::BI__builtin_ia32_vpshrdq128:
4311 case X86::BI__builtin_ia32_vpshrdq256:
4312 case X86::BI__builtin_ia32_vpshrdq512:
4313 case X86::BI__builtin_ia32_vpshrdw128:
4314 case X86::BI__builtin_ia32_vpshrdw256:
4315 case X86::BI__builtin_ia32_vpshrdw512:
4320 return llvm::APIntOps::fshr(Hi, Lo, Amt);
4322 case X86::BI__builtin_ia32_vpconflictsi_128:
4323 case X86::BI__builtin_ia32_vpconflictsi_256:
4324 case X86::BI__builtin_ia32_vpconflictsi_512:
4325 case X86::BI__builtin_ia32_vpconflictdi_128:
4326 case X86::BI__builtin_ia32_vpconflictdi_256:
4327 case X86::BI__builtin_ia32_vpconflictdi_512:
4329 case clang::X86::BI__builtin_ia32_blendpd:
4330 case clang::X86::BI__builtin_ia32_blendpd256:
4331 case clang::X86::BI__builtin_ia32_blendps:
4332 case clang::X86::BI__builtin_ia32_blendps256:
4333 case clang::X86::BI__builtin_ia32_pblendw128:
4334 case clang::X86::BI__builtin_ia32_pblendw256:
4335 case clang::X86::BI__builtin_ia32_pblendd128:
4336 case clang::X86::BI__builtin_ia32_pblendd256:
4339 case clang::X86::BI__builtin_ia32_blendvpd:
4340 case clang::X86::BI__builtin_ia32_blendvpd256:
4341 case clang::X86::BI__builtin_ia32_blendvps:
4342 case clang::X86::BI__builtin_ia32_blendvps256:
4346 llvm::RoundingMode) {
return C.isNegative() ?
T : F; });
4348 case clang::X86::BI__builtin_ia32_pblendvb128:
4349 case clang::X86::BI__builtin_ia32_pblendvb256:
4352 return ((
APInt)
C).isNegative() ?
T : F;
4354 case X86::BI__builtin_ia32_ptestz128:
4355 case X86::BI__builtin_ia32_ptestz256:
4356 case X86::BI__builtin_ia32_vtestzps:
4357 case X86::BI__builtin_ia32_vtestzps256:
4358 case X86::BI__builtin_ia32_vtestzpd:
4359 case X86::BI__builtin_ia32_vtestzpd256:
4362 [](
const APInt &A,
const APInt &B) {
return (A & B) == 0; });
4363 case X86::BI__builtin_ia32_ptestc128:
4364 case X86::BI__builtin_ia32_ptestc256:
4365 case X86::BI__builtin_ia32_vtestcps:
4366 case X86::BI__builtin_ia32_vtestcps256:
4367 case X86::BI__builtin_ia32_vtestcpd:
4368 case X86::BI__builtin_ia32_vtestcpd256:
4371 [](
const APInt &A,
const APInt &B) {
return (~A & B) == 0; });
4372 case X86::BI__builtin_ia32_ptestnzc128:
4373 case X86::BI__builtin_ia32_ptestnzc256:
4374 case X86::BI__builtin_ia32_vtestnzcps:
4375 case X86::BI__builtin_ia32_vtestnzcps256:
4376 case X86::BI__builtin_ia32_vtestnzcpd:
4377 case X86::BI__builtin_ia32_vtestnzcpd256:
4380 return ((A & B) != 0) && ((~A & B) != 0);
4382 case X86::BI__builtin_ia32_selectb_128:
4383 case X86::BI__builtin_ia32_selectb_256:
4384 case X86::BI__builtin_ia32_selectb_512:
4385 case X86::BI__builtin_ia32_selectw_128:
4386 case X86::BI__builtin_ia32_selectw_256:
4387 case X86::BI__builtin_ia32_selectw_512:
4388 case X86::BI__builtin_ia32_selectd_128:
4389 case X86::BI__builtin_ia32_selectd_256:
4390 case X86::BI__builtin_ia32_selectd_512:
4391 case X86::BI__builtin_ia32_selectq_128:
4392 case X86::BI__builtin_ia32_selectq_256:
4393 case X86::BI__builtin_ia32_selectq_512:
4394 case X86::BI__builtin_ia32_selectph_128:
4395 case X86::BI__builtin_ia32_selectph_256:
4396 case X86::BI__builtin_ia32_selectph_512:
4397 case X86::BI__builtin_ia32_selectpbf_128:
4398 case X86::BI__builtin_ia32_selectpbf_256:
4399 case X86::BI__builtin_ia32_selectpbf_512:
4400 case X86::BI__builtin_ia32_selectps_128:
4401 case X86::BI__builtin_ia32_selectps_256:
4402 case X86::BI__builtin_ia32_selectps_512:
4403 case X86::BI__builtin_ia32_selectpd_128:
4404 case X86::BI__builtin_ia32_selectpd_256:
4405 case X86::BI__builtin_ia32_selectpd_512:
4408 case X86::BI__builtin_ia32_shufps:
4409 case X86::BI__builtin_ia32_shufps256:
4410 case X86::BI__builtin_ia32_shufps512:
4412 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4413 unsigned NumElemPerLane = 4;
4414 unsigned NumSelectableElems = NumElemPerLane / 2;
4415 unsigned BitsPerElem = 2;
4416 unsigned IndexMask = 0x3;
4417 unsigned MaskBits = 8;
4418 unsigned Lane = DstIdx / NumElemPerLane;
4419 unsigned ElemInLane = DstIdx % NumElemPerLane;
4420 unsigned LaneOffset = Lane * NumElemPerLane;
4421 unsigned SrcIdx = ElemInLane >= NumSelectableElems ? 1 : 0;
4422 unsigned BitIndex = (DstIdx * BitsPerElem) % MaskBits;
4423 unsigned Index = (ShuffleMask >> BitIndex) & IndexMask;
4424 return std::pair<unsigned, int>{SrcIdx,
4425 static_cast<int>(LaneOffset + Index)};
4427 case X86::BI__builtin_ia32_shufpd:
4428 case X86::BI__builtin_ia32_shufpd256:
4429 case X86::BI__builtin_ia32_shufpd512:
4431 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4432 unsigned NumElemPerLane = 2;
4433 unsigned NumSelectableElems = NumElemPerLane / 2;
4434 unsigned BitsPerElem = 1;
4435 unsigned IndexMask = 0x1;
4436 unsigned MaskBits = 8;
4437 unsigned Lane = DstIdx / NumElemPerLane;
4438 unsigned ElemInLane = DstIdx % NumElemPerLane;
4439 unsigned LaneOffset = Lane * NumElemPerLane;
4440 unsigned SrcIdx = ElemInLane >= NumSelectableElems ? 1 : 0;
4441 unsigned BitIndex = (DstIdx * BitsPerElem) % MaskBits;
4442 unsigned Index = (ShuffleMask >> BitIndex) & IndexMask;
4443 return std::pair<unsigned, int>{SrcIdx,
4444 static_cast<int>(LaneOffset + Index)};
4446 case X86::BI__builtin_ia32_insertps128:
4448 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned Mask) {
4450 if ((Mask & (1 << DstIdx)) != 0) {
4451 return std::pair<unsigned, int>{0, -1};
4455 unsigned SrcElem = (Mask >> 6) & 0x3;
4456 unsigned DstElem = (Mask >> 4) & 0x3;
4457 if (DstIdx == DstElem) {
4459 return std::pair<unsigned, int>{1,
static_cast<int>(SrcElem)};
4462 return std::pair<unsigned, int>{0,
static_cast<int>(DstIdx)};
4465 case X86::BI__builtin_ia32_vpermi2varq128:
4466 case X86::BI__builtin_ia32_vpermi2varpd128:
4468 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4469 int Offset = ShuffleMask & 0x1;
4470 unsigned SrcIdx = (ShuffleMask >> 1) & 0x1;
4471 return std::pair<unsigned, int>{SrcIdx, Offset};
4473 case X86::BI__builtin_ia32_vpermi2vard128:
4474 case X86::BI__builtin_ia32_vpermi2varps128:
4475 case X86::BI__builtin_ia32_vpermi2varq256:
4476 case X86::BI__builtin_ia32_vpermi2varpd256:
4478 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4479 int Offset = ShuffleMask & 0x3;
4480 unsigned SrcIdx = (ShuffleMask >> 2) & 0x1;
4481 return std::pair<unsigned, int>{SrcIdx, Offset};
4483 case X86::BI__builtin_ia32_vpermi2varhi128:
4484 case X86::BI__builtin_ia32_vpermi2vard256:
4485 case X86::BI__builtin_ia32_vpermi2varps256:
4486 case X86::BI__builtin_ia32_vpermi2varq512:
4487 case X86::BI__builtin_ia32_vpermi2varpd512:
4489 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4490 int Offset = ShuffleMask & 0x7;
4491 unsigned SrcIdx = (ShuffleMask >> 3) & 0x1;
4492 return std::pair<unsigned, int>{SrcIdx, Offset};
4494 case X86::BI__builtin_ia32_vpermi2varqi128:
4495 case X86::BI__builtin_ia32_vpermi2varhi256:
4496 case X86::BI__builtin_ia32_vpermi2vard512:
4497 case X86::BI__builtin_ia32_vpermi2varps512:
4499 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4500 int Offset = ShuffleMask & 0xF;
4501 unsigned SrcIdx = (ShuffleMask >> 4) & 0x1;
4502 return std::pair<unsigned, int>{SrcIdx, Offset};
4504 case X86::BI__builtin_ia32_vpermi2varqi256:
4505 case X86::BI__builtin_ia32_vpermi2varhi512:
4507 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4508 int Offset = ShuffleMask & 0x1F;
4509 unsigned SrcIdx = (ShuffleMask >> 5) & 0x1;
4510 return std::pair<unsigned, int>{SrcIdx, Offset};
4512 case X86::BI__builtin_ia32_vpermi2varqi512:
4514 S, OpPC,
Call, [](
unsigned DstIdx,
unsigned ShuffleMask) {
4515 int Offset = ShuffleMask & 0x3F;
4516 unsigned SrcIdx = (ShuffleMask >> 6) & 0x1;
4517 return std::pair<unsigned, int>{SrcIdx, Offset};
4519 case X86::BI__builtin_ia32_pshufb128:
4520 case X86::BI__builtin_ia32_pshufb256:
4521 case X86::BI__builtin_ia32_pshufb512:
4524 case X86::BI__builtin_ia32_pshuflw:
4525 case X86::BI__builtin_ia32_pshuflw256:
4526 case X86::BI__builtin_ia32_pshuflw512:
4529 case X86::BI__builtin_ia32_pshufhw:
4530 case X86::BI__builtin_ia32_pshufhw256:
4531 case X86::BI__builtin_ia32_pshufhw512:
4534 case X86::BI__builtin_ia32_pshufd:
4535 case X86::BI__builtin_ia32_pshufd256:
4536 case X86::BI__builtin_ia32_pshufd512:
4539 case X86::BI__builtin_ia32_kandqi:
4540 case X86::BI__builtin_ia32_kandhi:
4541 case X86::BI__builtin_ia32_kandsi:
4542 case X86::BI__builtin_ia32_kanddi:
4545 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS & RHS; });
4547 case X86::BI__builtin_ia32_kandnqi:
4548 case X86::BI__builtin_ia32_kandnhi:
4549 case X86::BI__builtin_ia32_kandnsi:
4550 case X86::BI__builtin_ia32_kandndi:
4553 [](
const APSInt &LHS,
const APSInt &RHS) {
return ~LHS & RHS; });
4555 case X86::BI__builtin_ia32_korqi:
4556 case X86::BI__builtin_ia32_korhi:
4557 case X86::BI__builtin_ia32_korsi:
4558 case X86::BI__builtin_ia32_kordi:
4561 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS | RHS; });
4563 case X86::BI__builtin_ia32_kxnorqi:
4564 case X86::BI__builtin_ia32_kxnorhi:
4565 case X86::BI__builtin_ia32_kxnorsi:
4566 case X86::BI__builtin_ia32_kxnordi:
4569 [](
const APSInt &LHS,
const APSInt &RHS) {
return ~(LHS ^ RHS); });
4571 case X86::BI__builtin_ia32_kxorqi:
4572 case X86::BI__builtin_ia32_kxorhi:
4573 case X86::BI__builtin_ia32_kxorsi:
4574 case X86::BI__builtin_ia32_kxordi:
4577 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS ^ RHS; });
4579 case X86::BI__builtin_ia32_knotqi:
4580 case X86::BI__builtin_ia32_knothi:
4581 case X86::BI__builtin_ia32_knotsi:
4582 case X86::BI__builtin_ia32_knotdi:
4584 S, OpPC,
Call, [](
const APSInt &Src) {
return ~Src; });
4586 case X86::BI__builtin_ia32_kaddqi:
4587 case X86::BI__builtin_ia32_kaddhi:
4588 case X86::BI__builtin_ia32_kaddsi:
4589 case X86::BI__builtin_ia32_kadddi:
4592 [](
const APSInt &LHS,
const APSInt &RHS) {
return LHS + RHS; });
4594 case X86::BI__builtin_ia32_phminposuw128:
4597 case X86::BI__builtin_ia32_pternlogd128_mask:
4598 case X86::BI__builtin_ia32_pternlogd256_mask:
4599 case X86::BI__builtin_ia32_pternlogd512_mask:
4600 case X86::BI__builtin_ia32_pternlogq128_mask:
4601 case X86::BI__builtin_ia32_pternlogq256_mask:
4602 case X86::BI__builtin_ia32_pternlogq512_mask:
4604 case X86::BI__builtin_ia32_pternlogd128_maskz:
4605 case X86::BI__builtin_ia32_pternlogd256_maskz:
4606 case X86::BI__builtin_ia32_pternlogd512_maskz:
4607 case X86::BI__builtin_ia32_pternlogq128_maskz:
4608 case X86::BI__builtin_ia32_pternlogq256_maskz:
4609 case X86::BI__builtin_ia32_pternlogq512_maskz:
4611 case Builtin::BI__builtin_elementwise_fshl:
4613 llvm::APIntOps::fshl);
4614 case Builtin::BI__builtin_elementwise_fshr:
4616 llvm::APIntOps::fshr);
4618 case X86::BI__builtin_ia32_insertf32x4_256:
4619 case X86::BI__builtin_ia32_inserti32x4_256:
4620 case X86::BI__builtin_ia32_insertf64x2_256:
4621 case X86::BI__builtin_ia32_inserti64x2_256:
4622 case X86::BI__builtin_ia32_insertf32x4:
4623 case X86::BI__builtin_ia32_inserti32x4:
4624 case X86::BI__builtin_ia32_insertf64x2_512:
4625 case X86::BI__builtin_ia32_inserti64x2_512:
4626 case X86::BI__builtin_ia32_insertf32x8:
4627 case X86::BI__builtin_ia32_inserti32x8:
4628 case X86::BI__builtin_ia32_insertf64x4:
4629 case X86::BI__builtin_ia32_inserti64x4:
4630 case X86::BI__builtin_ia32_vinsertf128_ps256:
4631 case X86::BI__builtin_ia32_vinsertf128_pd256:
4632 case X86::BI__builtin_ia32_vinsertf128_si256:
4633 case X86::BI__builtin_ia32_insert128i256:
4636 case X86::BI__builtin_ia32_vec_ext_v4hi:
4637 case X86::BI__builtin_ia32_vec_ext_v16qi:
4638 case X86::BI__builtin_ia32_vec_ext_v8hi:
4639 case X86::BI__builtin_ia32_vec_ext_v4si:
4640 case X86::BI__builtin_ia32_vec_ext_v2di:
4641 case X86::BI__builtin_ia32_vec_ext_v32qi:
4642 case X86::BI__builtin_ia32_vec_ext_v16hi:
4643 case X86::BI__builtin_ia32_vec_ext_v8si:
4644 case X86::BI__builtin_ia32_vec_ext_v4di:
4645 case X86::BI__builtin_ia32_vec_ext_v4sf:
4648 case X86::BI__builtin_ia32_vec_set_v4hi:
4649 case X86::BI__builtin_ia32_vec_set_v16qi:
4650 case X86::BI__builtin_ia32_vec_set_v8hi:
4651 case X86::BI__builtin_ia32_vec_set_v4si:
4652 case X86::BI__builtin_ia32_vec_set_v2di:
4653 case X86::BI__builtin_ia32_vec_set_v32qi:
4654 case X86::BI__builtin_ia32_vec_set_v16hi:
4655 case X86::BI__builtin_ia32_vec_set_v8si:
4656 case X86::BI__builtin_ia32_vec_set_v4di:
4659 case X86::BI__builtin_ia32_cmpb128_mask:
4660 case X86::BI__builtin_ia32_cmpw128_mask:
4661 case X86::BI__builtin_ia32_cmpd128_mask:
4662 case X86::BI__builtin_ia32_cmpq128_mask:
4663 case X86::BI__builtin_ia32_cmpb256_mask:
4664 case X86::BI__builtin_ia32_cmpw256_mask:
4665 case X86::BI__builtin_ia32_cmpd256_mask:
4666 case X86::BI__builtin_ia32_cmpq256_mask:
4667 case X86::BI__builtin_ia32_cmpb512_mask:
4668 case X86::BI__builtin_ia32_cmpw512_mask:
4669 case X86::BI__builtin_ia32_cmpd512_mask:
4670 case X86::BI__builtin_ia32_cmpq512_mask:
4674 case X86::BI__builtin_ia32_ucmpb128_mask:
4675 case X86::BI__builtin_ia32_ucmpw128_mask:
4676 case X86::BI__builtin_ia32_ucmpd128_mask:
4677 case X86::BI__builtin_ia32_ucmpq128_mask:
4678 case X86::BI__builtin_ia32_ucmpb256_mask:
4679 case X86::BI__builtin_ia32_ucmpw256_mask:
4680 case X86::BI__builtin_ia32_ucmpd256_mask:
4681 case X86::BI__builtin_ia32_ucmpq256_mask:
4682 case X86::BI__builtin_ia32_ucmpb512_mask:
4683 case X86::BI__builtin_ia32_ucmpw512_mask:
4684 case X86::BI__builtin_ia32_ucmpd512_mask:
4685 case X86::BI__builtin_ia32_ucmpq512_mask:
4688 case X86::BI__builtin_ia32_pslldqi128_byteshift:
4689 case X86::BI__builtin_ia32_pslldqi256_byteshift:
4690 case X86::BI__builtin_ia32_pslldqi512_byteshift:
4696 S, OpPC,
Call, BuiltinID,
4697 [](
const Pointer &Src,
unsigned Lane,
unsigned I,
unsigned Shift) {
4701 return APInt(8, Src.elem<uint8_t>(Lane + I - Shift));
4704 case X86::BI__builtin_ia32_psrldqi128_byteshift:
4705 case X86::BI__builtin_ia32_psrldqi256_byteshift:
4706 case X86::BI__builtin_ia32_psrldqi512_byteshift:
4712 S, OpPC,
Call, BuiltinID,
4713 [](
const Pointer &Src,
unsigned Lane,
unsigned I,
unsigned Shift) {
4714 if (I + Shift < 16) {
4715 return APInt(8, Src.elem<uint8_t>(Lane + I + Shift));
4723 diag::note_invalid_subexpr_in_const_expr)
4729 llvm_unreachable(
"Unhandled builtin ID");