//===---------- private.h - Target independent OpenMP target RTL ----------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Private function declarations and helper macros for debugging output. // //===----------------------------------------------------------------------===// #ifndef _OMPTARGET_PRIVATE_H #define _OMPTARGET_PRIVATE_H #include "Shared/Debug.h" #include "Shared/SourceInfo.h" #include "OpenMP/InternalTypes.h" #include "device.h" #include "omptarget.h" #include extern int target(ident_t *Loc, DeviceTy &Device, void *HostPtr, KernelArgsTy &KernelArgs, AsyncInfoTy &AsyncInfo); extern int target_activate_rr(DeviceTy &Device, uint64_t MemorySize, void *ReqAddr, bool isRecord, bool SaveOutput, uint64_t &ReqPtrArgOffset); extern int target_replay(ident_t *Loc, DeviceTy &Device, void *HostPtr, void *DeviceMemory, int64_t DeviceMemorySize, void **TgtArgs, ptrdiff_t *TgtOffsets, int32_t NumArgs, int32_t NumTeams, int32_t ThreadLimit, uint64_t LoopTripCount, AsyncInfoTy &AsyncInfo); extern void handleTargetOutcome(bool Success, ident_t *Loc); extern bool checkDeviceAndCtors(int64_t &DeviceID, ident_t *Loc); //////////////////////////////////////////////////////////////////////////////// /// Print out the names and properties of the arguments to each kernel static inline void printKernelArguments(const ident_t *Loc, const int64_t DeviceId, const int32_t ArgNum, const int64_t *ArgSizes, const int64_t *ArgTypes, const map_var_info_t *ArgNames, const char *RegionType) { SourceInfo Info(Loc); INFO(OMP_INFOTYPE_ALL, DeviceId, "%s at %s:%d:%d with %d arguments:\n", RegionType, Info.getFilename(), Info.getLine(), Info.getColumn(), ArgNum); for (int32_t I = 0; I < ArgNum; ++I) { const map_var_info_t VarName = (ArgNames) ? ArgNames[I] : nullptr; const char *Type = nullptr; const char *Implicit = (ArgTypes[I] & OMP_TGT_MAPTYPE_IMPLICIT) ? "(implicit)" : ""; if (ArgTypes[I] & OMP_TGT_MAPTYPE_TO && ArgTypes[I] & OMP_TGT_MAPTYPE_FROM) Type = "tofrom"; else if (ArgTypes[I] & OMP_TGT_MAPTYPE_TO) Type = "to"; else if (ArgTypes[I] & OMP_TGT_MAPTYPE_FROM) Type = "from"; else if (ArgTypes[I] & OMP_TGT_MAPTYPE_PRIVATE) Type = "private"; else if (ArgTypes[I] & OMP_TGT_MAPTYPE_LITERAL) Type = "firstprivate"; else if (ArgSizes[I] != 0) Type = "alloc"; else Type = "use_address"; INFO(OMP_INFOTYPE_ALL, DeviceId, "%s(%s)[%" PRId64 "] %s\n", Type, getNameFromMapping(VarName).c_str(), ArgSizes[I], Implicit); } } #endif