diff options
Diffstat (limited to 'src/llir.c')
| -rw-r--r-- | src/llir.c | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/src/llir.c b/src/llir.c index 44865e342..b603f164e 100644 --- a/src/llir.c +++ b/src/llir.c @@ -2860,15 +2860,11 @@ llirValue *llir_build_single_expr(llirProcedure *proc, AstNode *expr, TypeAndVal llirValue *elem_size = llir_make_const_int(allocator, s); llirValue *elem_align = llir_make_const_int(allocator, a); - llirValue *len = llir_emit_conv(proc, llir_build_expr(proc, ce->args.e[1]), t_int); - llirValue *cap = len; - if (ce->args.count == 3) { - cap = llir_emit_conv(proc, llir_build_expr(proc, ce->args.e[2]), t_int); - } + llirValue *count = llir_emit_conv(proc, llir_build_expr(proc, ce->args.e[1]), t_int); - llir_emit_slice_bounds_check(proc, ast_node_token(ce->args.e[1]), v_zero, len, false); + llir_emit_slice_bounds_check(proc, ast_node_token(ce->args.e[1]), v_zero, count, false); - llirValue *slice_size = llir_emit_arith(proc, Token_Mul, elem_size, cap, t_int); + llirValue *slice_size = llir_emit_arith(proc, Token_Mul, elem_size, count, t_int); llirValue **args = gb_alloc_array(allocator, llirValue *, 2); args[0] = slice_size; @@ -2880,10 +2876,8 @@ llirValue *llir_build_single_expr(llirProcedure *proc, AstNode *expr, TypeAndVal llirValue *gep0 = llir_emit_struct_ep(proc, slice, 0); llirValue *gep1 = llir_emit_struct_ep(proc, slice, 1); - llirValue *gep2 = llir_emit_struct_ep(proc, slice, 2); llir_emit_store(proc, gep0, ptr); - llir_emit_store(proc, gep1, len); - llir_emit_store(proc, gep2, cap); + llir_emit_store(proc, gep1, count); return llir_emit_load(proc, slice); } break; @@ -3059,22 +3053,13 @@ llirValue *llir_build_single_expr(llirProcedure *proc, AstNode *expr, TypeAndVal case BuiltinProc_slice_ptr: { llir_emit_comment(proc, str_lit("slice_ptr")); llirValue *ptr = llir_build_expr(proc, ce->args.e[0]); - llirValue *len = llir_build_expr(proc, ce->args.e[1]); - llirValue *cap = len; - - len = llir_emit_conv(proc, len, t_int); - - if (ce->args.count == 3) { - cap = llir_build_expr(proc, ce->args.e[2]); - cap = llir_emit_conv(proc, cap, t_int); - } - + llirValue *count = llir_build_expr(proc, ce->args.e[1]); + count = llir_emit_conv(proc, count, t_int); Type *slice_type = make_type_slice(proc->module->allocator, type_deref(llir_type(ptr))); llirValue *slice = llir_add_local_generated(proc, slice_type); llir_emit_store(proc, llir_emit_struct_ep(proc, slice, 0), ptr); - llir_emit_store(proc, llir_emit_struct_ep(proc, slice, 1), len); - llir_emit_store(proc, llir_emit_struct_ep(proc, slice, 2), cap); + llir_emit_store(proc, llir_emit_struct_ep(proc, slice, 1), count); return llir_emit_load(proc, slice); } break; |