aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-11-19 23:24:49 +0000
committergingerBill <bill@gingerbill.org>2019-11-19 23:24:49 +0000
commit0839dccfdc6d754cbce1041a03d16b588cfbef95 (patch)
tree0b60d580b7b59c9b120bc41bfabd30e8bacaa726
parentd22e5b697db24e943d2500e69cc98acda63434e3 (diff)
Fix Compiler panic with SIMD Vector debug information #481
-rw-r--r--src/ir.cpp13
-rw-r--r--src/ir_print.cpp2
-rw-r--r--src/types.cpp12
3 files changed, 23 insertions, 4 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index c28af446c..86e618187 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -2684,6 +2684,19 @@ irDebugInfo *ir_add_debug_info_type(irModule *module, Type *type, Entity *e, irD
return ir_add_debug_info_type_bit_set(module, type, e, scope);
}
+ if (is_type_simd_vector(type)) {
+ irDebugInfo *di = ir_alloc_debug_info(irDebugInfo_CompositeType);
+ di->CompositeType.size = ir_debug_size_bits(type);
+ di->CompositeType.align = ir_debug_align_bits(type);
+ di->CompositeType.tag = irDebugBasicEncoding_array_type;
+ di->CompositeType.array_count = (i32)type->SimdVector.count;
+
+ map_set(&module->debug_info, hash_type(type), di);
+ di->CompositeType.base_type = ir_add_debug_info_type(module, type->SimdVector.elem, e, scope, file);
+ GB_ASSERT(base->kind != Type_Named);
+ return di;
+ }
+
GB_PANIC("Unreachable %s", type_to_string(type));
return nullptr;
}
diff --git a/src/ir_print.cpp b/src/ir_print.cpp
index d47dfc898..b825d2322 100644
--- a/src/ir_print.cpp
+++ b/src/ir_print.cpp
@@ -1955,6 +1955,8 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) {
irInstrCall *call = &instr->Call;
Type *proc_type = base_type(ir_type(call->value));
GB_ASSERT(is_type_proc(proc_type));
+ set_procedure_abi_types(heap_allocator(), proc_type);
+
bool is_c_vararg = proc_type->Proc.c_vararg;
Type *result_type = call->type;
if (result_type) {
diff --git a/src/types.cpp b/src/types.cpp
index ac78bb943..06aa211ab 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -3008,7 +3008,13 @@ gbString write_type_to_string(gbString str, Type *type) {
break;
case Type_Struct: {
- str = gb_string_appendc(str, "struct");
+ if (type->Struct.soa_elem != nullptr) {
+ str = gb_string_append_fmt(str, "#soa[%d]", cast(int)type->Struct.soa_count);
+ str = write_type_to_string(str, type->Struct.soa_elem);
+ break;
+ }
+
+ str = gb_string_appendc(str, "struct");
if (type->Struct.is_packed) str = gb_string_appendc(str, " #packed");
if (type->Struct.is_raw_union) str = gb_string_appendc(str, " #raw_union");
str = gb_string_appendc(str, " {");
@@ -3179,10 +3185,8 @@ gbString write_type_to_string(gbString str, Type *type) {
if (type->SimdVector.is_x86_mmx) {
return "intrinsics.x86_mmx";
} else {
- str = gb_string_appendc(str, "intrinsics.vector(");
- str = gb_string_append_fmt(str, "%d, ", cast(int)type->SimdVector.count);
+ str = gb_string_append_fmt(str, "#vector[%d]", cast(int)type->SimdVector.count);
str = write_type_to_string(str, type->SimdVector.elem);
- str = gb_string_appendc(str, ")");
}
break;
}