Files
clang-p2996/offload/src/LegacyAPI.cpp
Johannes Doerfert 330d8983d2 [Offload] Move /openmp/libomptarget to /offload (#75125)
In a nutshell, this moves our libomptarget code to populate the offload
subproject.

With this commit, users need to enable the new LLVM/Offload subproject
as a runtime in their cmake configuration.
No further changes are expected for downstream code.

Tests and other components still depend on OpenMP and have also not been
renamed. The results below are for a build in which OpenMP and Offload
are enabled runtimes. In addition to the pure `git mv`, we needed to
adjust some CMake files. Nothing is intended to change semantics.

```
ninja check-offload
```
Works with the X86 and AMDGPU offload tests

```
ninja check-openmp
```
Still works but doesn't build offload tests anymore.

```
ls install/lib
```
Shows all expected libraries, incl.
- `libomptarget.devicertl.a`
- `libomptarget-nvptx-sm_90.bc`
- `libomptarget.rtl.amdgpu.so` -> `libomptarget.rtl.amdgpu.so.18git`
- `libomptarget.so` -> `libomptarget.so.18git`

Fixes: https://github.com/llvm/llvm-project/issues/75124

---------

Co-authored-by: Saiyedul Islam <Saiyedul.Islam@amd.com>
2024-04-22 09:51:33 -07:00

200 lines
9.8 KiB
C++

//===-------- LegacyAPI.cpp - 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
//
//===----------------------------------------------------------------------===//
//
// Legacy interfaces for libomptarget used to maintain backwards-compatibility.
//
//===----------------------------------------------------------------------===//
#include "OpenMP/OMPT/Interface.h"
#include "omptarget.h"
#include "private.h"
#include "Shared/Profile.h"
#ifdef OMPT_SUPPORT
using namespace llvm::omp::target::ompt;
#endif
EXTERN void __tgt_target_data_begin(int64_t DeviceId, int32_t ArgNum,
void **ArgsBase, void **Args,
int64_t *ArgSizes, int64_t *ArgTypes) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
__tgt_target_data_begin_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN void __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) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
__tgt_target_data_begin_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN void __tgt_target_data_end(int64_t DeviceId, int32_t ArgNum,
void **ArgsBase, void **Args,
int64_t *ArgSizes, int64_t *ArgTypes) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
__tgt_target_data_end_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN void __tgt_target_data_update(int64_t DeviceId, int32_t ArgNum,
void **ArgsBase, void **Args,
int64_t *ArgSizes, int64_t *ArgTypes) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
__tgt_target_data_update_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN void __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) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
__tgt_target_data_update_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN void __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) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
__tgt_target_data_end_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN int __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) {
TIMESCOPE_WITH_IDENT(Loc);
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
KernelArgsTy KernelArgs{1, ArgNum, ArgsBase, Args, ArgSizes,
ArgTypes, ArgNames, ArgMappers, 0};
return __tgt_target_kernel(Loc, DeviceId, -1, -1, HostPtr, &KernelArgs);
}
EXTERN int __tgt_target(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
void **ArgsBase, void **Args, int64_t *ArgSizes,
int64_t *ArgTypes) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN int __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) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, nullptr, nullptr);
}
EXTERN int __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) {
TIMESCOPE_WITH_IDENT(Loc);
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_mapper(Loc, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
ArgSizes, ArgTypes, ArgNames, ArgMappers);
}
EXTERN int __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) {
TIMESCOPE_WITH_IDENT(Loc);
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
KernelArgsTy KernelArgs{1, ArgNum, ArgsBase, Args, ArgSizes,
ArgTypes, ArgNames, ArgMappers, 0};
return __tgt_target_kernel(Loc, DeviceId, NumTeams, ThreadLimit, HostPtr,
&KernelArgs);
}
EXTERN int __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) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_teams_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase,
Args, ArgSizes, ArgTypes, nullptr, nullptr,
NumTeams, ThreadLimit);
}
EXTERN int __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) {
TIMESCOPE();
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_teams_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase,
Args, ArgSizes, ArgTypes, nullptr, nullptr,
NumTeams, ThreadLimit);
}
EXTERN int __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) {
TIMESCOPE_WITH_IDENT(Loc);
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_teams_mapper(Loc, DeviceId, HostPtr, ArgNum, ArgsBase,
Args, ArgSizes, ArgTypes, ArgNames,
ArgMappers, NumTeams, ThreadLimit);
}
EXTERN void __kmpc_push_target_tripcount_mapper(ident_t *Loc, int64_t DeviceId,
uint64_t LoopTripcount) {
TIMESCOPE_WITH_IDENT(Loc);
DP("WARNING: __kmpc_push_target_tripcount has been deprecated and is a noop");
}
EXTERN void __kmpc_push_target_tripcount(int64_t DeviceId,
uint64_t LoopTripcount) {
__kmpc_push_target_tripcount_mapper(nullptr, DeviceId, LoopTripcount);
}
EXTERN int __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) {
TIMESCOPE_WITH_IDENT(Loc);
OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
return __tgt_target_kernel(Loc, DeviceId, NumTeams, ThreadLimit, HostPtr,
KernelArgs);
}