[clang] [HLSL] Allow truncation to scalar (PR #104844)
Chris B via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 9 13:40:15 PDT 2024
================
@@ -2032,26 +2032,42 @@ static bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType,
if (S.Context.hasSameUnqualifiedType(FromType, ToType))
return false;
+ // HLSL allows implicit truncation of vector types.
+ if (S.getLangOpts().HLSL) {
+ auto *ToExtType = ToType->getAs<ExtVectorType>();
+ auto *FromExtType = FromType->getAs<ExtVectorType>();
+
+ // If both arguments are vectors, handle possible vector truncation and
+ // element conversion.
+ if (ToExtType && FromExtType) {
+ unsigned FromElts = FromExtType->getNumElements();
+ unsigned ToElts = ToExtType->getNumElements();
+ if (FromElts < ToElts)
+ return false;
+ if (FromElts == ToElts)
+ ElConv = ICK_Identity;
+ else
+ ElConv = ICK_HLSL_Vector_Truncation;
+
+ QualType FromElTy = FromExtType->getElementType();
+ QualType ToElTy = ToExtType->getElementType();
+ if (S.Context.hasSameUnqualifiedType(FromElTy, ToElTy))
+ return true;
+ return IsVectorElementConversion(S, FromElTy, ToElTy, ICK, From);
+ }
+ if (FromExtType && nullptr == ToExtType) {
----------------
llvm-beanz wrote:
Yoda conditions are a shockingly hard habit to break...
https://github.com/llvm/llvm-project/pull/104844
More information about the cfe-commits
mailing list