@@ -9990,6 +9990,7 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
9990
9990
cast<VarDecl>(cast<DeclRefExpr>(D->getMapperVarRef())->getDecl());
9991
9991
SourceLocation Loc = D->getLocation();
9992
9992
CharUnits ElementSize = C.getTypeSizeInChars(Ty);
9993
+ llvm::Type *ElemTy = CGM.getTypes().ConvertTypeForMem(Ty);
9993
9994
9994
9995
// Prepare mapper function arguments and attributes.
9995
9996
ImplicitParamDecl HandleArg(C, /*DC=*/nullptr, Loc, /*Id=*/nullptr,
@@ -10044,8 +10045,7 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
10044
10045
Size, MapperCGF.Builder.getInt64(ElementSize.getQuantity()));
10045
10046
llvm::Value *PtrBegin = MapperCGF.Builder.CreateBitCast(
10046
10047
BeginIn, CGM.getTypes().ConvertTypeForMem(PtrTy));
10047
- llvm::Value *PtrEnd = MapperCGF.Builder.CreateGEP(
10048
- PtrBegin->getType()->getPointerElementType(), PtrBegin, Size);
10048
+ llvm::Value *PtrEnd = MapperCGF.Builder.CreateGEP(ElemTy, PtrBegin, Size);
10049
10049
llvm::Value *MapType = MapperCGF.EmitLoadOfScalar(
10050
10050
MapperCGF.GetAddrOfLocalVar(&TypeArg), /*Volatile=*/false,
10051
10051
C.getPointerType(Int64Ty), Loc);
@@ -10077,10 +10077,10 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
10077
10077
llvm::PHINode *PtrPHI = MapperCGF.Builder.CreatePHI(
10078
10078
PtrBegin->getType(), 2, "omp.arraymap.ptrcurrent");
10079
10079
PtrPHI->addIncoming(PtrBegin, EntryBB);
10080
- Address PtrCurrent =
10081
- Address::deprecated(PtrPHI, MapperCGF.GetAddrOfLocalVar(&BeginArg)
10082
- .getAlignment()
10083
- .alignmentOfArrayElement(ElementSize));
10080
+ Address PtrCurrent(PtrPHI, ElemTy,
10081
+ MapperCGF.GetAddrOfLocalVar(&BeginArg)
10082
+ .getAlignment()
10083
+ .alignmentOfArrayElement(ElementSize));
10084
10084
// Privatize the declared variable of mapper to be the current array element.
10085
10085
CodeGenFunction::OMPPrivateScope Scope(MapperCGF);
10086
10086
Scope.addPrivate(MapperVarDecl, PtrCurrent);
@@ -10202,7 +10202,6 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
10202
10202
10203
10203
// Update the pointer to point to the next element that needs to be mapped,
10204
10204
// and check whether we have mapped all elements.
10205
- llvm::Type *ElemTy = PtrPHI->getType()->getPointerElementType();
10206
10205
llvm::Value *PtrNext = MapperCGF.Builder.CreateConstGEP1_32(
10207
10206
ElemTy, PtrPHI, /*Idx0=*/1, "omp.arraymap.next");
10208
10207
PtrPHI->addIncoming(PtrNext, LastBB);
0 commit comments