This patch adds the `rpc_host_call` function as a GPU extension. This is exported from the `libc` project to use the RPC interface to call a function pointer via RPC any copying the arguments by-value. The interface can only support a single void pointer argument much like pthreads. The function call here is the bare-bones version of what's required for OpenMP reverse offloading. Full support will require interfacing with the mapping table, nowait support, etc. I decided to test this interface in `libomptarget` as that will be the primary consumer and it would be more difficult to make a test in `libc` due to the testing infrastructure not really having a concept of the "host" as it runs directly on the GPU as if it were a CPU target. Reviewed By: jplehr Differential Revision: https://reviews.llvm.org/D155003
24 lines
524 B
TableGen
24 lines
524 B
TableGen
def GPUExtensions : StandardSpec<"GPUExtensions"> {
|
|
HeaderSpec RPC = HeaderSpec<
|
|
"gpu/rpc.h",
|
|
[], // Macros
|
|
[], // Types
|
|
[], // Enumerations
|
|
[
|
|
FunctionSpec<
|
|
"rpc_reset",
|
|
RetValSpec<VoidType>,
|
|
[ArgSpec<UnsignedIntType>, ArgSpec<VoidPtr>]
|
|
>,
|
|
FunctionSpec<
|
|
"rpc_host_call",
|
|
RetValSpec<VoidType>,
|
|
[ArgSpec<VoidPtr>, ArgSpec<VoidPtr>, ArgSpec<SizeTType>]
|
|
>,
|
|
]
|
|
>;
|
|
let Headers = [
|
|
RPC,
|
|
];
|
|
}
|