Skip to content

Commit 0d0b79f

Browse files
committed
update tests, make checkaccess inline so it doesn't get auto-emitted into every IR output
1 parent 2a49c36 commit 0d0b79f

File tree

6 files changed

+122
-72
lines changed

6 files changed

+122
-72
lines changed

clang/lib/Headers/hlsl/hlsl_intrinsics.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,9 @@ smoothstep(__detail::HLSL_FIXED_VECTOR<float, N> Min,
605605
return __detail::smoothstep_vec_impl(Min, Max, X);
606606
}
607607

608-
bool CheckAccessFullyMapped(uint Status) { return static_cast<bool>(Status); }
608+
inline bool CheckAccessFullyMapped(uint Status) {
609+
return static_cast<bool>(Status);
610+
}
609611

610612
} // namespace hlsl
611613
#endif //_HLSL_HLSL_INTRINSICS_H_

clang/test/AST/HLSL/StructuredBuffers-AST.hlsl

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -328,23 +328,32 @@ RESOURCE<float> Buffer;
328328

329329
// Load with status method
330330

331-
// CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int, unsigned int &)'
331+
// CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int, out unsigned int)'
332332
// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
333-
// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &'
333+
// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'
334+
// CHECK-LOAD-NEXT: HLSLParamModifierAttr {{.*}} out
334335
// CHECK-LOAD-NEXT: CompoundStmt
335-
// CHECK-LOAD-NEXT: ReturnStmt
336-
// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow
337-
// CHECK-LOAD-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'
336+
// CHECK-LOAD-NEXT: DeclStmt
337+
// CHECK-LOAD-NEXT: VarDecl {{.*}} Result 'element_type'
338+
// CHECK-LOAD-NEXT: DeclStmt
339+
// CHECK-LOAD-NEXT: VarDecl {{.*}} StatusBool 'bool'
340+
// CHECK-LOAD-NEXT: BinaryOperator {{.*}} 'element_type' '='
341+
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'element_type' lvalue Var {{.*}} 'Result' 'element_type'
342+
// CHECK-LOAD-NEXT: CallExpr {{.*}} 'element_type'
338343
// CHECK-LOAD-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>
339344
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_load_with_status' 'void (...) noexcept'
340345
// CHECK-LOAD-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
341346
// CHECK-LOAD-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
342347
// CHECK-LOAD-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
343348
// CHECK-LOAD-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
344-
// CHECK-LOAD-SAME: lvalue .__handle {{.*}}
345349
// CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
346350
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'
347-
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Status' 'unsigned int &'
351+
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'bool' lvalue Var {{.*}} 'StatusBool' 'bool'
352+
// CHECK-LOAD-NEXT: BinaryOperator {{.*}} 'unsigned int' '='
353+
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Status' 'unsigned int &__restrict'
354+
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'bool' lvalue Var {{.*}} 'StatusBool' 'bool'
355+
// CHECK-LOAD-NEXT: ReturnStmt
356+
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'element_type' lvalue Var {{.*}} 'Result' 'element_type'
348357
// CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
349358

350359
// IncrementCounter method

clang/test/AST/HLSL/TypedBuffers-AST.hlsl

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,23 +215,32 @@ RESOURCE<float> Buffer;
215215
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
216216

217217
// Load with status method
218-
// CHECK-NEXT: CXXMethodDecl {{.*}} Load 'element_type (unsigned int, unsigned int &)'
218+
// CHECK: CXXMethodDecl {{.*}} Load 'element_type (unsigned int, out unsigned int)'
219219
// CHECK-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
220-
// CHECK-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &'
220+
// CHECK-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'
221+
// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
221222
// CHECK-NEXT: CompoundStmt
222-
// CHECK-NEXT: ReturnStmt
223-
// CHECK-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' prefix '*' cannot overflow
224-
// CHECK-NEXT: CallExpr {{.*}} 'hlsl_device element_type *'
223+
// CHECK-NEXT: DeclStmt
224+
// CHECK-NEXT: VarDecl {{.*}} Result 'element_type'
225+
// CHECK-NEXT: DeclStmt
226+
// CHECK-NEXT: VarDecl {{.*}} StatusBool 'bool'
227+
// CHECK-NEXT: BinaryOperator {{.*}} 'element_type' '='
228+
// CHECK-NEXT: DeclRefExpr {{.*}} 'element_type' lvalue Var {{.*}} 'Result' 'element_type'
229+
// CHECK-NEXT: CallExpr {{.*}} 'element_type'
225230
// CHECK-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>
226231
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_load_with_status' 'void (...) noexcept'
227232
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
228233
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
229234
// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
230235
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
231-
// CHECK-SAME: lvalue .__handle {{.*}}
232236
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
233237
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'
234-
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Status' 'unsigned int &'
238+
// CHECK-NEXT: DeclRefExpr {{.*}} 'bool' lvalue Var {{.*}} 'StatusBool' 'bool'
239+
// CHECK-NEXT: BinaryOperator {{.*}} 'unsigned int' '='
240+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Status' 'unsigned int &__restrict'
241+
// CHECK-NEXT: DeclRefExpr {{.*}} 'bool' lvalue Var {{.*}} 'StatusBool' 'bool'
242+
// CHECK-NEXT: ReturnStmt
243+
// CHECK-NEXT: DeclRefExpr {{.*}} 'element_type' lvalue Var {{.*}} 'Result' 'element_type'
235244
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
236245

237246
// GetDimensions method

clang/test/CodeGenHLSL/resources/StructuredBuffers-methods-lib.hlsl

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -113,36 +113,46 @@ export float TestLoadWithStatus() {
113113
}
114114

115115
// 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)
116+
// CHECK: call {{.*}} float @hlsl::RWStructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} @RWSB1, i32 noundef 1, ptr noalias noundef nonnull align 4 dereferenceable(4) %tmp)
117+
// CHECK: call {{.*}} float @hlsl::StructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} @SB1, i32 noundef 2, ptr noalias noundef nonnull align 4 dereferenceable(4) %tmp1)
118118
// CHECK: add
119119
// CHECK: ret float
120120

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)
121+
// CHECK: define {{.*}} float @hlsl::RWStructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} %this, i32 noundef %Index, ptr noalias 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-
// 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
125+
// DXIL-NEXT: %[[STRUCT:.*]] = call { float, i1 } @llvm.dx.resource.load.rawbuffer.f32.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %[[HANDLE]], i32 %[[INDEX]], i32 0)
126+
// CHECK-NEXT: %[[VALUE:.*]] = extractvalue { float, i1 } %[[STRUCT]], 0
127+
// CHECK-NEXT: %[[STATUS_TEMP:.*]] = extractvalue { float, i1 } %[[STRUCT]], 1
129128
// 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)
129+
// CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %StatusBool, align 4
130+
// CHECK-NEXT: store float %ld.value, ptr %Result, align 4
131+
// CHECK-NEXT: %[[STATUS_INT:.*]] = load i32, ptr %StatusBool, align 4
132+
// CHECK-NEXT: %[[LOADED_VALUE:.*]] = trunc i32 %[[STATUS_INT]] to i1
133+
// CHECK-NEXT: %[[ZEXT_VALUE:.*]] = zext i1 %[[LOADED_VALUE]] to i32
134+
// CHECK-NEXT: %[[LOADED_STATUS_ADDR:.*]] = load ptr, ptr %Status.addr, align 4
135+
// CHECK-NEXT: store i32 %[[ZEXT_VALUE]], ptr %[[LOADED_STATUS_ADDR]], align 4
136+
// CHECK-NEXT: %[[RETURN_VALUE:.*]] = load float, ptr %Result, align 4
137+
// CHECK-NEXT: ret float %[[RETURN_VALUE]]
138+
139+
// CHECK: define {{.*}} float @hlsl::StructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} %this, i32 noundef %Index, ptr noalias noundef nonnull align 4 dereferenceable(4) %Status)
135140
// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::StructuredBuffer", ptr %{{.*}}, i32 0, i32 0
136141
// DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", float, 0, 0), ptr %__handle
137142
// CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr
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]]
143+
// DXIL-NEXT: %[[STRUCT:.*]] = call { float, i1 } @llvm.dx.resource.load.rawbuffer.f32.tdx.RawBuffer_f32_0_0t(target("dx.RawBuffer", float, 0, 0) %[[HANDLE]], i32 %[[INDEX]], i32 0)
144+
// CHECK-NEXT: %[[VALUE:.*]] = extractvalue { float, i1 } %[[STRUCT]], 0
145+
// CHECK-NEXT: %[[STATUS_TEMP:.*]] = extractvalue { float, i1 } %[[STRUCT]], 1
146+
// CHECK-NEXT: %[[STATUS_EXT:.*]] = zext i1 %[[STATUS_TEMP]] to i32
147+
// CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %StatusBool, align 4
148+
// CHECK-NEXT: store float %ld.value, ptr %Result, align 4
149+
// CHECK-NEXT: %[[STATUS_INT:.*]] = load i32, ptr %StatusBool, align 4
150+
// CHECK-NEXT: %[[LOADED_VALUE:.*]] = trunc i32 %[[STATUS_INT]] to i1
151+
// CHECK-NEXT: %[[ZEXT_VALUE:.*]] = zext i1 %[[LOADED_VALUE]] to i32
152+
// CHECK-NEXT: %[[LOADED_STATUS_ADDR:.*]] = load ptr, ptr %Status.addr, align 4
153+
// CHECK-NEXT: store i32 %[[ZEXT_VALUE]], ptr %[[LOADED_STATUS_ADDR]], align 4
154+
// CHECK-NEXT: %[[RETURN_VALUE:.*]] = load float, ptr %Result, align 4
155+
// CHECK-NEXT: ret float %[[RETURN_VALUE]]
146156

147157
export uint TestGetDimensions() {
148158
uint dim1, dim2, dim3, stride1, stride2, stride3;

clang/test/CodeGenHLSL/resources/StructuredBuffers-methods-ps.hlsl

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -73,35 +73,45 @@ export float TestLoadWithStatus() {
7373
}
7474

7575
// CHECK: define {{.*}} float @TestLoadWithStatus()()
76-
// CHECK: call {{.*}} float @hlsl::RasterizerOrderedStructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} @ROSB1, i32 noundef 10, ptr noundef nonnull align 4 dereferenceable(4) %status)
77-
// CHECK: call {{.*}} <2 x i32> @hlsl::RasterizerOrderedStructuredBuffer<int vector[2]>::Load(unsigned int, unsigned int&)(ptr {{.*}} @ROSB2, i32 noundef 20, ptr noundef nonnull align 4 dereferenceable(4) %status2)
76+
// CHECK: call {{.*}} float @hlsl::RasterizerOrderedStructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} @ROSB1, i32 noundef 10, ptr noalias noundef nonnull align 4 dereferenceable(4) %tmp)
77+
// CHECK: call {{.*}} <2 x i32> @hlsl::RasterizerOrderedStructuredBuffer<int vector[2]>::Load(unsigned int, unsigned int&)(ptr {{.*}} @ROSB2, i32 noundef 20, ptr noalias noundef nonnull align 4 dereferenceable(4) %tmp2)
7878
// CHECK: ret
7979

80-
// CHECK: define {{.*}} float @hlsl::RasterizerOrderedStructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} %Index, ptr noundef nonnull align 4 dereferenceable(4) %Status)
80+
// CHECK: define {{.*}} float @hlsl::RasterizerOrderedStructuredBuffer<float>::Load(unsigned int, unsigned int&)(ptr {{.*}} %this, i32 noundef %Index, ptr noalias noundef nonnull align 4 dereferenceable(4) %Status)
8181
// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RasterizerOrderedStructuredBuffer", ptr {{.*}}, i32 0, i32 0
8282
// CHECK-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", float, 1, 1), ptr %__handle
8383
// CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr
84-
// CHECK-NEXT: %[[STATUS:.*]] = load ptr, ptr %Status.addr,
85-
// DXIL-NEXT: %[[STRUCT:.*]] = call { ptr, i1 } @llvm.dx.resource.load.rawbuffer.p0.tdx.RawBuffer_f32_1_1t(target("dx.RawBuffer", float, 1, 1) %[[HANDLE]], i32 %[[INDEX]], i32 0)
86-
// CHECK-NEXT: %[[VALUE:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 0
87-
// CHECK-NEXT: %[[STATUS_TEMP:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 1
84+
// DXIL-NEXT: %[[STRUCT:.*]] = call { float, i1 } @llvm.dx.resource.load.rawbuffer.f32.tdx.RawBuffer_f32_1_1t(target("dx.RawBuffer", float, 1, 1) %[[HANDLE]], i32 %[[INDEX]], i32 0)
85+
// CHECK-NEXT: %[[VALUE:.*]] = extractvalue { float, i1 } %[[STRUCT]], 0
86+
// CHECK-NEXT: %[[STATUS_TEMP:.*]] = extractvalue { float, i1 } %[[STRUCT]], 1
8887
// CHECK-NEXT: %[[STATUS_EXT:.*]] = zext i1 %[[STATUS_TEMP]] to i32
89-
// CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %2, align 4
90-
// CHECK-NEXT: %[[RETVAL:.*]] = load float, ptr %[[VALUE]]
91-
// CHECK-NEXT: ret float %[[RETVAL]]
92-
93-
// CHECK: define {{.*}} <2 x i32> @hlsl::RasterizerOrderedStructuredBuffer<int vector[2]>::Load(unsigned int, unsigned int&)(ptr {{.*}} %Index, ptr noundef nonnull align 4 dereferenceable(4) %Status)
88+
// CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %StatusBool, align 4
89+
// CHECK-NEXT: store float %ld.value, ptr %Result, align 4
90+
// CHECK-NEXT: %[[STATUS_INT:.*]] = load i32, ptr %StatusBool, align 4
91+
// CHECK-NEXT: %[[LOADED_VALUE:.*]] = trunc i32 %[[STATUS_INT]] to i1
92+
// CHECK-NEXT: %[[ZEXT_VALUE:.*]] = zext i1 %[[LOADED_VALUE]] to i32
93+
// CHECK-NEXT: %[[LOADED_STATUS_ADDR:.*]] = load ptr, ptr %Status.addr, align 4
94+
// CHECK-NEXT: store i32 %[[ZEXT_VALUE]], ptr %[[LOADED_STATUS_ADDR]], align 4
95+
// CHECK-NEXT: %[[RETURN_VALUE:.*]] = load float, ptr %Result, align 4
96+
// CHECK-NEXT: ret float %[[RETURN_VALUE]]
97+
98+
// CHECK: define {{.*}} <2 x i32> @hlsl::RasterizerOrderedStructuredBuffer<int vector[2]>::Load(unsigned int, unsigned int&)(ptr {{.*}} %this, i32 noundef %Index, ptr noalias noundef nonnull align 4 dereferenceable(4) %Status)
9499
// CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RasterizerOrderedStructuredBuffer.0", ptr {{.*}}, i32 0, i32 0
95100
// CHECK-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", <2 x i32>, 1, 1), ptr %__handle
96101
// CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr
97-
// CHECK-NEXT: %[[STATUS_HANDLE:.*]] = load ptr, ptr %Status.addr, align 4, !nonnull !3, !align !4
98-
// DXIL-NEXT: %[[STRUCT:.*]] = call { ptr, i1 } @llvm.dx.resource.load.rawbuffer.p0.tdx.RawBuffer_v2i32_1_1t(target("dx.RawBuffer", <2 x i32>, 1, 1) %0, i32 %1, i32 0)
99-
// CHECK-NEXT: %[[VALUE:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 0
100-
// CHECK-NEXT: %[[STATUS:.*]] = extractvalue { ptr, i1 } %[[STRUCT]], 1
101-
// CHECK-NEXT: %[[STATUS_EXT:.*]] = zext i1 %[[STATUS]] to i32
102-
// CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %2, align 4
103-
// CHECK-NEXT: %[[RETVAL:.*]] = load <2 x i32>, ptr %[[VALUE]]
104-
// CHECK-NEXT: ret <2 x i32> %[[RETVAL]]
102+
// DXIL-NEXT: %[[STRUCT:.*]] = call { <2 x i32>, i1 } @llvm.dx.resource.load.rawbuffer.v2i32.tdx.RawBuffer_v2i32_1_1t(target("dx.RawBuffer", <2 x i32>, 1, 1) %[[HANDLE]], i32 %[[INDEX]], i32 0)
103+
// CHECK-NEXT: %[[VALUE:.*]] = extractvalue { <2 x i32>, i1 } %[[STRUCT]], 0
104+
// CHECK-NEXT: %[[STATUS_TEMP:.*]] = extractvalue { <2 x i32>, i1 } %[[STRUCT]], 1
105+
// CHECK-NEXT: %[[STATUS_EXT:.*]] = zext i1 %[[STATUS_TEMP]] to i32
106+
// CHECK-NEXT: store i32 %[[STATUS_EXT]], ptr %StatusBool, align 4
107+
// CHECK-NEXT: store <2 x i32> %ld.value, ptr %Result, align 8
108+
// CHECK-NEXT: %[[STATUS_INT:.*]] = load i32, ptr %StatusBool, align 4
109+
// CHECK-NEXT: %[[LOADED_VALUE:.*]] = trunc i32 %[[STATUS_INT]] to i1
110+
// CHECK-NEXT: %[[ZEXT_VALUE:.*]] = zext i1 %[[LOADED_VALUE]] to i32
111+
// CHECK-NEXT: %[[LOADED_STATUS_ADDR:.*]] = load ptr, ptr %Status.addr, align 4
112+
// CHECK-NEXT: store i32 %[[ZEXT_VALUE]], ptr %[[LOADED_STATUS_ADDR]], align 4
113+
// CHECK-NEXT: %[[RETURN_VALUE:.*]] = load <2 x i32>, ptr %Result, align 8
114+
// CHECK-NEXT: ret <2 x i32> %[[RETURN_VALUE]]
105115

106116

107117
export uint TestGetDimensions() {

0 commit comments

Comments
 (0)