Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitInterface.hpp
Go to the documentation of this file.
1//===-- jit.hpp -- user interface to Proteus JIT library --===//
2//
3// Part of the Proteus Project, under the Apache License v2.0 with LLVM
4// Exceptions. See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//===----------------------------------------------------------------------===//
10
11// NOLINTBEGIN(readability-identifier-naming)
12
13#ifndef PROTEUS_JIT_INTERFACE_HPP
14#define PROTEUS_JIT_INTERFACE_HPP
15
17
18#include <cassert>
19#include <cstring>
20#include <utility>
21
23extern "C" void __jit_register_lambda(const char *Symbol);
24extern "C" void __jit_init_host();
25extern "C" void __jit_init_device();
26extern "C" void __jit_finalize_host();
27extern "C" void __jit_finalize_device();
28extern "C" void __jit_enable_host();
29extern "C" void __jit_enable_device();
30extern "C" void __jit_disable_host();
31extern "C" void __jit_disable_device();
32
33namespace proteus {
34
35template <typename T> __attribute__((noinline)) void jit_arg(T V) noexcept;
36#if defined(__CUDACC__) || defined(__HIP__)
37template <typename T>
38__attribute__((noinline)) __device__ void jit_arg(T V) noexcept;
39#endif
40
41template <typename T>
42static __attribute__((noinline)) T jit_variable(T v, int pos = -1) {
44 std::memcpy(&RC, &v, sizeof(T));
45 RC.Slot = pos;
47
48 return v;
49}
50
51template <typename T>
52static __attribute__((noinline)) T &&register_lambda(T &&t,
53 const char *Symbol = "") {
54 assert(Symbol && "Expected non-null Symbol");
56 return std::forward<T>(t);
57}
58
59#if defined(__CUDACC__) || defined(__HIP__)
60template <typename T>
61__device__ __attribute__((noinline)) T *
62shared_array([[maybe_unused]] size_t N,
63 [[maybe_unused]] size_t ElemSize = sizeof(T)) {
64 __builtin_trap();
65}
66#endif
67
68inline void enable() {
71}
72
73inline void disable() {
76}
77
78inline void init() {
80#if PROTEUS_ENABLE_HIP || PROTEUS_ENABLE_CUDA
82#endif
83}
84
85inline void finalize() {
87#if PROTEUS_ENABLE_HIP || PROTEUS_ENABLE_CUDA
89#endif
90}
91
92} // namespace proteus
93
94#endif
95
96// NOLINTEND(readability-identifier-naming)
void __jit_init_device()
Definition CompilerInterfaceDevice.cpp:65
void __jit_enable_device()
Definition CompilerInterfaceDevice.cpp:72
void __jit_disable_device()
Definition CompilerInterfaceDevice.cpp:77
void __jit_finalize_device()
Definition CompilerInterfaceDevice.cpp:67
void __jit_init_host()
Definition CompilerInterfaceHost.cpp:40
void __jit_disable_host()
Definition CompilerInterfaceHost.cpp:49
void __jit_enable_host()
Definition CompilerInterfaceHost.cpp:44
void __jit_finalize_host()
Definition CompilerInterfaceHost.cpp:42
void __jit_init_host()
Definition CompilerInterfaceHost.cpp:40
void __jit_init_device()
Definition CompilerInterfaceDevice.cpp:65
void __jit_enable_device()
Definition CompilerInterfaceDevice.cpp:72
void __jit_disable_host()
Definition CompilerInterfaceHost.cpp:49
void __jit_enable_host()
Definition CompilerInterfaceHost.cpp:44
void __jit_disable_device()
Definition CompilerInterfaceDevice.cpp:77
void __jit_finalize_host()
Definition CompilerInterfaceHost.cpp:42
void __jit_push_variable(proteus::RuntimeConstant RC)
void __jit_register_lambda(const char *Symbol)
void __jit_finalize_device()
Definition CompilerInterfaceDevice.cpp:67
Definition Dispatcher.cpp:14
__attribute__((noinline)) void jit_arg(T V) noexcept
Definition CompilerInterfaceTypes.h:38
int32_t Slot
Definition CompilerInterfaceTypes.h:54