Start writing actual compillation code in compiler series

This commit is contained in:
2019-11-05 00:42:33 -08:00
parent 81ee50d0d4
commit c79b5a4120
6 changed files with 260 additions and 7 deletions

View File

@@ -6,7 +6,7 @@
#include <llvm/IR/Module.h>
#include <map>
struct llvm_state {
struct llvm_context {
llvm::LLVMContext ctx;
llvm::IRBuilder<> builder;
llvm::Module module;
@@ -18,8 +18,9 @@ struct llvm_state {
llvm::PointerType* stack_ptr_type;
llvm::PointerType* node_ptr_type;
llvm::IntegerType* tag_type;
llvm::FunctionType* function_type;
llvm_state()
llvm_context()
: builder(ctx), module("bloglang", ctx) {
create_types();
create_functions();
@@ -27,4 +28,27 @@ struct llvm_state {
void create_types();
void create_functions();
llvm::Value* create_i8(int8_t);
llvm::Value* create_i32(int32_t);
llvm::Value* create_size(size_t);
llvm::Value* create_pop(llvm::Function*);
llvm::Value* create_peek(llvm::Function*, llvm::Value*);
void create_push(llvm::Function*, llvm::Value*);
void create_popn(llvm::Function*, llvm::Value*);
void create_update(llvm::Function*, llvm::Value*);
void create_pack(llvm::Function*, llvm::Value*, llvm::Value*);
void create_split(llvm::Function*, llvm::Value*);
void create_slide(llvm::Function*, llvm::Value*);
void create_alloc(llvm::Function*, llvm::Value*);
llvm::Value* create_eval(llvm::Value*);
llvm::Value* unwrap_num(llvm::Value*);
llvm::Value* create_num(llvm::Value*);
llvm::Value* create_global(llvm::Value*, llvm::Value*);
llvm::Value* create_app(llvm::Value*, llvm::Value*);
};