aboutsummaryrefslogtreecommitdiff
path: root/src/ir_print.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir_print.cpp')
-rw-r--r--src/ir_print.cpp117
1 files changed, 16 insertions, 101 deletions
diff --git a/src/ir_print.cpp b/src/ir_print.cpp
index 1d98557d4..4375cd7e1 100644
--- a/src/ir_print.cpp
+++ b/src/ir_print.cpp
@@ -308,16 +308,16 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t, bool in_struct) {
case Basic_b32: ir_write_str_lit(f, "i32"); return;
case Basic_b64: ir_write_str_lit(f, "i64"); return;
- case Basic_i8: ir_write_str_lit(f, "i8"); return;
- case Basic_u8: ir_write_str_lit(f, "i8"); return;
- case Basic_i16: ir_write_str_lit(f, "i16"); return;
- case Basic_u16: ir_write_str_lit(f, "i16"); return;
- case Basic_i32: ir_write_str_lit(f, "i32"); return;
- case Basic_u32: ir_write_str_lit(f, "i32"); return;
- case Basic_i64: ir_write_str_lit(f, "i64"); return;
- case Basic_u64: ir_write_str_lit(f, "i64"); return;
+ case Basic_i8: ir_write_str_lit(f, "i8"); return;
+ case Basic_u8: ir_write_str_lit(f, "i8"); return;
+ case Basic_i16: ir_write_str_lit(f, "i16"); return;
+ case Basic_u16: ir_write_str_lit(f, "i16"); return;
+ case Basic_i32: ir_write_str_lit(f, "i32"); return;
+ case Basic_u32: ir_write_str_lit(f, "i32"); return;
+ case Basic_i64: ir_write_str_lit(f, "i64"); return;
+ case Basic_u64: ir_write_str_lit(f, "i64"); return;
- case Basic_rune: ir_write_str_lit(f, "i32"); return;
+ case Basic_rune: ir_write_str_lit(f, "i32"); return;
case Basic_int:
case Basic_uint:
@@ -503,11 +503,7 @@ void ir_print_compound_element(irFileBuffer *f, irModule *m, ExactValue v, Type
ir_write_byte(f, ' ');
if (v.kind == ExactValue_Invalid || !elem_type_can_be_constant(elem_type)) {
- if (ir_type_has_default_values(elem_type)) {
- ir_print_exact_value(f, m, v, elem_type);
- } else {
- ir_fprintf(f, "zeroinitializer");
- }
+ ir_fprintf(f, "zeroinitializer");
} else {
ir_print_exact_value(f, m, v, elem_type);
}
@@ -675,13 +671,8 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
Type *elem_type = type->Array.elem;
isize elem_count = cl->elems.count;
- bool has_defaults = ir_type_has_default_values(type);
if (elem_count == 0) {
- if (!has_defaults) {
- ir_write_str_lit(f, "zeroinitializer");
- } else {
- ir_print_exact_value(f, m, empty_exact_value, type);
- }
+ ir_write_str_lit(f, "zeroinitializer");
break;
}
GB_ASSERT_MSG(elem_count == type->Array.count, "%td != %td", elem_count, type->Array.count);
@@ -706,8 +697,7 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
ast_node(cl, CompoundLit, value.value_compound);
- bool has_defaults = ir_type_has_default_values(type);
- if (cl->elems.count == 0 && !has_defaults) {
+ if (cl->elems.count == 0) {
ir_write_str_lit(f, "zeroinitializer");
break;
}
@@ -748,18 +738,6 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
}
}
- for (isize i = 0; i < value_count; i++) {
- if (visited[i]) continue;
- Entity *f = type->Struct.fields[i];
- ExactValue v = {};
- if (!f->Variable.default_is_nil) {
- v = f->Variable.default_value;
- }
- values[i] = v;
- }
-
-
-
if (type->Struct.is_packed) ir_write_byte(f, '<');
ir_write_byte(f, '{');
if (type->Struct.custom_align > 0) {
@@ -773,13 +751,7 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
for (isize i = 0; i < value_count; i++) {
if (i > 0) ir_write_string(f, str_lit(", "));
Entity *e = type->Struct.fields[i];
-
- if (!visited[i] && e->Variable.default_is_undef) {
- ir_print_type(f, m, e->type);
- ir_write_str_lit(f, " undef");
- } else {
- ir_print_compound_element(f, m, values[i], e->type);
- }
+ ir_print_compound_element(f, m, values[i], e->type);
}
@@ -809,63 +781,10 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
ir_print_value(f, m, val, type);
break;
}
- default: {
- bool has_defaults = ir_type_has_default_values(type);
- if (!has_defaults) {
- ir_write_str_lit(f, "zeroinitializer");
- } else {
- if (is_type_struct(type)) {
- i32 value_count = cast(i32)type->Struct.fields.count;
- if (type->Struct.is_packed) ir_write_byte(f, '<');
- ir_write_byte(f, '{');
- if (type->Struct.custom_align > 0) {
- ir_fprintf(f, "[0 x <%lld x i8>] zeroinitializer", cast(i64)type->Struct.custom_align);
- if (value_count > 0) {
- ir_write_string(f, str_lit(", "));
- }
- }
-
- for (isize i = 0; i < value_count; i++) {
- if (i > 0) ir_write_string(f, str_lit(", "));
- Entity *e = type->Struct.fields[i];
- if (e->Variable.default_is_undef) {
- ir_print_type(f, m, e->type);
- ir_write_str_lit(f, " undef");
- } else {
- ExactValue value = {};
- if (!e->Variable.default_is_nil) {
- value = e->Variable.default_value;
- }
- ir_print_compound_element(f, m, value, e->type);
- }
- }
-
- ir_write_byte(f, '}');
- if (type->Struct.is_packed) ir_write_byte(f, '>');
-
- } else if (is_type_array(type)) {
- i64 count = type->Array.count;
- if (count == 0) {
- ir_write_str_lit(f, "zeroinitializer");
- } else {
- Type *elem = type->Array.elem;
- ir_write_byte(f, '[');
- for (i64 i = 0; i < count; i++) {
- if (i > 0) ir_write_string(f, str_lit(", "));
- ir_print_type(f, m, elem);
- ir_write_byte(f, ' ');
- ir_print_exact_value(f, m, empty_exact_value, elem);
- }
- ir_write_byte(f, ']');
- }
- } else {
- GB_PANIC("Unknown type for default values");
- }
- }
- // GB_PANIC("Invalid ExactValue: %d", value.kind);
+ default:
+ ir_write_str_lit(f, "zeroinitializer");
break;
}
- }
}
void ir_print_block_name(irFileBuffer *f, irBlock *b) {
@@ -1873,11 +1792,7 @@ void print_llvm_ir(irGen *ir) {
if (g->value != nullptr) {
ir_print_value(f, m, g->value, g->entity->type);
} else {
- if (ir_type_has_default_values(g->entity->type)) {
- ir_print_exact_value(f, m, empty_exact_value, g->entity->type);
- } else {
- ir_write_string(f, str_lit("zeroinitializer"));
- }
+ ir_write_string(f, str_lit("zeroinitializer"));
}
}
ir_write_byte(f, '\n');