Skip to content

Commit 752ed77

Browse files
committed
flip register & space, add more tests, cleanup empty function
1 parent 85001dc commit 752ed77

12 files changed

+122
-52
lines changed

clang/lib/CodeGen/CGHLSLBuiltins.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
293293
}
294294
case Builtin::BI__builtin_hlsl_resource_createhandlefrombinding: {
295295
llvm::Type *HandleTy = CGM.getTypes().ConvertType(E->getType());
296-
Value *SpaceNoOp = EmitScalarExpr(E->getArg(1));
297-
Value *RegisterNoOp = EmitScalarExpr(E->getArg(2));
296+
Value *RegisterNoOp = EmitScalarExpr(E->getArg(1));
297+
Value *SpaceNoOp = EmitScalarExpr(E->getArg(2));
298298
Value *RangeOp = EmitScalarExpr(E->getArg(3));
299299
Value *IndexOp = EmitScalarExpr(E->getArg(4));
300300
// FIXME: NonUniformResourceIndex bit is not yet implemented

clang/lib/CodeGen/CGHLSLRuntime.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -544,9 +544,6 @@ static void initializeBufferFromBinding(CodeGenModule &CGM,
544544
Args);
545545
}
546546

547-
void CGHLSLRuntime::handleGlobalVarDefinition(const VarDecl *VD,
548-
llvm::GlobalVariable *GV) {}
549-
550547
llvm::Instruction *CGHLSLRuntime::getConvergenceToken(BasicBlock &BB) {
551548
if (!CGM.shouldEmitConvergenceTokens())
552549
return nullptr;

clang/lib/CodeGen/CGHLSLRuntime.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ class CGHLSLRuntime {
150150

151151
void emitEntryFunction(const FunctionDecl *FD, llvm::Function *Fn);
152152
void setHLSLFunctionAttributes(const FunctionDecl *FD, llvm::Function *Fn);
153-
void handleGlobalVarDefinition(const VarDecl *VD, llvm::GlobalVariable *Var);
154153

155154
llvm::Instruction *getConvergenceToken(llvm::BasicBlock &BB);
156155

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5698,9 +5698,6 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D,
56985698
getCUDARuntime().handleVarRegistration(D, *GV);
56995699
}
57005700

5701-
if (LangOpts.HLSL)
5702-
getHLSLRuntime().handleGlobalVarDefinition(D, GV);
5703-
57045701
GV->setInitializer(Init);
57055702
if (emitter)
57065703
emitter->finalize(GV);

clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,8 +658,8 @@ BuiltinTypeDeclBuilder::addHandleConstructorFromBinding() {
658658
QualType HandleType = getResourceHandleField()->getType();
659659

660660
return BuiltinTypeMethodBuilder(*this, "", AST.VoidTy, false, true)
661-
.addParam("spaceNo", AST.UnsignedIntTy)
662661
.addParam("registerNo", AST.UnsignedIntTy)
662+
.addParam("spaceNo", AST.UnsignedIntTy)
663663
.addParam("range", AST.IntTy)
664664
.addParam("index", AST.UnsignedIntTy)
665665
.callBuiltin("__builtin_hlsl_resource_createhandlefrombinding",

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3207,7 +3207,7 @@ void SemaHLSL::ActOnVariableDeclarator(VarDecl *VD) {
32073207
}
32083208
}
32093209

3210-
static bool initVarDeclWithConstructor(Sema &S, VarDecl *VD,
3210+
static bool initVarDeclWithCtor(Sema &S, VarDecl *VD,
32113211
MutableArrayRef<Expr *> Args) {
32123212
InitializedEntity Entity = InitializedEntity::InitializeVariable(VD);
32133213
InitializationKind Kind = InitializationKind::CreateDirect(
@@ -3235,17 +3235,17 @@ static bool initGlobalResourceDecl(Sema &S, VarDecl *VD) {
32353235
uint64_t UIntTySize = AST.getTypeSize(AST.UnsignedIntTy);
32363236
uint64_t IntTySize = AST.getTypeSize(AST.IntTy);
32373237
Expr *Args[] = {
3238+
IntegerLiteral::Create(AST, llvm::APInt(UIntTySize, RBA->getSlotNumber()),
3239+
AST.UnsignedIntTy, SourceLocation()),
32383240
IntegerLiteral::Create(AST,
32393241
llvm::APInt(UIntTySize, RBA->getSpaceNumber()),
32403242
AST.UnsignedIntTy, SourceLocation()),
3241-
IntegerLiteral::Create(AST, llvm::APInt(UIntTySize, RBA->getSlotNumber()),
3242-
AST.UnsignedIntTy, SourceLocation()),
32433243
IntegerLiteral::Create(AST, llvm::APInt(IntTySize, 1), AST.IntTy,
32443244
SourceLocation()),
32453245
IntegerLiteral::Create(AST, llvm::APInt(UIntTySize, 0), AST.UnsignedIntTy,
32463246
SourceLocation())};
32473247

3248-
return initVarDeclWithConstructor(S, VD, Args);
3248+
return initVarDeclWithCtor(S, VD, Args);
32493249
}
32503250

32513251
// Returns true in the initialization has been handled;

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,41 @@ RESOURCE Buffer;
4242
// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]
4343
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(char8_t)]]
4444

45+
// Default constructor
46+
47+
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]] 'void ()' inline
48+
// CHECK-NEXT: CompoundStmt
49+
// CHECK-NEXT: BinaryOperator {{.*}} '='
50+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
51+
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
52+
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t
53+
// CHECK-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>
54+
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_createpoisonhandle'
55+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
56+
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
57+
// CHECK-NEXT: AlwaysInlineAttr
58+
59+
// Constructor from binding
60+
61+
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]] 'void (unsigned int, unsigned int, int, unsigned int)' inline
62+
// CHECK-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'
63+
// CHECK-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
64+
// CHECK-NEXT: ParmVarDecl {{.*}} range 'int'
65+
// CHECK-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
66+
// CHECK-NEXT: CompoundStmt {{.*}}
67+
// CHECK-NEXT: BinaryOperator {{.*}} '='
68+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
69+
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
70+
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t
71+
// CHECK-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>
72+
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_createhandlefrombinding'
73+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
74+
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this
75+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'
76+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
77+
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
78+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
79+
// CHECK-NEXT: AlwaysInlineAttr
80+
4581
// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'const element_type &(unsigned int) const'
4682
// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'element_type &(unsigned int)'

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ RESOURCE<float> Buffer;
106106
// Constructor from binding
107107

108108
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void (unsigned int, unsigned int, int, unsigned int)' inline
109-
// CHECK-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
110109
// CHECK-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'
110+
// CHECK-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
111111
// CHECK-NEXT: ParmVarDecl {{.*}} range 'int'
112112
// CHECK-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
113113
// CHECK-NEXT: CompoundStmt {{.*}}
@@ -119,8 +119,8 @@ RESOURCE<float> Buffer;
119119
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_createhandlefrombinding'
120120
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
121121
// CHECK-NEXT: CXXThisExpr {{.*}} '[[RESOURCE]]<element_type>' lvalue implicit this
122-
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
123122
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'
123+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
124124
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
125125
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
126126
// CHECK-NEXT: AlwaysInlineAttr

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,44 @@ RESOURCE<float> Buffer;
5656
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
5757
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
5858

59+
// Default constructor
60+
61+
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void ()' inline
62+
// CHECK-NEXT: CompoundStmt
63+
// CHECK-NEXT: BinaryOperator {{.*}} '='
64+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
65+
// CHECK-NEXT: CXXThisExpr {{.*}} '[[RESOURCE]]<element_type>' lvalue implicit this
66+
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t
67+
// CHECK-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>
68+
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_createpoisonhandle'
69+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
70+
// CHECK-NEXT: CXXThisExpr {{.*}} '[[RESOURCE]]<element_type>' lvalue implicit this
71+
// CHECK-NEXT: AlwaysInlineAttr
72+
73+
// Constructor from binding
74+
75+
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void (unsigned int, unsigned int, int, unsigned int)' inline
76+
// CHECK-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'
77+
// CHECK-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
78+
// CHECK-NEXT: ParmVarDecl {{.*}} range 'int'
79+
// CHECK-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
80+
// CHECK-NEXT: CompoundStmt {{.*}}
81+
// CHECK-NEXT: BinaryOperator {{.*}} '='
82+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
83+
// CHECK-NEXT: CXXThisExpr {{.*}} '[[RESOURCE]]<element_type>' lvalue implicit this
84+
// CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t
85+
// CHECK-NEXT: ImplicitCastExpr {{.*}} <BuiltinFnToFnPtr>
86+
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_createhandlefrombinding'
87+
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
88+
// CHECK-NEXT: CXXThisExpr {{.*}} '[[RESOURCE]]<element_type>' lvalue implicit this
89+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int'
90+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'spaceNo' 'unsigned int'
91+
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' ParmVar {{.*}} 'range' 'int'
92+
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'index' 'unsigned int'
93+
// CHECK-NEXT: AlwaysInlineAttr
94+
95+
// Subsctript operators
96+
5997
// CHECK: CXXMethodDecl {{.*}} operator[] 'const element_type &(unsigned int) const'
6098
// CHECK-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
6199
// CHECK-NEXT: CompoundStmt
@@ -88,6 +126,8 @@ RESOURCE<float> Buffer;
88126
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'Index' 'unsigned int'
89127
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
90128

129+
// Load method
130+
91131
// CHECK-NEXT: CXXMethodDecl {{.*}} Load 'element_type (unsigned int)'
92132
// CHECK-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
93133
// CHECK-NEXT: CompoundStmt

clang/test/CodeGenHLSL/builtins/ByteAddressBuffers-constructors.hlsl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,25 @@ export void foo() {
3030
// CHECK: define internal void @__cxx_global_var_init()
3131
// CHECK-NEXT: entry:
3232
// CHECK-NEXT: call void @_ZN4hlsl17ByteAddressBufferC1Ejjij(ptr noundef nonnull align 4 dereferenceable(4) @_ZL4Buf1,
33-
// CHECK-SAME: i32 noundef 2, i32 noundef 1, i32 noundef 1, i32 noundef 0)
33+
// CHECK-SAME: i32 noundef 1, i32 noundef 2, i32 noundef 1, i32 noundef 0)
3434

3535
// Buf1 initialization part 2 - body of ByteAddressBuffer C1 constructor with explicit binding that calls the C2 constructor
3636
// CHECK: define linkonce_odr void @_ZN4hlsl17ByteAddressBufferC1Ejjij(ptr noundef nonnull align 4 dereferenceable(4) %this,
37-
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %registerNo, i32 noundef %range, i32 noundef %index)
37+
// CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index)
3838
// CHECK-NEXT: entry:
3939
// CHECK-NEXT: %this.addr = alloca ptr, align 4
40-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
4140
// CHECK-NEXT: %registerNo.addr = alloca i32, align 4
41+
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
4242
// CHECK-NEXT: %range.addr = alloca i32, align 4
4343
// CHECK-NEXT: %index.addr = alloca i32, align 4
4444
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
45-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
4645
// CHECK-NEXT: store i32 %registerNo, ptr %registerNo.addr, align 4
46+
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
4747
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
4848
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
4949
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
50-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
51-
// CHECK-NEXT: %1 = load i32, ptr %registerNo.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
5252
// CHECK-NEXT: %2 = load i32, ptr %range.addr, align 4
5353
// CHECK-NEXT: %3 = load i32, ptr %index.addr, align 4
5454
// CHECK: call void @_ZN4hlsl17ByteAddressBufferC2Ejjij(ptr noundef nonnull align 4 dereferenceable(4) %this1,
@@ -81,25 +81,25 @@ export void foo() {
8181
// Buf1 initialization part 3 - ByteAddressBuffer C2 constructor with explicit binding that initializes
8282
// handle with @llvm.dx.resource.handlefrombinding
8383
// CHECK: define linkonce_odr void @_ZN4hlsl17ByteAddressBufferC2Ejjij(ptr noundef nonnull align 4 dereferenceable(4) %this,
84-
// CHECK-SAME: i32 noundef %spaceNo, i32 noundef %registerNo, i32 noundef %range, i32 noundef %index)
84+
// CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index)
8585
// CHECK-NEXT: entry:
8686
// CHECK-NEXT: %this.addr = alloca ptr, align 4
87-
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
8887
// CHECK-NEXT: %registerNo.addr = alloca i32, align 4
88+
// CHECK-NEXT: %spaceNo.addr = alloca i32, align 4
8989
// CHECK-NEXT: %range.addr = alloca i32, align 4
9090
// CHECK-NEXT: %index.addr = alloca i32, align 4
9191
// CHECK-NEXT: store ptr %this, ptr %this.addr, align 4
92-
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
9392
// CHECK-NEXT: store i32 %registerNo, ptr %registerNo.addr, align 4
93+
// CHECK-NEXT: store i32 %spaceNo, ptr %spaceNo.addr, align 4
9494
// CHECK-NEXT: store i32 %range, ptr %range.addr, align 4
9595
// CHECK-NEXT: store i32 %index, ptr %index.addr, align 4
9696
// CHECK-NEXT: %this1 = load ptr, ptr %this.addr, align 4
97-
// CHECK-NEXT: %0 = load i32, ptr %spaceNo.addr, align 4
98-
// CHECK-NEXT: %1 = load i32, ptr %registerNo.addr, align 4
97+
// CHECK-NEXT: %0 = load i32, ptr %registerNo.addr, align 4
98+
// CHECK-NEXT: %1 = load i32, ptr %spaceNo.addr, align 4
9999
// CHECK-NEXT: %2 = load i32, ptr %range.addr, align 4
100100
// CHECK-NEXT: %3 = load i32, ptr %index.addr, align 4
101101
// CHECK-DXIL-NEXT: %4 = call target("dx.RawBuffer", i8, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i8_0_0t(
102-
// CHECK-SAME: i32 %0, i32 %1, i32 %2, i32 %3, i1 false)
102+
// CHECK-DXIL-SAME: i32 %1, i32 %0, i32 %2, i32 %3, i1 false)
103103
// CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::ByteAddressBuffer", ptr %this1, i32 0, i32 0
104104
// CHECK-DXIL-NEXT: store target("dx.RawBuffer", i8, 0, 0) %4, ptr %__handle, align 4
105105
// CHECK-NEXT: ret void

0 commit comments

Comments
 (0)