https://github.com/jurahul updated https://github.com/llvm/llvm-project/pull/139749
>From cddc08de74e539c47e93efc4eb65cb4417b747de Mon Sep 17 00:00:00 2001 From: Rahul Joshi <rjo...@nvidia.com> Date: Tue, 13 May 2025 08:04:08 -0700 Subject: [PATCH] [NFC][Clang] Add `setExprs` overload to reduce some code duplication Add a `setExprs` overload to `OpenACCClauseWithExprs` that allows initializing the trailing storage to help eliminate some code duplication in various subclass constructors. --- clang/include/clang/AST/OpenACCClause.h | 82 +++++++++++-------------- clang/lib/AST/OpenACCClause.cpp | 3 +- 2 files changed, 36 insertions(+), 49 deletions(-) diff --git a/clang/include/clang/AST/OpenACCClause.h b/clang/include/clang/AST/OpenACCClause.h index fd101336acd9d..d9f5f35d692b0 100644 --- a/clang/include/clang/AST/OpenACCClause.h +++ b/clang/include/clang/AST/OpenACCClause.h @@ -492,7 +492,7 @@ class OpenACCSelfClause final /// Represents a clause that has one or more expressions associated with it. class OpenACCClauseWithExprs : public OpenACCClauseWithParams { - MutableArrayRef<Expr *> Exprs; + MutableArrayRef<Expr *> Storage; protected: OpenACCClauseWithExprs(OpenACCClauseKind K, SourceLocation BeginLoc, @@ -501,20 +501,28 @@ class OpenACCClauseWithExprs : public OpenACCClauseWithParams { /// Used only for initialization, the leaf class can initialize this to /// trailing storage. - void setExprs(MutableArrayRef<Expr *> NewExprs) { - assert(Exprs.empty() && "Cannot change Exprs list"); - Exprs = NewExprs; + void setExprs(MutableArrayRef<Expr *> NewStorage) { + assert(Storage.empty() && "Cannot change Exprs list"); + Storage = NewStorage; + } + + /// Used only for initialization, the leaf class can initialize this to + /// trailing storage, and initialize the data in the trailing storage as well. + void setExprs(MutableArrayRef<Expr *> NewStorage, ArrayRef<Expr *> Exprs) { + assert(NewStorage.size() == Exprs.size()); + llvm::uninitialized_copy(Exprs, NewStorage.begin()); + setExprs(NewStorage); } /// Gets the entire list of expressions, but leave it to the /// individual clauses to expose this how they'd like. - llvm::ArrayRef<Expr *> getExprs() const { return Exprs; } + llvm::ArrayRef<Expr *> getExprs() const { return Storage; } public: static bool classof(const OpenACCClause *C); child_range children() { - return child_range(reinterpret_cast<Stmt **>(Exprs.begin()), - reinterpret_cast<Stmt **>(Exprs.end())); + return child_range(reinterpret_cast<Stmt **>(Storage.begin()), + reinterpret_cast<Stmt **>(Storage.end())); } const_child_range children() const { @@ -578,8 +586,7 @@ class OpenACCNumGangsClause final ArrayRef<Expr *> IntExprs, SourceLocation EndLoc) : OpenACCClauseWithExprs(OpenACCClauseKind::NumGangs, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(IntExprs, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(IntExprs.size())); + setExprs(getTrailingObjects<Expr *>(IntExprs.size()), IntExprs); } public: @@ -607,8 +614,7 @@ class OpenACCTileClause final ArrayRef<Expr *> SizeExprs, SourceLocation EndLoc) : OpenACCClauseWithExprs(OpenACCClauseKind::Tile, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(SizeExprs, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(SizeExprs.size())); + setExprs(getTrailingObjects<Expr *>(SizeExprs.size()), SizeExprs); } public: @@ -845,8 +851,7 @@ class OpenACCPrivateClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Private, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -867,8 +872,7 @@ class OpenACCFirstPrivateClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::FirstPrivate, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -889,8 +893,7 @@ class OpenACCDevicePtrClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::DevicePtr, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -911,8 +914,7 @@ class OpenACCAttachClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Attach, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -933,8 +935,7 @@ class OpenACCDetachClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Detach, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -955,8 +956,7 @@ class OpenACCDeleteClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Delete, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -977,8 +977,7 @@ class OpenACCUseDeviceClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::UseDevice, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -999,8 +998,7 @@ class OpenACCNoCreateClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::NoCreate, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1021,8 +1019,7 @@ class OpenACCPresentClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Present, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1042,8 +1039,7 @@ class OpenACCHostClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Host, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1065,8 +1061,7 @@ class OpenACCDeviceClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Device, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1093,8 +1088,7 @@ class OpenACCCopyClause final Spelling == OpenACCClauseKind::PCopy || Spelling == OpenACCClauseKind::PresentOrCopy) && "Invalid clause kind for copy-clause"); - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1127,8 +1121,7 @@ class OpenACCCopyInClause final Spelling == OpenACCClauseKind::PCopyIn || Spelling == OpenACCClauseKind::PresentOrCopyIn) && "Invalid clause kind for copyin-clause"); - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1160,8 +1153,7 @@ class OpenACCCopyOutClause final Spelling == OpenACCClauseKind::PCopyOut || Spelling == OpenACCClauseKind::PresentOrCopyOut) && "Invalid clause kind for copyout-clause"); - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1193,8 +1185,7 @@ class OpenACCCreateClause final Spelling == OpenACCClauseKind::PCreate || Spelling == OpenACCClauseKind::PresentOrCreate) && "Invalid clause kind for create-clause"); - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1223,8 +1214,7 @@ class OpenACCReductionClause final : OpenACCClauseWithVarList(OpenACCClauseKind::Reduction, BeginLoc, LParenLoc, EndLoc), Op(Operator) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1249,8 +1239,7 @@ class OpenACCLinkClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::Link, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: @@ -1273,8 +1262,7 @@ class OpenACCDeviceResidentClause final ArrayRef<Expr *> VarList, SourceLocation EndLoc) : OpenACCClauseWithVarList(OpenACCClauseKind::DeviceResident, BeginLoc, LParenLoc, EndLoc) { - llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(VarList.size())); + setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList); } public: diff --git a/clang/lib/AST/OpenACCClause.cpp b/clang/lib/AST/OpenACCClause.cpp index 447545c733050..0c141fc908820 100644 --- a/clang/lib/AST/OpenACCClause.cpp +++ b/clang/lib/AST/OpenACCClause.cpp @@ -166,8 +166,7 @@ OpenACCGangClause::OpenACCGangClause(SourceLocation BeginLoc, : OpenACCClauseWithExprs(OpenACCClauseKind::Gang, BeginLoc, LParenLoc, EndLoc) { assert(GangKinds.size() == IntExprs.size() && "Mismatch exprs/kind?"); - llvm::uninitialized_copy(IntExprs, getTrailingObjects<Expr *>()); - setExprs(getTrailingObjects<Expr *>(IntExprs.size())); + setExprs(getTrailingObjects<Expr *>(IntExprs.size()), IntExprs); llvm::uninitialized_copy(GangKinds, getTrailingObjects<OpenACCGangKind>()); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits