sammine-lang
Loading...
Searching...
No Matches
LLVMRes.h
Go to the documentation of this file.
1#pragma once
2
4#include "util/Utilities.h"
5#include "llvm/ADT/APFloat.h"
6#include "llvm/ADT/STLExtras.h"
7#include "llvm/IR/BasicBlock.h"
8#include "llvm/IR/Constants.h"
9#include "llvm/IR/DerivedTypes.h"
10#include "llvm/IR/Function.h"
11#include "llvm/IR/IRBuilder.h"
12#include "llvm/IR/Instructions.h"
13#include "llvm/IR/LLVMContext.h"
14#include "llvm/IR/LegacyPassManager.h"
15#include "llvm/IR/Module.h"
16#include "llvm/IR/Type.h"
17#include "llvm/IR/Verifier.h"
18#include "llvm/MC/TargetRegistry.h"
19#include "llvm/Support/CodeGen.h"
20#include "llvm/Support/FileSystem.h"
21#include "llvm/Support/TargetSelect.h"
22#include "llvm/Support/raw_ostream.h"
23#include "llvm/Target/TargetMachine.h"
24#include "llvm/Target/TargetOptions.h"
25#include "llvm/TargetParser/Host.h"
26#include "llvm/TargetParser/Triple.h"
31namespace sammine_lang {
32class LLVMRes {
33public:
34 llvm::ExitOnError ExitOnErr;
35 std::unique_ptr<llvm::LLVMContext> Context;
36 std::unique_ptr<llvm::IRBuilder<>> Builder;
37 std::unique_ptr<llvm::Module> Module;
38
39 std::unique_ptr<SammineJIT> sammineJIT;
40
41 std::unique_ptr<llvm::TargetMachine> target_machine;
42 llvm::legacy::PassManager pass;
43 std::error_code EC;
44 LLVMRes() {
45 llvm::InitializeAllTargetInfos();
46 llvm::InitializeAllTargets();
47 llvm::InitializeAllTargetMCs();
48 llvm::InitializeNativeTargetAsmParser();
49 llvm::InitializeNativeTargetAsmPrinter();
50
51 sammineJIT = ExitOnErr(SammineJIT::Create());
52 InitializeEssentials();
53 }
54
55private:
56 void InitializeEssentials() {
57 Context = std::make_unique<llvm::LLVMContext>();
58 assert(Context);
59
60 Module = std::make_unique<llvm::Module>("KaleidoscopeJIT", *Context);
61 assert(Module);
62 llvm::Triple TargetTriple(LLVMGetDefaultTargetTriple());
63 std::string Error;
64 auto Target = llvm::TargetRegistry::lookupTarget(TargetTriple, Error);
65
66 auto CPU = "generic";
67 auto Features = "";
68 llvm::TargetOptions opt;
69 target_machine =
70 std::unique_ptr<llvm::TargetMachine>(Target->createTargetMachine(
71 TargetTriple, CPU, Features, opt, llvm::Reloc::PIC_));
72
73 Builder = std::make_unique<llvm::IRBuilder<>>(*Context);
74 assert(Builder);
75
76 Module->setDataLayout(target_machine->createDataLayout());
77 }
78};
79} // namespace sammine_lang
JIT Compiler based on Kaleidoscope.
Holds classes and functionalities for dealing with Error handling, source locations caching & indexin...