Skip to content

Commit cecd1e4

Browse files
committed
simplify constructor tests
1 parent e4369aa commit cecd1e4

File tree

3 files changed

+12
-117
lines changed

3 files changed

+12
-117
lines changed

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

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,7 @@ export void foo() {
4747
// Buf2 initialization part 2 - body of RWByteAddressBuffer C1 constructor with implicit binding that calls the C2 constructor
4848
// CHECK: define linkonce_odr void @_ZN4hlsl19RWByteAddressBufferC1Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this,
4949
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId)
50-
// CHECK-NEXT: entry:
51-
// CHECK-NEXT: %this.addr = alloca ptr, align 4
52-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
53-
// CHECK-NEXT: %range.addr = alloca i32, align 4
54-
// CHECK-NEXT: %index.addr = alloca i32, align 4
55-
// CHECK-NEXT: %orderId.addr = alloca i32, align 4
56-
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
57-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
58-
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
59-
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
60-
// CHECK-NEXT: store i32 %orderId, ptr %orderId.addr, align 4
61-
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
62-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
63-
// CHECK-NEXT: %1 = load i32, ptr %range.addr, align 4
64-
// CHECK-NEXT: %2 = load i32, ptr %index.addr, align 4
65-
// CHECK-NEXT: %3 = load i32, ptr %orderId.addr, align 4
66-
// CHECK-NEXT: call void @_ZN4hlsl19RWByteAddressBufferC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this1, i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #4
67-
// CHECK-NEXT: ret void
50+
// CHECK: call void @_ZN4hlsl19RWByteAddressBufferC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this1, i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #4
6851

6952
// Buf3 initialization part 1 - local variable declared in function foo() is initialized by
7053
// RasterizerOrderedByteAddressBuffer C1 default constructor
@@ -87,32 +70,14 @@ export void foo() {
8770
// CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false)
8871
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::ByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0
8972
// CHECK-DXIL-NEXT: store target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]], ptr %__handle, align 4
90-
// CHECK-NEXT: ret void
9173

9274
// Buf2 initialization part 3 - body of RWByteAddressBuffer C2 constructor with implicit binding that initializes
9375
// handle with @llvm.dx.resource.handlefromimplicitbinding
9476
// CHECK: define linkonce_odr void @_ZN4hlsl19RWByteAddressBufferC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this,
9577
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId) unnamed_addr #1 align 2 {
96-
// CHECK-NEXT: entry:
97-
// CHECK-NEXT: %this.addr = alloca ptr, align 4
98-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
99-
// CHECK-NEXT: %range.addr = alloca i32, align 4
100-
// CHECK-NEXT: %index.addr = alloca i32, align 4
101-
// CHECK-NEXT: %orderId.addr = alloca i32, align 4
102-
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
103-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
104-
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
105-
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
106-
// CHECK-NEXT: store i32 %orderId, ptr %orderId.addr, align 4
107-
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
108-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
109-
// CHECK-NEXT: %1 = load i32, ptr %range.addr, align 4
110-
// CHECK-NEXT: %2 = load i32, ptr %index.addr, align 4
111-
// CHECK-NEXT: %3 = load i32, ptr %orderId.addr, align 4
112-
// CHECK-NEXT: %4 = call target("dx.RawBuffer", i8, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_i8_1_0t(i32 %3, i32 %0, i32 %1, i32 %2, i1 false)
78+
// CHECK: %[[HANDLE:.*]] = call target("dx.RawBuffer", i8, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_i8_1_0t(i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false)
11379
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %this1, i32 0, i32 0
114-
// CHECK-NEXT: store target("dx.RawBuffer", i8, 1, 0) %4, ptr %__handle, align 4
115-
// CHECK-NEXT: ret void
80+
// CHECK-NEXT: store target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], ptr %__handle, align 4
11681

11782
// Buf3 initialization part 3 - body of RasterizerOrderedByteAddressBuffer default C2 constructor that
11883
// initializes handle to poison

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

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,7 @@ export void foo() {
4747
// Buf2 initialization part 2 - body of RWBuffer<float> C1 constructor with implicit binding that calls the C2 constructor
4848
// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIdEC1Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this,
4949
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId)
50-
// CHECK-NEXT: entry:
51-
// CHECK-NEXT: %this.addr = alloca ptr, align 4
52-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
53-
// CHECK-NEXT: %range.addr = alloca i32, align 4
54-
// CHECK-NEXT: %index.addr = alloca i32, align 4
55-
// CHECK-NEXT: %orderId.addr = alloca i32, align 4
56-
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
57-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
58-
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
59-
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
60-
// CHECK-NEXT: store i32 %orderId, ptr %orderId.addr, align 4
61-
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
62-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
63-
// CHECK-NEXT: %1 = load i32, ptr %range.addr, align 4
64-
// CHECK-NEXT: %2 = load i32, ptr %index.addr, align 4
65-
// CHECK-NEXT: %3 = load i32, ptr %orderId.addr, align 4
66-
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIdEC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this1, i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #4
67-
// CHECK-NEXT: ret void
50+
// CHECK: call void @_ZN4hlsl8RWBufferIdEC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}) #4
6851

6952
// Buf3 initialization part 1 - local variable declared in function foo() is initialized by RWBuffer<int> C1 default constructor
7053
// CHECK: define void @_Z3foov()
@@ -84,32 +67,14 @@ export void foo() {
8467
// CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false)
8568
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer", ptr %{{.*}}, i32 0, i32 0
8669
// CHECK-DXIL-NEXT: store target("dx.TypedBuffer", float, 1, 0, 0) %[[HANDLE]], ptr %__handle, align 4
87-
// CHECK-NEXT: ret void
8870

8971
// Buf2 initialization part 3 - body of RWBuffer<float> C2 constructor with implicit binding that initializes
9072
// handle with @llvm.dx.resource.handlefromimplicitbinding
9173
// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIdEC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this,
9274
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId) unnamed_addr #1 align 2 {
93-
// CHECK-NEXT: entry:
94-
// CHECK-NEXT: %this.addr = alloca ptr, align 4
95-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
96-
// CHECK-NEXT: %range.addr = alloca i32, align 4
97-
// CHECK-NEXT: %index.addr = alloca i32, align 4
98-
// CHECK-NEXT: %orderId.addr = alloca i32, align 4
99-
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
100-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
101-
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
102-
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
103-
// CHECK-NEXT: store i32 %orderId, ptr %orderId.addr, align 4
104-
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
105-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
106-
// CHECK-NEXT: %1 = load i32, ptr %range.addr, align 4
107-
// CHECK-NEXT: %2 = load i32, ptr %index.addr, align 4
108-
// CHECK-NEXT: %3 = load i32, ptr %orderId.addr, align 4
109-
// CHECK-NEXT: %4 = call target("dx.TypedBuffer", double, 1, 0, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.TypedBuffer_f64_1_0_0t(i32 %3, i32 %0, i32 %1, i32 %2, i1 false)
110-
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer.0", ptr %this1, i32 0, i32 0
111-
// CHECK-NEXT: store target("dx.TypedBuffer", double, 1, 0, 0) %4, ptr %__handle, align 4
112-
// CHECK-NEXT: ret void
75+
// CHECK: %[[HANDLE:.*]] = call target("dx.TypedBuffer", double, 1, 0, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.TypedBuffer_f64_1_0_0t(i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false)
76+
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer.0", ptr %{{.*}}, i32 0, i32 0
77+
// CHECK-NEXT: store target("dx.TypedBuffer", double, 1, 0, 0) %[[HANDLE]], ptr %__handle, align 4
11378

11479
// Buf3 initialization part 3 - body of RWBuffer<int> default C2 constructor that initializes handle to poison
11580
// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this)

clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,8 @@ export void foo() {
4949
// Buf2 initialization part 2 - body of RWStructuredBuffer<float> C1 constructor with implicit binding that calls the C2 constructor
5050
// CHECK: define linkonce_odr void @_ZN4hlsl18RWStructuredBufferIfEC1Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this,
5151
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId)
52-
// CHECK-NEXT: entry:
53-
// CHECK-NEXT: %this.addr = alloca ptr, align 4
54-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
55-
// CHECK-NEXT: %range.addr = alloca i32, align 4
56-
// CHECK-NEXT: %index.addr = alloca i32, align 4
57-
// CHECK-NEXT: %orderId.addr = alloca i32, align 4
58-
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
59-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
60-
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
61-
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
62-
// CHECK-NEXT: store i32 %orderId, ptr %orderId.addr, align 4
63-
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
64-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
65-
// CHECK-NEXT: %1 = load i32, ptr %range.addr, align 4
66-
// CHECK-NEXT: %2 = load i32, ptr %index.addr, align 4
67-
// CHECK-NEXT: %3 = load i32, ptr %orderId.addr, align 4
68-
// CHECK-NEXT: call void @_ZN4hlsl18RWStructuredBufferIfEC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this1, i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #4
69-
// CHECK-NEXT: ret void
52+
// CHECK: call void @_ZN4hlsl18RWStructuredBufferIfEC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4)
53+
// CHECK-SAME; %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}) #4
7054

7155
// Buf3 initialization part 1 - local variable declared in function foo() is initialized by
7256
// AppendStructuredBuffer<float> C1 default constructor
@@ -79,7 +63,6 @@ export void foo() {
7963
// the default C2 constructor
8064
// CHECK: define linkonce_odr void @_ZN4hlsl22AppendStructuredBufferIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) %this)
8165
// CHECK: call void @_ZN4hlsl22AppendStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %{{.*}})
82-
// CHECK-NEXT: ret void
8366

8467
// Buf1 initialization part 3 - body of AppendStructuredBuffer<float> C2 constructor with explicit binding
8568
// that initializes handle with @llvm.dx.resource.handlefrombinding
@@ -89,32 +72,14 @@ export void foo() {
8972
// CHECK-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false)
9073
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::StructuredBuffer", ptr %{{.*}}, i32 0, i32 0
9174
// CHECK-DXIL-NEXT: store target("dx.RawBuffer", float, 0, 0) %[[HANDLE]], ptr %__handle, align 4
92-
// CHECK-NEXT: ret void
9375

9476
// Buf2 initialization part 3 - body of RWStructuredBuffer<float> C2 constructor with implicit binding that initializes
9577
// handle with @llvm.dx.resource.handlefromimplicitbinding
9678
// CHECK: define linkonce_odr void @_ZN4hlsl18RWStructuredBufferIfEC2Ejijj(ptr noundef nonnull align 4 dereferenceable(4) %this,
9779
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId) unnamed_addr #1 align 2 {
98-
// CHECK-NEXT: entry:
99-
// CHECK-NEXT: %this.addr = alloca ptr, align 4
100-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
101-
// CHECK-NEXT: %range.addr = alloca i32, align 4
102-
// CHECK-NEXT: %index.addr = alloca i32, align 4
103-
// CHECK-NEXT: %orderId.addr = alloca i32, align 4
104-
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
105-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
106-
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
107-
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
108-
// CHECK-NEXT: store i32 %orderId, ptr %orderId.addr, align 4
109-
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
110-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
111-
// CHECK-NEXT: %1 = load i32, ptr %range.addr, align 4
112-
// CHECK-NEXT: %2 = load i32, ptr %index.addr, align 4
113-
// CHECK-NEXT: %3 = load i32, ptr %orderId.addr, align 4
114-
// CHECK-NEXT: %4 = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_f32_1_0t(i32 %3, i32 %0, i32 %1, i32 %2, i1 false)
115-
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWStructuredBuffer", ptr %this1, i32 0, i32 0
116-
// CHECK-NEXT: store target("dx.RawBuffer", float, 1, 0) %4, ptr %__handle, align 4
117-
// CHECK-NEXT: ret void
80+
// CHECK: %[[HANDLE:.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_f32_1_0t(i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false)
81+
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWStructuredBuffer", ptr %{{.*}}, i32 0, i32 0
82+
// CHECK-NEXT: store target("dx.RawBuffer", float, 1, 0) %[[HANDLE]], ptr %__handle, align 4
11883

11984
// Buf3 initialization part 3 - body of AppendStructuredBuffer<float> default C2 constructor that
12085
// initializes handle to poison

0 commit comments

Comments
 (0)