roadrunner  2.6.0
Fast simulator for SBML models
MCJit.h
1 //
2 // Created by Ciaran on 25/10/2021.
3 //
4 
5 #ifndef ROADRUNNER_MCJIT_H
6 #define ROADRUNNER_MCJIT_H
7 
8 #include <rrRoadRunnerOptions.h>
9 #include "Jit.h"
10 
11 #ifdef _MSC_VER
12 #pragma warning(disable: 4146)
13 #pragma warning(disable: 4141)
14 #pragma warning(disable: 4267)
15 #pragma warning(disable: 4624)
16 #endif
17 
18 #include "llvm/ExecutionEngine/ExecutionEngine.h"
19 #include "llvm/IR/LegacyPassManager.h"
20 
21 #ifdef _MSC_VER
22 #pragma warning(default: 4146)
23 #pragma warning(default: 4141)
24 #pragma warning(default: 4267)
25 #pragma warning(default: 4624)
26 #endif
27 
28 
29 using namespace llvm;
30 using namespace rr;
31 
32 namespace rrllvm {
35  class MCJit : public Jit {
36  public:
37 
38  explicit MCJit(std::uint32_t options);
39 
40  ~MCJit() override = default;
41 
42 
43  std::string mangleName(const std::string &unmangledName) const override;
44 
45  void mapFunctionsToJitSymbols() override;
46 
47  void transferObjectsToResources(std::shared_ptr<rrllvm::ModelResources> modelResources) override;
48 
49  std::uint64_t lookupFunctionAddress(const std::string& name) override;
50 
51  void addObjectFile(rrOwningBinary owningObject) override;
52 
53  void addObjectFile(std::unique_ptr<llvm::object::ObjectFile> objectFile) override;
54 
55  void addObjectFile(std::unique_ptr<llvm::MemoryBuffer> obj) override;
56 
57  const llvm::DataLayout& getDataLayout() const override;
58 
59  void addModule() override;
60 
61  void addModule(llvm::Module* M) override;
62 
63  void addModule(std::unique_ptr<llvm::Module> M, std::unique_ptr<llvm::LLVMContext> ctx) override;
64 
71  void addModuleViaObjectFile();
72 
73  std::unique_ptr<llvm::MemoryBuffer> getCompiledModelFromCache(const std::string &sbmlMD5) override;
74 
75  ExecutionEngine* getExecutionEngineNonOwning() const;
76 
77  llvm::TargetMachine *getTargetMachine() ;
78 
79  llvm::legacy::FunctionPassManager *getFunctionPassManager() const ;
80 
81  llvm::raw_svector_ostream &getCompiledModuleStream();
82 
83  std::string getModuleAsString(std::string sbmlMD5) override;
84 
85  private:
95  void writeObjectToBinaryStream();
96 
97  void initFunctionPassManager();
98 
102  EngineBuilder engineBuilder;
103  std::unique_ptr<ExecutionEngine> executionEngine;
104  std::unique_ptr<llvm::legacy::FunctionPassManager> functionPassManager;
105  std::unique_ptr<std::string> errString;
106 
107  };
110 }
111 
112 #endif //ROADRUNNER_MCJIT_H