3#include "llvm/ADT/APFloat.h"
4#include "llvm/ADT/STLExtras.h"
5#include "llvm/IR/BasicBlock.h"
6#include "llvm/IR/Constants.h"
7#include "llvm/IR/DerivedTypes.h"
8#include "llvm/IR/Function.h"
9#include "llvm/IR/IRBuilder.h"
10#include "llvm/IR/Instructions.h"
11#include "llvm/IR/LLVMContext.h"
12#include "llvm/IR/LegacyPassManager.h"
13#include "llvm/IR/Module.h"
14#include "llvm/IR/Type.h"
15#include "llvm/IR/Verifier.h"
16#include "llvm/MC/TargetRegistry.h"
17#include "llvm/Support/FileSystem.h"
18#include "llvm/Support/TargetSelect.h"
19#include "llvm/Support/raw_ostream.h"
20#include "llvm/Target/TargetMachine.h"
21#include "llvm/Target/TargetOptions.h"
22#include "llvm/TargetParser/Host.h"
24namespace Gyoji::codegen {
25 class CodeGeneratorLLVMContext {
27 CodeGeneratorLLVMContext(
31 ~CodeGeneratorLLVMContext();
63 void generate_operation_function_call(
68 void generate_operation_symbol(
75 void generate_operation_widen_numeric(
82 void generate_operation_array_index(
88 void generate_operation_dot(
96 void generate_operation_local_variable(
102 void generate_operation_local_declare(
107 void generate_operation_local_undeclare(
114 void generate_operation_literal_char(
119 void generate_operation_literal_string(
124 void generate_operation_literal_int(
129 void generate_operation_literal_float(
134 void generate_operation_literal_bool(
139 void generate_operation_literal_null(
146 void generate_operation_addressof(
152 void generate_operation_dereference(
158 void generate_operation_arithmetic_negate(
163 void generate_operation_bitwise_not(
168 void generate_operation_logical_not(
175 void generate_operation_add(
180 void generate_operation_subtract(
185 void generate_operation_multiply(
190 void generate_operation_divide(
195 void generate_operation_modulo(
200 void generate_operation_logical_and(
205 void generate_operation_logical_or(
210 void generate_operation_bitwise_and(
215 void generate_operation_bitwise_or(
220 void generate_operation_bitwise_xor(
225 void generate_operation_shift(
232 void generate_operation_comparison(
237 void generate_operation_sizeof_type(
244 void generate_operation_assign(
252 void generate_operation_jump_conditional(
257 void generate_operation_jump(
262 llvm::Value *generate_operation_return(
267 llvm::Value *generate_operation_return_void(
273 llvm::Value *generate_basic_block(
281 llvm::AllocaInst *CreateEntryBlockAlloca(
282 llvm::Function *TheFunction,
283 const llvm::StringRef & VarName
constexpr void generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen)
Compiler Context.
Definition gyoji-context.hpp:30
Basic block of a function.
Definition functions.hpp:103
Function inside a translation unit.
Definition functions.hpp:303
The middle-tier intermediate representation (MIR) of a translation unit.
Definition gyoji-mir.hpp:57
This subclass of OperationBinary represents indexing an array.
Definition operations.hpp:1141
This subclass of Operation represents a binary operation.
Definition operations.hpp:1028
This subclass of OperationUnary represents a cast operation.
Definition operations.hpp:981
This subclass of Operation is used to access member variables of classes and other aggregate types by...
Definition operations.hpp:1177
Function call (invoke) operation.
Definition operations.hpp:1069
This operation represents a conditional jump.
Definition operations.hpp:1619
Unconditional Jump.
Definition operations.hpp:1655
Literal bool.
Definition operations.hpp:1512
Literal character.
Definition operations.hpp:1256
Literal float.
Definition operations.hpp:1463
Literal integer.
Definition operations.hpp:1325
Literal null.
Definition operations.hpp:1549
Literal string.
Definition operations.hpp:1287
Declare a local variable in scope.
Definition operations.hpp:1742
Un-declare a variable (remove it from scope)
Definition operations.hpp:1780
Load a local variable.
Definition operations.hpp:1220
Return from a function without a value.
Definition operations.hpp:1714
Return from a function with a value.
Definition operations.hpp:1691
The operation for obtaining the storage size of a type.
Definition operations.hpp:1579
Symbol-table lookup.
Definition operations.hpp:1102
This subclass of Operation represents a unary operation.
Definition operations.hpp:939
This represents a type as declared in a translation unit.
Definition types.hpp:299