llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-debuginfo
@llvm/pr-subscribers-clangir
Author: elizabethandrews
<details>
<summary>Changes</summary>
Add a new builtin type __spirv_event_t for SPIR-V targets. It represents
SPIR-V's OpTypeEvent and lowers to the target("spirv.Event") extension
type.
We would like to expose SPIR-V instructions to users via builtins (not yet
implemented). The builtins return an event type.
Assisted by Claude Opus 4.8 for writing tests.
---
Patch is 28.75 KiB, truncated to 20.00 KiB below, full version:
https://github.com/llvm/llvm-project/pull/207077.diff
30 Files Affected:
- (modified) clang/include/clang/AST/ASTContext.h (+2)
- (modified) clang/include/clang/AST/TypeBase.h (+12)
- (modified) clang/include/clang/AST/TypeProperties.td (+4)
- (added) clang/include/clang/Basic/SPIRVTypes.def (+28)
- (modified) clang/include/clang/Serialization/ASTBitCodes.h (+4-1)
- (modified) clang/lib/AST/ASTContext.cpp (+17)
- (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 (+5)
- (modified) clang/lib/AST/NSAPI.cpp (+2)
- (modified) clang/lib/AST/PrintfFormatString.cpp (+3)
- (modified) clang/lib/AST/Type.cpp (+6)
- (modified) clang/lib/AST/TypeLoc.cpp (+2)
- (modified) clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp (+2)
- (modified) clang/lib/CodeGen/CGDebugInfo.cpp (+4)
- (modified) clang/lib/CodeGen/CGDebugInfo.h (+2)
- (modified) clang/lib/CodeGen/CodeGenTypes.cpp (+4)
- (modified) clang/lib/CodeGen/ItaniumCXXABI.cpp (+2)
- (modified) clang/lib/CodeGen/QualTypeMapper.cpp (+4)
- (modified) clang/lib/Sema/Sema.cpp (+8)
- (modified) clang/lib/Sema/SemaExpr.cpp (+4)
- (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/spirv-event-type.cpp (+15)
- (added) clang/test/CodeGenCXX/spirv-event-type.cpp (+47)
- (added) clang/test/SemaCXX/spirv-event.cpp (+36)
- (modified) clang/tools/libclang/CIndex.cpp (+2)
- (modified) lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp (+5)
``````````diff
diff --git a/clang/include/clang/AST/ASTContext.h
b/clang/include/clang/AST/ASTContext.h
index a4ed852d36442..798c59e5449c9 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -1373,6 +1373,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 SPIRV_TYPE(Name, Id, SingletonId) CanQualType SingletonId;
+#include "clang/Basic/SPIRVTypes.def"
// Types for deductions in C++0x [stmt.ranged]'s desugaring. Built on demand.
mutable QualType AutoDeductTy; // Deduction against 'auto'.
diff --git a/clang/include/clang/AST/TypeBase.h
b/clang/include/clang/AST/TypeBase.h
index e3141a82b54d2..b89303da6271f 100644
--- a/clang/include/clang/AST/TypeBase.h
+++ b/clang/include/clang/AST/TypeBase.h
@@ -2801,6 +2801,9 @@ class alignas(TypeAlignment) Type : public
ExtQualsTypeCommonBase {
bool isHLSLIntangibleType()
const; // Any HLSL intangible type (builtin, array, class)
+#define SPIRV_TYPE(Name, Id, SingletonId) bool is##Id##Type() const;
+#include "clang/Basic/SPIRVTypes.def"
+
/// Determines if this type, which must satisfy
/// isObjCLifetimeType(), is implicitly __unsafe_unretained rather
/// than implicitly __strong.
@@ -3250,6 +3253,9 @@ class BuiltinType : public Type {
// HLSL intangible Types
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) Id,
#include "clang/Basic/HLSLIntangibleTypes.def"
+// SPIRV types
+#define SPIRV_TYPE(Name, Id, SingletonId) Id,
+#include "clang/Basic/SPIRVTypes.def"
// All other builtin types
#define BUILTIN_TYPE(Id, SingletonId) Id,
#define LAST_BUILTIN_TYPE(Id) LastKind = Id
@@ -8985,6 +8991,12 @@ inline bool Type::isOpenCLSpecificType() const {
}
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ inline bool Type::is##Id##Type() const {
\
+ return isSpecificBuiltinType(BuiltinType::Id);
\
+ }
+#include "clang/Basic/SPIRVTypes.def"
+
inline bool Type::isHLSLBuiltinIntangibleType() const {
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) is##Id##Type() ||
return
diff --git a/clang/include/clang/AST/TypeProperties.td
b/clang/include/clang/AST/TypeProperties.td
index 0f3722b36774a..3e02fc5125a8f 100644
--- a/clang/include/clang/AST/TypeProperties.td
+++ b/clang/include/clang/AST/TypeProperties.td
@@ -867,6 +867,10 @@ let Class = BuiltinType in {
case BuiltinType::ID: return ctx.SINGLETON_ID;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(NAME, ID, SINGLETON_ID) \
+ case BuiltinType::ID: return ctx.SINGLETON_ID;
+#include "clang/Basic/SPIRVTypes.def"
+
#define BUILTIN_TYPE(ID, SINGLETON_ID) \
case BuiltinType::ID: return ctx.SINGLETON_ID;
#include "clang/AST/BuiltinTypes.def"
diff --git a/clang/include/clang/Basic/SPIRVTypes.def
b/clang/include/clang/Basic/SPIRVTypes.def
new file mode 100644
index 0000000000000..01495fdbbeaca
--- /dev/null
+++ b/clang/include/clang/Basic/SPIRVTypes.def
@@ -0,0 +1,28 @@
+//===-- SPIRVTypes.def - Metadata about SPIRV 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 SPIRV builtin opaque types. The macro is:
+//
+// SPIRV_TYPE(Name, Id, SingletonId)
+//
+// where:
+//
+// - Name is the name of the builtin type.
+//
+// - BuiltinType::Id is the enumerator defining the type.
+//
+// - Context.SingletonId is the global singleton of this type.
+//
+// To include this file, define SPIRV_TYPE. The macro will be undefined after
+// inclusion.
+//
+//===----------------------------------------------------------------------===//
+
+SPIRV_TYPE("__spirv_event_t", SPIRVEvent, SPIRVEventTy)
+
+#undef SPIRV_TYPE
diff --git a/clang/include/clang/Serialization/ASTBitCodes.h
b/clang/include/clang/Serialization/ASTBitCodes.h
index 279380de2f7fe..ff9fc7b2be9ea 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 SPIRV types with auto numeration
+#define SPIRV_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
+#include "clang/Basic/SPIRVTypes.def"
/// The placeholder type for unresolved templates.
PREDEF_TYPE_UNRESOLVED_TEMPLATE,
@@ -1166,7 +1169,7 @@ enum PredefinedTypeIDs {
///
/// Type IDs for non-predefined types will start at
/// NUM_PREDEF_TYPE_IDs.
-const unsigned NUM_PREDEF_TYPE_IDS = 529;
+const unsigned NUM_PREDEF_TYPE_IDS = 530;
// 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 abf0cd5e18c2b..e0670a9cc6a7e 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1488,6 +1488,13 @@ void ASTContext::InitBuiltinTypes(const TargetInfo
&Target,
#include "clang/Basic/AMDGPUTypes.def"
}
+ if (Target.getTriple().isSPIRV() ||
+ (AuxTarget && AuxTarget->getTriple().isSPIRV())) {
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ InitBuiltinType(SingletonId, BuiltinType::Id);
+#include "clang/Basic/SPIRVTypes.def"
+ }
+
// Builtin type for __objc_yes and __objc_no
ObjCBuiltinBoolTy = (Target.useSignedCharForObjCBool() ?
SignedCharTy : BoolTy);
@@ -2438,6 +2445,12 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T)
const {
Width = Target->getPointerWidth(LangAS::Default);
Align = Target->getPointerAlign(LangAS::Default);
break;
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case BuiltinType::Id:
\
+ Width = Target->getPointerWidth(LangAS::Default);
\
+ Align = Target->getPointerAlign(LangAS::Default);
\
+ break;
+#include "clang/Basic/SPIRVTypes.def"
}
break;
case Type::ObjCObjectPointer:
@@ -3584,6 +3597,8 @@ static void encodeTypeForFunctionPointerAuth(const
ASTContext &Ctx,
case BuiltinType::WasmExternRef:
#define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/RISCVVTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
llvm_unreachable("not yet implemented");
}
llvm_unreachable("should never get here");
@@ -9281,6 +9296,8 @@ static char getObjCEncodingForPrimitiveType(const
ASTContext *C,
#include "clang/Basic/WebAssemblyReferenceTypes.def"
#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) case BuiltinType::Id:
#include "clang/Basic/AMDGPUTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
{
DiagnosticsEngine &Diags = C->getDiagnostics();
Diags.Report(diag::err_unsupported_objc_primitive_encoding)
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index f5848d154f49e..156ae82bbaa28 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -1365,6 +1365,10 @@ ExpectedType ASTNodeImporter::VisitBuiltinType(const
BuiltinType *T) {
case BuiltinType::Id:
\
return Importer.getToContext().SingletonId;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case BuiltinType::Id:
\
+ return Importer.getToContext().SingletonId;
+#include "clang/Basic/SPIRVTypes.def"
#define SHARED_SINGLETON_TYPE(Expansion)
#define BUILTIN_TYPE(Id, SingletonId) \
case BuiltinType::Id: return Importer.getToContext().SingletonId;
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 1642c41a99a2f..d877d0d4cd402 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -15830,6 +15830,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 SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
return GCCTypeClass::None;
case BuiltinType::Dependent:
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index 2e74aeb558e3d..b448d53fac7e2 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -3513,6 +3513,11 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
mangleVendorType(#Name);
\
break;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case BuiltinType::Id:
\
+ mangleVendorType(Name);
\
+ break;
+#include "clang/Basic/SPIRVTypes.def"
}
}
diff --git a/clang/lib/AST/MicrosoftMangle.cpp
b/clang/lib/AST/MicrosoftMangle.cpp
index adfe260a0d091..efef5e174b2ae 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -3026,6 +3026,11 @@ void MicrosoftCXXNameMangler::mangleType(const
BuiltinType *T, Qualifiers,
mangleArtificialTagType(TagTypeKind::Struct, "__SVCount_t", {"__clang"});
break;
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
+ Error(Range.getBegin(), "SPIR-V built-in type") << Range;
+ break;
+
// Issue an error for any type not explicitly handled.
default:
Error(Range.getBegin(), "built-in type: ",
diff --git a/clang/lib/AST/NSAPI.cpp b/clang/lib/AST/NSAPI.cpp
index 17f5ee5dee3d1..7142ded5a551d 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 SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::BoundMember:
case BuiltinType::UnresolvedTemplate:
case BuiltinType::Dependent:
diff --git a/clang/lib/AST/PrintfFormatString.cpp
b/clang/lib/AST/PrintfFormatString.cpp
index 4b56157d64a5d..e0cff04069d59 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 SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
+
#define SIGNED_TYPE(Id, SingletonId)
#define UNSIGNED_TYPE(Id, SingletonId)
#define FLOATING_TYPE(Id, SingletonId)
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index 55c3e5c3ead17..0a7542a19cd2b 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -3664,6 +3664,10 @@ StringRef BuiltinType::getName(const PrintingPolicy
&Policy) const {
case Id:
\
return #Name;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case Id:
\
+ return Name;
+#include "clang/Basic/SPIRVTypes.def"
}
llvm_unreachable("Invalid builtin type.");
@@ -5251,6 +5255,8 @@ bool Type::canHaveNullability(bool ResultIfUnknown) const
{
#include "clang/Basic/AMDGPUTypes.def"
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::BuiltinFn:
case BuiltinType::NullPtr:
case BuiltinType::IncompleteMatrixIdx:
diff --git a/clang/lib/AST/TypeLoc.cpp b/clang/lib/AST/TypeLoc.cpp
index 7e72a85136966..c2f83e7f5cbae 100644
--- a/clang/lib/AST/TypeLoc.cpp
+++ b/clang/lib/AST/TypeLoc.cpp
@@ -421,6 +421,8 @@ TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec()
const {
#include "clang/Basic/AMDGPUTypes.def"
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::BuiltinFn:
case BuiltinType::IncompleteMatrixIdx:
case BuiltinType::ArraySection:
diff --git a/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
b/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
index 552d73966e97b..296d5b0d5ac04 100644
--- a/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
@@ -738,6 +738,8 @@ static bool typeInfoIsInStandardLibrary(const BuiltinType
*ty) {
#include "clang/Basic/RISCVVTypes.def"
#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) case BuiltinType::Id:
#include "clang/Basic/AMDGPUTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::ShortAccum:
case BuiltinType::Accum:
case BuiltinType::LongAccum:
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp
b/clang/lib/CodeGen/CGDebugInfo.cpp
index 3d429d0d78e82..a6bc270d884a4 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1141,6 +1141,10 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinType
*BT) {
return SingletonId;
\
}
#include "clang/Basic/AMDGPUTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case BuiltinType::Id:
\
+ return getOrCreateStructPtrType(Name, SingletonId);
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::UChar:
case BuiltinType::Char_U:
Encoding = llvm::dwarf::DW_ATE_unsigned_char;
diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h
index 4c385c26efc4e..f9cec24b2b4d7 100644
--- a/clang/lib/CodeGen/CGDebugInfo.h
+++ b/clang/lib/CodeGen/CGDebugInfo.h
@@ -97,6 +97,8 @@ class CGDebugInfo {
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId)
\
llvm::DIType *SingletonId = nullptr;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) llvm::DIType *SingletonId = nullptr;
+#include "clang/Basic/SPIRVTypes.def"
/// Cache of previously constructed Types.
llvm::DenseMap<const void *, llvm::TrackingMDRef> TypeCache;
diff --git a/clang/lib/CodeGen/CodeGenTypes.cpp
b/clang/lib/CodeGen/CodeGenTypes.cpp
index b28a0eb82f302..9d63e295f2309 100644
--- a/clang/lib/CodeGen/CodeGenTypes.cpp
+++ b/clang/lib/CodeGen/CodeGenTypes.cpp
@@ -617,6 +617,10 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
#include "clang/Basic/HLSLIntangibleTypes.def"
ResultType = CGM.getHLSLRuntime().convertHLSLSpecificType(Ty);
break;
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case BuiltinType::Id:
\
+ return llvm::TargetExtType::get(getLLVMContext(), "spirv.Event");
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::Dependent:
#define BUILTIN_TYPE(Id, SingletonId)
#define PLACEHOLDER_TYPE(Id, SingletonId) \
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp
b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index b4b3284f752ae..090e18b5f3512 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -3778,6 +3778,8 @@ static bool TypeInfoIsInStandardLibrary(const BuiltinType
*Ty) {
#include "clang/Basic/AMDGPUTypes.def"
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
case BuiltinType::ShortAccum:
case BuiltinType::Accum:
case BuiltinType::LongAccum:
diff --git a/clang/lib/CodeGen/QualTypeMapper.cpp
b/clang/lib/CodeGen/QualTypeMapper.cpp
index 31d9250a48ec9..212a138f9b7b7 100644
--- a/clang/lib/CodeGen/QualTypeMapper.cpp
+++ b/clang/lib/CodeGen/QualTypeMapper.cpp
@@ -267,6 +267,10 @@ QualTypeMapper::convertBuiltinType(const BuiltinType *BT) {
#include "clang/Basic/HLSLIntangibleTypes.def"
llvm::reportFatalInternalError(
"HLSL intangible types not yet Supported in ABI lowering library");
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
+ llvm::reportFatalInternalError(
+ "SPIR-V types not yet supported in ABI lowering library");
// Placeholder types should never reach ABI lowering.
#define PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id:
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp
index 78fbc9e31842d..a741261163b9e 100644
--- a/clang/lib/Sema/Sema.cpp
+++ b/clang/lib/Sema/Sema.cpp
@@ -580,6 +580,14 @@ void Sema::Initialize() {
#include "clang/Basic/AMDGPUTypes.def"
}
+ if (Context.getTargetInfo().getTriple().isSPIRV() ||
+ (Context.getAuxTargetInfo() &&
+ Context.getAuxTargetInfo()->getTriple().isSPIRV())) {
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ addImplicitTypedef(Name, Context.SingletonId);
+#include "clang/Basic/SPIRVTypes.def"
+ }
+
if (Context.getTargetInfo().hasBuiltinMSVaList()) {
DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
if (IdResolver.begin(MSVaList) == IdResolver.end())
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index ad6e7183cb3a4..6d2772827001e 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -6448,6 +6448,8 @@ static bool isPlaceholderToRemoveAsArg(QualType type) {
#include "clang/Basic/AMDGPUTypes.def"
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
#define PLACEHOLDER_TYPE(ID, SINGLETON_ID)
#define BUILTIN_TYPE(ID, SINGLETON_ID) case BuiltinType::ID:
#include "clang/AST/BuiltinTypes.def"
@@ -22028,6 +22030,8 @@ ExprResult Sema::CheckPlaceholderExpr(Expr *E) {
#include "clang/Basic/AMDGPUTypes.def"
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
+#include "clang/Basic/SPIRVTypes.def"
#define BUILTIN_TYPE(Id, SingletonId) case BuiltinType::Id:
#define PLACEHOLDER_TYPE(Id, SingletonId)
#include "clang/AST/BuiltinTypes.def"
diff --git a/clang/lib/Serialization/ASTCommon.cpp
b/clang/lib/Serialization/ASTCommon.cpp
index 49e6fe8004cec..d10de5c288d69 100644
--- a/clang/lib/Serialization/ASTCommon.cpp
+++ b/clang/lib/Serialization/ASTCommon.cpp
@@ -268,6 +268,11 @@ serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
ID = PREDEF_TYPE_##Id##_ID;
\
break;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SPIRV_TYPE(Name, Id, SingletonId)
\
+ case BuiltinType::Id:
\
+ ID = PREDEF_TYPE_##Id##_ID; ...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/207077
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits