Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitEngine.hpp
Go to the documentation of this file.
1//===-- JitEngine.hpp -- Base JIT Engine header --===//
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_JITENGINE_HPP
12#define PROTEUS_JITENGINE_HPP
13
14#include <cstdlib>
15#include <optional>
16#include <string>
17
18#include <llvm/ADT/DenseMap.h>
19#include <llvm/Demangle/Demangle.h>
20#include <llvm/IR/Module.h>
21#include <llvm/Target/TargetMachine.h>
22
23#include "proteus/CoreLLVM.hpp"
24#include "proteus/Debug.h"
25#include "proteus/Hashing.hpp"
26#include "proteus/Logger.hpp"
27
28namespace proteus {
29
30using namespace llvm;
31
32inline bool getEnvOrDefaultBool(const char *VarName, bool Default) {
33
34 const char *EnvValue = std::getenv(VarName);
35 return EnvValue ? static_cast<bool>(std::stoi(EnvValue)) : Default;
36}
37
38inline int getEnvOrDefaultInt(const char *VarName, int Default) {
39
40 const char *EnvValue = std::getenv(VarName);
41 return EnvValue ? std::stoi(EnvValue) : Default;
42}
43
44class JitEngine {
45public:
47 void optimizeIR(Module &M, StringRef Arch, char OptLevel = '3',
48 unsigned CodegenOptLevel = 3);
49
50 bool isProteusDisabled() { return Config.PROTEUS_DISABLE; }
51
52 void enable() { Config.PROTEUS_DISABLE = false; }
53
54 void disable() { Config.PROTEUS_DISABLE = true; }
55
56protected:
57 void getRuntimeConstantValues(void **KernelArgs,
58 const ArrayRef<int32_t> RCIndices,
59 const ArrayRef<int32_t> RCTypes,
60 SmallVector<RuntimeConstant> &RCVec);
61
62 void runCleanupPassPipeline(Module &M);
63
64 JitEngine();
65
66 std::string mangleSuffix(HashT &HashValue);
67
68 struct {
82};
83
84} // namespace proteus
85
86#endif
void char int32_t int32_t * RCTypes
Definition CompilerInterfaceDevice.cpp:51
const char * VarName
Definition CompilerInterfaceDevice.cpp:20
void char int32_t * RCIndices
Definition CompilerInterfaceDevice.cpp:51
Definition Hashing.hpp:19
Definition JitEngine.hpp:44
JitEngine()
Definition JitEngine.cpp:28
bool PROTEUS_USE_STORED_CACHE
Definition JitEngine.hpp:69
bool PROTEUS_ASYNC_COMPILATION
Definition JitEngine.hpp:77
struct proteus::JitEngine::@0 Config
bool isProteusDisabled()
Definition JitEngine.hpp:50
std::string mangleSuffix(HashT &HashValue)
Definition JitEngine.cpp:66
InitLLVMTargets Init
Definition JitEngine.hpp:46
void getRuntimeConstantValues(void **KernelArgs, const ArrayRef< int32_t > RCIndices, const ArrayRef< int32_t > RCTypes, SmallVector< RuntimeConstant > &RCVec)
Definition JitEngine.cpp:80
bool PROTEUS_RELINK_GLOBALS_BY_COPY
Definition JitEngine.hpp:76
void disable()
Definition JitEngine.hpp:54
bool PROTEUS_SPECIALIZE_DIMS
Definition JitEngine.hpp:72
bool PROTEUS_ASYNC_TEST_BLOCKING
Definition JitEngine.hpp:79
bool PROTEUS_DUMP_LLVM_IR
Definition JitEngine.hpp:75
void optimizeIR(Module &M, StringRef Arch, char OptLevel='3', unsigned CodegenOptLevel=3)
Definition JitEngine.cpp:70
bool PROTEUS_DISABLE
Definition JitEngine.hpp:74
bool PROTEUS_USE_LIGHTWEIGHT_KERNEL_CLONE
Definition JitEngine.hpp:80
bool PROTEUS_SPECIALIZE_ARGS
Definition JitEngine.hpp:71
bool PROTEUS_SET_LAUNCH_BOUNDS
Definition JitEngine.hpp:70
void enable()
Definition JitEngine.hpp:52
int PROTEUS_ASYNC_THREADS
Definition JitEngine.hpp:78
void runCleanupPassPipeline(Module &M)
Definition JitEngine.cpp:76
bool PROTEUS_USE_HIP_RTC_CODEGEN
Definition JitEngine.hpp:73
Definition JitEngine.cpp:20
int getEnvOrDefaultInt(const char *VarName, int Default)
Definition JitEngine.hpp:38
bool getEnvOrDefaultBool(const char *VarName, bool Default)
Definition JitEngine.hpp:32
Definition CoreLLVM.hpp:137