https://github.com/joaosaffran updated https://github.com/llvm/llvm-project/pull/116699
>From c3b3c87db9b6a47bea9ed69575d4a9a728d1b154 Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Sat, 9 Nov 2024 01:34:16 +0000 Subject: [PATCH 1/6] adding definition --- clang/lib/Sema/HLSLExternalSemaSource.cpp | 10 +++++ .../test/AST/HLSL/ByteAddressBuffer-AST.hlsl | 41 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp index 6eb24c578f602c..d4d800a311e52d 100644 --- a/clang/lib/Sema/HLSLExternalSemaSource.cpp +++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp @@ -531,6 +531,16 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { .addArraySubscriptOperators() .completeDefinition(); }); + + Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "ByteAddressBuffer") + .Record; + onCompletion(Decl, [this](CXXRecordDecl *Decl) { + setupBufferType(Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer, + /*IsROV=*/true, + /*RawBuffer=*/true) + .addArraySubscriptOperators() + .completeDefinition(); + }); } void HLSLExternalSemaSource::onCompletion(CXXRecordDecl *Record, diff --git a/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl b/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl new file mode 100644 index 00000000000000..013974369d033a --- /dev/null +++ b/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl @@ -0,0 +1,41 @@ +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY %s | FileCheck -check-prefix=EMPTY %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump %s | FileCheck %s + + +// EMPTY: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit <undeserialized declarations> class ByteAddressBuffer +// EMPTY-NEXT: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final + +// There should be no more occurrences of ByteAddressBuffer +// EMPTY-NOT: {{[^[:alnum:]]}}ByteAddressBuffer + +#ifndef EMPTY + +ByteAddressBuffer Buffer; + +#endif + +// CHECK: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit referenced <undeserialized declarations> class ByteAddressBuffer definition + + +// CHECK: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final +// CHECK-NEXT: FieldDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit h '__hlsl_resource_t +// CHECK-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] +// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]] +// CHECK-SAME{LITERAL}: [[hlsl::contained_type(char8_t)]] +// CHECK-NEXT: HLSLResourceAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit RawBuffer + +// CHECK: CXXMethodDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> operator[] 'char8_t &const (unsigned int) const' +// CHECK-NEXT: ParmVarDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> Idx 'unsigned int' +// CHECK-NEXT: CompoundStmt 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> +// CHECK-NEXT: ReturnStmt 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> +// CHECK-NEXT: MemberExpr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> 'char8_t' lvalue .e 0x{{[0-9A-Fa-f]+}} +// CHECK-NEXT: CXXThisExpr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> 'const hlsl::ByteAddressBuffer' lvalue implicit this +// CHECK-NEXT: AlwaysInlineAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit always_inline + +// CHECK-NEXT: CXXMethodDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> operator[] 'char8_t &(unsigned int)' +// CHECK-NEXT: ParmVarDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> Idx 'unsigned int' +// CHECK-NEXT: CompoundStmt 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> +// CHECK-NEXT: ReturnStmt 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> +// CHECK-NEXT: MemberExpr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> 'char8_t' lvalue .e 0x{{[0-9A-Fa-f]+}} +// CHECK-NEXT: CXXThisExpr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> 'hlsl::ByteAddressBuffer' lvalue implicit this +// CHECK-NEXT: AlwaysInlineAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit always_inline >From 9d773dbf0d94fbfcd324c0803bb0b9b34f08564b Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Mon, 18 Nov 2024 21:11:47 +0000 Subject: [PATCH 2/6] adding tests --- clang/test/AST/HLSL/ByteAddressBuffer-AST.ll | 13 +++++++++++++ .../CodeGenHLSL/builtins/ByteAddressBuffer.hlsl | 8 ++++++++ 2 files changed, 21 insertions(+) create mode 100644 clang/test/AST/HLSL/ByteAddressBuffer-AST.ll create mode 100644 clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl diff --git a/clang/test/AST/HLSL/ByteAddressBuffer-AST.ll b/clang/test/AST/HLSL/ByteAddressBuffer-AST.ll new file mode 100644 index 00000000000000..7df06100d69fe5 --- /dev/null +++ b/clang/test/AST/HLSL/ByteAddressBuffer-AST.ll @@ -0,0 +1,13 @@ +; ModuleID = '/workspace/llvm-project/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl' +source_filename = "/workspace/llvm-project/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl" +target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64" +target triple = "dxilv1.0-pc-shadermodel6.0-library" + +!llvm.module.flags = !{!0, !1} +!dx.valver = !{!2} +!llvm.ident = !{!3} + +!0 = !{i32 1, !"wchar_size", i32 4} +!1 = !{i32 4, !"dx.disable_optimizations", i32 1} +!2 = !{i32 1, i32 8} +!3 = !{!"clang version 20.0.0git (https://github.com/joaosaffran/llvm-project.git c3b3c87db9b6a47bea9ed69575d4a9a728d1b154)"} diff --git a/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl new file mode 100644 index 00000000000000..348f3d29d66aef --- /dev/null +++ b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm %s -o - | FileCheck %s + +// CHECK: class.hlsl::ByteAddressBuffer" = type <{ target("dx.RawBuffer", i8, 1, 1) +// CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_ByteAddressBuffer.hlsl, ptr null }] + +ByteAddressBuffer Buffer; + +//CHECK: define internal void @_GLOBAL__sub_I_ByteAddressBuffer.hlsl() >From 5db07604051346df20ee3f726e033041b904b206 Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Mon, 18 Nov 2024 22:11:28 +0000 Subject: [PATCH 3/6] removing useless file --- clang/test/AST/HLSL/ByteAddressBuffer-AST.ll | 13 ------------- .../ByteAddressBuffer-contructor.hlsl | 19 +++++++++++++++++++ .../builtins/ByteAddressBuffer.hlsl | 8 -------- 3 files changed, 19 insertions(+), 21 deletions(-) delete mode 100644 clang/test/AST/HLSL/ByteAddressBuffer-AST.ll create mode 100644 clang/test/CodeGenHLSL/builtins/ByteAddressBuffer-contructor.hlsl delete mode 100644 clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl diff --git a/clang/test/AST/HLSL/ByteAddressBuffer-AST.ll b/clang/test/AST/HLSL/ByteAddressBuffer-AST.ll deleted file mode 100644 index 7df06100d69fe5..00000000000000 --- a/clang/test/AST/HLSL/ByteAddressBuffer-AST.ll +++ /dev/null @@ -1,13 +0,0 @@ -; ModuleID = '/workspace/llvm-project/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl' -source_filename = "/workspace/llvm-project/clang/test/AST/HLSL/ByteAddressBuffer-AST.hlsl" -target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64" -target triple = "dxilv1.0-pc-shadermodel6.0-library" - -!llvm.module.flags = !{!0, !1} -!dx.valver = !{!2} -!llvm.ident = !{!3} - -!0 = !{i32 1, !"wchar_size", i32 4} -!1 = !{i32 4, !"dx.disable_optimizations", i32 1} -!2 = !{i32 1, i32 8} -!3 = !{!"clang version 20.0.0git (https://github.com/joaosaffran/llvm-project.git c3b3c87db9b6a47bea9ed69575d4a9a728d1b154)"} diff --git a/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer-contructor.hlsl b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer-contructor.hlsl new file mode 100644 index 00000000000000..230701a5a8139a --- /dev/null +++ b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer-contructor.hlsl @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-DXIL +// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV + +// NOTE: SPIRV codegen for resource types is not yet implemented + +ByteAddressBuffer Buffer: register(u0, space0); + +// CHECK: class.hlsl::ByteAddressBuffer" = type <{ target("dx.RawBuffer", i8, 1, 1), i8, [3 x i8] }> + +// CHECK: @Buffer = global %"class.hlsl::ByteAddressBuffer" zeroinitializer, align 4 + +// CHECK: define internal void @_GLOBAL__sub_I_ByteAddressBuffer_contructor.hlsl() +// CHECK: entry: +// CHECK: call void @_init_resource_bindings() + +// CHECK: define internal void @_init_resource_bindings() { +// CHECK-NEXT: entry: +// CHECK-DXIL-NEXT: %Buffer_h = call target("dx.RawBuffer", i8, 1, 1) @llvm.dx.handle.fromBinding.tdx.RawBuffer_i8_1_1t(i32 0, i32 0, i32 1, i32 0, i1 false) +// CHECK-DXIL-NEXT: store target("dx.RawBuffer", i8, 1, 1) %Buffer_h, ptr @Buffer, align 4 diff --git a/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl deleted file mode 100644 index 348f3d29d66aef..00000000000000 --- a/clang/test/CodeGenHLSL/builtins/ByteAddressBuffer.hlsl +++ /dev/null @@ -1,8 +0,0 @@ -// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm %s -o - | FileCheck %s - -// CHECK: class.hlsl::ByteAddressBuffer" = type <{ target("dx.RawBuffer", i8, 1, 1) -// CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_ByteAddressBuffer.hlsl, ptr null }] - -ByteAddressBuffer Buffer; - -//CHECK: define internal void @_GLOBAL__sub_I_ByteAddressBuffer.hlsl() >From c4a448e91124d3cbf8e53e5b7bf1f3d2c432ebc6 Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Tue, 19 Nov 2024 17:02:59 +0000 Subject: [PATCH 4/6] fixing tests --- clang/lib/AST/DeclBase.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 48b91dca1f6d91..ad253bf3dfafc5 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -1467,6 +1467,8 @@ DeclContext *DeclContext::getPrimaryContext() { return Def; return this; + case Decl::CXXRecord: + return this; case Decl::ObjCCategory: return this; >From 71f5750b6b008ffcd2245e344df8a59170dd400e Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Tue, 19 Nov 2024 17:32:40 +0000 Subject: [PATCH 5/6] Revert "fixing tests" This reverts commit c4a448e91124d3cbf8e53e5b7bf1f3d2c432ebc6. --- clang/lib/AST/DeclBase.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index ad253bf3dfafc5..48b91dca1f6d91 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -1467,8 +1467,6 @@ DeclContext *DeclContext::getPrimaryContext() { return Def; return this; - case Decl::CXXRecord: - return this; case Decl::ObjCCategory: return this; >From c3405e1d275ad1187ffee9b21df4fbf4217aa9b8 Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Tue, 19 Nov 2024 18:35:50 +0000 Subject: [PATCH 6/6] adding new CXXRecord decl primary context --- clang/lib/AST/DeclBase.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 48b91dca1f6d91..f0de04894e8702 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -1474,6 +1474,11 @@ DeclContext *DeclContext::getPrimaryContext() { case Decl::ObjCCategoryImpl: return this; + case Decl::CXXRecord: + if (auto *OPD = dyn_cast<CXXRecordDecl>(this)) + if (auto *Def = OPD->getDefinition()) + return Def; + return this; default: if (getDeclKind() >= Decl::firstTag && getDeclKind() <= Decl::lastTag) { // If this is a tag type that has a definition or is currently _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits