@@ -11787,13 +11787,8 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1178711787 return false;
1178811788
1178911789 const auto *RetVT = E->getType()->castAs<VectorType>();
11790- if (!RetVT) return false;
11791-
1179211790 unsigned RetLen = RetVT->getNumElements();
1179311791 unsigned SrcLen = SourceVec.getVectorLength();
11794- if (SrcLen != RetLen * 2)
11795- return false;
11796-
1179711792 unsigned Idx = SourceImm.getInt().getZExtValue() & 1;
1179811793
1179911794 SmallVector<APValue, 32> ResultElements;
@@ -11820,28 +11815,25 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1182011815 APValue SourceVec, MergeVec;
1182111816 APSInt Imm, MaskImm;
1182211817
11823- if (!EvaluateAsRValue(Info, E->getArg(0), SourceVec) ||
11824- !EvaluateInteger(E->getArg(1), Imm, Info) ||
11825- !EvaluateAsRValue(Info, E->getArg(2), MergeVec) ||
11826- !EvaluateInteger(E->getArg(3), MaskImm, Info))
11827- return false;
11818+ if (!EvaluateAsRValue(Info, E->getArg(0), SourceVec) ||
11819+ !EvaluateInteger(E->getArg(1), Imm, Info) ||
11820+ !EvaluateAsRValue(Info, E->getArg(2), MergeVec) ||
11821+ !EvaluateInteger(E->getArg(3), MaskImm, Info))
11822+ return false;
1182811823
1182911824 const auto *RetVT = E->getType()->castAs<VectorType>();
1183011825 unsigned RetLen = RetVT->getNumElements();
1183111826
1183211827 if (!SourceVec.isVector() || !MergeVec.isVector()) return false;
1183311828 unsigned SrcLen = SourceVec.getVectorLength();
11834- if (!SrcLen || !RetLen || (SrcLen % RetLen) != 0) return false;
11835-
1183611829 unsigned Lanes = SrcLen / RetLen;
1183711830 unsigned Lane = static_cast<unsigned>(Imm.getZExtValue() % Lanes);
1183811831 unsigned Base = Lane * RetLen;
11839- uint64_t Mask = MaskImm.getZExtValue();
1184011832
1184111833 SmallVector<APValue, 32> ResultElements;
1184211834 ResultElements.reserve(RetLen);
1184311835 for (unsigned I = 0; I < RetLen; ++I) {
11844- if ((Mask >> I) & 1 )
11836+ if (MaskImm[I] )
1184511837 ResultElements.push_back(SourceVec.getVectorElt(Base + I));
1184611838 else
1184711839 ResultElements.push_back(MergeVec.getVectorElt(I));
0 commit comments