From e5665a190d196dc6f2a9bb45be737325eaf12cf5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 1 Aug 2016 13:11:50 +0100 Subject: Big Refactor to type less :P --- src/codegen/print.cpp | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src/codegen/print.cpp') diff --git a/src/codegen/print.cpp b/src/codegen/print.cpp index 63b846c46..d8c76d034 100644 --- a/src/codegen/print.cpp +++ b/src/codegen/print.cpp @@ -228,10 +228,9 @@ void ssa_print_value(gbFile *f, ssaModule *m, ssaValue *value, Type *type_hint) void ssa_print_instruction(gbFile *f, ssaModule *m, ssaValue *value) { GB_ASSERT(value->kind == ssaValue_Instruction); + ssaInstruction *instr = &value->instruction; ssa_fprintf(f, "\t"); - - ssaInstruction *instr = &value->instruction; switch (instr->kind) { case ssaInstruction_Local: { Type *type = instr->local.entity->type; @@ -261,7 +260,7 @@ void ssa_print_instruction(gbFile *f, ssaModule *m, ssaValue *value) { } break; case ssaInstruction_Load: { - Type *type = ssa_value_type(instr->load.address); + Type *type = instr->load.type; ssa_fprintf(f, "%%%d = load ", value->id); ssa_print_type(f, m->sizes, type); ssa_fprintf(f, ", "); @@ -271,6 +270,32 @@ void ssa_print_instruction(gbFile *f, ssaModule *m, ssaValue *value) { ssa_fprintf(f, "\n"); } break; + case ssaInstruction_GetElementPtr: { + Type *rt = instr->get_element_ptr.result_type; + Type *et = instr->get_element_ptr.element_type; + Type *t_int = &basic_types[Basic_int]; + ssa_fprintf(f, "%%%d = getelementptr ", value->id); + if (instr->get_element_ptr.inbounds) + ssa_fprintf(f, "inbounds "); + + ssa_print_type(f, m->sizes, et); + ssa_fprintf(f, ", "); + ssa_print_type(f, m->sizes, et); + ssa_fprintf(f, "* "); + ssa_print_value(f, m, instr->get_element_ptr.address, et); + ssa_fprintf(f, ", "); + ssa_print_type(f, m->sizes, t_int); + ssa_fprintf(f, " "); + ssa_print_value(f, m, instr->get_element_ptr.indices[0], t_int); + if (instr->get_element_ptr.index_count == 2) { + ssa_fprintf(f, ", "); + ssa_print_type(f, m->sizes, t_int); + ssa_fprintf(f, " "); + ssa_print_value(f, m, instr->get_element_ptr.indices[1], t_int); + } + ssa_fprintf(f, "\n"); + } break; + case ssaInstruction_BinaryOp: { auto *bo = &value->instruction.binary_op; @@ -366,7 +391,7 @@ void ssa_print_llvm_ir(gbFile *f, ssaModule *m) { } break; case ssaValue_Global: { - ssaGlobal *g = &v->global; + auto *g = &v->global; ssa_print_encoded_global(f, g->entity->token.string); ssa_fprintf(f, " = global "); ssa_print_type(f, m->sizes, get_base_type(g->entity->type)); -- cgit v1.2.3