diff --git a/src/ir.cpp b/src/ir.cpp index 79c07a91b..32c2c7d64 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -2740,12 +2740,16 @@ void ir_value_set_debug_location(irProcedure *proc, irValue *v) { void ir_emit_zero_init(irProcedure *p, irValue *address, Ast *expr) { gbAllocator a = ir_allocator(); Type *t = type_deref(ir_type(address)); - auto args = array_make(a, 2); - args[0] = ir_emit_conv(p, address, t_rawptr); - args[1] = ir_const_int(type_size_of(t)); - AstPackage *pkg = get_core_package(p->module->info, str_lit("mem")); - if (p->entity != nullptr && p->entity->token.string != "zero" && p->entity->pkg != pkg) { - irValue *v = ir_emit_package_call(p, "mem", "zero", args, expr, ProcInlining_no_inline); + isize sz = type_size_of(t); + if (!(gb_is_power_of_two(sz) && sz <= build_context.max_align)) { + // TODO(bill): Is this a good idea? + auto args = array_make(a, 2); + args[0] = ir_emit_conv(p, address, t_rawptr); + args[1] = ir_const_int(type_size_of(t)); + AstPackage *pkg = get_core_package(p->module->info, str_lit("mem")); + if (p->entity != nullptr && p->entity->token.string != "zero" && p->entity->pkg != pkg) { + irValue *v = ir_emit_package_call(p, "mem", "zero", args, expr, ProcInlining_no_inline); + } } ir_emit(p, ir_instr_zero_init(p, address)); } diff --git a/src/ir_print.cpp b/src/ir_print.cpp index 531b74b2f..0587a2977 100644 --- a/src/ir_print.cpp +++ b/src/ir_print.cpp @@ -1109,7 +1109,7 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) { ir_print_exact_value(f, m, empty_exact_value, type); ir_write_str_lit(f, ", "); ir_print_type(f, m, type); - ir_fprintf(f, "* %%%d", instr->ZeroInit.address->index); + ir_fprintf(f, "* %%%d, align 1", instr->ZeroInit.address->index); break; }