xref: /llvm-project/offload/src/private.h (revision ff12c0061b7dbb8a82681a0e02a513bb84b1d143)
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Private function declarations and helper macros for debugging output.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef _OMPTARGET_PRIVATE_H
14 #define _OMPTARGET_PRIVATE_H
15 
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 
26 extern int target(ident_t *Loc, DeviceTy &Device, void *HostPtr,
27                   KernelArgsTy &KernelArgs, AsyncInfoTy &AsyncInfo);
28 
29 extern int target_activate_rr(DeviceTy &Device, uint64_t MemorySize,
30                               void *ReqAddr, bool isRecord, bool SaveOutput,
31                               uint64_t &ReqPtrArgOffset);
32 
33 extern 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 
39 extern void handleTargetOutcome(bool Success, ident_t *Loc);
40 
41 ////////////////////////////////////////////////////////////////////////////////
42 /// Print out the names and properties of the arguments to each kernel
43 static inline void
44 printKernelArguments(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     if (ArgTypes[I] & OMP_TGT_MAPTYPE_TO && ArgTypes[I] & OMP_TGT_MAPTYPE_FROM)
59       Type = "tofrom";
60     else if (ArgTypes[I] & OMP_TGT_MAPTYPE_TO)
61       Type = "to";
62     else if (ArgTypes[I] & OMP_TGT_MAPTYPE_FROM)
63       Type = "from";
64     else if (ArgTypes[I] & OMP_TGT_MAPTYPE_PRIVATE)
65       Type = "private";
66     else if (ArgTypes[I] & OMP_TGT_MAPTYPE_LITERAL)
67       Type = "firstprivate";
68     else if (ArgSizes[I] != 0)
69       Type = "alloc";
70     else
71       Type = "use_address";
72 
73     INFO(OMP_INFOTYPE_ALL, DeviceId, "%s(%s)[%" PRId64 "] %s\n", Type,
74          getNameFromMapping(VarName).c_str(), ArgSizes[I], Implicit);
75   }
76 }
77 
78 #endif
79