[llvm-branch-commits] [clang] [HLSL][Matrix] Add Matrix splat support for booleans (PR #175809)

Deric C. via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jan 13 10:55:29 PST 2026


================
@@ -7899,14 +7899,26 @@ ExprResult Sema::prepareMatrixSplat(QualType MatrixTy, Expr *SplattedExpr) {
   assert(DestElemTy->isFloatingType() ||
          DestElemTy->isIntegralOrEnumerationType());
 
-  // TODO: Add support for boolean matrix once exposed
-  // https://github.com/llvm/llvm-project/issues/170920
-  ExprResult CastExprRes = SplattedExpr;
-  CastKind CK = PrepareScalarCast(CastExprRes, DestElemTy);
-  if (CastExprRes.isInvalid())
-    return ExprError();
-  SplattedExpr = CastExprRes.get();
-
+  CastKind CK;
+  if (SplattedExpr->getType()->isBooleanType()) {
+    // As with vectors, we want `true` to become -1 when splatting, and we
+    // need a two-step cast if the destination element type is floating.
+    if (DestElemTy->isFloatingType()) {
+      // Cast boolean to signed integral, then to floating.
+      ExprResult CastExprRes = ImpCastExprToType(SplattedExpr, Context.IntTy,
+                                                 CK_BooleanToSignedIntegral);
+      SplattedExpr = CastExprRes.get();
+      CK = CK_IntegralToFloating;
+    } else {
+      CK = CK_BooleanToSignedIntegral;
+    }
----------------
Icohedron wrote:

This code is a re-introduction of the code from @farzonl https://github.com/llvm/llvm-project/pull/170885/changes/e80fe5c7cb993aa6e380abec94302477d56ac03a

Which itself is analogous to the existing code for prepareVectorSplat https://github.com/llvm/llvm-project/blob/d52c7da0863f0c777382de37b22960f824ac7f48/clang/lib/Sema/SemaExpr.cpp#L7870-L7882

However, in both vector and matrix cases this code never seems to get executed in HLSL. Or at least, I can not find any HLSL code that exercises the logic for converting `true` to `-1` when splatting booleans to vectors and matrices.

As such, I think this code is actually dead and should really not be needed as part of this PR. Boolean matrix splats work just fine in HLSL without this code.

https://github.com/llvm/llvm-project/pull/175809


More information about the llvm-branch-commits mailing list