================
@@ -4828,18 +4830,23 @@ Sema::PerformImplicitConversion(Expr *From, QualType 
ToType,
     }
     case ICK_HLSL_Vector_Truncation: {
       // Note: HLSL built-in vectors are ExtVectors. Since this truncates a
-      // vector to a smaller vector, this can only operate on arguments where
-      // the source and destination types are ExtVectors.
-      assert(From->getType()->isExtVectorType() && ToType->isExtVectorType() &&
-             "HLSL vector truncation should only apply to ExtVectors");
+      // vector to a smaller vector or to a scalar, this can only operate on
+      // arguments where the source type is an ExtVector and the destination
+      // type is destination type is either an ExtVectorType or a builtin 
scalar
+      // type.
       auto *FromVec = From->getType()->castAs<VectorType>();
-      auto *ToVec = ToType->castAs<VectorType>();
       QualType ElType = FromVec->getElementType();
-      QualType TruncTy =
-          Context.getExtVectorType(ElType, ToVec->getNumElements());
-      From = ImpCastExprToType(From, TruncTy, CK_HLSLVectorTruncation,
-                               From->getValueKind())
-                 .get();
+      if (auto *ToVec = ToType->getAs<VectorType>()) {
+        QualType TruncTy =
+            Context.getExtVectorType(ElType, ToVec->getNumElements());
+        From = ImpCastExprToType(From, TruncTy, CK_HLSLVectorTruncation,
+                                 From->getValueKind())
+                   .get();
+      } else {
+        From = ImpCastExprToType(From, ElType, CK_HLSLVectorTruncation,
+                                 From->getValueKind())
+                   .get();
+      }
----------------
bogner wrote:

Arguably more readable to do something like
```suggestion
      QualType ToType = ElType;
      if (auto *ToVec = ToType->getAs<VectorType>())
        ToType = Context.getExtVectorType(ElType, ToVec->getNumElements());
      From = ImpCastExprToType(From, ToType, CK_HLSLVectorTruncation,
                               From->getValueKind())
                 .get();
```

https://github.com/llvm/llvm-project/pull/104844
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to