Skip to content

Commit aa02206

Browse files
authored
[HLSL] Reorder arguments of __builtin_hlsl_resource_handlefromimplicitbinding (llvm#155861)
Reorder the arguments of `__builtin_hlsl_resource_handlefromimplicitbinding` builtins to match the order of the `llvm.dx.resource.handlefromimplicitbinding` intrinsics, and also to match the arguments on the static create methods for resource initialization ([described here](llvm/wg-hlsl#336)). Previously the arguments were in the same order as the resource class constructor for implicit binding. The `orderId` argument was intentionally at index `3` to make sure explicit & implicit binding constructors have different signature. Since we are going to replace the constructors that have binding info with static create methods, this is no longer necessary, and it is better for the argument order to match. Related to llvm#154221.
1 parent f3dcec0 commit aa02206

File tree

6 files changed

+10
-10
lines changed

6 files changed

+10
-10
lines changed

clang/lib/CodeGen/CGHLSLBuiltins.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,10 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
342342
}
343343
case Builtin::BI__builtin_hlsl_resource_handlefromimplicitbinding: {
344344
llvm::Type *HandleTy = CGM.getTypes().ConvertType(E->getType());
345-
Value *SpaceOp = EmitScalarExpr(E->getArg(1));
346-
Value *RangeOp = EmitScalarExpr(E->getArg(2));
347-
Value *IndexOp = EmitScalarExpr(E->getArg(3));
348-
Value *OrderID = EmitScalarExpr(E->getArg(4));
345+
Value *OrderID = EmitScalarExpr(E->getArg(1));
346+
Value *SpaceOp = EmitScalarExpr(E->getArg(2));
347+
Value *RangeOp = EmitScalarExpr(E->getArg(3));
348+
Value *IndexOp = EmitScalarExpr(E->getArg(4));
349349
Value *Name = EmitScalarExpr(E->getArg(5));
350350
llvm::Intrinsic::ID IntrinsicID =
351351
CGM.getHLSLRuntime().getCreateHandleFromImplicitBindingIntrinsic();

clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ BuiltinTypeDeclBuilder::addHandleConstructorFromImplicitBinding() {
670670
.addParam("orderId", AST.UnsignedIntTy)
671671
.addParam("name", AST.getPointerType(AST.CharTy.withConst()))
672672
.callBuiltin("__builtin_hlsl_resource_handlefromimplicitbinding",
673-
HandleType, PH::Handle, PH::_0, PH::_1, PH::_2, PH::_3,
673+
HandleType, PH::Handle, PH::_3, PH::_0, PH::_1, PH::_2,
674674
PH::_4)
675675
.assign(PH::Handle, PH::LastStmt)
676676
.finalize();

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2852,8 +2852,8 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
28522852
if (SemaRef.checkArgCount(TheCall, 6) ||
28532853
CheckResourceHandle(&SemaRef, TheCall, 0) ||
28542854
CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) ||
2855-
CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.IntTy) ||
2856-
CheckArgTypeMatches(&SemaRef, TheCall->getArg(3), AST.UnsignedIntTy) ||
2855+
CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy) ||
2856+
CheckArgTypeMatches(&SemaRef, TheCall->getArg(3), AST.IntTy) ||
28572857
CheckArgTypeMatches(&SemaRef, TheCall->getArg(4), AST.UnsignedIntTy) ||
28582858
CheckArgTypeMatches(&SemaRef, TheCall->getArg(5),
28592859
AST.getPointerType(AST.CharTy.withConst())))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ RESOURCE Buffer;
9797
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding'
9898
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
9999
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
100+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
100101
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
101102
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
102103
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
103-
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
104104
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
105105
// CHECK-NEXT: AlwaysInlineAttr
106106

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,10 @@ RESOURCE<float> Buffer;
144144
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding'
145145
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
146146
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
147+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
147148
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
148149
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
149150
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
150-
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
151151
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
152152
// CHECK-NEXT: AlwaysInlineAttr
153153

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,10 @@ RESOURCE<float> Buffer;
119119
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding'
120120
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
121121
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
122+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
122123
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
123124
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
124125
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
125-
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int'
126126
// CHECK-NEXT: DeclRefExpr {{.*}} 'const char *' ParmVar {{.*}} 'name' 'const char *'
127127
// CHECK-NEXT: AlwaysInlineAttr
128128

0 commit comments

Comments
 (0)