aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.hpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-02-05 23:41:10 +0000
committergingerBill <bill@gingerbill.org>2020-02-05 23:41:10 +0000
commit09e1cf0737e9fd950ca63f94fe3d9da62ef48ef9 (patch)
treef4bbab550522ca8b56a8403e3eecbb2763a0a893 /src/llvm_backend.hpp
parent992858b687d9ff53b53239864114ff7ece22449d (diff)
IfStmt
Diffstat (limited to 'src/llvm_backend.hpp')
-rw-r--r--src/llvm_backend.hpp150
1 files changed, 85 insertions, 65 deletions
diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp
index 3046ebfea..0dfd14163 100644
--- a/src/llvm_backend.hpp
+++ b/src/llvm_backend.hpp
@@ -85,71 +85,37 @@ struct lbBranchBlocks {
lbBlock *continue_;
};
-enum lbCallingConventionKind {
- lbCallingConvention_C = 0,
- lbCallingConvention_Fast = 8,
- lbCallingConvention_Cold = 9,
- lbCallingConvention_GHC = 10,
- lbCallingConvention_HiPE = 11,
- lbCallingConvention_WebKit_JS = 12,
- lbCallingConvention_AnyReg = 13,
- lbCallingConvention_PreserveMost = 14,
- lbCallingConvention_PreserveAll = 15,
- lbCallingConvention_Swift = 16,
- lbCallingConvention_CXX_FAST_TLS = 17,
- lbCallingConvention_FirstTargetCC = 64,
- lbCallingConvention_X86_StdCall = 64,
- lbCallingConvention_X86_FastCall = 65,
- lbCallingConvention_ARM_APCS = 66,
- lbCallingConvention_ARM_AAPCS = 67,
- lbCallingConvention_ARM_AAPCS_VFP = 68,
- lbCallingConvention_MSP430_INTR = 69,
- lbCallingConvention_X86_ThisCall = 70,
- lbCallingConvention_PTX_Kernel = 71,
- lbCallingConvention_PTX_Device = 72,
- lbCallingConvention_SPIR_FUNC = 75,
- lbCallingConvention_SPIR_KERNEL = 76,
- lbCallingConvention_Intel_OCL_BI = 77,
- lbCallingConvention_X86_64_SysV = 78,
- lbCallingConvention_Win64 = 79,
- lbCallingConvention_X86_VectorCall = 80,
- lbCallingConvention_HHVM = 81,
- lbCallingConvention_HHVM_C = 82,
- lbCallingConvention_X86_INTR = 83,
- lbCallingConvention_AVR_INTR = 84,
- lbCallingConvention_AVR_SIGNAL = 85,
- lbCallingConvention_AVR_BUILTIN = 86,
- lbCallingConvention_AMDGPU_VS = 87,
- lbCallingConvention_AMDGPU_GS = 88,
- lbCallingConvention_AMDGPU_PS = 89,
- lbCallingConvention_AMDGPU_CS = 90,
- lbCallingConvention_AMDGPU_KERNEL = 91,
- lbCallingConvention_X86_RegCall = 92,
- lbCallingConvention_AMDGPU_HS = 93,
- lbCallingConvention_MSP430_BUILTIN = 94,
- lbCallingConvention_AMDGPU_LS = 95,
- lbCallingConvention_AMDGPU_ES = 96,
- lbCallingConvention_AArch64_VectorCall = 97,
- lbCallingConvention_MaxID = 1023,
+
+struct lbContextData {
+ lbAddr ctx;
+ isize scope_index;
};
-lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = {
- lbCallingConvention_C, // ProcCC_Invalid,
- lbCallingConvention_C, // ProcCC_Odin,
- lbCallingConvention_C, // ProcCC_Contextless,
- lbCallingConvention_C, // ProcCC_CDecl,
- lbCallingConvention_X86_StdCall, // ProcCC_StdCall,
- lbCallingConvention_X86_FastCall, // ProcCC_FastCall,
+enum lbParamPasskind {
+ lbParamPass_Value, // Pass by value
+ lbParamPass_Pointer, // Pass as a pointer rather than by value
+ lbParamPass_Integer, // Pass as an integer of the same size
+ lbParamPass_ConstRef, // Pass as a pointer but the value is immutable
+ lbParamPass_BitCast, // Pass by value and bit cast to the correct type
+ lbParamPass_Tuple, // Pass across multiple parameters (System V AMD64, up to 2)
+};
- lbCallingConvention_C, // ProcCC_None,
+enum lbDeferExitKind {
+ lbDeferExit_Default,
+ lbDeferExit_Return,
+ lbDeferExit_Branch,
};
-struct lbContextData {
- lbAddr ctx;
- isize scope_index;
+struct lbTargetList {
+ lbTargetList *prev;
+ bool is_block;
+ lbBlock * break_;
+ lbBlock * continue_;
+ lbBlock * fallthrough_;
};
+
struct lbProcedure {
lbProcedure *parent;
Array<lbProcedure> children;
@@ -179,6 +145,7 @@ struct lbProcedure {
lbBlock * decl_block;
lbBlock * entry_block;
lbBlock * curr_block;
+ lbTargetList * target_list;
Array<lbContextData> context_stack;
@@ -187,14 +154,7 @@ struct lbProcedure {
bool return_ptr_hint_used;
};
-enum lbParamPasskind {
- lbParamPass_Value, // Pass by value
- lbParamPass_Pointer, // Pass as a pointer rather than by value
- lbParamPass_Integer, // Pass as an integer of the same size
- lbParamPass_ConstRef, // Pass as a pointer but the value is immutable
- lbParamPass_BitCast, // Pass by value and bit cast to the correct type
- lbParamPass_Tuple, // Pass across multiple parameters (System V AMD64, up to 2)
-};
+
@@ -251,3 +211,63 @@ lbAddr lb_add_global_generated(lbModule *m, Type *type, lbValue value={});
lbAddr lb_add_local(lbProcedure *p, Type *type, Entity *e=nullptr, bool zero_init=true, i32 param_index=0);
lbValue lb_emit_transmute(lbProcedure *p, lbValue value, Type *t);
+
+
+enum lbCallingConventionKind {
+ lbCallingConvention_C = 0,
+ lbCallingConvention_Fast = 8,
+ lbCallingConvention_Cold = 9,
+ lbCallingConvention_GHC = 10,
+ lbCallingConvention_HiPE = 11,
+ lbCallingConvention_WebKit_JS = 12,
+ lbCallingConvention_AnyReg = 13,
+ lbCallingConvention_PreserveMost = 14,
+ lbCallingConvention_PreserveAll = 15,
+ lbCallingConvention_Swift = 16,
+ lbCallingConvention_CXX_FAST_TLS = 17,
+ lbCallingConvention_FirstTargetCC = 64,
+ lbCallingConvention_X86_StdCall = 64,
+ lbCallingConvention_X86_FastCall = 65,
+ lbCallingConvention_ARM_APCS = 66,
+ lbCallingConvention_ARM_AAPCS = 67,
+ lbCallingConvention_ARM_AAPCS_VFP = 68,
+ lbCallingConvention_MSP430_INTR = 69,
+ lbCallingConvention_X86_ThisCall = 70,
+ lbCallingConvention_PTX_Kernel = 71,
+ lbCallingConvention_PTX_Device = 72,
+ lbCallingConvention_SPIR_FUNC = 75,
+ lbCallingConvention_SPIR_KERNEL = 76,
+ lbCallingConvention_Intel_OCL_BI = 77,
+ lbCallingConvention_X86_64_SysV = 78,
+ lbCallingConvention_Win64 = 79,
+ lbCallingConvention_X86_VectorCall = 80,
+ lbCallingConvention_HHVM = 81,
+ lbCallingConvention_HHVM_C = 82,
+ lbCallingConvention_X86_INTR = 83,
+ lbCallingConvention_AVR_INTR = 84,
+ lbCallingConvention_AVR_SIGNAL = 85,
+ lbCallingConvention_AVR_BUILTIN = 86,
+ lbCallingConvention_AMDGPU_VS = 87,
+ lbCallingConvention_AMDGPU_GS = 88,
+ lbCallingConvention_AMDGPU_PS = 89,
+ lbCallingConvention_AMDGPU_CS = 90,
+ lbCallingConvention_AMDGPU_KERNEL = 91,
+ lbCallingConvention_X86_RegCall = 92,
+ lbCallingConvention_AMDGPU_HS = 93,
+ lbCallingConvention_MSP430_BUILTIN = 94,
+ lbCallingConvention_AMDGPU_LS = 95,
+ lbCallingConvention_AMDGPU_ES = 96,
+ lbCallingConvention_AArch64_VectorCall = 97,
+ lbCallingConvention_MaxID = 1023,
+};
+
+lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = {
+ lbCallingConvention_C, // ProcCC_Invalid,
+ lbCallingConvention_C, // ProcCC_Odin,
+ lbCallingConvention_C, // ProcCC_Contextless,
+ lbCallingConvention_C, // ProcCC_CDecl,
+ lbCallingConvention_X86_StdCall, // ProcCC_StdCall,
+ lbCallingConvention_X86_FastCall, // ProcCC_FastCall,
+
+ lbCallingConvention_C, // ProcCC_None,
+};