@@ -2739,9 +2739,9 @@ static bool interp__builtin_ia32_pmul(InterpState &S, CodePtr OpPC,
27392739}
27402740
27412741static bool interp_builtin_ia32ph_add_sub (InterpState &S, CodePtr OpPC,
2742- const InterpFrame *Frame,
2743- const CallExpr *Call,
2744- uint32_t BuiltinID) {
2742+ const InterpFrame *Frame,
2743+ const CallExpr *Call,
2744+ uint32_t BuiltinID) {
27452745 assert (Call->getArg (0 )->getType ()->isVectorType () &&
27462746 Call->getArg (1 )->getType ()->isVectorType ());
27472747 const Pointer &RHS = S.Stk .pop <Pointer>();
@@ -2752,7 +2752,8 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
27522752 PrimType ElemT = *S.getContext ().classify (VT->getElementType ());
27532753 unsigned SourceLen = VT->getNumElements ();
27542754 assert (SourceLen % 2 == 0 &&
2755- Call->getArg (1 )->getType ()->castAs <VectorType>()->getNumElements () == SourceLen);
2755+ Call->getArg (1 )->getType ()->castAs <VectorType>()->getNumElements () ==
2756+ SourceLen);
27562757 PrimType DstElemT = *S.getContext ().classify (
27572758 Call->getType ()->castAs <VectorType>()->getElementType ());
27582759 unsigned DstElem = 0 ;
@@ -2774,16 +2775,17 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
27742775 APSInt Elem2;
27752776 INT_TYPE_SWITCH_NO_BOOL (ElemT, {
27762777 Elem1 = LHS.elem <T>(I).toAPSInt ();
2777- Elem2 = LHS.elem <T>(I+ 1 ).toAPSInt ();
2778+ Elem2 = LHS.elem <T>(I + 1 ).toAPSInt ();
27782779 });
27792780 APSInt Result;
27802781 if (IsAdd) {
2781- if (IsSaturating) {
2782- Result = APSInt (Elem1.sadd_sat (Elem2), /* IsUnsigned=*/ Elem1.isUnsigned ());
2783- }else {
2784- Result = APSInt (Elem1 + Elem2, /* IsUnsigned=*/ Elem1.isUnsigned ());
2785- }
2786- }else {
2782+ if (IsSaturating) {
2783+ Result =
2784+ APSInt (Elem1.sadd_sat (Elem2), /* IsUnsigned=*/ Elem1.isUnsigned ());
2785+ } else {
2786+ Result = APSInt (Elem1 + Elem2, /* IsUnsigned=*/ Elem1.isUnsigned ());
2787+ }
2788+ } else {
27872789 if (IsSaturating) {
27882790 Result =
27892791 APSInt (Elem1.ssub_sat (Elem2), /* IsUnsigned=*/ Elem1.isUnsigned ());
@@ -2812,7 +2814,8 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
28122814 }
28132815 } else {
28142816 if (IsSaturating) {
2815- Result = APSInt (Elem1.ssub_sat (Elem2), /* IsUnsigned=*/ Elem1.isUnsigned ());
2817+ Result =
2818+ APSInt (Elem1.ssub_sat (Elem2), /* IsUnsigned=*/ Elem1.isUnsigned ());
28162819 } else {
28172820 Result = APSInt (Elem1 - Elem2, /* IsUnsigned=*/ Elem1.isUnsigned ());
28182821 }
@@ -2826,15 +2829,15 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
28262829}
28272830
28282831static bool interp_builtin_floatph_add_sub (InterpState &S, CodePtr OpPC,
2829- const InterpFrame *Frame,
2830- const CallExpr *Call,
2831- uint32_t BuiltinID) {
2832+ const InterpFrame *Frame,
2833+ const CallExpr *Call,
2834+ uint32_t BuiltinID) {
28322835 assert (Call->getArg (0 )->getType ()->isVectorType () &&
28332836 Call->getArg (1 )->getType ()->isVectorType ());
28342837 const Pointer &RHS = S.Stk .pop <Pointer>();
28352838 const Pointer &LHS = S.Stk .pop <Pointer>();
28362839 const Pointer &Dst = S.Stk .peek <Pointer>();
2837-
2840+
28382841 FPOptions FPO = Call->getFPFeaturesInEffect (S.Ctx .getLangOpts ());
28392842 llvm::RoundingMode RM = getRoundingMode (FPO);
28402843 const auto *VT = Call->getArg (0 )->getType ()->castAs <VectorType>();
@@ -2851,7 +2854,6 @@ static bool interp_builtin_floatph_add_sub(InterpState &S, CodePtr OpPC,
28512854 for (unsigned I = 0 ; I != SourceLen; I += 2 ) {
28522855 APFloat Elem1 = LHS.elem <T>(I).getAPFloat ();
28532856 APFloat Elem2 = LHS.elem <T>(I + 1 ).getAPFloat ();
2854-
28552857 if (IsAdd) {
28562858 Elem1.add (Elem2, RM);
28572859 } else {
@@ -3495,71 +3497,71 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
34953497
34963498 case clang::X86::BI__builtin_ia32_phaddw128:
34973499 case clang::X86::BI__builtin_ia32_phaddw256:
3498- case clang::X86::BI__builtin_ia32_phaddd128:
3499- case clang::X86::BI__builtin_ia32_phaddd256:
3500- case clang::X86::BI__builtin_ia32_phaddsw128:
3501- case clang::X86::BI__builtin_ia32_phaddsw256:
3502- case clang::X86::BI__builtin_ia32_phsubw128:
3503- case clang::X86::BI__builtin_ia32_phsubw256:
3504- case clang::X86::BI__builtin_ia32_phsubd128:
3505- case clang::X86::BI__builtin_ia32_phsubd256:
3506- case clang::X86::BI__builtin_ia32_phsubsw128:
3507- case clang::X86::BI__builtin_ia32_phsubsw256:
3508-
3509- return interp_builtin_ia32ph_add_sub (S, OpPC, Frame, Call, BuiltinID);
3510- case clang::X86::BI__builtin_ia32_haddpd:
3511- case clang::X86::BI__builtin_ia32_haddpd256:
3512- case clang::X86::BI__builtin_ia32_haddps:
3513- case clang::X86::BI__builtin_ia32_haddps256:
3514- case clang::X86::BI__builtin_ia32_hsubpd:
3515- case clang::X86::BI__builtin_ia32_hsubpd256:
3516- case clang::X86::BI__builtin_ia32_hsubps:
3517- case clang::X86::BI__builtin_ia32_hsubps256:
3518- return interp_builtin_floatph_add_sub (S, OpPC, Frame, Call, BuiltinID);
3519-
3520- case clang::X86::BI__builtin_ia32_pmuldq128:
3521- case clang::X86::BI__builtin_ia32_pmuldq256:
3522- case clang::X86::BI__builtin_ia32_pmuldq512:
3523- case clang::X86::BI__builtin_ia32_pmuludq128:
3524- case clang::X86::BI__builtin_ia32_pmuludq256:
3525- case clang::X86::BI__builtin_ia32_pmuludq512:
3526- return interp__builtin_ia32_pmul (S, OpPC, Call, BuiltinID);
3527-
3528- case Builtin::BI__builtin_elementwise_fma:
3529- return interp__builtin_elementwise_fma (S, OpPC, Call);
3530-
3531- case X86::BI__builtin_ia32_selectb_128:
3532- case X86::BI__builtin_ia32_selectb_256:
3533- case X86::BI__builtin_ia32_selectb_512:
3534- case X86::BI__builtin_ia32_selectw_128:
3535- case X86::BI__builtin_ia32_selectw_256:
3536- case X86::BI__builtin_ia32_selectw_512:
3537- case X86::BI__builtin_ia32_selectd_128:
3538- case X86::BI__builtin_ia32_selectd_256:
3539- case X86::BI__builtin_ia32_selectd_512:
3540- case X86::BI__builtin_ia32_selectq_128:
3541- case X86::BI__builtin_ia32_selectq_256:
3542- case X86::BI__builtin_ia32_selectq_512:
3543- case X86::BI__builtin_ia32_selectph_128:
3544- case X86::BI__builtin_ia32_selectph_256:
3545- case X86::BI__builtin_ia32_selectph_512:
3546- case X86::BI__builtin_ia32_selectpbf_128:
3547- case X86::BI__builtin_ia32_selectpbf_256:
3548- case X86::BI__builtin_ia32_selectpbf_512:
3549- case X86::BI__builtin_ia32_selectps_128:
3550- case X86::BI__builtin_ia32_selectps_256:
3551- case X86::BI__builtin_ia32_selectps_512:
3552- case X86::BI__builtin_ia32_selectpd_128:
3553- case X86::BI__builtin_ia32_selectpd_256:
3554- case X86::BI__builtin_ia32_selectpd_512:
3555- return interp__builtin_select (S, OpPC, Call);
3500+ case clang::X86::BI__builtin_ia32_phaddd128:
3501+ case clang::X86::BI__builtin_ia32_phaddd256:
3502+ case clang::X86::BI__builtin_ia32_phaddsw128:
3503+ case clang::X86::BI__builtin_ia32_phaddsw256:
3504+ case clang::X86::BI__builtin_ia32_phsubw128:
3505+ case clang::X86::BI__builtin_ia32_phsubw256:
3506+ case clang::X86::BI__builtin_ia32_phsubd128:
3507+ case clang::X86::BI__builtin_ia32_phsubd256:
3508+ case clang::X86::BI__builtin_ia32_phsubsw128:
3509+ case clang::X86::BI__builtin_ia32_phsubsw256:
3510+ return interp_builtin_ia32ph_add_sub (S, OpPC, Frame, Call, BuiltinID);
3511+
3512+ case clang::X86::BI__builtin_ia32_haddpd:
3513+ case clang::X86::BI__builtin_ia32_haddpd256:
3514+ case clang::X86::BI__builtin_ia32_haddps:
3515+ case clang::X86::BI__builtin_ia32_haddps256:
3516+ case clang::X86::BI__builtin_ia32_hsubpd:
3517+ case clang::X86::BI__builtin_ia32_hsubpd256:
3518+ case clang::X86::BI__builtin_ia32_hsubps:
3519+ case clang::X86::BI__builtin_ia32_hsubps256:
3520+ return interp_builtin_floatph_add_sub (S, OpPC, Frame, Call, BuiltinID);
3521+
3522+ case clang::X86::BI__builtin_ia32_pmuldq128:
3523+ case clang::X86::BI__builtin_ia32_pmuldq256:
3524+ case clang::X86::BI__builtin_ia32_pmuldq512:
3525+ case clang::X86::BI__builtin_ia32_pmuludq128:
3526+ case clang::X86::BI__builtin_ia32_pmuludq256:
3527+ case clang::X86::BI__builtin_ia32_pmuludq512:
3528+ return interp__builtin_ia32_pmul (S, OpPC, Call, BuiltinID);
3529+
3530+ case Builtin::BI__builtin_elementwise_fma:
3531+ return interp__builtin_elementwise_fma (S, OpPC, Call);
3532+
3533+ case X86::BI__builtin_ia32_selectb_128:
3534+ case X86::BI__builtin_ia32_selectb_256:
3535+ case X86::BI__builtin_ia32_selectb_512:
3536+ case X86::BI__builtin_ia32_selectw_128:
3537+ case X86::BI__builtin_ia32_selectw_256:
3538+ case X86::BI__builtin_ia32_selectw_512:
3539+ case X86::BI__builtin_ia32_selectd_128:
3540+ case X86::BI__builtin_ia32_selectd_256:
3541+ case X86::BI__builtin_ia32_selectd_512:
3542+ case X86::BI__builtin_ia32_selectq_128:
3543+ case X86::BI__builtin_ia32_selectq_256:
3544+ case X86::BI__builtin_ia32_selectq_512:
3545+ case X86::BI__builtin_ia32_selectph_128:
3546+ case X86::BI__builtin_ia32_selectph_256:
3547+ case X86::BI__builtin_ia32_selectph_512:
3548+ case X86::BI__builtin_ia32_selectpbf_128:
3549+ case X86::BI__builtin_ia32_selectpbf_256:
3550+ case X86::BI__builtin_ia32_selectpbf_512:
3551+ case X86::BI__builtin_ia32_selectps_128:
3552+ case X86::BI__builtin_ia32_selectps_256:
3553+ case X86::BI__builtin_ia32_selectps_512:
3554+ case X86::BI__builtin_ia32_selectpd_128:
3555+ case X86::BI__builtin_ia32_selectpd_256:
3556+ case X86::BI__builtin_ia32_selectpd_512:
3557+ return interp__builtin_select (S, OpPC, Call);
35563558
3557- default :
3558- S.FFDiag (S.Current ->getLocation (OpPC),
3559- diag::note_invalid_subexpr_in_const_expr)
3560- << S.Current ->getRange (OpPC);
3559+ default :
3560+ S.FFDiag (S.Current ->getLocation (OpPC),
3561+ diag::note_invalid_subexpr_in_const_expr)
3562+ << S.Current ->getRange (OpPC);
35613563
3562- return false ;
3564+ return false ;
35633565 }
35643566
35653567 llvm_unreachable (" Unhandled builtin ID" );
0 commit comments