86 lines · c
1//===---------- private.h - Target independent OpenMP target RTL ----------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Private function declarations and helper macros for debugging output.10//11//===----------------------------------------------------------------------===//12 13#ifndef _OMPTARGET_PRIVATE_H14#define _OMPTARGET_PRIVATE_H15 16#include "Shared/Debug.h"17#include "Shared/SourceInfo.h"18 19#include "OpenMP/InternalTypes.h"20 21#include "device.h"22#include "omptarget.h"23 24#include <cstdint>25 26extern int target(ident_t *Loc, DeviceTy &Device, void *HostPtr,27 KernelArgsTy &KernelArgs, AsyncInfoTy &AsyncInfo);28 29extern int target_activate_rr(DeviceTy &Device, uint64_t MemorySize,30 void *ReqAddr, bool isRecord, bool SaveOutput,31 uint64_t &ReqPtrArgOffset);32 33extern int target_replay(ident_t *Loc, DeviceTy &Device, void *HostPtr,34 void *DeviceMemory, int64_t DeviceMemorySize,35 void **TgtArgs, ptrdiff_t *TgtOffsets, int32_t NumArgs,36 int32_t NumTeams, int32_t ThreadLimit,37 uint64_t LoopTripCount, AsyncInfoTy &AsyncInfo);38 39extern void handleTargetOutcome(bool Success, ident_t *Loc);40 41////////////////////////////////////////////////////////////////////////////////42/// Print out the names and properties of the arguments to each kernel43static inline void44printKernelArguments(const ident_t *Loc, const int64_t DeviceId,45 const int32_t ArgNum, const int64_t *ArgSizes,46 const int64_t *ArgTypes, const map_var_info_t *ArgNames,47 const char *RegionType) {48 SourceInfo Info(Loc);49 INFO(OMP_INFOTYPE_ALL, DeviceId, "%s at %s:%d:%d with %d arguments:\n",50 RegionType, Info.getFilename(), Info.getLine(), Info.getColumn(),51 ArgNum);52 53 for (int32_t I = 0; I < ArgNum; ++I) {54 const map_var_info_t VarName = (ArgNames) ? ArgNames[I] : nullptr;55 const char *Type = nullptr;56 const char *Implicit =57 (ArgTypes[I] & OMP_TGT_MAPTYPE_IMPLICIT) ? "(implicit)" : "";58 59 if (ArgTypes[I] & OMP_TGT_MAPTYPE_ATTACH &&60 ArgTypes[I] & OMP_TGT_MAPTYPE_ALWAYS)61 Type = "attach:always";62 else if (ArgTypes[I] & OMP_TGT_MAPTYPE_ATTACH)63 Type = "attach";64 else if (ArgTypes[I] & OMP_TGT_MAPTYPE_TO &&65 ArgTypes[I] & OMP_TGT_MAPTYPE_FROM)66 Type = "tofrom";67 else if (ArgTypes[I] & OMP_TGT_MAPTYPE_TO)68 Type = "to";69 else if (ArgTypes[I] & OMP_TGT_MAPTYPE_FROM)70 Type = "from";71 else if (ArgTypes[I] & OMP_TGT_MAPTYPE_PRIVATE)72 Type = "private";73 else if (ArgTypes[I] & OMP_TGT_MAPTYPE_LITERAL)74 Type = "firstprivate";75 else if (ArgSizes[I] != 0)76 Type = "alloc";77 else78 Type = "use_address";79 80 INFO(OMP_INFOTYPE_ALL, DeviceId, "%s(%s)[%" PRId64 "] %s\n", Type,81 getNameFromMapping(VarName).c_str(), ArgSizes[I], Implicit);82 }83}84 85#endif86