================
@@ -11599,6 +11599,89 @@ static bool handleVectorElementCast(EvalInfo &Info,
const FPOptions FPO,
return false;
}
+enum class PackKind {
+ SSWB,
+ USWB,
+ SSDW,
+ USDW
+}; // 16→8 signed/unsigned; 32→16 signed/unsigned
+
+static bool evalPackBuiltin(const CallExpr *E, EvalInfo &Info, APValue &Result,
+ PackKind K) {
+ APValue L, R;
+ if (!EvaluateAsRValue(Info, E->getArg(0), L) ||
+ !EvaluateAsRValue(Info, E->getArg(1), R))
+ return false;
+
+ unsigned SrcBits = (K == PackKind::SSWB || K == PackKind::USWB) ? 16 : 32;
+ unsigned DstBits = SrcBits / 2;
+
+ unsigned NL = L.getVectorLength();
+ unsigned NR = R.getVectorLength();
+ if (NL == 0 || NR == 0 || NL != NR)
----------------
woruyu wrote:
I replace if branch with assert check
https://github.com/llvm/llvm-project/pull/156003
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits