llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-transforms Author: Steven Perron (s-perron) <details> <summary>Changes</summary> Implments the Texture2D::operator[] method. It uses the same design as Buffer::operator[]. However, this requires us to chagne the resource_getpointer intrinsic to accept integer vectors for the index. Assisted-by: Gemini --- Patch is 75.63 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/186110.diff 24 Files Affected: - (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+3) - (modified) clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp (+21-7) - (modified) clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h (+2-1) - (modified) clang/lib/Sema/HLSLExternalSemaSource.cpp (+7-6) - (modified) clang/lib/Sema/SemaHLSL.cpp (+40-4) - (modified) clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl (+17) - (modified) clang/test/AST/HLSL/Texture2D-vector-AST.hlsl (+17) - (modified) clang/test/CodeGenHLSL/resources/ByteAddressBuffers-methods.hlsl (+8-8) - (modified) clang/test/CodeGenHLSL/resources/StructuredBuffers-methods-lib.hlsl (+7-7) - (modified) clang/test/CodeGenHLSL/resources/StructuredBuffers-methods-ps.hlsl (+4-4) - (modified) clang/test/CodeGenHLSL/resources/StructuredBuffers-subscripts.hlsl (+10-10) - (added) clang/test/CodeGenHLSL/resources/Texture2D-Subscript.hlsl (+74) - (modified) clang/test/CodeGenHLSL/resources/TypedBuffers-methods.hlsl (+4-4) - (modified) clang/test/CodeGenHLSL/resources/TypedBuffers-subscript.hlsl (+8-8) - (modified) clang/test/SemaHLSL/BuiltIns/resource_getpointer-errors.hlsl (+27-1) - (added) clang/test/SemaHLSL/Resources/Texture2D-Subscript.hlsl (+23) - (modified) llvm/include/llvm/IR/IntrinsicsDirectX.td (+1-1) - (modified) llvm/include/llvm/IR/IntrinsicsSPIRV.td (+1-1) - (modified) llvm/test/CodeGen/DirectX/MemIntrinsics/memcpy-pointee.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/forward_handle_on_alloca.ll (+2-2) - (modified) llvm/test/Transforms/GVN/PRE/no-pre-load-for-token-like.ll (+4-4) - (modified) llvm/test/Transforms/GVN/no-sink-dxgetpointer.ll (+12-12) - (modified) llvm/test/Transforms/SimplifyCFG/DirectX/no-sink-dxgetpointer.ll (+14-14) - (modified) llvm/test/Transforms/SimplifyCFG/token_like_type.ll (+4-4) ``````````diff diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 0c25eb2443d5e..e5da6155f4472 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -13507,6 +13507,9 @@ def err_std_source_location_impl_malformed : Error< def err_std_initializer_list_malformed : Error< "%0 layout not recognized. Must be a non-polymorphic class type with no bases and two fields: a 'const E *' and either another 'const E *' or a 'std::size_t'">; +def err_hlsl_builtin_resource_coordinate_dimension_mismatch : Error< + "builtin %0 resource coordinate dimension mismatch: expected %1, found %2">; + // HLSL Diagnostics def err_hlsl_langstd_unimplemented : Error<"support for HLSL language version %0 is incomplete">; def err_hlsl_attr_unsupported_in_stage : Error<"attribute %0 is unsupported in '%1' shaders, requires %select{|one of the following: }2%3">; diff --git a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp index 708b06bc1d03a..a99b9446fd65f 100644 --- a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp +++ b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp @@ -1231,14 +1231,26 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addCopyAssignmentOperator() { return MMB.returnThis().finalize(); } -BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addArraySubscriptOperators() { +BuiltinTypeDeclBuilder & +BuiltinTypeDeclBuilder::addArraySubscriptOperators(ResourceDimension Dim) { + assert(!Record->isCompleteDefinition() && "record is already complete"); ASTContext &AST = Record->getASTContext(); + + uint32_t VecSize = 1; + if (Dim != ResourceDimension::Unknown) + VecSize = getResourceDimensions(Dim); + + QualType IndexTy = VecSize > 1 + ? AST.getExtVectorType(AST.UnsignedIntTy, VecSize) + : AST.UnsignedIntTy; + DeclarationName Subscript = AST.DeclarationNames.getCXXOperatorName(OO_Subscript); - addHandleAccessFunction(Subscript, /*IsConst=*/true, /*IsRef=*/true); + addHandleAccessFunction(Subscript, /*IsConst=*/true, /*IsRef=*/true, IndexTy); if (getResourceAttrs().ResourceClass == llvm::dxil::ResourceClass::UAV) - addHandleAccessFunction(Subscript, /*IsConst=*/false, /*IsRef=*/true); + addHandleAccessFunction(Subscript, /*IsConst=*/false, /*IsRef=*/true, + IndexTy); return *this; } @@ -1250,7 +1262,8 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addLoadMethods() { IdentifierInfo &II = AST.Idents.get("Load", tok::TokenKind::identifier); DeclarationName Load(&II); // TODO: We also need versions with status for CheckAccessFullyMapped. - addHandleAccessFunction(Load, /*IsConst=*/false, /*IsRef=*/false); + addHandleAccessFunction(Load, /*IsConst=*/false, /*IsRef=*/false, + AST.UnsignedIntTy); addLoadWithStatusFunction(Load, /*IsConst=*/false); return *this; @@ -1295,7 +1308,7 @@ BuiltinTypeDeclBuilder::addByteAddressBufferLoadMethods() { DeclarationName Load(&II); addHandleAccessFunction(Load, /*IsConst=*/false, /*IsRef=*/false, - ReturnType); + AST.UnsignedIntTy, ReturnType); addLoadWithStatusFunction(Load, /*IsConst=*/false, ReturnType); }; @@ -1885,7 +1898,8 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addLoadWithStatusFunction( } BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addHandleAccessFunction( - DeclarationName &Name, bool IsConst, bool IsRef, QualType ElemTy) { + DeclarationName &Name, bool IsConst, bool IsRef, QualType IndexTy, + QualType ElemTy) { assert(!Record->isCompleteDefinition() && "record is already complete"); ASTContext &AST = SemaRef.getASTContext(); using PH = BuiltinTypeMethodBuilder::PlaceHolder; @@ -1915,7 +1929,7 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addHandleAccessFunction( } MMB.ReturnTy = ReturnTy; - MMB.addParam("Index", AST.UnsignedIntTy); + MMB.addParam("Index", IndexTy); if (NeedsTypedBuiltin) MMB.callBuiltin("__builtin_hlsl_resource_getpointer_typed", ElemPtrTy, diff --git a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h index 5a0b9a02defdb..d4694f72dd289 100644 --- a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h +++ b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h @@ -83,7 +83,7 @@ class BuiltinTypeDeclBuilder { addTextureHandle(ResourceClass RC, bool IsROV, ResourceDimension RD, AccessSpecifier Access = AccessSpecifier::AS_private); BuiltinTypeDeclBuilder &addSamplerHandle(); - BuiltinTypeDeclBuilder &addArraySubscriptOperators(); + BuiltinTypeDeclBuilder &addArraySubscriptOperators(ResourceDimension Dim); // Builtin types constructors BuiltinTypeDeclBuilder &addDefaultHandleConstructor(); @@ -110,6 +110,7 @@ class BuiltinTypeDeclBuilder { BuiltinTypeDeclBuilder &addDecrementCounterMethod(); BuiltinTypeDeclBuilder &addHandleAccessFunction(DeclarationName &Name, bool IsConst, bool IsRef, + QualType IndexTy, QualType ElemTy = QualType()); BuiltinTypeDeclBuilder & addLoadWithStatusFunction(DeclarationName &Name, bool IsConst, diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp index e2267ac503b73..c93bf77e7a138 100644 --- a/clang/lib/Sema/HLSLExternalSemaSource.cpp +++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp @@ -259,6 +259,7 @@ static BuiltinTypeDeclBuilder setupTextureType(CXXRecordDecl *Decl, Sema &S, return BuiltinTypeDeclBuilder(S, Decl) .addTextureHandle(RC, IsROV, Dim) .addTextureLoadMethods(Dim) + .addArraySubscriptOperators(Dim) .addDefaultHandleConstructor() .addCopyConstructor() .addCopyAssignmentOperator() @@ -475,7 +476,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { onCompletion(Decl, [this](CXXRecordDecl *Decl) { setupBufferType(Decl, *SemaPtr, ResourceClass::SRV, /*IsROV=*/false, /*RawBuffer=*/false, /*HasCounter=*/false) - .addArraySubscriptOperators() + .addArraySubscriptOperators(ResourceDimension::Unknown) .addLoadMethods() .addGetDimensionsMethodForBuffer() .completeDefinition(); @@ -488,7 +489,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { onCompletion(Decl, [this](CXXRecordDecl *Decl) { setupBufferType(Decl, *SemaPtr, ResourceClass::UAV, /*IsROV=*/false, /*RawBuffer=*/false, /*HasCounter=*/false) - .addArraySubscriptOperators() + .addArraySubscriptOperators(ResourceDimension::Unknown) .addLoadMethods() .addGetDimensionsMethodForBuffer() .completeDefinition(); @@ -501,7 +502,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { onCompletion(Decl, [this](CXXRecordDecl *Decl) { setupBufferType(Decl, *SemaPtr, ResourceClass::UAV, /*IsROV=*/true, /*RawBuffer=*/false, /*HasCounter=*/false) - .addArraySubscriptOperators() + .addArraySubscriptOperators(ResourceDimension::Unknown) .addLoadMethods() .addGetDimensionsMethodForBuffer() .completeDefinition(); @@ -513,7 +514,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { onCompletion(Decl, [this](CXXRecordDecl *Decl) { setupBufferType(Decl, *SemaPtr, ResourceClass::SRV, /*IsROV=*/false, /*RawBuffer=*/true, /*HasCounter=*/false) - .addArraySubscriptOperators() + .addArraySubscriptOperators(ResourceDimension::Unknown) .addLoadMethods() .addGetDimensionsMethodForBuffer() .completeDefinition(); @@ -525,7 +526,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { onCompletion(Decl, [this](CXXRecordDecl *Decl) { setupBufferType(Decl, *SemaPtr, ResourceClass::UAV, /*IsROV=*/false, /*RawBuffer=*/true, /*HasCounter=*/true) - .addArraySubscriptOperators() + .addArraySubscriptOperators(ResourceDimension::Unknown) .addLoadMethods() .addIncrementCounterMethod() .addDecrementCounterMethod() @@ -564,7 +565,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() { onCompletion(Decl, [this](CXXRecordDecl *Decl) { setupBufferType(Decl, *SemaPtr, ResourceClass::UAV, /*IsROV=*/true, /*RawBuffer=*/true, /*HasCounter=*/true) - .addArraySubscriptOperators() + .addArraySubscriptOperators(ResourceDimension::Unknown) .addLoadMethods() .addIncrementCounterMethod() .addDecrementCounterMethod() diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp index e200c595ab2c2..2b225d1adc7fb 100644 --- a/clang/lib/Sema/SemaHLSL.cpp +++ b/clang/lib/Sema/SemaHLSL.cpp @@ -3350,6 +3350,44 @@ static bool CheckVectorSelect(Sema *S, CallExpr *TheCall) { return false; } +static bool CheckIndexType(Sema *S, CallExpr *TheCall, unsigned IndexArgIndex) { + assert(TheCall->getNumArgs() > IndexArgIndex && "Index argument missing"); + QualType ArgType = TheCall->getArg(IndexArgIndex)->getType(); + QualType IndexTy = ArgType; + unsigned int ActualDim = 1; + if (const auto *VTy = IndexTy->getAs<VectorType>()) { + ActualDim = VTy->getNumElements(); + IndexTy = VTy->getElementType(); + } + if (!IndexTy->isIntegerType()) { + S->Diag(TheCall->getArg(IndexArgIndex)->getBeginLoc(), + diag::err_typecheck_expect_int) + << ArgType; + return true; + } + + QualType ResourceArgTy = TheCall->getArg(0)->getType(); + const HLSLAttributedResourceType *ResTy = + ResourceArgTy.getTypePtr()->getAs<HLSLAttributedResourceType>(); + assert(ResTy && "Resource argument must be a resource"); + HLSLAttributedResourceType::Attributes ResAttrs = ResTy->getAttrs(); + + unsigned int ExpectedDim = 1; + if (ResAttrs.ResourceDimension != llvm::dxil::ResourceDimension::Unknown) { + ExpectedDim = getResourceDimensions(ResAttrs.ResourceDimension); + } + + if (ActualDim != ExpectedDim) { + S->Diag(TheCall->getArg(IndexArgIndex)->getBeginLoc(), + diag::err_hlsl_builtin_resource_coordinate_dimension_mismatch) + << cast<NamedDecl>(TheCall->getCalleeDecl()) << ExpectedDim + << ActualDim; + return true; + } + + return false; +} + static bool CheckResourceHandle( Sema *S, CallExpr *TheCall, unsigned ArgIndex, llvm::function_ref<bool(const HLSLAttributedResourceType *ResType)> Check = @@ -3689,8 +3727,7 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { case Builtin::BI__builtin_hlsl_resource_getpointer: { if (SemaRef.checkArgCount(TheCall, 2) || CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), - SemaRef.getASTContext().UnsignedIntTy)) + CheckIndexType(&SemaRef, TheCall, 1)) return true; auto *ResourceTy = @@ -3707,8 +3744,7 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { case Builtin::BI__builtin_hlsl_resource_getpointer_typed: { if (SemaRef.checkArgCount(TheCall, 3) || CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), - SemaRef.getASTContext().UnsignedIntTy)) + CheckIndexType(&SemaRef, TheCall, 1)) return true; QualType ElementTy = TheCall->getArg(2)->getType(); diff --git a/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl b/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl index a1d0341681df5..fbebbf4a29c31 100644 --- a/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl +++ b/clang/test/AST/HLSL/Texture2D-scalar-AST.hlsl @@ -53,6 +53,23 @@ // CHECK-NEXT: DeclRefExpr {{.*}} 'vector<int, 2>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, 2>' // CHECK-NEXT: AlwaysInlineAttr +// CHECK: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(vector<unsigned int, 2>) const' inline +// CHECK-NEXT: ParmVarDecl {{.*}} Index 'vector<unsigned int, 2>' +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ReturnStmt +// CHECK-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow +// CHECK-NEXT: CStyleCastExpr {{.*}} 'hlsl_device element_type *' <Dependent> +// CHECK-NEXT: CallExpr {{.*}} '<dependent type>' +// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept' +// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t +// CHECK-SAME{LITERAL}: [[hlsl::resource_class(SRV)]] +// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]] +// CHECK-SAME{LITERAL}: [[hlsl::resource_dimension(2D)]] +// CHECK-SAME: ' lvalue .__handle +// CHECK-NEXT: CXXThisExpr {{.*}} 'const hlsl::Texture2D<element_type>' lvalue implicit this +// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, 2>' lvalue ParmVar {{.*}} 'Index' 'vector<unsigned int, 2>' +// CHECK-NEXT: AlwaysInlineAttr + // CHECK: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, vector<float, 2>)' // CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState' // CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, 2>' diff --git a/clang/test/AST/HLSL/Texture2D-vector-AST.hlsl b/clang/test/AST/HLSL/Texture2D-vector-AST.hlsl index 097232a50ceb9..19effd16fcc7a 100644 --- a/clang/test/AST/HLSL/Texture2D-vector-AST.hlsl +++ b/clang/test/AST/HLSL/Texture2D-vector-AST.hlsl @@ -57,6 +57,23 @@ // CHECK-NEXT: DeclRefExpr {{.*}} 'vector<int, 2>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, 2>' // CHECK-NEXT: AlwaysInlineAttr +// CHECK: CXXMethodDecl {{.*}} operator[] 'vector<element_type, element_count> const hlsl_device &(vector<unsigned int, 2>) const' inline +// CHECK-NEXT: ParmVarDecl {{.*}} Index 'vector<unsigned int, 2>' +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ReturnStmt +// CHECK-NEXT: UnaryOperator {{.*}} 'vector<element_type, element_count> hlsl_device' lvalue prefix '*' cannot overflow +// CHECK-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count> hlsl_device *' <Dependent> +// CHECK-NEXT: CallExpr {{.*}} '<dependent type>' +// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept' +// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t +// CHECK-SAME{LITERAL}: [[hlsl::resource_class(SRV)]] +// CHECK-SAME{LITERAL}: [[hlsl::contained_type(vector<element_type, element_count>)]] +// CHECK-SAME{LITERAL}: [[hlsl::resource_dimension(2D)]] +// CHECK-SAME: ' lvalue .__handle +// CHECK-NEXT: CXXThisExpr {{.*}} 'const hlsl::Texture2D<vector<element_type, element_count>>' lvalue implicit this +// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, 2>' lvalue ParmVar {{.*}} 'Index' 'vector<unsigned int, 2>' +// CHECK-NEXT: AlwaysInlineAttr + // CHECK: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, 2>)' // CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState' // CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, 2>' diff --git a/clang/test/CodeGenHLSL/resources/ByteAddressBuffers-methods.hlsl b/clang/test/CodeGenHLSL/resources/ByteAddressBuffers-methods.hlsl index af0fc75df6e89..d4a5e74aaa087 100644 --- a/clang/test/CodeGenHLSL/resources/ByteAddressBuffers-methods.hlsl +++ b/clang/test/CodeGenHLSL/resources/ByteAddressBuffers-methods.hlsl @@ -28,7 +28,7 @@ export float TestLoad() { // CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::ByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 0, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_0_0t(target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_0_0t.i32(target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]], i32 %[[INDEX]]) // CHECK-NEXT: %[[VAL:.*]] = load i32, ptr %[[PTR]] // CHECK-NEXT: ret i32 %[[VAL]] @@ -36,7 +36,7 @@ export float TestLoad() { // CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 1, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t.i32(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) // CHECK-NEXT: %[[VEC:.*]] = load <4 x i32>, ptr %[[PTR]] // CHECK-NEXT: ret <4 x i32> %[[VEC]] @@ -44,7 +44,7 @@ export float TestLoad() { // CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::ByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 0, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_0_0t(target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_0_0t.i32(target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]], i32 %[[INDEX]]) // CHECK-NEXT: %[[VAL:.*]] = load float, ptr %[[PTR]] // CHECK-NEXT: ret float %[[VAL]] @@ -52,7 +52,7 @@ export float TestLoad() { // CHECK: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 1, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t.i32(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) // CHECK-NEXT: %[[VEC:.*]] = load <4 x float>, ptr %[[PTR]] // CHECK-NEXT: ret <4 x float> %[[VEC]] @@ -141,7 +141,7 @@ export void TestStore() { // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 1, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t.i32(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) // CHECK-NEXT: store i32 %[[VALUE]], ptr %[[PTR]] // CHECK-NEXT: ret void @@ -150,7 +150,7 @@ export void TestStore() { // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 1, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t.i32(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) // CHECK-NEXT: store <4 x i32> %[[VALUE]], ptr %[[PTR]] // CHECK-NEXT: ret void @@ -159,7 +159,7 @@ export void TestStore() { // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // DXIL-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 1, 0), ptr %__handle // CHECK-NEXT: %[[INDEX:.*]] = load i32, ptr %Index.addr -// DXIL-NEXT: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], i32 %[[INDEX]]) +// DXIL-NEXT: %[[PTR:.*]] =... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/186110 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
