diff options
| author | gingerBill <ginger.bill.22@gmail.com> | 2016-08-14 12:22:31 +0100 |
|---|---|---|
| committer | gingerBill <ginger.bill.22@gmail.com> | 2016-08-14 12:22:31 +0100 |
| commit | ee002364120a773753d37cf5575baa6e86d0502c (patch) | |
| tree | d96feebc57be31d385909a0b9e4df2c0aef50a6b /src/codegen/print_llvm.cpp | |
| parent | c10b46af9feb76a9839efa292c5288ec4684055e (diff) | |
expr as type; {N}bool is still causing problems
Diffstat (limited to 'src/codegen/print_llvm.cpp')
| -rw-r--r-- | src/codegen/print_llvm.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/codegen/print_llvm.cpp b/src/codegen/print_llvm.cpp index d05cd0272..1535638b0 100644 --- a/src/codegen/print_llvm.cpp +++ b/src/codegen/print_llvm.cpp @@ -393,10 +393,10 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) { case ssaInstr_BinaryOp: { auto *bo = &value->instr.binary_op; - Type *type = ssa_value_type(bo->left); + Type *type = get_base_type(ssa_value_type(bo->left)); Type *elem_type = type; while (elem_type->kind == Type_Vector) { - elem_type = elem_type->vector.elem; + elem_type = get_base_type(elem_type->vector.elem); } ssa_fprintf(f, "%%%d = ", value->id); @@ -535,13 +535,37 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) { vol_str = "true"; } ssa_fprintf(f, ", i32 %d, i1 %s)\n", instr->copy_memory.align, vol_str); + } break; + + + case ssaInstr_InsertElement: { + auto *ie = &instr->insert_element; + Type *vt = ssa_value_type(ie->vector); + ssa_fprintf(f, "%%%d = insertelement ", value->id); + + ssa_print_type(f, m->sizes, vt); + ssa_fprintf(f, " "); + ssa_print_value(f, m, ie->vector, vt); + ssa_fprintf(f, ", "); + + ssa_print_type(f, m->sizes, ssa_value_type(ie->elem)); + ssa_fprintf(f, " "); + ssa_print_value(f, m, ie->elem, ssa_value_type(ie->elem)); + ssa_fprintf(f, ", "); + + ssa_print_type(f, m->sizes, ssa_value_type(ie->index)); + ssa_fprintf(f, " "); + ssa_print_value(f, m, ie->index, ssa_value_type(ie->index)); + + ssa_fprintf(f, "\n"); } break; - default: + + default: { GB_PANIC("<unknown instr> %d\n", instr->kind); ssa_fprintf(f, "; <unknown instr> %d\n", instr->kind); - break; + } break; } } @@ -613,7 +637,7 @@ void ssa_print_type_name(gbFile *f, ssaModule *m, ssaValue *v) { void ssa_print_llvm_ir(gbFile *f, ssaModule *m) { if (m->layout.len > 0) { - ssa_fprintf(f, "target datalayout = %.*s\n", LIT(m->layout)); + ssa_fprintf(f, "target datalayout = \"%.*s\"\n", LIT(m->layout)); } ssa_print_encoded_local(f, make_string(".string")); |