@@ -9105,82 +9105,6 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
9105
9105
FunctionUDMMap[CGF->CurFn].push_back(D);
9106
9106
}
9107
9107
9108
- /// Emit the array initialization or deletion portion for user-defined mapper
9109
- /// code generation. First, it evaluates whether an array section is mapped and
9110
- /// whether the \a MapType instructs to delete this section. If \a IsInit is
9111
- /// true, and \a MapType indicates to not delete this array, array
9112
- /// initialization code is generated. If \a IsInit is false, and \a MapType
9113
- /// indicates to not this array, array deletion code is generated.
9114
- void CGOpenMPRuntime::emitUDMapperArrayInitOrDel(
9115
- CodeGenFunction &MapperCGF, llvm::Value *Handle, llvm::Value *Base,
9116
- llvm::Value *Begin, llvm::Value *Size, llvm::Value *MapType,
9117
- llvm::Value *MapName, CharUnits ElementSize, llvm::BasicBlock *ExitBB,
9118
- bool IsInit) {
9119
- StringRef Prefix = IsInit ? ".init" : ".del";
9120
-
9121
- // Evaluate if this is an array section.
9122
- llvm::BasicBlock *BodyBB =
9123
- MapperCGF.createBasicBlock(getName({"omp.array", Prefix}));
9124
- llvm::Value *IsArray = MapperCGF.Builder.CreateICmpSGT(
9125
- Size, MapperCGF.Builder.getInt64(1), "omp.arrayinit.isarray");
9126
- llvm::Value *DeleteBit = MapperCGF.Builder.CreateAnd(
9127
- MapType,
9128
- MapperCGF.Builder.getInt64(
9129
- static_cast<std::underlying_type_t<OpenMPOffloadMappingFlags>>(
9130
- OpenMPOffloadMappingFlags::OMP_MAP_DELETE)));
9131
- llvm::Value *DeleteCond;
9132
- llvm::Value *Cond;
9133
- if (IsInit) {
9134
- // base != begin?
9135
- llvm::Value *BaseIsBegin = MapperCGF.Builder.CreateICmpNE(Base, Begin);
9136
- // IsPtrAndObj?
9137
- llvm::Value *PtrAndObjBit = MapperCGF.Builder.CreateAnd(
9138
- MapType,
9139
- MapperCGF.Builder.getInt64(
9140
- static_cast<std::underlying_type_t<OpenMPOffloadMappingFlags>>(
9141
- OpenMPOffloadMappingFlags::OMP_MAP_PTR_AND_OBJ)));
9142
- PtrAndObjBit = MapperCGF.Builder.CreateIsNotNull(PtrAndObjBit);
9143
- BaseIsBegin = MapperCGF.Builder.CreateAnd(BaseIsBegin, PtrAndObjBit);
9144
- Cond = MapperCGF.Builder.CreateOr(IsArray, BaseIsBegin);
9145
- DeleteCond = MapperCGF.Builder.CreateIsNull(
9146
- DeleteBit, getName({"omp.array", Prefix, ".delete"}));
9147
- } else {
9148
- Cond = IsArray;
9149
- DeleteCond = MapperCGF.Builder.CreateIsNotNull(
9150
- DeleteBit, getName({"omp.array", Prefix, ".delete"}));
9151
- }
9152
- Cond = MapperCGF.Builder.CreateAnd(Cond, DeleteCond);
9153
- MapperCGF.Builder.CreateCondBr(Cond, BodyBB, ExitBB);
9154
-
9155
- MapperCGF.EmitBlock(BodyBB);
9156
- // Get the array size by multiplying element size and element number (i.e., \p
9157
- // Size).
9158
- llvm::Value *ArraySize = MapperCGF.Builder.CreateNUWMul(
9159
- Size, MapperCGF.Builder.getInt64(ElementSize.getQuantity()));
9160
- // Remove OMP_MAP_TO and OMP_MAP_FROM from the map type, so that it achieves
9161
- // memory allocation/deletion purpose only.
9162
- llvm::Value *MapTypeArg = MapperCGF.Builder.CreateAnd(
9163
- MapType,
9164
- MapperCGF.Builder.getInt64(
9165
- ~static_cast<std::underlying_type_t<OpenMPOffloadMappingFlags>>(
9166
- OpenMPOffloadMappingFlags::OMP_MAP_TO |
9167
- OpenMPOffloadMappingFlags::OMP_MAP_FROM)));
9168
- MapTypeArg = MapperCGF.Builder.CreateOr(
9169
- MapTypeArg,
9170
- MapperCGF.Builder.getInt64(
9171
- static_cast<std::underlying_type_t<OpenMPOffloadMappingFlags>>(
9172
- OpenMPOffloadMappingFlags::OMP_MAP_IMPLICIT)));
9173
-
9174
- // Call the runtime API __tgt_push_mapper_component to fill up the runtime
9175
- // data structure.
9176
- llvm::Value *OffloadingArgs[] = {Handle, Base, Begin,
9177
- ArraySize, MapTypeArg, MapName};
9178
- MapperCGF.EmitRuntimeCall(
9179
- OMPBuilder.getOrCreateRuntimeFunction(CGM.getModule(),
9180
- OMPRTL___tgt_push_mapper_component),
9181
- OffloadingArgs);
9182
- }
9183
-
9184
9108
llvm::Function *CGOpenMPRuntime::getOrCreateUserDefinedMapperFunc(
9185
9109
const OMPDeclareMapperDecl *D) {
9186
9110
auto I = UDMMap.find(D);
0 commit comments