@@ -4728,44 +4728,25 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
4728
4728
}
4729
4729
}
4730
4730
4731
- static SmallVector<llvm::Value *, 4>
4732
- emitDepobjElementsSizes( CodeGenFunction &CGF, QualType &KmpDependInfoTy,
4733
- const OMPTaskDataTy::DependData &Data) {
4731
+ SmallVector<llvm::Value *, 4> CGOpenMPRuntime::emitDepobjElementsSizes(
4732
+ CodeGenFunction &CGF, QualType &KmpDependInfoTy,
4733
+ const OMPTaskDataTy::DependData &Data) {
4734
4734
assert(Data.DepKind == OMPC_DEPEND_depobj &&
4735
4735
"Expected depobj dependecy kind.");
4736
4736
SmallVector<llvm::Value *, 4> Sizes;
4737
4737
SmallVector<LValue, 4> SizeLVals;
4738
4738
ASTContext &C = CGF.getContext();
4739
- QualType FlagsTy;
4740
- getDependTypes(C, KmpDependInfoTy, FlagsTy);
4741
- RecordDecl *KmpDependInfoRD =
4742
- cast<RecordDecl>(KmpDependInfoTy->getAsTagDecl());
4743
- QualType KmpDependInfoPtrTy = C.getPointerType(KmpDependInfoTy);
4744
- llvm::Type *KmpDependInfoPtrT = CGF.ConvertTypeForMem(KmpDependInfoPtrTy);
4745
4739
{
4746
4740
OMPIteratorGeneratorScope IteratorScope(
4747
4741
CGF, cast_or_null<OMPIteratorExpr>(
4748
4742
Data.IteratorExpr ? Data.IteratorExpr->IgnoreParenImpCasts()
4749
4743
: nullptr));
4750
4744
for (const Expr *E : Data.DepExprs) {
4745
+ llvm::Value *NumDeps;
4746
+ LValue Base;
4751
4747
LValue DepobjLVal = CGF.EmitLValue(E->IgnoreParenImpCasts());
4752
- LValue Base = CGF.EmitLoadOfPointerLValue(
4753
- DepobjLVal.getAddress(CGF),
4754
- C.getPointerType(C.VoidPtrTy).castAs<PointerType>());
4755
- Address Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
4756
- Base.getAddress(CGF), KmpDependInfoPtrT,
4757
- CGF.ConvertTypeForMem(KmpDependInfoTy));
4758
- Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(),
4759
- Base.getTBAAInfo());
4760
- Address DepObjAddr = CGF.Builder.CreateGEP(
4761
- Addr, llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
4762
- LValue NumDepsBase = CGF.MakeAddrLValue(
4763
- DepObjAddr, KmpDependInfoTy, Base.getBaseInfo(), Base.getTBAAInfo());
4764
- // NumDeps = deps[i].base_addr;
4765
- LValue BaseAddrLVal = CGF.EmitLValueForField(
4766
- NumDepsBase, *std::next(KmpDependInfoRD->field_begin(), BaseAddr));
4767
- llvm::Value *NumDeps =
4768
- CGF.EmitLoadOfScalar(BaseAddrLVal, E->getExprLoc());
4748
+ std::tie(NumDeps, Base) =
4749
+ getDepobjElements(CGF, DepobjLVal, E->getExprLoc());
4769
4750
LValue NumLVal = CGF.MakeAddrLValue(
4770
4751
CGF.CreateMemTemp(C.getUIntPtrType(), "depobj.size.addr"),
4771
4752
C.getUIntPtrType());
@@ -4785,19 +4766,13 @@ emitDepobjElementsSizes(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
4785
4766
return Sizes;
4786
4767
}
4787
4768
4788
- static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
4789
- LValue PosLVal,
4790
- const OMPTaskDataTy::DependData &Data,
4791
- Address DependenciesArray) {
4769
+ void CGOpenMPRuntime::emitDepobjElements(CodeGenFunction &CGF,
4770
+ QualType &KmpDependInfoTy,
4771
+ LValue PosLVal,
4772
+ const OMPTaskDataTy::DependData &Data,
4773
+ Address DependenciesArray) {
4792
4774
assert(Data.DepKind == OMPC_DEPEND_depobj &&
4793
4775
"Expected depobj dependecy kind.");
4794
- ASTContext &C = CGF.getContext();
4795
- QualType FlagsTy;
4796
- getDependTypes(C, KmpDependInfoTy, FlagsTy);
4797
- RecordDecl *KmpDependInfoRD =
4798
- cast<RecordDecl>(KmpDependInfoTy->getAsTagDecl());
4799
- QualType KmpDependInfoPtrTy = C.getPointerType(KmpDependInfoTy);
4800
- llvm::Type *KmpDependInfoPtrT = CGF.ConvertTypeForMem(KmpDependInfoPtrTy);
4801
4776
llvm::Value *ElSize = CGF.getTypeSize(KmpDependInfoTy);
4802
4777
{
4803
4778
OMPIteratorGeneratorScope IteratorScope(
@@ -4806,26 +4781,11 @@ static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
4806
4781
: nullptr));
4807
4782
for (unsigned I = 0, End = Data.DepExprs.size(); I < End; ++I) {
4808
4783
const Expr *E = Data.DepExprs[I];
4784
+ llvm::Value *NumDeps;
4785
+ LValue Base;
4809
4786
LValue DepobjLVal = CGF.EmitLValue(E->IgnoreParenImpCasts());
4810
- LValue Base = CGF.EmitLoadOfPointerLValue(
4811
- DepobjLVal.getAddress(CGF),
4812
- C.getPointerType(C.VoidPtrTy).castAs<PointerType>());
4813
- Address Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
4814
- Base.getAddress(CGF), KmpDependInfoPtrT,
4815
- CGF.ConvertTypeForMem(KmpDependInfoTy));
4816
- Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(),
4817
- Base.getTBAAInfo());
4818
-
4819
- // Get number of elements in a single depobj.
4820
- Address DepObjAddr = CGF.Builder.CreateGEP(
4821
- Addr, llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
4822
- LValue NumDepsBase = CGF.MakeAddrLValue(
4823
- DepObjAddr, KmpDependInfoTy, Base.getBaseInfo(), Base.getTBAAInfo());
4824
- // NumDeps = deps[i].base_addr;
4825
- LValue BaseAddrLVal = CGF.EmitLValueForField(
4826
- NumDepsBase, *std::next(KmpDependInfoRD->field_begin(), BaseAddr));
4827
- llvm::Value *NumDeps =
4828
- CGF.EmitLoadOfScalar(BaseAddrLVal, E->getExprLoc());
4787
+ std::tie(NumDeps, Base) =
4788
+ getDepobjElements(CGF, DepobjLVal, E->getExprLoc());
4829
4789
4830
4790
// memcopy dependency data.
4831
4791
llvm::Value *Size = CGF.Builder.CreateNUWMul(
0 commit comments