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#ifndef PROTEUS_JIT_INTERFACE_HPP
12#define PROTEUS_JIT_INTERFACE_HPP
13
15
16#include <cassert>
17#include <cstring>
18#include <utility>
19
21extern "C" void __jit_register_lambda(const char *Symbol);
22extern "C" void __jit_init_host();
23extern "C" void __jit_init_device();
24extern "C" void __jit_finalize_host();
25extern "C" void __jit_finalize_device();
26extern "C" void __jit_enable_host();
27extern "C" void __jit_enable_device();
28extern "C" void __jit_disable_host();
29extern "C" void __jit_disable_device();
30
31namespace proteus {
32
33template <typename T>
34static __attribute__((noinline)) T jit_variable(T v, int pos = -1) {
35 RuntimeConstant RC;
36 std::memcpy(&RC, &v, sizeof(T));
37 RC.Slot = pos;
39
40 return v;
41}
42
43template <typename T>
44static __attribute__((noinline)) T &&register_lambda(T &&t,
45 const char *Symbol = "") {
46 assert(Symbol && "Expected non-null Symbol");
48 return std::forward<T>(t);
49}
50
51#if defined(__CUDACC__) || defined(__HIP__)
52template <typename T>
53__device__ __attribute__((noinline)) T *
54shared_array(size_t N, size_t ElemSize = sizeof(T)) {
55 __builtin_trap();
56}
57#endif
58
59inline void enable() {
62}
63
64inline void disable() {
67}
68
69inline void init() {
71#if PROTEUS_ENABLE_HIP || PROTEUS_ENABLE_CUDA
73#endif
74}
75
76inline void finalize() {
78#if PROTEUS_ENABLE_HIP || PROTEUS_ENABLE_CUDA
80#endif
81}
82
83} // namespace proteus
84
85#endif
void __jit_init_device()
Definition CompilerInterfaceDevice.cpp:63
void __jit_enable_device()
Definition CompilerInterfaceDevice.cpp:70
void __jit_disable_device()
Definition CompilerInterfaceDevice.cpp:75
__attribute__((used)) void __jit_register_fatbinary(void *Handle
Definition CompilerInterfaceDevice.cpp:37
void __jit_finalize_device()
Definition CompilerInterfaceDevice.cpp:65
void __jit_init_host()
Definition CompilerInterfaceHost.cpp:39
void __jit_disable_host()
Definition CompilerInterfaceHost.cpp:48
void __jit_enable_host()
Definition CompilerInterfaceHost.cpp:43
void __jit_finalize_host()
Definition CompilerInterfaceHost.cpp:41
void __jit_init_host()
Definition CompilerInterfaceHost.cpp:39
void __jit_init_device()
Definition CompilerInterfaceDevice.cpp:63
void __jit_enable_device()
Definition CompilerInterfaceDevice.cpp:70
void __jit_disable_host()
Definition CompilerInterfaceHost.cpp:48
void __jit_enable_host()
Definition CompilerInterfaceHost.cpp:43
void __jit_disable_device()
Definition CompilerInterfaceDevice.cpp:75
void __jit_finalize_host()
Definition CompilerInterfaceHost.cpp:41
void __jit_push_variable(proteus::RuntimeConstant RC)
void __jit_register_lambda(const char *Symbol)
void __jit_finalize_device()
Definition CompilerInterfaceDevice.cpp:65
Definition JitEngine.cpp:20
Definition CompilerInterfaceTypes.h:30