Skip to content

Commit 1c7d359

Browse files
committed
[Clang][AMDGPU] Add a new builtin type for buffer rsrc
1 parent 4d95850 commit 1c7d359

29 files changed

+170
-2
lines changed

clang/include/clang/AST/ASTContext.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,8 @@ class ASTContext : public RefCountedBase<ASTContext> {
11471147
#include "clang/Basic/RISCVVTypes.def"
11481148
#define WASM_TYPE(Name, Id, SingletonId) CanQualType SingletonId;
11491149
#include "clang/Basic/WebAssemblyReferenceTypes.def"
1150+
#define AMDGPU_TYPE(Name, Id, SingletonId) CanQualType SingletonId;
1151+
#include "clang/Basic/AMDGPUTypes.def"
11501152

11511153
// Types for deductions in C++0x [stmt.ranged]'s desugaring. Built on demand.
11521154
mutable QualType AutoDeductTy; // Deduction against 'auto'.

clang/include/clang/AST/Type.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3015,6 +3015,9 @@ class BuiltinType : public Type {
30153015
// WebAssembly reference types
30163016
#define WASM_TYPE(Name, Id, SingletonId) Id,
30173017
#include "clang/Basic/WebAssemblyReferenceTypes.def"
3018+
// AMDGPU types
3019+
#define AMDGPU_TYPE(Name, Id, SingletonId) Id,
3020+
#include "clang/Basic/AMDGPUTypes.def"
30183021
// All other builtin types
30193022
#define BUILTIN_TYPE(Id, SingletonId) Id,
30203023
#define LAST_BUILTIN_TYPE(Id) LastKind = Id

clang/include/clang/AST/TypeProperties.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,10 @@ let Class = BuiltinType in {
861861
case BuiltinType::ID: return ctx.SINGLETON_ID;
862862
#include "clang/Basic/WebAssemblyReferenceTypes.def"
863863

864+
#define AMDGPU_TYPE(NAME, ID, SINGLETON_ID) \
865+
case BuiltinType::ID: return ctx.SINGLETON_ID;
866+
#include "clang/Basic/AMDGPUTypes.def"
867+
864868
#define BUILTIN_TYPE(ID, SINGLETON_ID) \
865869
case BuiltinType::ID: return ctx.SINGLETON_ID;
866870
#include "clang/AST/BuiltinTypes.def"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//===-- AMDGPUTypes.def - Metadata about AMDGPU types -----------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// This file defines various AMDGPU builtin types.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#ifndef AMDGPU_OPAQUE_TYPE
14+
#define AMDGPU_OPAQUE_TYPE(Name, MangledName, Id, SingletonId) \
15+
AMDGPU_TYPE(Name, Id, SingletonId)
16+
#endif
17+
18+
AMDGPU_OPAQUE_TYPE("__buffer_rsrc_t", "__buffer_rsrc_t", AMDGPUBufferRsrc, AMDGPUBufferRsrcTy)
19+
20+
#undef AMDGPU_TYPE
21+
#undef AMDGPU_OPAQUE_TYPE

clang/include/clang/Serialization/ASTBitCodes.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,9 @@ enum PredefinedTypeIDs {
10911091
// \brief WebAssembly reference types with auto numeration
10921092
#define WASM_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
10931093
#include "clang/Basic/WebAssemblyReferenceTypes.def"
1094+
// \breif AMDGPU types with auto numeration
1095+
#define AMDGPU_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
1096+
#include "clang/Basic/AMDGPUTypes.def"
10941097

10951098
/// The placeholder type for unresolved templates.
10961099
PREDEF_TYPE_UNRESOLVED_TEMPLATE,
@@ -1103,7 +1106,7 @@ enum PredefinedTypeIDs {
11031106
///
11041107
/// Type IDs for non-predefined types will start at
11051108
/// NUM_PREDEF_TYPE_IDs.
1106-
const unsigned NUM_PREDEF_TYPE_IDS = 503;
1109+
const unsigned NUM_PREDEF_TYPE_IDS = 504;
11071110

11081111
// Ensure we do not overrun the predefined types we reserved
11091112
// in the enum PredefinedTypeIDs above.

clang/lib/AST/ASTContext.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,6 +1384,12 @@ void ASTContext::InitBuiltinTypes(const TargetInfo &Target,
13841384
#include "clang/Basic/WebAssemblyReferenceTypes.def"
13851385
}
13861386

1387+
if (Target.getTriple().isAMDGPU()) {
1388+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
1389+
InitBuiltinType(SingletonId, BuiltinType::Id);
1390+
#include "clang/Basic/AMDGPUTypes.def"
1391+
}
1392+
13871393
// Builtin type for __objc_yes and __objc_no
13881394
ObjCBuiltinBoolTy = (Target.useSignedCharForObjCBool() ?
13891395
SignedCharTy : BoolTy);
@@ -2200,6 +2206,9 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {
22002206
Align = 8; \
22012207
break;
22022208
#include "clang/Basic/WebAssemblyReferenceTypes.def"
2209+
case BuiltinType::AMDGPUBufferRsrc:
2210+
Width = 128;
2211+
Align = 128;
22032212
}
22042213
break;
22052214
case Type::ObjCObjectPointer:
@@ -8155,6 +8164,8 @@ static char getObjCEncodingForPrimitiveType(const ASTContext *C,
81558164
#include "clang/Basic/RISCVVTypes.def"
81568165
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
81578166
#include "clang/Basic/WebAssemblyReferenceTypes.def"
8167+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
8168+
#include "clang/Basic/AMDGPUTypes.def"
81588169
{
81598170
DiagnosticsEngine &Diags = C->getDiagnostics();
81608171
unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,

clang/lib/AST/ASTImporter.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,6 +1099,10 @@ ExpectedType ASTNodeImporter::VisitBuiltinType(const BuiltinType *T) {
10991099
case BuiltinType::Id: \
11001100
return Importer.getToContext().SingletonId;
11011101
#include "clang/Basic/WebAssemblyReferenceTypes.def"
1102+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
1103+
case BuiltinType::Id: \
1104+
return Importer.getToContext().SingletonId;
1105+
#include "clang/Basic/AMDGPUTypes.def"
11021106
#define SHARED_SINGLETON_TYPE(Expansion)
11031107
#define BUILTIN_TYPE(Id, SingletonId) \
11041108
case BuiltinType::Id: return Importer.getToContext().SingletonId;

clang/lib/AST/ExprConstant.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11807,6 +11807,8 @@ GCCTypeClass EvaluateBuiltinClassifyType(QualType T,
1180711807
#include "clang/Basic/RISCVVTypes.def"
1180811808
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
1180911809
#include "clang/Basic/WebAssemblyReferenceTypes.def"
11810+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
11811+
#include "clang/Basic/AMDGPUTypes.def"
1181011812
return GCCTypeClass::None;
1181111813

1181211814
case BuiltinType::Dependent:

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3423,6 +3423,12 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
34233423
Out << 'u' << type_name.size() << type_name; \
34243424
break;
34253425
#include "clang/Basic/WebAssemblyReferenceTypes.def"
3426+
#define AMDGPU_OPAQUE_TYPE(InternalName, MangledName, Id, SingletonId) \
3427+
case BuiltinType::Id: \
3428+
type_name = MangledName; \
3429+
Out << 'u' << type_name.size() << type_name; \
3430+
break;
3431+
#include "clang/Basic/AMDGPUTypes.def"
34263432
}
34273433
}
34283434

clang/lib/AST/MicrosoftMangle.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2609,6 +2609,8 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers,
26092609
#include "clang/Basic/PPCTypes.def"
26102610
#define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
26112611
#include "clang/Basic/RISCVVTypes.def"
2612+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
2613+
#include "clang/Basic/AMDGPUTypes.def"
26122614
case BuiltinType::ShortAccum:
26132615
case BuiltinType::Accum:
26142616
case BuiltinType::LongAccum:

clang/lib/AST/NSAPI.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,8 @@ NSAPI::getNSNumberFactoryMethodKind(QualType T) const {
453453
#include "clang/Basic/RISCVVTypes.def"
454454
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
455455
#include "clang/Basic/WebAssemblyReferenceTypes.def"
456+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
457+
#include "clang/Basic/AMDGPUTypes.def"
456458
case BuiltinType::BoundMember:
457459
case BuiltinType::UnresolvedTemplate:
458460
case BuiltinType::Dependent:

clang/lib/AST/PrintfFormatString.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,8 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
865865
#include "clang/Basic/RISCVVTypes.def"
866866
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
867867
#include "clang/Basic/WebAssemblyReferenceTypes.def"
868+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
869+
#include "clang/Basic/AMDGPUTypes.def"
868870
#define SIGNED_TYPE(Id, SingletonId)
869871
#define UNSIGNED_TYPE(Id, SingletonId)
870872
#define FLOATING_TYPE(Id, SingletonId)

clang/lib/AST/Type.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3509,6 +3509,10 @@ StringRef BuiltinType::getName(const PrintingPolicy &Policy) const {
35093509
case Id: \
35103510
return Name;
35113511
#include "clang/Basic/WebAssemblyReferenceTypes.def"
3512+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
3513+
case Id: \
3514+
return Name;
3515+
#include "clang/Basic/AMDGPUTypes.def"
35123516
}
35133517

35143518
llvm_unreachable("Invalid builtin type.");
@@ -4778,6 +4782,8 @@ bool Type::canHaveNullability(bool ResultIfUnknown) const {
47784782
#include "clang/Basic/RISCVVTypes.def"
47794783
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
47804784
#include "clang/Basic/WebAssemblyReferenceTypes.def"
4785+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
4786+
#include "clang/Basic/AMDGPUTypes.def"
47814787
case BuiltinType::BuiltinFn:
47824788
case BuiltinType::NullPtr:
47834789
case BuiltinType::IncompleteMatrixIdx:

clang/lib/AST/TypeLoc.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,8 @@ TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec() const {
428428
#include "clang/Basic/RISCVVTypes.def"
429429
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
430430
#include "clang/Basic/WebAssemblyReferenceTypes.def"
431+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
432+
#include "clang/Basic/AMDGPUTypes.def"
431433
case BuiltinType::BuiltinFn:
432434
case BuiltinType::IncompleteMatrixIdx:
433435
case BuiltinType::ArraySection:

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,8 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
865865
return SingletonId; \
866866
}
867867
#include "clang/Basic/WebAssemblyReferenceTypes.def"
868-
868+
case BuiltinType::AMDGPUBufferRsrc:
869+
return CreateType(cast<const BuiltinType>(CGM.getContext().Int128Ty));
869870
case BuiltinType::UChar:
870871
case BuiltinType::Char_U:
871872
Encoding = llvm::dwarf::DW_ATE_unsigned_char;

clang/lib/CodeGen/CGDebugInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ class CGDebugInfo {
8383
#include "clang/Basic/OpenCLExtensionTypes.def"
8484
#define WASM_TYPE(Name, Id, SingletonId) llvm::DIType *SingletonId = nullptr;
8585
#include "clang/Basic/WebAssemblyReferenceTypes.def"
86+
#define AMDGPU_TYPE(Name, Id, SingletonId) llvm::DIType *SingletonId = nullptr;
87+
#include "clang/Basic/AMDGPUTypes.def"
8688

8789
/// Cache of previously constructed Types.
8890
llvm::DenseMap<const void *, llvm::TrackingMDRef> TypeCache;

clang/lib/CodeGen/CodeGenTypes.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,8 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
533533
llvm_unreachable("Unexpected wasm reference builtin type!"); \
534534
} break;
535535
#include "clang/Basic/WebAssemblyReferenceTypes.def"
536+
case BuiltinType::AMDGPUBufferRsrc:
537+
return llvm::PointerType::get(getLLVMContext(), /*AddressSpace=*/8);
536538
case BuiltinType::Dependent:
537539
#define BUILTIN_TYPE(Id, SingletonId)
538540
#define PLACEHOLDER_TYPE(Id, SingletonId) \

clang/lib/CodeGen/ItaniumCXXABI.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3360,6 +3360,8 @@ static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
33603360
#include "clang/Basic/RISCVVTypes.def"
33613361
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
33623362
#include "clang/Basic/WebAssemblyReferenceTypes.def"
3363+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
3364+
#include "clang/Basic/AMDGPUTypes.def"
33633365
case BuiltinType::ShortAccum:
33643366
case BuiltinType::Accum:
33653367
case BuiltinType::LongAccum:

clang/lib/Index/USRGeneration.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,10 @@ void USRGenerator::VisitType(QualType T) {
770770
case BuiltinType::Id: \
771771
Out << "@BT@" << Name; break;
772772
#include "clang/Basic/RISCVVTypes.def"
773+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
774+
case BuiltinType::Id: \
775+
Out << "@BT@" << #Name; break;
776+
#include "clang/Basic/AMDGPUTypes.def"
773777
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
774778
#include "clang/Basic/WebAssemblyReferenceTypes.def"
775779
case BuiltinType::ShortAccum:

clang/lib/Sema/Sema.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,12 @@ void Sema::Initialize() {
497497
#include "clang/Basic/WebAssemblyReferenceTypes.def"
498498
}
499499

500+
if (Context.getTargetInfo().getTriple().isAMDGPU()) {
501+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
502+
addImplicitTypedef(Name, Context.SingletonId);
503+
#include "clang/Basic/AMDGPUTypes.def"
504+
}
505+
500506
if (Context.getTargetInfo().hasBuiltinMSVaList()) {
501507
DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
502508
if (IdResolver.begin(MSVaList) == IdResolver.end())

clang/lib/Sema/SemaExpr.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6169,6 +6169,8 @@ static bool isPlaceholderToRemoveAsArg(QualType type) {
61696169
#include "clang/Basic/RISCVVTypes.def"
61706170
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
61716171
#include "clang/Basic/WebAssemblyReferenceTypes.def"
6172+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
6173+
#include "clang/Basic/AMDGPUTypes.def"
61726174
#define PLACEHOLDER_TYPE(ID, SINGLETON_ID)
61736175
#define BUILTIN_TYPE(ID, SINGLETON_ID) case BuiltinType::ID:
61746176
#include "clang/AST/BuiltinTypes.def"
@@ -20983,6 +20985,8 @@ ExprResult Sema::CheckPlaceholderExpr(Expr *E) {
2098320985
#include "clang/Basic/RISCVVTypes.def"
2098420986
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
2098520987
#include "clang/Basic/WebAssemblyReferenceTypes.def"
20988+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
20989+
#include "clang/Basic/AMDGPUTypes.def"
2098620990
#define BUILTIN_TYPE(Id, SingletonId) case BuiltinType::Id:
2098720991
#define PLACEHOLDER_TYPE(Id, SingletonId)
2098820992
#include "clang/AST/BuiltinTypes.def"

clang/lib/Serialization/ASTCommon.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,11 @@ serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
258258
ID = PREDEF_TYPE_##Id##_ID; \
259259
break;
260260
#include "clang/Basic/WebAssemblyReferenceTypes.def"
261+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
262+
case BuiltinType::Id: \
263+
ID = PREDEF_TYPE_##Id##_ID; \
264+
break;
265+
#include "clang/Basic/AMDGPUTypes.def"
261266
case BuiltinType::BuiltinFn:
262267
ID = PREDEF_TYPE_BUILTIN_FN;
263268
break;

clang/lib/Serialization/ASTReader.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7383,6 +7383,11 @@ QualType ASTReader::GetType(TypeID ID) {
73837383
T = Context.SingletonId; \
73847384
break;
73857385
#include "clang/Basic/WebAssemblyReferenceTypes.def"
7386+
#define AMDGPU_TYPE(Name, Id, SingletonId) \
7387+
case PREDEF_TYPE_##Id##_ID: \
7388+
T = Context.SingletonId; \
7389+
break;
7390+
#include "clang/Basic/AMDGPUTypes.def"
73867391
}
73877392

73887393
assert(!T.isNull() && "Unknown predefined type");
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// REQUIRES: amdgpu-registered-target
2+
// Test without serialization:
3+
// RUN: %clang_cc1 -triple amdgcn -ast-dump -ast-dump-filter __buffer_rsrc_t %s | FileCheck %s
4+
//
5+
// Test with serialization:
6+
// RUN: %clang_cc1 -triple amdgcn -emit-pch -o %t %s
7+
// RUN: %clang_cc1 -x c -triple amdgcn -include-pch %t -ast-dump-all -ast-dump-filter __buffer_rsrc_t /dev/null | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" | FileCheck %s
8+
9+
// CHECK: TypedefDecl {{.*}} implicit __buffer_rsrc_t
10+
// CHECK-NEXT: -BuiltinType {{.*}} '__buffer_rsrc_t'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
// REQUIRES: amdgpu-registered-target
3+
// RUN: %clang_cc1 -triple amdgcn -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s
4+
5+
// CHECK: name: "__buffer_rsrc_t",{{.*}}baseType: ![[BT:[0-9]+]]
6+
// CHECK: [[BT]] = !DIBasicType(name: "__int128", size: 128, encoding: DW_ATE_signed)
7+
void test_locals(void) {
8+
__buffer_rsrc_t k;
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// REQUIRES: amdgpu-registered-target
2+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple amdgcn %s -emit-llvm -o - | FileCheck %s
3+
4+
namespace std { class type_info; };
5+
6+
auto &b = typeid(__buffer_rsrc_t);
7+
8+
// CHECK-DAG: @_ZTSu15__buffer_rsrc_t = {{.*}} c"u15__buffer_rsrc_t\00"
9+
// CHECK-DAG: @_ZTIu15__buffer_rsrc_t = {{.*}} @_ZTVN10__cxxabiv123__fundamental_type_infoE, {{.*}} @_ZTSu15__buffer_rsrc_t
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2+
// REQUIRES: amdgpu-registered-target
3+
// RUN: %clang_cc1 -triple amdgcn-unknown-unknown -target-cpu verde -emit-llvm -o - %s | FileCheck %s --check-prefixes=VERDE
4+
// RUN: %clang_cc1 -triple amdgcn-unknown-unknown -target-cpu tonga -emit-llvm -o - %s | FileCheck %s --check-prefixes=GFX8
5+
// RUN: %clang_cc1 -triple amdgcn-unknown-unknown -target-cpu gfx1100 -emit-llvm -o - %s | FileCheck %s --check-prefixes=GFX11
6+
7+
void foo(__buffer_rsrc_t);
8+
9+
// VERDE-LABEL: @bar(
10+
// VERDE-NEXT: entry:
11+
// VERDE-NEXT: tail call void @foo(ptr addrspace(8) [[RSRC:%.*]]) #[[ATTR2:[0-9]+]]
12+
// VERDE-NEXT: ret void
13+
//
14+
// GFX8-LABEL: @bar(
15+
// GFX8-NEXT: entry:
16+
// GFX8-NEXT: tail call void @foo(ptr addrspace(8) [[RSRC:%.*]]) #[[ATTR2:[0-9]+]]
17+
// GFX8-NEXT: ret void
18+
//
19+
// GFX11-LABEL: @bar(
20+
// GFX11-NEXT: entry:
21+
// GFX11-NEXT: tail call void @foo(ptr addrspace(8) [[RSRC:%.*]]) #[[ATTR2:[0-9]+]]
22+
// GFX11-NEXT: ret void
23+
//
24+
void bar(__buffer_rsrc_t rsrc) {
25+
foo(rsrc);
26+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// REQUIRES: amdgpu-registered-target
2+
// RUN: %clang_cc1 -fsyntax-only -verify -triple amdgcn -Wno-unused-value %s
3+
4+
void foo() {
5+
int n = 100;
6+
__buffer_rsrc_t v = 0; // expected-error {{cannot initialize a variable of type '__buffer_rsrc_t' with an rvalue of type 'int'}}
7+
static_cast<__buffer_rsrc_t>(n); // expected-error {{static_cast from 'int' to '__buffer_rsrc_t' is not allowed}}
8+
dynamic_cast<__buffer_rsrc_t>(n); // expected-error {{invalid target type '__buffer_rsrc_t' for dynamic_cast; target type must be a reference or pointer type to a defined class}}
9+
reinterpret_cast<__buffer_rsrc_t>(n); // expected-error {{reinterpret_cast from 'int' to '__buffer_rsrc_t' is not allowed}}
10+
int c(v); // expected-error {{cannot initialize a variable of type 'int' with an lvalue of type '__buffer_rsrc_t'}}
11+
}

clang/tools/libclang/CIndex.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,6 +1643,8 @@ bool CursorVisitor::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
16431643
#include "clang/Basic/RISCVVTypes.def"
16441644
#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
16451645
#include "clang/Basic/WebAssemblyReferenceTypes.def"
1646+
#define AMDGPU_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
1647+
#include "clang/Basic/AMDGPUTypes.def"
16461648
#define BUILTIN_TYPE(Id, SingletonId)
16471649
#define SIGNED_TYPE(Id, SingletonId) case BuiltinType::Id:
16481650
#define UNSIGNED_TYPE(Id, SingletonId) case BuiltinType::Id:

0 commit comments

Comments
 (0)