@@ -2924,39 +2924,33 @@ static bool interp__builtin_x86_insert_subvector(InterpState &S, CodePtr OpPC,
29242924 uint64_t Index = ImmAPS.getZExtValue ();
29252925
29262926 const Pointer &SubVec = S.Stk .pop <Pointer>();
2927- if (!SubVec.getFieldDesc ()->isPrimitiveArray ()) {
2928- return Invalid (S, OpPC);
2929- }
2927+ if (!SubVec.getFieldDesc ()->isPrimitiveArray ())
2928+ return false ;
29302929
29312930 const Pointer &DstVec = S.Stk .pop <Pointer>();
2932- if (!DstVec.getFieldDesc ()->isPrimitiveArray ()) {
2933- return Invalid (S, OpPC);
2934- }
2931+ if (!DstVec.getFieldDesc ()->isPrimitiveArray ())
2932+ return false ;
29352933
29362934 const Pointer &Result = S.Stk .peek <Pointer>();
29372935
29382936 unsigned DstElements = DstVec.getNumElems ();
29392937 unsigned SubElements = SubVec.getNumElems ();
29402938
29412939 if (SubElements == 0 || DstElements == 0 || (DstElements % SubElements) != 0 )
2942- return Invalid (S, OpPC) ;
2940+ return false ;
29432941
29442942 unsigned NumLanes = DstElements / SubElements;
29452943 unsigned Lane = static_cast <unsigned >(Index % NumLanes);
2946-
2947- QualType ElemType = DstVec.getFieldDesc ()->getElemQualType ();
2948- PrimType ElemPT = *S.getContext ().classify (ElemType);
2949-
29502944 unsigned InsertPos = Lane * SubElements;
29512945
2946+ PrimType ElemPT = DstVec.getFieldDesc ()->getPrimType ();
2947+
29522948 TYPE_SWITCH (ElemPT, {
2953- for (unsigned i = 0 ; i < DstElements; ++i) {
2954- Result.elem <T>(i) = DstVec.elem <T>(i);
2955- }
2949+ for (unsigned I = 0 ; I != DstElements; ++I)
2950+ Result.elem <T>(I) = DstVec.elem <T>(I);
29562951
2957- for (unsigned i = 0 ; i < SubElements; ++i) {
2958- Result.elem <T>(InsertPos + i) = SubVec.elem <T>(i);
2959- }
2952+ for (unsigned I = 0 ; I != SubElements; ++I)
2953+ Result.elem <T>(InsertPos + I) = SubVec.elem <T>(I);
29602954 });
29612955
29622956 Result.initializeAllElements ();
0 commit comments