Skip to content

Commit 7b04836

Browse files
committed
Refactor functions building the constructors.
1 parent 738e463 commit 7b04836

File tree

2 files changed

+39
-44
lines changed

2 files changed

+39
-44
lines changed

clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ struct BuiltinTypeMethodBuilder {
156156
BuiltinTypeDeclBuilder &finalize();
157157
Expr *getResourceHandleExpr();
158158

159+
BuiltinTypeMethodBuilder &getResourceHandle(PlaceHolder ResourceRecord);
160+
BuiltinTypeMethodBuilder &returnThis();
161+
159162
private:
160163
void createDecl();
161164

@@ -332,7 +335,7 @@ Expr *BuiltinTypeMethodBuilder::convertPlaceholder(PlaceHolder PH) {
332335
return DeclRefExpr::Create(
333336
AST, NestedNameSpecifierLoc(), SourceLocation(), ParamDecl, false,
334337
DeclarationNameInfo(ParamDecl->getDeclName(), SourceLocation()),
335-
ParamDecl->getType(), VK_PRValue);
338+
ParamDecl->getType().getNonReferenceType(), VK_PRValue);
336339
}
337340

338341
BuiltinTypeMethodBuilder::BuiltinTypeMethodBuilder(BuiltinTypeDeclBuilder &DB,
@@ -431,6 +434,29 @@ Expr *BuiltinTypeMethodBuilder::getResourceHandleExpr() {
431434
OK_Ordinary);
432435
}
433436

437+
BuiltinTypeMethodBuilder &
438+
BuiltinTypeMethodBuilder::getResourceHandle(PlaceHolder ResourceRecord) {
439+
ensureCompleteDecl();
440+
441+
Expr *ResourceExpr = convertPlaceholder(ResourceRecord);
442+
443+
ASTContext &AST = DeclBuilder.SemaRef.getASTContext();
444+
FieldDecl *HandleField = DeclBuilder.getResourceHandleField();
445+
MemberExpr *HandleExpr = MemberExpr::CreateImplicit(
446+
AST, ResourceExpr, false, HandleField, HandleField->getType(), VK_LValue,
447+
OK_Ordinary);
448+
StmtsList.push_back(HandleExpr);
449+
return *this;
450+
}
451+
452+
BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::returnThis() {
453+
ASTContext &AST = DeclBuilder.SemaRef.getASTContext();
454+
CXXThisExpr *ThisExpr = CXXThisExpr::Create(
455+
AST, SourceLocation(), Method->getFunctionObjectParameterType(), true);
456+
StmtsList.push_back(ThisExpr);
457+
return *this;
458+
}
459+
434460
template <typename... Ts>
435461
BuiltinTypeMethodBuilder &
436462
BuiltinTypeMethodBuilder::callBuiltin(StringRef BuiltinName,
@@ -687,23 +713,11 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addCopyConstructor() {
687713

688714
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
689715

690-
BuiltinTypeMethodBuilder Builder(*this, "", AST.VoidTy, false, true);
691-
Builder.addParam("other", ConstRecordRefType);
692-
Builder.ensureCompleteDecl();
693-
694-
ParmVarDecl *OtherParam = Builder.Method->getParamDecl(0);
695-
696-
Expr *OtherDeclRef = DeclRefExpr::Create(
697-
AST, NestedNameSpecifierLoc(), SourceLocation(), OtherParam, false,
698-
DeclarationNameInfo(OtherParam->getDeclName(), SourceLocation()),
699-
ConstRecordType, VK_LValue);
700-
701-
FieldDecl *HandleField = getResourceHandleField();
702-
Expr *OtherHandleMemberExpr = MemberExpr::CreateImplicit(
703-
AST, OtherDeclRef, false, HandleField, HandleField->getType(), VK_LValue,
704-
OK_Ordinary);
705-
706-
return Builder.assign(PH::Handle, OtherHandleMemberExpr).finalize();
716+
return BuiltinTypeMethodBuilder(*this, "", AST.VoidTy, false, true)
717+
.addParam("other", ConstRecordRefType)
718+
.getResourceHandle(PH::_0)
719+
.assign(PH::Handle, PH::LastStmt)
720+
.finalize();
707721
}
708722

709723
BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addCopyAssignmentOperator() {
@@ -717,32 +731,13 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addCopyAssignmentOperator() {
717731
QualType RecordRefType = AST.getLValueReferenceType(RecordType);
718732

719733
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
720-
721734
DeclarationName Name = AST.DeclarationNames.getCXXOperatorName(OO_Equal);
722-
BuiltinTypeMethodBuilder Builder(*this, Name, RecordRefType, false, false);
723-
Builder.addParam("other", ConstRecordRefType);
724-
Builder.ensureCompleteDecl();
725-
726-
ParmVarDecl *OtherParam = Builder.Method->getParamDecl(0);
727-
Expr *OtherDeclRef = DeclRefExpr::Create(
728-
AST, NestedNameSpecifierLoc(), SourceLocation(), OtherParam, false,
729-
DeclarationNameInfo(OtherParam->getDeclName(), SourceLocation()),
730-
ConstRecordType, VK_LValue);
731-
732-
FieldDecl *HandleField = getResourceHandleField();
733-
Expr *OtherHandleMemberExpr = MemberExpr::CreateImplicit(
734-
AST, OtherDeclRef, false, HandleField, HandleField->getType(), VK_LValue,
735-
OK_Ordinary);
736-
737-
Builder.assign(PH::Handle, OtherHandleMemberExpr);
738-
739-
// return *this;
740-
CXXThisExpr *This = CXXThisExpr::Create(
741-
AST, SourceLocation(), Builder.Method->getFunctionObjectParameterType(),
742-
true);
743-
Builder.StmtsList.push_back(This);
744-
745-
return Builder.finalize();
735+
return BuiltinTypeMethodBuilder(*this, Name, RecordRefType, false, false)
736+
.addParam("other", ConstRecordRefType)
737+
.getResourceHandle(PH::_0)
738+
.assign(PH::Handle, PH::LastStmt)
739+
.returnThis()
740+
.finalize();
746741
}
747742

748743
BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addArraySubscriptOperators() {

clang/test/CodeGenHLSL/resources/res-array-local-multi-dim.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void main() {
3939
// CHECK: %[[ref_tmp6:.*]] = alloca %"class.hlsl::RWBuffer", align 4
4040
// CHECK: %[[ref_tmp7:.*]] = alloca %"class.hlsl::RWBuffer", align 4
4141
// CHECK: %[[agg_tmp:.*]] = alloca [2 x [2 x %"class.hlsl::RWBuffer"]], align 4
42-
// CHECK: call void @_ZN4hlsl8RWBufferIfEC1ERKS1_(ptr noundef nonnull align 4 dereferenceable(4) %[[ref_tmp]], ptr noundef nonnull align 4 dereferenceable(4) @_ZL1A)
42+
// CHECK: call void @_ZN4hlsl8RWBufferIfEC1ERKS1_(ptr {{.*}} %[[ref_tmp]], ptr {{.*}} @_ZL1A)
4343
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIfEC1ERKS1_(ptr noundef nonnull align 4 dereferenceable(4) %[[ref_tmp1]], ptr noundef nonnull align 4 dereferenceable(4) %[[ref_tmp]])
4444
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIfEC1ERKS1_(ptr noundef nonnull align 4 dereferenceable(4) %[[ref_tmp2]], ptr noundef nonnull align 4 dereferenceable(4) @_ZL1B)
4545
// CHECK-NEXT: call void @_ZN4hlsl8RWBufferIfEC1ERKS1_(ptr noundef nonnull align 4 dereferenceable(4) %[[ref_tmp3]], ptr noundef nonnull align 4 dereferenceable(4) %[[ref_tmp2]])

0 commit comments

Comments
 (0)