aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/print.cpp
diff options
context:
space:
mode:
authorgingerBill <ginger.bill.22@gmail.com>2016-08-03 14:17:13 +0100
committergingerBill <ginger.bill.22@gmail.com>2016-08-03 14:17:13 +0100
commit0e92166d442b120b06db57623a93c6ec43e3fccb (patch)
tree3912ff47c21eb848cfd754b745c262f7a4f4b04d /src/codegen/print.cpp
parent41e7cadb8df4b9833bc3dd827cac32fd3b01ddbd (diff)
Slice creation for SliceExpr
Diffstat (limited to 'src/codegen/print.cpp')
-rw-r--r--src/codegen/print.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/codegen/print.cpp b/src/codegen/print.cpp
index 7991c9310..d8e43766c 100644
--- a/src/codegen/print.cpp
+++ b/src/codegen/print.cpp
@@ -104,7 +104,7 @@ void ssa_print_type(gbFile *f, BaseTypeSizes s, Type *t) {
case Type_Slice:
ssa_fprintf(f, "{");
ssa_print_type(f, s, t->slice.element);
- ssa_fprintf(f, "*, %lld, %lld}", word_bits, word_bits);
+ ssa_fprintf(f, "*, i%lld, i%lld}", word_bits, word_bits);
break;
case Type_Structure:
ssa_fprintf(f, "{");
@@ -158,7 +158,7 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type
break;
case ExactValue_String: {
ssa_fprintf(f, "{");
- ssa_print_type(f, m->sizes, &basic_types[Basic_i8]);
+ ssa_print_type(f, m->sizes, t_i8);
ssa_fprintf(f, "* c\"");
// TODO(bill): Make unquote string function
String unquoted = value.value_string;
@@ -166,7 +166,7 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type
unquoted.len -= 2;
ssa_print_escape_string(f, unquoted);
ssa_fprintf(f, "\", ");
- ssa_print_type(f, m->sizes, &basic_types[Basic_int]);
+ ssa_print_type(f, m->sizes, t_int);
ssa_fprintf(f, " %td}", value.value_string.len);
} break;
case ExactValue_Integer:
@@ -246,7 +246,11 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
ssa_fprintf(f, "%%%d = alloca ", value->id);
ssa_print_type(f, m->sizes, type);
ssa_fprintf(f, ", align %lld ", type_align_of(m->sizes, gb_heap_allocator(), type));
- ssa_fprintf(f, "; %.*s", LIT(instr->local.entity->token.string));
+ {
+ String str = instr->local.entity->token.string;
+ if (str.len > 0)
+ ssa_fprintf(f, "; %.*s", LIT(instr->local.entity->token.string));
+ }
ssa_fprintf(f, "\n");
ssa_fprintf(f, "\tstore ");
ssa_print_type(f, m->sizes, type);
@@ -281,7 +285,6 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
case ssaInstr_GetElementPtr: {
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 ");
@@ -292,10 +295,12 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
ssa_fprintf(f, "* ");
ssa_print_value(f, m, instr->get_element_ptr.address, et);
for (isize i = 0; i < instr->get_element_ptr.index_count; i++) {
+ ssaValue *index = instr->get_element_ptr.indices[i];
+ Type *t = ssa_value_type(index);
ssa_fprintf(f, ", ");
- ssa_print_type(f, m->sizes, t_int);
+ ssa_print_type(f, m->sizes, t);
ssa_fprintf(f, " ");
- ssa_print_value(f, m, instr->get_element_ptr.indices[i], t_int);
+ ssa_print_value(f, m, index, t);
}
ssa_fprintf(f, "\n");
} break;
@@ -303,7 +308,6 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
case ssaInstr_Br: {
ssa_fprintf(f, "br ");
if (instr->br.cond != NULL) {
- Type *t_bool = &basic_types[Basic_bool];
ssa_print_type(f, m->sizes, t_bool);
ssa_fprintf(f, " ");
ssa_print_value(f, m, instr->br.cond, t_bool);
@@ -495,7 +499,6 @@ void ssa_print_llvm_ir(gbFile *f, ssaModule *m) {
ssa_print_instr(f, m, value);
}
}
-
ssa_fprintf(f, "}\n\n");
}