Author: Nikita Popov Date: 2022-03-23T11:31:49+01:00 New Revision: ba2be802b04a19c2398401867de3746df1bad7d6
URL: https://github.com/llvm/llvm-project/commit/ba2be802b04a19c2398401867de3746df1bad7d6 DIFF: https://github.com/llvm/llvm-project/commit/ba2be802b04a19c2398401867de3746df1bad7d6.diff LOG: [CGOpenMPRuntime] Reuse getDepobjElements() (NFC) There were two more places repeating this code, reuse the helper. This requires moving the static functions into the class. Added: Modified: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index b7ee9ce10e02b..ee51420c65026 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -4728,44 +4728,25 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy, } } -static SmallVector<llvm::Value *, 4> -emitDepobjElementsSizes(CodeGenFunction &CGF, QualType &KmpDependInfoTy, - const OMPTaskDataTy::DependData &Data) { +SmallVector<llvm::Value *, 4> CGOpenMPRuntime::emitDepobjElementsSizes( + CodeGenFunction &CGF, QualType &KmpDependInfoTy, + const OMPTaskDataTy::DependData &Data) { assert(Data.DepKind == OMPC_DEPEND_depobj && "Expected depobj dependecy kind."); SmallVector<llvm::Value *, 4> Sizes; SmallVector<LValue, 4> SizeLVals; ASTContext &C = CGF.getContext(); - QualType FlagsTy; - getDependTypes(C, KmpDependInfoTy, FlagsTy); - RecordDecl *KmpDependInfoRD = - cast<RecordDecl>(KmpDependInfoTy->getAsTagDecl()); - QualType KmpDependInfoPtrTy = C.getPointerType(KmpDependInfoTy); - llvm::Type *KmpDependInfoPtrT = CGF.ConvertTypeForMem(KmpDependInfoPtrTy); { OMPIteratorGeneratorScope IteratorScope( CGF, cast_or_null<OMPIteratorExpr>( Data.IteratorExpr ? Data.IteratorExpr->IgnoreParenImpCasts() : nullptr)); for (const Expr *E : Data.DepExprs) { + llvm::Value *NumDeps; + LValue Base; LValue DepobjLVal = CGF.EmitLValue(E->IgnoreParenImpCasts()); - LValue Base = CGF.EmitLoadOfPointerLValue( - DepobjLVal.getAddress(CGF), - C.getPointerType(C.VoidPtrTy).castAs<PointerType>()); - Address Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( - Base.getAddress(CGF), KmpDependInfoPtrT, - CGF.ConvertTypeForMem(KmpDependInfoTy)); - Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(), - Base.getTBAAInfo()); - Address DepObjAddr = CGF.Builder.CreateGEP( - Addr, llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true)); - LValue NumDepsBase = CGF.MakeAddrLValue( - DepObjAddr, KmpDependInfoTy, Base.getBaseInfo(), Base.getTBAAInfo()); - // NumDeps = deps[i].base_addr; - LValue BaseAddrLVal = CGF.EmitLValueForField( - NumDepsBase, *std::next(KmpDependInfoRD->field_begin(), BaseAddr)); - llvm::Value *NumDeps = - CGF.EmitLoadOfScalar(BaseAddrLVal, E->getExprLoc()); + std::tie(NumDeps, Base) = + getDepobjElements(CGF, DepobjLVal, E->getExprLoc()); LValue NumLVal = CGF.MakeAddrLValue( CGF.CreateMemTemp(C.getUIntPtrType(), "depobj.size.addr"), C.getUIntPtrType()); @@ -4785,19 +4766,13 @@ emitDepobjElementsSizes(CodeGenFunction &CGF, QualType &KmpDependInfoTy, return Sizes; } -static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy, - LValue PosLVal, - const OMPTaskDataTy::DependData &Data, - Address DependenciesArray) { +void CGOpenMPRuntime::emitDepobjElements(CodeGenFunction &CGF, + QualType &KmpDependInfoTy, + LValue PosLVal, + const OMPTaskDataTy::DependData &Data, + Address DependenciesArray) { assert(Data.DepKind == OMPC_DEPEND_depobj && "Expected depobj dependecy kind."); - ASTContext &C = CGF.getContext(); - QualType FlagsTy; - getDependTypes(C, KmpDependInfoTy, FlagsTy); - RecordDecl *KmpDependInfoRD = - cast<RecordDecl>(KmpDependInfoTy->getAsTagDecl()); - QualType KmpDependInfoPtrTy = C.getPointerType(KmpDependInfoTy); - llvm::Type *KmpDependInfoPtrT = CGF.ConvertTypeForMem(KmpDependInfoPtrTy); llvm::Value *ElSize = CGF.getTypeSize(KmpDependInfoTy); { OMPIteratorGeneratorScope IteratorScope( @@ -4806,26 +4781,11 @@ static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy, : nullptr)); for (unsigned I = 0, End = Data.DepExprs.size(); I < End; ++I) { const Expr *E = Data.DepExprs[I]; + llvm::Value *NumDeps; + LValue Base; LValue DepobjLVal = CGF.EmitLValue(E->IgnoreParenImpCasts()); - LValue Base = CGF.EmitLoadOfPointerLValue( - DepobjLVal.getAddress(CGF), - C.getPointerType(C.VoidPtrTy).castAs<PointerType>()); - Address Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( - Base.getAddress(CGF), KmpDependInfoPtrT, - CGF.ConvertTypeForMem(KmpDependInfoTy)); - Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(), - Base.getTBAAInfo()); - - // Get number of elements in a single depobj. - Address DepObjAddr = CGF.Builder.CreateGEP( - Addr, llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true)); - LValue NumDepsBase = CGF.MakeAddrLValue( - DepObjAddr, KmpDependInfoTy, Base.getBaseInfo(), Base.getTBAAInfo()); - // NumDeps = deps[i].base_addr; - LValue BaseAddrLVal = CGF.EmitLValueForField( - NumDepsBase, *std::next(KmpDependInfoRD->field_begin(), BaseAddr)); - llvm::Value *NumDeps = - CGF.EmitLoadOfScalar(BaseAddrLVal, E->getExprLoc()); + std::tie(NumDeps, Base) = + getDepobjElements(CGF, DepobjLVal, E->getExprLoc()); // memcopy dependency data. llvm::Value *Size = CGF.Builder.CreateNUWMul( diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.h b/clang/lib/CodeGen/CGOpenMPRuntime.h index c4a77242e82bf..f1419eb465b13 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.h +++ b/clang/lib/CodeGen/CGOpenMPRuntime.h @@ -920,6 +920,14 @@ class CGOpenMPRuntime { LValue DepobjLVal, SourceLocation Loc); + SmallVector<llvm::Value *, 4> + emitDepobjElementsSizes(CodeGenFunction &CGF, QualType &KmpDependInfoTy, + const OMPTaskDataTy::DependData &Data); + + void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy, + LValue PosLVal, const OMPTaskDataTy::DependData &Data, + Address DependenciesArray); + public: explicit CGOpenMPRuntime(CodeGenModule &CGM) : CGOpenMPRuntime(CGM, ".", ".") {} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits