xref: /llvm-project/offload/src/LegacyAPI.cpp (revision 81d20d861e48f5202c9f79b47dee244674fb9121)
1330d8983SJohannes Doerfert //===-------- LegacyAPI.cpp - Target independent OpenMP target RTL --------===//
2330d8983SJohannes Doerfert //
3330d8983SJohannes Doerfert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4330d8983SJohannes Doerfert // See https://llvm.org/LICENSE.txt for license information.
5330d8983SJohannes Doerfert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6330d8983SJohannes Doerfert //
7330d8983SJohannes Doerfert //===----------------------------------------------------------------------===//
8330d8983SJohannes Doerfert //
9330d8983SJohannes Doerfert // Legacy interfaces for libomptarget used to maintain backwards-compatibility.
10330d8983SJohannes Doerfert //
11330d8983SJohannes Doerfert //===----------------------------------------------------------------------===//
12330d8983SJohannes Doerfert 
13330d8983SJohannes Doerfert #include "OpenMP/OMPT/Interface.h"
14330d8983SJohannes Doerfert #include "omptarget.h"
15330d8983SJohannes Doerfert #include "private.h"
16330d8983SJohannes Doerfert 
17330d8983SJohannes Doerfert #include "Shared/Profile.h"
18330d8983SJohannes Doerfert 
19330d8983SJohannes Doerfert #ifdef OMPT_SUPPORT
20330d8983SJohannes Doerfert using namespace llvm::omp::target::ompt;
21330d8983SJohannes Doerfert #endif
22330d8983SJohannes Doerfert 
__tgt_target_data_begin(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)23330d8983SJohannes Doerfert EXTERN void __tgt_target_data_begin(int64_t DeviceId, int32_t ArgNum,
24330d8983SJohannes Doerfert                                     void **ArgsBase, void **Args,
25330d8983SJohannes Doerfert                                     int64_t *ArgSizes, int64_t *ArgTypes) {
26330d8983SJohannes Doerfert   TIMESCOPE();
27330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
28330d8983SJohannes Doerfert   __tgt_target_data_begin_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
29330d8983SJohannes Doerfert                                  ArgSizes, ArgTypes, nullptr, nullptr);
30330d8983SJohannes Doerfert }
31330d8983SJohannes Doerfert 
__tgt_target_data_begin_nowait(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)32330d8983SJohannes Doerfert EXTERN void __tgt_target_data_begin_nowait(int64_t DeviceId, int32_t ArgNum,
33330d8983SJohannes Doerfert                                            void **ArgsBase, void **Args,
34330d8983SJohannes Doerfert                                            int64_t *ArgSizes, int64_t *ArgTypes,
35330d8983SJohannes Doerfert                                            int32_t DepNum, void *DepList,
36330d8983SJohannes Doerfert                                            int32_t NoAliasDepNum,
37330d8983SJohannes Doerfert                                            void *NoAliasDepList) {
38330d8983SJohannes Doerfert   TIMESCOPE();
39330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
40330d8983SJohannes Doerfert   __tgt_target_data_begin_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
41330d8983SJohannes Doerfert                                  ArgSizes, ArgTypes, nullptr, nullptr);
42330d8983SJohannes Doerfert }
43330d8983SJohannes Doerfert 
__tgt_target_data_end(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)44330d8983SJohannes Doerfert EXTERN void __tgt_target_data_end(int64_t DeviceId, int32_t ArgNum,
45330d8983SJohannes Doerfert                                   void **ArgsBase, void **Args,
46330d8983SJohannes Doerfert                                   int64_t *ArgSizes, int64_t *ArgTypes) {
47330d8983SJohannes Doerfert   TIMESCOPE();
48330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
49330d8983SJohannes Doerfert   __tgt_target_data_end_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
50330d8983SJohannes Doerfert                                ArgSizes, ArgTypes, nullptr, nullptr);
51330d8983SJohannes Doerfert }
52330d8983SJohannes Doerfert 
__tgt_target_data_update(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)53330d8983SJohannes Doerfert EXTERN void __tgt_target_data_update(int64_t DeviceId, int32_t ArgNum,
54330d8983SJohannes Doerfert                                      void **ArgsBase, void **Args,
55330d8983SJohannes Doerfert                                      int64_t *ArgSizes, int64_t *ArgTypes) {
56330d8983SJohannes Doerfert   TIMESCOPE();
57330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
58330d8983SJohannes Doerfert   __tgt_target_data_update_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
59330d8983SJohannes Doerfert                                   ArgSizes, ArgTypes, nullptr, nullptr);
60330d8983SJohannes Doerfert }
61330d8983SJohannes Doerfert 
__tgt_target_data_update_nowait(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)62330d8983SJohannes Doerfert EXTERN void __tgt_target_data_update_nowait(
63330d8983SJohannes Doerfert     int64_t DeviceId, int32_t ArgNum, void **ArgsBase, void **Args,
64330d8983SJohannes Doerfert     int64_t *ArgSizes, int64_t *ArgTypes, int32_t DepNum, void *DepList,
65330d8983SJohannes Doerfert     int32_t NoAliasDepNum, void *NoAliasDepList) {
66330d8983SJohannes Doerfert   TIMESCOPE();
67330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
68330d8983SJohannes Doerfert   __tgt_target_data_update_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
69330d8983SJohannes Doerfert                                   ArgSizes, ArgTypes, nullptr, nullptr);
70330d8983SJohannes Doerfert }
71330d8983SJohannes Doerfert 
__tgt_target_data_end_nowait(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)72330d8983SJohannes Doerfert EXTERN void __tgt_target_data_end_nowait(int64_t DeviceId, int32_t ArgNum,
73330d8983SJohannes Doerfert                                          void **ArgsBase, void **Args,
74330d8983SJohannes Doerfert                                          int64_t *ArgSizes, int64_t *ArgTypes,
75330d8983SJohannes Doerfert                                          int32_t DepNum, void *DepList,
76330d8983SJohannes Doerfert                                          int32_t NoAliasDepNum,
77330d8983SJohannes Doerfert                                          void *NoAliasDepList) {
78330d8983SJohannes Doerfert   TIMESCOPE();
79330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
80330d8983SJohannes Doerfert   __tgt_target_data_end_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
81330d8983SJohannes Doerfert                                ArgSizes, ArgTypes, nullptr, nullptr);
82330d8983SJohannes Doerfert }
83330d8983SJohannes Doerfert 
__tgt_target_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,uint32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers)84330d8983SJohannes Doerfert EXTERN int __tgt_target_mapper(ident_t *Loc, int64_t DeviceId, void *HostPtr,
85330d8983SJohannes Doerfert                                uint32_t ArgNum, void **ArgsBase, void **Args,
86330d8983SJohannes Doerfert                                int64_t *ArgSizes, int64_t *ArgTypes,
87330d8983SJohannes Doerfert                                map_var_info_t *ArgNames, void **ArgMappers) {
88330d8983SJohannes Doerfert   TIMESCOPE_WITH_IDENT(Loc);
89330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
90330d8983SJohannes Doerfert   KernelArgsTy KernelArgs{1,        ArgNum,   ArgsBase,   Args, ArgSizes,
91*81d20d86SJoseph Huber                           ArgTypes, ArgNames, ArgMappers, 0,    {},
92*81d20d86SJoseph Huber                           {},       {},       0};
93330d8983SJohannes Doerfert   return __tgt_target_kernel(Loc, DeviceId, -1, -1, HostPtr, &KernelArgs);
94330d8983SJohannes Doerfert }
95330d8983SJohannes Doerfert 
__tgt_target(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)96330d8983SJohannes Doerfert EXTERN int __tgt_target(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
97330d8983SJohannes Doerfert                         void **ArgsBase, void **Args, int64_t *ArgSizes,
98330d8983SJohannes Doerfert                         int64_t *ArgTypes) {
99330d8983SJohannes Doerfert   TIMESCOPE();
100330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
101330d8983SJohannes Doerfert   return __tgt_target_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
102330d8983SJohannes Doerfert                              ArgSizes, ArgTypes, nullptr, nullptr);
103330d8983SJohannes Doerfert }
104330d8983SJohannes Doerfert 
__tgt_target_nowait(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)105330d8983SJohannes Doerfert EXTERN int __tgt_target_nowait(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
106330d8983SJohannes Doerfert                                void **ArgsBase, void **Args, int64_t *ArgSizes,
107330d8983SJohannes Doerfert                                int64_t *ArgTypes, int32_t DepNum, void *DepList,
108330d8983SJohannes Doerfert                                int32_t NoAliasDepNum, void *NoAliasDepList) {
109330d8983SJohannes Doerfert   TIMESCOPE();
110330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
111330d8983SJohannes Doerfert   return __tgt_target_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
112330d8983SJohannes Doerfert                              ArgSizes, ArgTypes, nullptr, nullptr);
113330d8983SJohannes Doerfert }
114330d8983SJohannes Doerfert 
__tgt_target_nowait_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)115330d8983SJohannes Doerfert EXTERN int __tgt_target_nowait_mapper(
116330d8983SJohannes Doerfert     ident_t *Loc, int64_t DeviceId, void *HostPtr, int32_t ArgNum,
117330d8983SJohannes Doerfert     void **ArgsBase, void **Args, int64_t *ArgSizes, int64_t *ArgTypes,
118330d8983SJohannes Doerfert     map_var_info_t *ArgNames, void **ArgMappers, int32_t DepNum, void *DepList,
119330d8983SJohannes Doerfert     int32_t NoAliasDepNum, void *NoAliasDepList) {
120330d8983SJohannes Doerfert   TIMESCOPE_WITH_IDENT(Loc);
121330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
122330d8983SJohannes Doerfert   return __tgt_target_mapper(Loc, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
123330d8983SJohannes Doerfert                              ArgSizes, ArgTypes, ArgNames, ArgMappers);
124330d8983SJohannes Doerfert }
125330d8983SJohannes Doerfert 
__tgt_target_teams_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,uint32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers,int32_t NumTeams,int32_t ThreadLimit)126330d8983SJohannes Doerfert EXTERN int __tgt_target_teams_mapper(ident_t *Loc, int64_t DeviceId,
127330d8983SJohannes Doerfert                                      void *HostPtr, uint32_t ArgNum,
128330d8983SJohannes Doerfert                                      void **ArgsBase, void **Args,
129330d8983SJohannes Doerfert                                      int64_t *ArgSizes, int64_t *ArgTypes,
130330d8983SJohannes Doerfert                                      map_var_info_t *ArgNames,
131330d8983SJohannes Doerfert                                      void **ArgMappers, int32_t NumTeams,
132330d8983SJohannes Doerfert                                      int32_t ThreadLimit) {
133330d8983SJohannes Doerfert   TIMESCOPE_WITH_IDENT(Loc);
134330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
135330d8983SJohannes Doerfert   KernelArgsTy KernelArgs{1,        ArgNum,   ArgsBase,   Args, ArgSizes,
136*81d20d86SJoseph Huber                           ArgTypes, ArgNames, ArgMappers, 0,    {},
137*81d20d86SJoseph Huber                           {},       {},       0};
138330d8983SJohannes Doerfert   return __tgt_target_kernel(Loc, DeviceId, NumTeams, ThreadLimit, HostPtr,
139330d8983SJohannes Doerfert                              &KernelArgs);
140330d8983SJohannes Doerfert }
141330d8983SJohannes Doerfert 
__tgt_target_teams(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t NumTeams,int32_t ThreadLimit)142330d8983SJohannes Doerfert EXTERN int __tgt_target_teams(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
143330d8983SJohannes Doerfert                               void **ArgsBase, void **Args, int64_t *ArgSizes,
144330d8983SJohannes Doerfert                               int64_t *ArgTypes, int32_t NumTeams,
145330d8983SJohannes Doerfert                               int32_t ThreadLimit) {
146330d8983SJohannes Doerfert   TIMESCOPE();
147330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
148330d8983SJohannes Doerfert   return __tgt_target_teams_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase,
149330d8983SJohannes Doerfert                                    Args, ArgSizes, ArgTypes, nullptr, nullptr,
150330d8983SJohannes Doerfert                                    NumTeams, ThreadLimit);
151330d8983SJohannes Doerfert }
152330d8983SJohannes Doerfert 
__tgt_target_teams_nowait(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t NumTeams,int32_t ThreadLimit,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)153330d8983SJohannes Doerfert EXTERN int __tgt_target_teams_nowait(int64_t DeviceId, void *HostPtr,
154330d8983SJohannes Doerfert                                      int32_t ArgNum, void **ArgsBase,
155330d8983SJohannes Doerfert                                      void **Args, int64_t *ArgSizes,
156330d8983SJohannes Doerfert                                      int64_t *ArgTypes, int32_t NumTeams,
157330d8983SJohannes Doerfert                                      int32_t ThreadLimit, int32_t DepNum,
158330d8983SJohannes Doerfert                                      void *DepList, int32_t NoAliasDepNum,
159330d8983SJohannes Doerfert                                      void *NoAliasDepList) {
160330d8983SJohannes Doerfert   TIMESCOPE();
161330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
162330d8983SJohannes Doerfert   return __tgt_target_teams_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase,
163330d8983SJohannes Doerfert                                    Args, ArgSizes, ArgTypes, nullptr, nullptr,
164330d8983SJohannes Doerfert                                    NumTeams, ThreadLimit);
165330d8983SJohannes Doerfert }
166330d8983SJohannes Doerfert 
__tgt_target_teams_nowait_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers,int32_t NumTeams,int32_t ThreadLimit,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)167330d8983SJohannes Doerfert EXTERN int __tgt_target_teams_nowait_mapper(
168330d8983SJohannes Doerfert     ident_t *Loc, int64_t DeviceId, void *HostPtr, int32_t ArgNum,
169330d8983SJohannes Doerfert     void **ArgsBase, void **Args, int64_t *ArgSizes, int64_t *ArgTypes,
170330d8983SJohannes Doerfert     map_var_info_t *ArgNames, void **ArgMappers, int32_t NumTeams,
171330d8983SJohannes Doerfert     int32_t ThreadLimit, int32_t DepNum, void *DepList, int32_t NoAliasDepNum,
172330d8983SJohannes Doerfert     void *NoAliasDepList) {
173330d8983SJohannes Doerfert   TIMESCOPE_WITH_IDENT(Loc);
174330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
175330d8983SJohannes Doerfert   return __tgt_target_teams_mapper(Loc, DeviceId, HostPtr, ArgNum, ArgsBase,
176330d8983SJohannes Doerfert                                    Args, ArgSizes, ArgTypes, ArgNames,
177330d8983SJohannes Doerfert                                    ArgMappers, NumTeams, ThreadLimit);
178330d8983SJohannes Doerfert }
179330d8983SJohannes Doerfert 
__kmpc_push_target_tripcount_mapper(ident_t * Loc,int64_t DeviceId,uint64_t LoopTripcount)180330d8983SJohannes Doerfert EXTERN void __kmpc_push_target_tripcount_mapper(ident_t *Loc, int64_t DeviceId,
181330d8983SJohannes Doerfert                                                 uint64_t LoopTripcount) {
182330d8983SJohannes Doerfert   TIMESCOPE_WITH_IDENT(Loc);
183330d8983SJohannes Doerfert   DP("WARNING: __kmpc_push_target_tripcount has been deprecated and is a noop");
184330d8983SJohannes Doerfert }
185330d8983SJohannes Doerfert 
__kmpc_push_target_tripcount(int64_t DeviceId,uint64_t LoopTripcount)186330d8983SJohannes Doerfert EXTERN void __kmpc_push_target_tripcount(int64_t DeviceId,
187330d8983SJohannes Doerfert                                          uint64_t LoopTripcount) {
188330d8983SJohannes Doerfert   __kmpc_push_target_tripcount_mapper(nullptr, DeviceId, LoopTripcount);
189330d8983SJohannes Doerfert }
190330d8983SJohannes Doerfert 
__tgt_target_kernel_nowait(ident_t * Loc,int64_t DeviceId,int32_t NumTeams,int32_t ThreadLimit,void * HostPtr,KernelArgsTy * KernelArgs,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)191330d8983SJohannes Doerfert EXTERN int __tgt_target_kernel_nowait(ident_t *Loc, int64_t DeviceId,
192330d8983SJohannes Doerfert                                       int32_t NumTeams, int32_t ThreadLimit,
193330d8983SJohannes Doerfert                                       void *HostPtr, KernelArgsTy *KernelArgs,
194330d8983SJohannes Doerfert                                       int32_t DepNum, void *DepList,
195330d8983SJohannes Doerfert                                       int32_t NoAliasDepNum,
196330d8983SJohannes Doerfert                                       void *NoAliasDepList) {
197330d8983SJohannes Doerfert   TIMESCOPE_WITH_IDENT(Loc);
198330d8983SJohannes Doerfert   OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
199330d8983SJohannes Doerfert   return __tgt_target_kernel(Loc, DeviceId, NumTeams, ThreadLimit, HostPtr,
200330d8983SJohannes Doerfert                              KernelArgs);
201330d8983SJohannes Doerfert }
202