diff options
author | Nikita Popov <npopov@redhat.com> | 2022-03-23 11:21:46 +0100 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2022-03-23 11:31:49 +0100 |
commit | ba2be802b04a19c2398401867de3746df1bad7d6 (patch) | |
tree | 8d45bce4e74d018748d840792299e9ae6c8dadb7 | |
parent | 1b89c83254e533d92fcd9ad03c3695ddf5572f7a (diff) | |
download | llvm-ba2be802b04a19c2398401867de3746df1bad7d6.zip llvm-ba2be802b04a19c2398401867de3746df1bad7d6.tar.gz llvm-ba2be802b04a19c2398401867de3746df1bad7d6.tar.bz2 |
[CGOpenMPRuntime] Reuse getDepobjElements() (NFC)
There were two more places repeating this code, reuse the helper.
This requires moving the static functions into the class.
-rw-r--r-- | clang/lib/CodeGen/CGOpenMPRuntime.cpp | 72 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGOpenMPRuntime.h | 8 |
2 files changed, 24 insertions, 56 deletions
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index b7ee9ce..ee51420 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 c4a7724..f1419eb 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.h +++ b/clang/lib/CodeGen/CGOpenMPRuntime.h @@ -920,6 +920,14 @@ private: 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, ".", ".") {} |