ABataev added inline comments. ================ Comment at: lib/CodeGen/CGOpenMPRuntime.h:188-212 @@ -179,2 +187,27 @@ }; + + /// \brief Values for bit flags used to specify the mapping type for + /// offloading. + enum OpenMPOffloadMappingFlags { + /// \brief Only allocate memory on the device without moving any data. This + /// is the default if no other flags are specified. + OMP_MAP_ALLOC = 0x00, + /// \brief Allocate memory on the device and move data from host to device. + OMP_MAP_TO = 0x01, + /// \brief Allocate memory on the device and move data from device to host. + OMP_MAP_FROM = 0x02, + }; + + enum OpenMPOffloadingReservedDeviceIDs { + /// \brief Device ID if the device was not defined, runtime should get it + /// from environment variables in the spec. + OMP_DEVICEID_UNDEF = -1, + /// \brief Means the target region should be executed by all devices before + /// a regular target region atemps to run on them. Used for Ctors. + OMP_DEVICEID_CTORS = -2, + /// \brief Means target all devices that were used in the current shared + /// library. Used for Dtors. + OMP_DEVICEID_DTORS = -3 + }; + CodeGenModule &CGM; ---------------- Seems to me these enums are not used right now, must be removed
================ Comment at: lib/CodeGen/CGStmt.cpp:2212-2240 @@ -2210,2 +2211,31 @@ FunctionArgList Args; - Args.append(CD->param_begin(), CD->param_end()); + + // If this is an offload function, we need pass a reference to each captured + // declarations as arguments. + if (isOffloadFunction) { + DeclContext *DC = CapturedDecl::castToDeclContext(CD)->getParent(); + auto ri = RD->field_begin(); + for (CapturedStmt::const_capture_iterator ci = S.capture_begin(), + ce = S.capture_end(); + ci != ce; ++ci, ++ri) { + StringRef Name; + QualType Ty; + if (ci->capturesVariableArrayType()) { + Ty = Ctx.getPointerType(ri->getType()); + Name = "__vla_size"; + } else if (ci->capturesThis()) { + Ty = ri->getType(); + Name = "__this"; + } else { + const VarDecl *VD = ci->getCapturedVar(); + Ty = Ctx.getPointerType(VD->getType()); + Name = VD->getName(); + } + + IdentifierInfo *ParamName = &Ctx.Idents.get(Name); + ImplicitParamDecl *Param = + ImplicitParamDecl::Create(Ctx, DC, Loc, ParamName, Ty); + Args.push_back(Param); + } + } else + Args.append(CD->param_begin(), CD->param_end()); ---------------- Why do you need all this stuff here? Why you can't use variables captured in CapturedDecl? http://reviews.llvm.org/D11361 _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits