17#include "llvm/ADT/APFloat.h"
18#include "llvm/ADT/STLExtras.h"
19#include "llvm/IR/BasicBlock.h"
20#include "llvm/IR/Constants.h"
21#include "llvm/IR/DerivedTypes.h"
22#include "llvm/IR/Function.h"
23#include "llvm/IR/IRBuilder.h"
24#include "llvm/IR/Instructions.h"
25#include "llvm/IR/LLVMContext.h"
26#include "llvm/IR/LegacyPassManager.h"
27#include "llvm/IR/Module.h"
28#include "llvm/IR/Type.h"
29#include "llvm/IR/Verifier.h"
30#include "llvm/MC/TargetRegistry.h"
31#include "llvm/Support/FileSystem.h"
32#include "llvm/Support/TargetSelect.h"
33#include "llvm/Support/raw_ostream.h"
34#include "llvm/Target/TargetMachine.h"
35#include "llvm/Target/TargetOptions.h"
36#include "llvm/TargetParser/Host.h"
38namespace Gyoji::codegen {
39 class CodeGeneratorLLVMContext {
41 CodeGeneratorLLVMContext(
45 ~CodeGeneratorLLVMContext();
77 void generate_operation_function_call(
82 void generate_operation_symbol(
88 void generate_operation_widen_numeric(
94 void generate_operation_array_index(
98 void generate_operation_dot(
104 void generate_operation_local_variable(
108 void generate_operation_local_declare(
112 void generate_operation_local_undeclare(
118 void generate_operation_literal_char(
122 void generate_operation_literal_string(
126 void generate_operation_literal_int(
130 void generate_operation_literal_float(
134 void generate_operation_literal_bool(
138 void generate_operation_literal_null(
142 void generate_operation_anonymous_structure(
148 void generate_operation_addressof(
152 void generate_operation_dereference(
156 void generate_operation_arithmetic_negate(
160 void generate_operation_bitwise_not(
164 void generate_operation_logical_not(
170 void generate_operation_add(
174 void generate_operation_subtract(
178 void generate_operation_multiply(
182 void generate_operation_divide(
186 void generate_operation_modulo(
190 void generate_operation_logical_and(
194 void generate_operation_logical_or(
198 void generate_operation_bitwise_and(
202 void generate_operation_bitwise_or(
206 void generate_operation_bitwise_xor(
210 void generate_operation_shift(
216 void generate_operation_comparison(
220 void generate_operation_sizeof_type(
225 void generate_operation_assign(
231 void generate_operation_jump_conditional(
235 void generate_operation_jump(
239 llvm::Value *generate_operation_return(
243 llvm::Value *generate_operation_return_void(
248 llvm::Value *generate_basic_block(
256 llvm::AllocaInst *CreateEntryBlockAlloca(
257 llvm::Function *TheFunction,
258 const llvm::StringRef & VarName
constexpr void generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen)
Compiler Context.
Definition gyoji-context.hpp:44
Basic block of a function.
Definition functions.hpp:118
Function inside a translation unit.
Definition functions.hpp:342
The middle-tier intermediate representation (MIR) of a translation unit.
Definition gyoji-mir.hpp:71
This class represents an anonymous structure.
Definition operations.hpp:1694
This subclass of OperationBinary represents indexing an array.
Definition operations.hpp:1249
This subclass of Operation represents a binary operation.
Definition operations.hpp:1101
This subclass of OperationUnary represents a cast operation.
Definition operations.hpp:1054
This subclass of Operation is used to access member variables of classes and other aggregate types by...
Definition operations.hpp:1285
Function call (invoke) operation.
Definition operations.hpp:1175
This operation represents a conditional jump.
Definition operations.hpp:1757
Unconditional Jump.
Definition operations.hpp:1797
Literal bool.
Definition operations.hpp:1620
Literal character.
Definition operations.hpp:1364
Literal float.
Definition operations.hpp:1571
Literal integer.
Definition operations.hpp:1433
Literal null.
Definition operations.hpp:1657
Literal string.
Definition operations.hpp:1395
Declare a local variable in scope.
Definition operations.hpp:1886
Un-declare a variable (remove it from scope)
Definition operations.hpp:1924
Load a local variable.
Definition operations.hpp:1328
Return from a function without a value.
Definition operations.hpp:1858
Return from a function with a value.
Definition operations.hpp:1835
The operation for obtaining the storage size of a type.
Definition operations.hpp:1717
Symbol-table lookup.
Definition operations.hpp:1209
This subclass of Operation represents a unary operation.
Definition operations.hpp:1012
This represents a type as declared in a translation unit.
Definition types.hpp:313