Skip to content

Commit 7782eea

Browse files
committed
Update tests to use llvm-cxxfilt to have unmangled names in the baselines
1 parent e7d6ee6 commit 7782eea

File tree

7 files changed

+71
-63
lines changed

7 files changed

+71
-63
lines changed

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3767,7 +3767,7 @@ bool SemaHLSL::initGlobalResourceDecl(VarDecl *VD) {
37673767
SpaceNo = RBA->getSpaceNumber();
37683768
}
37693769

3770-
// Find correct initialization method and create its argumentss.
3770+
// Find correct initialization method and create its arguments.
37713771
QualType ResourceTy = VD->getType();
37723772
CXXRecordDecl *ResourceDecl = ResourceTy->getAsCXXRecordDecl();
37733773
CXXMethodDecl *CreateMethod = nullptr;

clang/test/CodeGenHLSL/GlobalConstructorLib.hlsl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s --check-prefixes=CHECK,NOINLINE
2-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -O0 %s -o - | FileCheck %s --check-prefixes=CHECK,INLINE
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes %s -o - | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,NOINLINE
2+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -O0 %s -o - | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,INLINE
33

44
// Make sure global variable for ctors exist for lib profile.
55
// CHECK:@llvm.global_ctors
@@ -13,7 +13,7 @@ void FirstEntry() {}
1313
// CHECK: define void @FirstEntry()
1414
// CHECK-NEXT: entry:
1515
// NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl()
16-
// NOINLINE-NEXT: call void @_Z10FirstEntryv()
16+
// NOINLINE-NEXT: call void @FirstEntry()
1717
// Verify inlining leaves only calls to "llvm." intrinsics
1818
// INLINE-NOT: call {{[^@]*}} @{{[^l][^l][^v][^m][^\.]}}
1919
// CHECK: ret void
@@ -25,18 +25,18 @@ void SecondEntry() {}
2525
// CHECK: define void @SecondEntry()
2626
// CHECK-NEXT: entry:
2727
// NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl()
28-
// NOINLINE-NEXT: call void @_Z11SecondEntryv()
28+
// NOINLINE-NEXT: call void @SecondEntry()
2929
// Verify inlining leaves only calls to "llvm." intrinsics
3030
// INLINE-NOT: call {{[^@]*}} @{{[^l][^l][^v][^m][^\.]}}
3131
// CHECK: ret void
3232

3333

3434
// Verify the constructors are alwaysinline
3535
// NOINLINE: ; Function Attrs: {{.*}}alwaysinline
36-
// NOINLINE-NEXT: define linkonce_odr hidden void @_ZN4hlsl8RWBufferIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) %this){{.*}} [[CtorAttr:\#[0-9]+]]
36+
// NOINLINE-NEXT: define linkonce_odr hidden void @hlsl::RWBuffer<float>::RWBuffer()(ptr noundef nonnull align 4 dereferenceable(4) %this){{.*}} [[CtorAttr:\#[0-9]+]]
3737

3838
// NOINLINE: ; Function Attrs: {{.*}}alwaysinline
39-
// NOINLINE-NEXT: define linkonce_odr hidden void @_ZN4hlsl8RWBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this){{.*}} [[CtorAttr:\#[0-9]+]]
39+
// NOINLINE-NEXT: define linkonce_odr hidden void @hlsl::RWBuffer<float>::RWBuffer()(ptr noundef nonnull align 4 dereferenceable(4) %this){{.*}} [[CtorAttr:\#[0-9]+]]
4040

4141
// NOINLINE: ; Function Attrs: {{.*}}alwaysinline
4242
// NOINLINE-NEXT: define internal void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl() [[InitAttr:\#[0-9]+]]

clang/test/CodeGenHLSL/resources/ByteAddressBuffers-constructors.hlsl

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes -o - %s | \
2+
// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
23
// FIXME: SPIR-V codegen of llvm.spv.resource.handlefrombinding and resource types is not yet implemented
3-
// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV
4+
// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | \
5+
// llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV
46

57
// NOTE: Itanium ABI for C++ requires Clang to generate 2 constructors types to support polymorphism:
68
// - C1 - Complete object constructor - constructs the complete object, including virtual base classes.
@@ -23,20 +25,20 @@ export void foo() {
2325
// CHECK: %"class.hlsl::RWByteAddressBuffer" = type { target("dx.RawBuffer", i8, 1, 0) }
2426
// CHECK: %"class.hlsl::RasterizerOrderedByteAddressBuffer" = type { target("dx.RawBuffer", i8, 1, 1) }
2527

26-
// CHECK: @_ZL4Buf1 = internal global %"class.hlsl::ByteAddressBuffer" poison, align 4
28+
// CHECK: @Buf1 = internal global %"class.hlsl::ByteAddressBuffer" poison, align 4
2729
// CHECK: @[[Buf1Str:.*]] = private unnamed_addr constant [5 x i8] c"Buf1\00", align 1
28-
// CHECK: @_ZL4Buf2 = internal global %"class.hlsl::RWByteAddressBuffer" poison, align 4
30+
// CHECK: @Buf2 = internal global %"class.hlsl::RWByteAddressBuffer" poison, align 4
2931
// CHECK: @[[Buf2Str:.*]] = private unnamed_addr constant [5 x i8] c"Buf2\00", align 1
3032

3133
// Buf1 initialization part 1 - global init function that calls ByteAddressBuffer::__createFromBinding
3234
// CHECK: define internal void @__cxx_global_var_init()
3335
// CHECK-NEXT: entry:
34-
// CHECK-NEXT: call void @_ZN4hlsl17ByteAddressBuffer19__createFromBindingEjjijPKc(ptr {{.*}} @_ZL4Buf1,
35-
// CHECK-SAME: i32 noundef 1, i32 noundef 2, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf1Str]])
36+
// CHECK-NEXT: call void @hlsl::ByteAddressBuffer::__createFromBinding(unsigned int, unsigned int, int, unsigned int, char const*)
37+
// CHECK-SAME: (ptr {{.*}} @Buf1, i32 noundef 1, i32 noundef 2, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf1Str]])
3638

3739
// Buf1 initialization part 2 - body of ByteAddressBuffer::__createFromBinding
38-
// CHECK: define {{.*}} void @_ZN4hlsl17ByteAddressBuffer19__createFromBindingEjjijPKc(
39-
// CHECK-SAME: ptr {{.*}} sret(%"class.hlsl::ByteAddressBuffer") align 4 %[[RetValue1:.*]], i32 noundef %registerNo,
40+
// CHECK: define {{.*}} void @hlsl::ByteAddressBuffer::__createFromBinding(unsigned int, unsigned int, int, unsigned int, char const*)
41+
// CHECK-SAME: (ptr {{.*}} sret(%"class.hlsl::ByteAddressBuffer") align 4 %[[RetValue1:.*]], i32 noundef %registerNo,
4042
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name)
4143
// CHECK: %[[Tmp1:.*]] = alloca %"class.hlsl::ByteAddressBuffer", align 4
4244
// CHECK: %[[Handle1:.*]] = call target("dx.RawBuffer", i8, 0, 0)
@@ -48,12 +50,12 @@ export void foo() {
4850
// Buf2 initialization part 1 - global init function that calls RWByteAddressBuffer::__createFromImplicitBinding
4951
// CHECK: define internal void @__cxx_global_var_init.1()
5052
// CHECK-NEXT: entry:
51-
// CHECK-NEXT: call void @_ZN4hlsl19RWByteAddressBuffer27__createFromImplicitBindingEjjijPKc(ptr {{.*}} @_ZL4Buf2,
52-
// CHECK-SAME: i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf2Str]])
53+
// CHECK-NEXT: call void @hlsl::RWByteAddressBuffer::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)
54+
// CHECK-SAME: (ptr {{.*}} @Buf2, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf2Str]])
5355

5456
// Buf2 initialization part 2 - body of RWByteAddressBuffer::__createFromImplicitBinding
55-
// CHECK: define hidden void @_ZN4hlsl19RWByteAddressBuffer27__createFromImplicitBindingEjjijPKc(
56-
// CHECK-SAME: ptr {{.*}} sret(%"class.hlsl::RWByteAddressBuffer") align 4 %[[RetValue2:.*]], i32 noundef %orderId,
57+
// CHECK: define hidden void @hlsl::RWByteAddressBuffer::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)
58+
// CHECK-SAME: (ptr {{.*}} sret(%"class.hlsl::RWByteAddressBuffer") align 4 %[[RetValue2:.*]], i32 noundef %orderId,
5759
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name)
5860
// CHECK: %[[Tmp2:.*]] = alloca %"class.hlsl::RWByteAddressBuffer", align 4
5961
// CHECK: %[[Handle2:.*]] = call target("dx.RawBuffer", i8, 1, 0)
@@ -64,20 +66,20 @@ export void foo() {
6466

6567
// Buf3 initialization part 1 - local variable declared in function foo() is initialized by
6668
// RasterizerOrderedByteAddressBuffer C1 default constructor
67-
// CHECK: define void @_Z3foov()
69+
// CHECK: define void @foo()
6870
// CHECK-NEXT: entry:
6971
// CHECK-NEXT: %Buf3 = alloca %"class.hlsl::RasterizerOrderedByteAddressBuffer", align 4
70-
// CHECK-NEXT: call void @_ZN4hlsl34RasterizerOrderedByteAddressBufferC1Ev(ptr noundef nonnull align 4 dereferenceable(4) %Buf3)
72+
// CHECK-NEXT: call void @hlsl::RasterizerOrderedByteAddressBuffer::RasterizerOrderedByteAddressBuffer()(ptr {{.*}} %Buf3)
7173

7274
// Buf3 initialization part 2 - body of RasterizerOrderedByteAddressBuffer default C1 constructor that
7375
// calls the default C2 constructor
74-
// CHECK: define linkonce_odr hidden void @_ZN4hlsl34RasterizerOrderedByteAddressBufferC1Ev(ptr noundef nonnull align 4 dereferenceable(4) %this)
75-
// CHECK: call void @_ZN4hlsl34RasterizerOrderedByteAddressBufferC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %{{.*}})
76+
// CHECK: define linkonce_odr hidden void @hlsl::RasterizerOrderedByteAddressBuffer::RasterizerOrderedByteAddressBuffer()(ptr {{.*}} %this)
77+
// CHECK: call void @hlsl::RasterizerOrderedByteAddressBuffer::RasterizerOrderedByteAddressBuffer()(ptr {{.*}} %this1)
7678
// CHECK-NEXT: ret void
7779

7880
// Buf3 initialization part 3 - body of RasterizerOrderedByteAddressBuffer default C2 constructor that
7981
// initializes handle to poison
80-
// CHECK: define linkonce_odr hidden void @_ZN4hlsl34RasterizerOrderedByteAddressBufferC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this)
82+
// CHECK: define linkonce_odr hidden void @hlsl::RasterizerOrderedByteAddressBuffer::RasterizerOrderedByteAddressBuffer()(ptr {{.*}} %this)
8183
// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RasterizerOrderedByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0
8284
// CHECK: store target("dx.RawBuffer", i8, 1, 1) poison, ptr %__handle, align 4
8385

clang/test/CodeGenHLSL/resources/RWBuffer-constructor.hlsl

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes -o - %s | \
2+
// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
23
// FIXME: SPIR-V codegen of llvm.spv.resource.handlefrombinding and resource types is not yet implemented
3-
// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV
4+
// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | \
5+
// llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV
46

57
// NOTE: Itanium ABI for C++ requires Clang to generate 2 constructors types to support polymorphism:
68
// - C1 - Complete object constructor - constructs the complete object, including virtual base classes.
@@ -23,20 +25,20 @@ export void foo() {
2325
// CHECK: %"class.hlsl::RWBuffer.0" = type { target("dx.TypedBuffer", double, 1, 0, 0) }
2426
// CHECK: %"class.hlsl::RWBuffer.1" = type { target("dx.TypedBuffer", i32, 1, 0, 1) }
2527

26-
// CHECK: @_ZL4Buf1 = internal global %"class.hlsl::RWBuffer" poison, align 4
28+
// CHECK: @Buf1 = internal global %"class.hlsl::RWBuffer" poison, align 4
2729
// CHECK: @[[Buf1Str:.*]] = private unnamed_addr constant [5 x i8] c"Buf1\00", align 1
28-
// CHECK: @_ZL4Buf2 = internal global %"class.hlsl::RWBuffer.0" poison, align 4
30+
// CHECK: @Buf2 = internal global %"class.hlsl::RWBuffer.0" poison, align 4
2931
// CHECK: @[[Buf2Str:.*]] = private unnamed_addr constant [5 x i8] c"Buf2\00", align 1
3032

3133
// Buf1 initialization part 1 - global init function that calls RWBuffer<float>::__createFromBinding
3234
// CHECK: define internal void @__cxx_global_var_init()
3335
// CHECK-NEXT: entry:
34-
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIfE19__createFromBindingEjjijPKc(ptr {{.*}} sret(%"class.hlsl::RWBuffer") align 4 @_ZL4Buf1,
35-
// CHECK-SAME: i32 noundef 5, i32 noundef 3, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf1Str]])
36+
// CHECK-NEXT: call void @hlsl::RWBuffer<float>::__createFromBinding(unsigned int, unsigned int, int, unsigned int, char const*)
37+
// CHECK-SAME: (ptr {{.*}} sret(%"class.hlsl::RWBuffer") align 4 @Buf1, i32 noundef 5, i32 noundef 3, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf1Str]])
3638

3739
// Buf1 initialization part 2 - body of RWBuffer<float>::__createFromBinding
38-
// CHECK: define {{.*}} void @_ZN4hlsl8RWBufferIfE19__createFromBindingEjjijPKc(
39-
// CHECK-SAME: ptr {{.*}} sret(%"class.hlsl::RWBuffer") align 4 %[[RetValue1:.*]], i32 noundef %registerNo,
40+
// CHECK: define {{.*}} void @hlsl::RWBuffer<float>::__createFromBinding(unsigned int, unsigned int, int, unsigned int, char const*)
41+
// CHECK-SAME: (ptr {{.*}} sret(%"class.hlsl::RWBuffer") align 4 %[[RetValue1:.*]], i32 noundef %registerNo,
4042
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name)
4143
// CHECK: %[[Tmp1:.*]] = alloca %"class.hlsl::RWBuffer", align 4
4244
// CHECK: %[[Handle1:.*]] = call target("dx.TypedBuffer", float, 1, 0, 0)
@@ -48,12 +50,12 @@ export void foo() {
4850
// Buf2 initialization part 1 - global init function that RWBuffer<float>::__createFromImplicitBinding
4951
// CHECK: define internal void @__cxx_global_var_init.1()
5052
// CHECK-NEXT: entry:
51-
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIdE27__createFromImplicitBindingEjjijPKc(ptr {{.*}} @_ZL4Buf2,
52-
// CHECK-SAME: i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf2Str]])
53+
// CHECK-NEXT: call void @hlsl::RWBuffer<double>::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)
54+
// CHECK-SAME: (ptr {{.*}} @Buf2, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0, ptr noundef @[[Buf2Str]])
5355

5456
// Buf2 initialization part 2 - body of RWBuffer<float>::__createFromImplicitBinding call
55-
// CHECK: define linkonce_odr hidden void @_ZN4hlsl8RWBufferIdE27__createFromImplicitBindingEjjijPKc(
56-
// CHECK-SAME: ptr {{.*}} sret(%"class.hlsl::RWBuffer.0") align 4 %[[RetValue2:.*]], i32 noundef %orderId,
57+
// CHECK: define linkonce_odr hidden void @hlsl::RWBuffer<double>::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)
58+
// CHECK-SAME: (ptr {{.*}} sret(%"class.hlsl::RWBuffer.0") align 4 %[[RetValue2:.*]], i32 noundef %orderId,
5759
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name)
5860
// CHECK: %[[Tmp2:.*]] = alloca %"class.hlsl::RWBuffer.0", align 4
5961
// CHECK: %[[Handle2:.*]] = call target("dx.TypedBuffer", double, 1, 0, 0)
@@ -63,17 +65,17 @@ export void foo() {
6365
// CHECK-DXIL: call void @llvm.memcpy.p0.p0.i32(ptr align 4 %[[RetValue2]], ptr align 4 %[[Tmp2]], i32 4, i1 false)
6466

6567
// Buf3 initialization part 1 - local variable declared in function foo() is initialized by RWBuffer<int> C1 default constructor
66-
// CHECK: define void @_Z3foov()
68+
// CHECK: define void @foo()
6769
// CHECK-NEXT: entry:
6870
// CHECK-NEXT: %Buf3 = alloca %"class.hlsl::RWBuffer.1", align 4
69-
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIiEC1Ev(ptr {{.*}} %Buf3)
71+
// CHECK-NEXT: call void @hlsl::RWBuffer<int>::RWBuffer()(ptr {{.*}} %Buf3)
7072

7173
// Buf3 initialization part 2 - body of RWBuffer<int> default C1 constructor that calls the default C2 constructor
72-
// CHECK: define linkonce_odr hidden void @_ZN4hlsl8RWBufferIiEC1Ev(ptr {{.*}} %this)
73-
// CHECK: call void @_ZN4hlsl8RWBufferIiEC2Ev(ptr {{.*}} %{{.*}})
74+
// CHECK: define linkonce_odr hidden void @hlsl::RWBuffer<int>::RWBuffer()(ptr {{.*}} %this)
75+
// CHECK: call void @hlsl::RWBuffer<int>::RWBuffer()(ptr {{.*}} %{{.*}})
7476

7577
// Buf3 initialization part 3 - body of RWBuffer<int> default C2 constructor that initializes handle to poison
76-
// CHECK: define linkonce_odr hidden void @_ZN4hlsl8RWBufferIiEC2Ev(ptr {{.*}} %this)
78+
// CHECK: define linkonce_odr hidden void @hlsl::RWBuffer<int>::RWBuffer()(ptr {{.*}} %this)
7779
// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer.1", ptr %{{.*}}, i32 0, i32 0
7880
// CHECK-NEXT: store target("dx.TypedBuffer", i32, 1, 0, 1) poison, ptr %__handle, align 4
7981

0 commit comments

Comments
 (0)