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
2
3
// 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
4
6
5
7
// NOTE: Itanium ABI for C++ requires Clang to generate 2 constructors types to support polymorphism:
6
8
// - C1 - Complete object constructor - constructs the complete object, including virtual base classes.
@@ -23,20 +25,20 @@ export void foo() {
23
25
// CHECK: %"class.hlsl::RWByteAddressBuffer" = type { target("dx.RawBuffer", i8, 1, 0) }
24
26
// CHECK: %"class.hlsl::RasterizerOrderedByteAddressBuffer" = type { target("dx.RawBuffer", i8, 1, 1) }
25
27
26
- // CHECK: @_ZL4Buf1 = internal global %"class.hlsl::ByteAddressBuffer" poison, align 4
28
+ // CHECK: @Buf1 = internal global %"class.hlsl::ByteAddressBuffer" poison, align 4
27
29
// 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
29
31
// CHECK: @[[Buf2Str:.*]] = private unnamed_addr constant [5 x i8] c"Buf2\00", align 1
30
32
31
33
// Buf1 initialization part 1 - global init function that calls ByteAddressBuffer::__createFromBinding
32
34
// CHECK: define internal void @__cxx_global_var_init()
33
35
// 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]])
36
38
37
39
// 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,
40
42
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name)
41
43
// CHECK: %[[Tmp1:.*]] = alloca %"class.hlsl::ByteAddressBuffer", align 4
42
44
// CHECK: %[[Handle1:.*]] = call target("dx.RawBuffer", i8, 0, 0)
@@ -48,12 +50,12 @@ export void foo() {
48
50
// Buf2 initialization part 1 - global init function that calls RWByteAddressBuffer::__createFromImplicitBinding
49
51
// CHECK: define internal void @__cxx_global_var_init.1()
50
52
// 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]])
53
55
54
56
// 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,
57
59
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name)
58
60
// CHECK: %[[Tmp2:.*]] = alloca %"class.hlsl::RWByteAddressBuffer", align 4
59
61
// CHECK: %[[Handle2:.*]] = call target("dx.RawBuffer", i8, 1, 0)
@@ -64,20 +66,20 @@ export void foo() {
64
66
65
67
// Buf3 initialization part 1 - local variable declared in function foo() is initialized by
66
68
// RasterizerOrderedByteAddressBuffer C1 default constructor
67
- // CHECK: define void @_Z3foov ()
69
+ // CHECK: define void @foo ()
68
70
// CHECK-NEXT: entry:
69
71
// 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)
71
73
72
74
// Buf3 initialization part 2 - body of RasterizerOrderedByteAddressBuffer default C1 constructor that
73
75
// 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 )
76
78
// CHECK-NEXT: ret void
77
79
78
80
// Buf3 initialization part 3 - body of RasterizerOrderedByteAddressBuffer default C2 constructor that
79
81
// 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)
81
83
// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RasterizerOrderedByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0
82
84
// CHECK: store target("dx.RawBuffer", i8, 1, 1) poison, ptr %__handle, align 4
83
85
0 commit comments