aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/print_llvm.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2016-10-23 22:50:15 +0100
committerGinger Bill <bill@gingerbill.org>2016-10-23 22:50:15 +0100
commita5c1e83ce401eb78ae8e5b7b6a36ec812b3dfbf0 (patch)
tree1ecdda0750d011f16b962af73aea87f6e6cd18da /src/codegen/print_llvm.cpp
parentb454371f3b16d8c75671362ee673ccc72b722276 (diff)
Fix Type_Info bug overwriting type_info data.
Diffstat (limited to 'src/codegen/print_llvm.cpp')
-rw-r--r--src/codegen/print_llvm.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/codegen/print_llvm.cpp b/src/codegen/print_llvm.cpp
index 6b420236b..a1495f302 100644
--- a/src/codegen/print_llvm.cpp
+++ b/src/codegen/print_llvm.cpp
@@ -715,14 +715,24 @@ void ssa_print_instr(ssaFileBuffer *f, ssaModule *m, ssaValue *value) {
ssa_fprintf(f, "\n");
} break;
- case ssaInstr_ExtractValue: {
- Type *et = instr->ExtractValue.elem_type;
+ case ssaInstr_ArrayExtractValue: {
+ Type *et = ssa_type(instr->ArrayExtractValue.address);
ssa_fprintf(f, "%%%d = extractvalue ", value->index);
ssa_print_type(f, m, et);
ssa_fprintf(f, " ");
- ssa_print_value(f, m, instr->ExtractValue.address, et);
- ssa_fprintf(f, ", %d\n", instr->ExtractValue.index);
+ ssa_print_value(f, m, instr->ArrayExtractValue.address, et);
+ ssa_fprintf(f, ", %d\n", instr->ArrayExtractValue.index);
+ } break;
+
+ case ssaInstr_StructExtractValue: {
+ Type *et = ssa_type(instr->StructExtractValue.address);
+ ssa_fprintf(f, "%%%d = extractvalue ", value->index);
+
+ ssa_print_type(f, m, et);
+ ssa_fprintf(f, " ");
+ ssa_print_value(f, m, instr->StructExtractValue.address, et);
+ ssa_fprintf(f, ", %d\n", instr->StructExtractValue.index);
} break;
case ssaInstr_Jump: {;
@@ -731,14 +741,14 @@ void ssa_print_instr(ssaFileBuffer *f, ssaModule *m, ssaValue *value) {
ssa_fprintf(f, "\n");
} break;
- case ssaInstr_CondJump: {;
+ case ssaInstr_If: {;
ssa_fprintf(f, "br ");
ssa_print_type(f, m, t_bool);
ssa_fprintf(f, " ");
- ssa_print_value(f, m, instr->CondJump.cond, t_bool);
- ssa_fprintf(f, ", ", instr->CondJump.cond->index);
- ssa_fprintf(f, "label %%"); ssa_print_block_name(f, instr->CondJump.true_block);
- ssa_fprintf(f, ", label %%"); ssa_print_block_name(f, instr->CondJump.false_block);
+ ssa_print_value(f, m, instr->If.cond, t_bool);
+ ssa_fprintf(f, ", ", instr->If.cond->index);
+ ssa_fprintf(f, "label %%"); ssa_print_block_name(f, instr->If.true_block);
+ ssa_fprintf(f, ", label %%"); ssa_print_block_name(f, instr->If.false_block);
ssa_fprintf(f, "\n");
} break;