llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-modules Author: Alexander Johnston (Alexander-Johnston) <details> <summary>Changes</summary> This patch adds the pack_u8/s8 and pack_clamp_u8/s8 intrinsics and the HLSL SM6.6 packed types they use. The new types, int8_t4_packed and uint8_t4_packed, are convertible to uint as described in the DirectX Specs. They do not have the full breadth of DXCs implementation, which allows undefiend behaviour such as increment operators. --- Patch is 89.85 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/224277.diff 70 Files Affected: - (modified) clang/include/clang/AST/ASTContext.h (+2) - (modified) clang/include/clang/AST/TypeBase.h (+20-1) - (modified) clang/include/clang/AST/TypeProperties.td (+4) - (modified) clang/include/clang/Basic/Builtins.td (+24) - (modified) clang/include/clang/Basic/HLSLIntrinsics.td (+38) - (added) clang/include/clang/Basic/HLSLPackedTypes.def (+31) - (modified) clang/include/clang/Basic/Specifiers.h (+3) - (modified) clang/include/clang/Basic/TokenKinds.def (+3) - (modified) clang/include/clang/Sema/DeclSpec.h (+3) - (modified) clang/include/clang/Sema/Overload.h (+3) - (modified) clang/include/clang/Sema/SemaHLSL.h (+1) - (modified) clang/include/clang/Serialization/ASTBitCodes.h (+4-1) - (modified) clang/lib/AST/ASTContext.cpp (+15) - (modified) clang/lib/AST/ASTImporter.cpp (+4) - (modified) clang/lib/AST/ExprConstant.cpp (+2) - (modified) clang/lib/AST/ItaniumMangle.cpp (+5) - (modified) clang/lib/AST/MicrosoftMangle.cpp (+6) - (modified) clang/lib/AST/NSAPI.cpp (+2) - (modified) clang/lib/AST/PrintfFormatString.cpp (+3) - (modified) clang/lib/AST/Type.cpp (+8) - (modified) clang/lib/AST/TypeLoc.cpp (+2) - (modified) clang/lib/CodeGen/CGDebugInfo.cpp (+4) - (modified) clang/lib/CodeGen/CGDebugInfo.h (+3) - (modified) clang/lib/CodeGen/CGHLSLBuiltins.cpp (+24) - (modified) clang/lib/CodeGen/CGHLSLRuntime.h (+4) - (modified) clang/lib/CodeGen/CodeGenTypes.cpp (+4) - (modified) clang/lib/CodeGen/ItaniumCXXABI.cpp (+2) - (modified) clang/lib/CodeGen/QualTypeMapper.cpp (+4) - (modified) clang/lib/Parse/ParseDecl.cpp (+13) - (modified) clang/lib/Parse/ParseExpr.cpp (+2) - (modified) clang/lib/Parse/ParseExprCXX.cpp (+5) - (modified) clang/lib/Parse/ParseTentative.cpp (+4) - (modified) clang/lib/Sema/DeclSpec.cpp (+6) - (modified) clang/lib/Sema/SemaCast.cpp (+9) - (modified) clang/lib/Sema/SemaExpr.cpp (+4) - (modified) clang/lib/Sema/SemaExprCXX.cpp (+12-1) - (modified) clang/lib/Sema/SemaHLSL.cpp (+82) - (modified) clang/lib/Sema/SemaOverload.cpp (+39) - (modified) clang/lib/Sema/SemaTemplateVariadic.cpp (+2) - (modified) clang/lib/Sema/SemaType.cpp (+6) - (modified) clang/lib/Serialization/ASTCommon.cpp (+5) - (modified) clang/lib/Serialization/ASTReader.cpp (+5) - (modified) clang/lib/UnifiedSymbolResolution/USRGeneration.cpp (+5) - (added) clang/test/AST/HLSL/int8_t4_packed.hlsl (+8) - (added) clang/test/AST/HLSL/uint8_t4_packed.hlsl (+8) - (added) clang/test/CodeGenHLSL/builtins/pack_clamp_s8.hlsl (+16) - (added) clang/test/CodeGenHLSL/builtins/pack_clamp_u8.hlsl (+16) - (added) clang/test/CodeGenHLSL/builtins/pack_s8.hlsl (+16) - (added) clang/test/CodeGenHLSL/builtins/pack_u8.hlsl (+16) - (added) clang/test/SemaHLSL/BuiltIns/pack_clamp_s8.hlsl (+61) - (added) clang/test/SemaHLSL/BuiltIns/pack_clamp_u8.hlsl (+61) - (added) clang/test/SemaHLSL/BuiltIns/pack_s8.hlsl (+61) - (added) clang/test/SemaHLSL/BuiltIns/pack_u8.hlsl (+61) - (added) clang/test/SemaHLSL/BuiltIns/packed-types.hlsl (+20) - (added) clang/test/SemaHLSL/Types/int8_t4_packed-size.hlsl (+5) - (added) clang/test/SemaHLSL/Types/uint8_t4_packed-size.hlsl (+5) - (modified) clang/tools/libclang/CIndex.cpp (+2) - (modified) llvm/include/llvm/IR/IntrinsicsDirectX.td (+6) - (modified) llvm/include/llvm/IR/IntrinsicsSPIRV.td (+4) - (modified) llvm/lib/Target/DirectX/DXIL.td (+9) - (modified) llvm/lib/Target/DirectX/DXILOpLowering.cpp (+34) - (modified) llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp (+55) - (added) llvm/test/CodeGen/DirectX/pack_clamp_s8.ll (+26) - (added) llvm/test/CodeGen/DirectX/pack_clamp_u8.ll (+26) - (added) llvm/test/CodeGen/DirectX/pack_s8.ll (+26) - (added) llvm/test/CodeGen/DirectX/pack_u8.ll (+26) - (added) llvm/test/CodeGen/SPIRV/hlsl-intrinsics/pack_clamp_s8.ll (+44) - (added) llvm/test/CodeGen/SPIRV/hlsl-intrinsics/pack_clamp_u8.ll (+42) - (added) llvm/test/CodeGen/SPIRV/hlsl-intrinsics/pack_s8.ll (+28) - (added) llvm/test/CodeGen/SPIRV/hlsl-intrinsics/pack_u8.ll (+28) ``````````diff diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index 2f7d39599c477..d686b0ae9f95e 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -1422,6 +1422,8 @@ class ASTContext : public RefCountedBase<ASTContext> { #include "clang/Basic/AMDGPUTypes.def" #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) CanQualType SingletonId; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) CanQualType SingletonId; +#include "clang/Basic/HLSLPackedTypes.def" #define SPIRV_TYPE(Name, Id, SingletonId) CanQualType SingletonId; #include "clang/Basic/SPIRVTypes.def" diff --git a/clang/include/clang/AST/TypeBase.h b/clang/include/clang/AST/TypeBase.h index 424a2afee84da..040e593cd8ba0 100644 --- a/clang/include/clang/AST/TypeBase.h +++ b/clang/include/clang/AST/TypeBase.h @@ -2796,8 +2796,11 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase { #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) bool is##Id##Type() const; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) bool is##Id##Type() const; +#include "clang/Basic/HLSLPackedTypes.def" bool isHLSLSpecificType() const; // Any HLSL specific type bool isHLSLBuiltinIntangibleType() const; // Any HLSL builtin intangible type + bool isHLSLBuiltinPackedType() const; bool isHLSLAttributedResourceType() const; bool isHLSLInlineSpirvType() const; bool isHLSLResourceRecord() const; @@ -3265,6 +3268,9 @@ class BuiltinType : public Type { // HLSL intangible Types #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) Id, #include "clang/Basic/HLSLIntangibleTypes.def" +// HLSL intangible Types +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) Id, +#include "clang/Basic/HLSLPackedTypes.def" // SPIRV types #define SPIRV_TYPE(Name, Id, SingletonId) Id, #include "clang/Basic/SPIRVTypes.def" @@ -8960,6 +8966,12 @@ inline bool Type::isOpenCLSpecificType() const { } #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + inline bool Type::is##Id##Type() const { \ + return isSpecificBuiltinType(BuiltinType::Id); \ + } +#include "clang/Basic/HLSLPackedTypes.def" + #define SPIRV_TYPE(Name, Id, SingletonId) \ inline bool Type::is##Id##Type() const { \ return isSpecificBuiltinType(BuiltinType::Id); \ @@ -8973,9 +8985,16 @@ inline bool Type::isHLSLBuiltinIntangibleType() const { false; } +inline bool Type::isHLSLBuiltinPackedType() const { +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) is##Id##Type() || + return +#include "clang/Basic/HLSLPackedTypes.def" + false; +} + inline bool Type::isHLSLSpecificType() const { return isHLSLBuiltinIntangibleType() || isHLSLAttributedResourceType() || - isHLSLInlineSpirvType(); + isHLSLInlineSpirvType() || isHLSLBuiltinPackedType(); } inline bool Type::isHLSLAttributedResourceType() const { diff --git a/clang/include/clang/AST/TypeProperties.td b/clang/include/clang/AST/TypeProperties.td index dc2a45ec85729..c6e494ddb75c1 100644 --- a/clang/include/clang/AST/TypeProperties.td +++ b/clang/include/clang/AST/TypeProperties.td @@ -885,6 +885,10 @@ let Class = BuiltinType in { case BuiltinType::ID: return ctx.SINGLETON_ID; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(NAME, ID, SINGLETON_ID) \ + case BuiltinType::ID: return ctx.SINGLETON_ID; +#include "clang/Basic/HLSLPackedTypes.def" + #define SPIRV_TYPE(NAME, ID, SINGLETON_ID) \ case BuiltinType::ID: return ctx.SINGLETON_ID; #include "clang/Basic/SPIRVTypes.def" diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index 90340ad7f812c..d5d8ffd79659f 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -5878,6 +5878,30 @@ def HLSLDdyFine : LangBuiltin<"HLSL_LANG"> { let Prototype = "void(...)"; } +def HLSLPackU8 : LangBuiltin<"HLSL_LANG"> { + let Spellings = ["__builtin_hlsl_pack_u8"]; + let Attributes = [NoThrow, CustomTypeChecking]; + let Prototype = "void(...)"; +} + +def HLSLPackS8 : LangBuiltin<"HLSL_LANG"> { + let Spellings = ["__builtin_hlsl_pack_s8"]; + let Attributes = [NoThrow, CustomTypeChecking]; + let Prototype = "void(...)"; +} + +def HLSLPackClampU8 : LangBuiltin<"HLSL_LANG"> { + let Spellings = ["__builtin_hlsl_pack_clamp_u8"]; + let Attributes = [NoThrow, CustomTypeChecking]; + let Prototype = "void(...)"; +} + +def HLSLPackClampS8 : LangBuiltin<"HLSL_LANG"> { + let Spellings = ["__builtin_hlsl_pack_clamp_s8"]; + let Attributes = [NoThrow, CustomTypeChecking]; + let Prototype = "void(...)"; +} + // Builtins for XRay. def XRayCustomEvent : Builtin { let Spellings = ["__xray_customevent"]; diff --git a/clang/include/clang/Basic/HLSLIntrinsics.td b/clang/include/clang/Basic/HLSLIntrinsics.td index 21c0960b6fa23..6a61d15773675 100644 --- a/clang/include/clang/Basic/HLSLIntrinsics.td +++ b/clang/include/clang/Basic/HLSLIntrinsics.td @@ -65,6 +65,8 @@ def IntTy : HLSLType<"int">; def UIntTy : HLSLType<"uint">; def Int64Ty : HLSLType<"int64_t">; def UInt64Ty : HLSLType<"uint64_t">; +def Int8PackedTy : HLSLType<"int8_t4_packed">; +def UInt8PackedTy : HLSLType<"uint8_t4_packed">; //===----------------------------------------------------------------------===// // Element type groups @@ -1922,3 +1924,39 @@ the specified wave. let Availability = SM6_0; let VaryingMatDims = []; } + +def hlsl_pack_u8 : HLSLOneArgBuiltin<"pack_u8", "__builtin_hlsl_pack_u8"> { + let VaryingTypes = [UInt16Ty, UIntTy]; + let VaryingScalar = 0; + let VaryingVecSizes = [4]; + let VaryingMatDims = []; + let ReturnType = UInt8PackedTy; + let Availability = SM6_6; +} + +def hlsl_pack_s8 : HLSLOneArgBuiltin<"pack_s8", "__builtin_hlsl_pack_s8"> { + let VaryingTypes = [Int16Ty, IntTy]; + let VaryingScalar = 0; + let VaryingVecSizes = [4]; + let VaryingMatDims = []; + let ReturnType = Int8PackedTy; + let Availability = SM6_6; +} + +def hlsl_pack_clamp_u8 : HLSLOneArgBuiltin<"pack_clamp_u8", "__builtin_hlsl_pack_clamp_u8"> { + let VaryingTypes = [Int16Ty, IntTy]; + let VaryingScalar = 0; + let VaryingVecSizes = [4]; + let VaryingMatDims = []; + let ReturnType = UInt8PackedTy; + let Availability = SM6_6; +} + +def hlsl_pack_clamp_s8 : HLSLOneArgBuiltin<"pack_clamp_s8", "__builtin_hlsl_pack_clamp_s8"> { + let VaryingTypes = [Int16Ty, IntTy]; + let VaryingScalar = 0; + let VaryingVecSizes = [4]; + let VaryingMatDims = []; + let ReturnType = Int8PackedTy; + let Availability = SM6_6; +} diff --git a/clang/include/clang/Basic/HLSLPackedTypes.def b/clang/include/clang/Basic/HLSLPackedTypes.def new file mode 100644 index 0000000000000..763267bb779eb --- /dev/null +++ b/clang/include/clang/Basic/HLSLPackedTypes.def @@ -0,0 +1,31 @@ +//===-- HLSLPackedTypes.def - HLSL packed scalar types ----------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file defines HLSL SM 6.6 packed types. +// +// The macro is: +// +// HLSL_PACKED_TYPE(Spelling, Id, SingletonId) +// +// where: +// +// - Spelling is the HLSL type name (e.g. int8_t4_packed). +// +// - BuiltinType::Id is the enumerator defining the type. +// +// - Context.SingletonId is the global singleton of this type. +// +// To include this file, define HLSL_PACKED_TYPE. +// The macro will be undefined after inclusion. +// +//===----------------------------------------------------------------------===// + +HLSL_PACKED_TYPE(int8_t4_packed, Int8_4Packed, Int8_4PackedTy) +HLSL_PACKED_TYPE(uint8_t4_packed, UInt8_4Packed, UInt8_4PackedTy) + +#undef HLSL_PACKED_TYPE diff --git a/clang/include/clang/Basic/Specifiers.h b/clang/include/clang/Basic/Specifiers.h index c1b7198565f07..67742038bb6a8 100644 --- a/clang/include/clang/Basic/Specifiers.h +++ b/clang/include/clang/Basic/Specifiers.h @@ -102,6 +102,9 @@ namespace clang { #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) \ TST_##Name, // HLSL Intangible Types #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + TST_##Name, // HLSL Packed Types +#include "clang/Basic/HLSLPackedTypes.def" TST_error // erroneous type }; diff --git a/clang/include/clang/Basic/TokenKinds.def b/clang/include/clang/Basic/TokenKinds.def index dc9c7d8109467..97e5915bcd0d5 100644 --- a/clang/include/clang/Basic/TokenKinds.def +++ b/clang/include/clang/Basic/TokenKinds.def @@ -552,6 +552,9 @@ KEYWORD(column_major , KEYHLSL) // HLSL Intangible Types #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) KEYWORD(Name, KEYHLSL) #include "clang/Basic/HLSLIntangibleTypes.def" +// HLSL Packed Types +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) KEYWORD(Name, KEYHLSL) +#include "clang/Basic/HLSLPackedTypes.def" // Borland Extensions. KEYWORD(__pascal , KEYALL) diff --git a/clang/include/clang/Sema/DeclSpec.h b/clang/include/clang/Sema/DeclSpec.h index e6dc6831d893f..66a6098a75ae9 100644 --- a/clang/include/clang/Sema/DeclSpec.h +++ b/clang/include/clang/Sema/DeclSpec.h @@ -298,6 +298,9 @@ class DeclSpec { #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) \ static const TST TST_##Name = clang::TST_##Name; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + static const TST TST_##Name = clang::TST_##Name; +#include "clang/Basic/HLSLPackedTypes.def" static const TST TST_error = clang::TST_error; // type-qualifiers diff --git a/clang/include/clang/Sema/Overload.h b/clang/include/clang/Sema/Overload.h index 3abc0013d8f69..af3335f5b53ee 100644 --- a/clang/include/clang/Sema/Overload.h +++ b/clang/include/clang/Sema/Overload.h @@ -210,6 +210,9 @@ class Sema; /// HLSL matrix splat from scalar or boolean type. ICK_HLSL_Matrix_Splat, + /// HLSL packed type conversion to uint + ICK_HLSL_Packed_Type_Conversion, + /// The number of conversion kinds ICK_Num_Conversion_Kinds, }; diff --git a/clang/include/clang/Sema/SemaHLSL.h b/clang/include/clang/Sema/SemaHLSL.h index 6c0e5b52f7cb3..6096f24b25069 100644 --- a/clang/include/clang/Sema/SemaHLSL.h +++ b/clang/include/clang/Sema/SemaHLSL.h @@ -239,6 +239,7 @@ class SemaHLSL : public SemaBase { bool CanPerformScalarCast(QualType SrcTy, QualType DestTy); bool CanPerformElementwiseCast(Expr *Src, QualType DestType); bool CanPerformAggregateSplatCast(Expr *Src, QualType DestType); + bool CanPerformPackedToUintCast(Expr *SrcTy, QualType DestTy); ExprResult ActOnOutParamExpr(ParmVarDecl *Param, Expr *Arg); QualType getInoutParameterType(QualType Ty); diff --git a/clang/include/clang/Serialization/ASTBitCodes.h b/clang/include/clang/Serialization/ASTBitCodes.h index 6a52a9e4fa780..5dd6f38d64f37 100644 --- a/clang/include/clang/Serialization/ASTBitCodes.h +++ b/clang/include/clang/Serialization/ASTBitCodes.h @@ -1154,6 +1154,9 @@ enum PredefinedTypeIDs { // \brief HLSL intangible types with auto numeration #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID, #include "clang/Basic/HLSLIntangibleTypes.def" +// \brief HLSL packed types with auto numeration +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID, +#include "clang/Basic/HLSLPackedTypes.def" // \brief SPIR-V types with auto numeration #define SPIRV_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID, #include "clang/Basic/SPIRVTypes.def" @@ -1169,7 +1172,7 @@ enum PredefinedTypeIDs { /// /// Type IDs for non-predefined types will start at /// NUM_PREDEF_TYPE_IDs. -const unsigned NUM_PREDEF_TYPE_IDS = 530; +const unsigned NUM_PREDEF_TYPE_IDS = 532; // Ensure we do not overrun the predefined types we reserved // in the enum PredefinedTypeIDs above. diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index ef3e6e87ec1fe..6533c82c1c12f 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -1448,6 +1448,10 @@ void ASTContext::InitBuiltinTypes(const TargetInfo &Target, #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) \ InitBuiltinType(SingletonId, BuiltinType::Id); #include "clang/Basic/HLSLIntangibleTypes.def" + +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + InitBuiltinType(SingletonId, BuiltinType::Id); +#include "clang/Basic/HLSLPackedTypes.def" } if (Target.hasAArch64ACLETypes() || @@ -2452,6 +2456,11 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const { Width = Target->getPointerWidth(LangAS::Default); Align = Target->getPointerAlign(LangAS::Default); break; +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) case BuiltinType::Id: +#include "clang/Basic/HLSLPackedTypes.def" + Width = 32; + Align = 32; + break; #define SPIRV_TYPE(Name, Id, SingletonId) \ case BuiltinType::Id: \ Width = Target->getPointerWidth(LangAS::Default); \ @@ -3604,6 +3613,10 @@ static void encodeTypeForFunctionPointerAuth(const ASTContext &Ctx, case BuiltinType::Id: \ return; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + case BuiltinType::Id: \ + return; +#include "clang/Basic/HLSLPackedTypes.def" case BuiltinType::Dependent: llvm_unreachable("should never get here"); #define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) case BuiltinType::Id: @@ -9274,6 +9287,8 @@ static char getObjCEncodingForPrimitiveType(const ASTContext *C, #include "clang/Basic/PPCTypes.def" #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) case BuiltinType::Id: +#include "clang/Basic/HLSLPackedTypes.def" #define BUILTIN_TYPE(KIND, ID) #define PLACEHOLDER_TYPE(KIND, ID) \ case BuiltinType::KIND: diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 22c3af47f451f..7871ff717fe99 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -1370,6 +1370,10 @@ ExpectedType ASTNodeImporter::VisitBuiltinType(const BuiltinType *T) { case BuiltinType::Id: \ return Importer.getToContext().SingletonId; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + case BuiltinType::Id: \ + return Importer.getToContext().SingletonId; +#include "clang/Basic/HLSLPackedTypes.def" #define SPIRV_TYPE(Name, Id, SingletonId) \ case BuiltinType::Id: \ return Importer.getToContext().SingletonId; diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 9242491832841..2b6b087c7652c 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -16384,6 +16384,8 @@ GCCTypeClass EvaluateBuiltinClassifyType(QualType T, #include "clang/Basic/AMDGPUTypes.def" #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) case BuiltinType::Id: +#include "clang/Basic/HLSLPackedTypes.def" #define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/SPIRVTypes.def" return GCCTypeClass::None; diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 780fe3a321200..e25a61dc1e69a 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -3564,6 +3564,11 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { mangleVendorType(#Name); \ break; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + case BuiltinType::Id: \ + mangleVendorType(#Name); \ + break; +#include "clang/Basic/HLSLPackedTypes.def" #define SPIRV_TYPE(Name, Id, SingletonId) \ case BuiltinType::Id: \ mangleVendorType(Name); \ diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index cc7bf2279b72e..983306e422485 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -2833,6 +2833,12 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers, break; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + case BuiltinType::Id: \ + mangleArtificialTagType(TagTypeKind::Struct, #Name); \ + break; +#include "clang/Basic/HLSLPackedTypes.def" + case BuiltinType::SveBool: Out << "$_CA"; break; diff --git a/clang/lib/AST/NSAPI.cpp b/clang/lib/AST/NSAPI.cpp index 7142ded5a551d..54c0b03b14848 100644 --- a/clang/lib/AST/NSAPI.cpp +++ b/clang/lib/AST/NSAPI.cpp @@ -457,6 +457,8 @@ NSAPI::getNSNumberFactoryMethodKind(QualType T) const { #include "clang/Basic/AMDGPUTypes.def" #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) case BuiltinType::Id: +#include "clang/Basic/HLSLPackedTypes.def" #define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/SPIRVTypes.def" case BuiltinType::BoundMember: diff --git a/clang/lib/AST/PrintfFormatString.cpp b/clang/lib/AST/PrintfFormatString.cpp index e0cff04069d59..d09ed5e02dc02 100644 --- a/clang/lib/AST/PrintfFormatString.cpp +++ b/clang/lib/AST/PrintfFormatString.cpp @@ -957,6 +957,9 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt, #define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) case BuiltinType::Id: +#include "clang/Basic/HLSLPackedTypes.def" + #define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id: #include "clang/Basic/SPIRVTypes.def" diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index cbacca1c44d91..9059272056809 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -2507,6 +2507,8 @@ Type::ScalarTypeKind Type::getScalarTypeKind() const { return STK_Floating; if (BT->isFixedPointType()) return STK_FixedPoint; + if (BT->isHLSLBuiltinPackedType()) + return STK_Integral; llvm_unreachable("unknown scalar builtin type"); } else if (isa<PointerType>(T)) { return STK_CPointer; @@ -3708,6 +3710,10 @@ StringRef BuiltinType::getName(const PrintingPolicy &Policy) const { case Id: \ return #Name; #include "clang/Basic/HLSLIntangibleTypes.def" +#define HLSL_PACKED_TYPE(Name, Id, SingletonId) \ + case Id: \ + return #Name; +#include "clang/Basic/HLSLPackedTypes.def" #define SPIRV_TYPE(Name, Id, SingletonId) ... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/224277 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
