@@ -35,25 +35,8 @@ export void foo() {
3535// Buf1 initialization part 2 - body of RWBuffer<float> C1 constructor with explicit binding that calls the C2 constructor 
3636// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIfEC1Ejjij(ptr noundef nonnull align 4 dereferenceable(4) %this, 
3737// CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index) 
38- // CHECK-NEXT: entry: 
39- // CHECK-NEXT: %this.addr = alloca ptr, align 4 
40- // CHECK-NEXT: %registerNo.addr = alloca i32, align 4 
41- // CHECK-NEXT: %spaceNo.addr = alloca i32, align 4 
42- // CHECK-NEXT: %range.addr = alloca i32, align 4 
43- // CHECK-NEXT: %index.addr = alloca i32, align 4 
44- // CHECK-NEXT: store ptr %this, ptr %this.addr, align 4 
45- // CHECK-NEXT: store i32 %registerNo, ptr %registerNo.addr, align 4 
46- // CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4 
47- // CHECK-NEXT: store i32 %range, ptr %range.addr, align 4 
48- // CHECK-NEXT: store i32 %index, ptr %index.addr, align 4 
49- // CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4 
50- // CHECK-NEXT: %0 = load i32, ptr %registerNo.addr, align 4 
51- // CHECK-NEXT: %1 = load i32, ptr %spaceNo.addr, align 4 
52- // CHECK-NEXT: %2 = load i32, ptr %range.addr, align 4 
53- // CHECK-NEXT: %3 = load i32, ptr %index.addr, align 4 
54- // CHECK-NEXT: call void @_ZN4hlsl8RWBufferIfEC2Ejjij(ptr noundef nonnull align 4 dereferenceable(4) %this1, 
55- // CHECK-SAME: i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) 
56- // CHECK-NEXT: ret void 
38+ // CHECK: call void @_ZN4hlsl8RWBufferIfEC2Ejjij(ptr noundef nonnull align 4 dereferenceable(4) 
39+ // CHECK-SAME: %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}, i32 noundef %{{.*}}) 
5740
5841// Buf2 initialization part 1 - FIXME: constructor with implicit binding does not exist yet;  
5942// the global init function currently calls the default RWBufer<double> C1 constructor 
@@ -69,48 +52,22 @@ export void foo() {
6952
7053// Buf3 initialization part 2 - body of RWBuffer<int> default C1 constructor that calls the default C2 constructor 
7154// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) 
72- // CHECK-NEXT: entry: 
73- // CHECK-NEXT: %this.addr = alloca ptr, align 4 
74- // CHECK-NEXT: store ptr %this, ptr %this.addr, align 4 
75- // CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4 
76- // CHECK-NEXT: call void @_ZN4hlsl8RWBufferIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this1) 
77- // CHECK-NEXT: ret void 
55+ // CHECK: call void @_ZN4hlsl8RWBufferIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %{{.*}}) 
7856
7957// Buf1 initialization part 3 - body of RWBuffer<float> C2 constructor with explicit binding that initializes 
8058// handle with @llvm.dx.resource.handlefrombinding 
8159// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIfEC2Ejjij(ptr noundef nonnull align 4 dereferenceable(4) %this, 
8260// CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index) 
83- // CHECK-NEXT: entry: 
84- // CHECK-NEXT: %this.addr = alloca ptr, align 4 
85- // CHECK-NEXT: %registerNo.addr = alloca i32, align 4 
86- // CHECK-NEXT: %spaceNo.addr = alloca i32, align 4 
87- // CHECK-NEXT: %range.addr = alloca i32, align 4 
88- // CHECK-NEXT: %index.addr = alloca i32, align 4 
89- // CHECK-NEXT: store ptr %this, ptr %this.addr, align 4 
90- // CHECK-NEXT: store i32 %registerNo, ptr %registerNo.addr, align 4 
91- // CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4 
92- // CHECK-NEXT: store i32 %range, ptr %range.addr, align 4 
93- // CHECK-NEXT: store i32 %index, ptr %index.addr, align 4 
94- // CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4 
95- // CHECK-NEXT: %0 = load i32, ptr %registerNo.addr, align 4 
96- // CHECK-NEXT: %1 = load i32, ptr %spaceNo.addr, align 4 
97- // CHECK-NEXT: %2 = load i32, ptr %range.addr, align 4 
98- // CHECK-NEXT: %3 = load i32, ptr %index.addr, align 4 
99- // CHECK-DXIL-NEXT: %4 = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t( 
100- // CHECK-DXIL-SAME: i32 %1, i32 %0, i32 %2, i32 %3, i1 false) 
101- // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer", ptr %this1, i32 0, i32 0 
102- // CHECK-DXIL-NEXT: store target("dx.TypedBuffer", float, 1, 0, 0) %4, ptr %__handle, align 4 
61+ // CHECK-DXIL: %[[HANDLE:.*]] = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t( 
62+ // CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) 
63+ // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer", ptr %{{.*}}, i32 0, i32 0 
64+ // CHECK-DXIL-NEXT: store target("dx.TypedBuffer", float, 1, 0, 0) %[[HANDLE]], ptr %__handle, align 4 
10365// CHECK-NEXT: ret void 
10466
10567// Buf3 initialization part 3 - body of RWBuffer<int> default C2 constructor that initializes handle to poison 
10668// CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) 
107- // CHECK-NEXT: entry: 
108- // CHECK-NEXT: %this.addr = alloca ptr, align 4 
109- // CHECK-NEXT: store ptr %this, ptr %this.addr, align 4 
110- // CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4 
111- // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer.1", ptr %this1, i32 0, i32 0 
69+ // CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer.1", ptr %{{.*}}, i32 0, i32 0 
11270// CHECK-NEXT: store target("dx.TypedBuffer", i32, 1, 0, 1) poison, ptr %__handle, align 4 
113- // CHECK-NEXT: ret void 
11471
11572// Module initialization 
11673// CHECK: define internal void @_GLOBAL__sub_I_RWBuffer_constructor.hlsl() 
0 commit comments