================
@@ -1054,6 +1055,40 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned
BuiltinID,
Value *Mul = Builder.CreateNUWMul(M, A);
return Builder.CreateNUWAdd(Mul, B);
}
+ case Builtin::BI__builtin_hlsl_mul: {
+ Value *Op0 = EmitScalarExpr(E->getArg(0));
+ Value *Op1 = EmitScalarExpr(E->getArg(1));
+ QualType QTy0 = E->getArg(0)->getType();
+ QualType QTy1 = E->getArg(1)->getType();
+
+ bool IsVec0 = QTy0->isVectorType();
+ bool IsMat0 = QTy0->isConstantMatrixType();
+ bool IsMat1 = QTy1->isConstantMatrixType();
+
+ // Only matrix-involved cases reach the builtin (cases 6, 8, 9).
+ llvm::MatrixBuilder MB(Builder);
+ if (IsVec0 && IsMat1) {
+ // Case 6: vector<N> * matrix<N,M> -> vector<M>
+ unsigned N = QTy0->castAs<VectorType>()->getNumElements();
+ auto *MatTy = QTy1->castAs<ConstantMatrixType>();
+ unsigned M = MatTy->getNumColumns();
+ return MB.CreateMatrixMultiply(Op0, Op1, 1, N, M, "hlsl.mul");
+ }
+ if (IsMat0 && !IsMat1) {
+ // Case 8: matrix<M,N> * vector<N> -> vector<M>
----------------
s-perron wrote:
Could you assert that it is a vector or make the check that it is a vector. You
assuming that if it is not a matrix then it is a vector. Better to make it
explicit.
https://github.com/llvm/llvm-project/pull/184882
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits