@@ -107,32 +107,42 @@ export float TestLoad() {
107107export float TestLoadWithStatus () {
108108 uint s1;
109109 uint s2;
110- float ret = RWSB1.Load (1 , s ) + SB1.Load (2 , s2);
110+ float ret = RWSB1.Load (1 , s1 ) + SB1.Load (2 , s2);
111111 ret += float (s1 + s2);
112112 return ret;
113113}
114114
115- // CHECK: define noundef nofpclass(nan inf) float @TestLoad ()()
116- // CHECK: call {{.*}} float @hlsl::RWStructuredBuffer<float>::Load(unsigned int)(ptr {{.*}} @RWSB1, i32 noundef 1)
117- // CHECK: call {{.*}} float @hlsl::StructuredBuffer<float>::Load(unsigned int)(ptr {{.*}} @SB1, i32 noundef 2)
115+ // CHECK: define noundef nofpclass(nan inf) float @TestLoadWithStatus ()()
116+ // CHECK: call {{.*}} float @hlsl::RWStructuredBuffer<float>::Load(unsigned int, unsigned int& )(ptr {{.*}} @RWSB1, i32 noundef 1, ptr noundef nonnull align 4 dereferenceable(4) %s1 )
117+ // CHECK: call {{.*}} float @hlsl::StructuredBuffer<float>::Load(unsigned int, unsigned int& )(ptr {{.*}} @SB1, i32 noundef 2, ptr noundef nonnull align 4 dereferenceable(4) %s2 )
118118// CHECK: add
119119// CHECK: ret float
120120
121- // CHECK: define {{.*}} float @hlsl::RWStructuredBuffer<float>::Load(unsigned int)(ptr {{.*}} %this, i32 noundef %Index)
121+ // CHECK: define {{.*}} float @hlsl::RWStructuredBuffer<float>::Load(unsigned int, unsigned int& )(ptr {{.*}} %this, i32 noundef %Index, ptr noundef nonnull align 4 dereferenceable(4) %Status )
122122// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RWStructuredBuffer", ptr %{{.*}}, i32 0, i32 0
123123// DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", float, 1, 0), ptr %__handle
124124// CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr
125- // DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %[[HANDLE]], i32 %[[INDEX]])
126- // CHECK-NEXT: %[[VAL:.*]] = load float, ptr %[[PTR]]
127- // CHECK-NEXT: ret float %[[VAL]]
128-
129- // CHECK: define {{.*}} float @hlsl::StructuredBuffer<float>::Load(unsigned int)(ptr {{.*}} %this, i32 noundef %Index)
125+ // CHECK-NEXT: %[[STATUS:.*]] = load ptr, ptr %Status.addr,
126+ // DXIL-NEXT: %[[STRUCT:.*]] = call { ptr, i1 } @llvm.dx.resource.load.rawbuffer.p0.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %[[HANDLE]], i32 %[[INDEX]], i32 0)
127+ // CHECK-NEXT: %[[VALUE:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 0
128+ // CHECK-NEXT: %[[STATUS_TEMP:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 1
129+ // CHECK-NEXT: %[[STATUS_EXT:.*]] = zext i1 %[[STATUS_TEMP]] to i32
130+ // CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %2, align 4
131+ // CHECK-NEXT: %[[RETVAL:.*]] = load float, ptr %[[VALUE]]
132+ // CHECK-NEXT: ret float %[[RETVAL]]
133+
134+ // CHECK: define {{.*}} float @hlsl::StructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} %this, i32 noundef %Index, ptr noundef nonnull align 4 dereferenceable(4) %Status)
130135// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::StructuredBuffer", ptr %{{.*}}, i32 0, i32 0
131136// DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", float, 0, 0), ptr %__handle
132137// CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr
133- // DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_0_0t(target("dx.RawBuffer", float, 0, 0) %[[HANDLE]], i32 %[[INDEX]])
134- // CHECK-NEXT: %[[VAL:.*]] = load float, ptr %[[PTR]]
135- // CHECK-NEXT: ret float %[[VAL]]
138+ // CHECK-NEXT: %[[STATUS_HANDLE:.*]] = load ptr, ptr %Status.addr, align 4, !nonnull !3, !align !4
139+ // DXIL-NEXT: %[[STRUCT:.*]] = call { ptr, i1 } @llvm.dx.resource.load.rawbuffer.p0.tdx.RawBuffer_f32_0_0t(target("dx.RawBuffer", float, 0, 0) %0, i32 %1, i32 0)
140+ // CHECK-NEXT: %[[VALUE:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 0
141+ // CHECK-NEXT: %[[STATUS:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 1
142+ // CHECK-NEXT: %[[STATUS_EXT:.*]] = zext i1 %[[STATUS]] to i32
143+ // CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %2, align 4
144+ // CHECK-NEXT: %[[RETVAL:.*]] = load float, ptr %[[VALUE]]
145+ // CHECK-NEXT: ret float %[[RETVAL]]
136146
137147export uint TestGetDimensions () {
138148 uint dim1, dim2, dim3, stride1, stride2, stride3;
0 commit comments