authorgravatar for leecannon@leecannon.xyzLee Cannon <leecannon@leecannon.xyz> 2021-10-31 15:06:55+00:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-10-31 18:11:53-04:00
log83dcfd62053a80024b1cb282fddf399a36c9c58e
treec26750b6c78a782534d4a6c5fa1b7fc6737b0c0f
parent8346e011c9ecbd7d462f0948d2e9dfc7e4067482

optimize AstGen.callExpr


1 files changed, 8 insertions(+), 2 deletions(-)

src/AstGen.zig+8-2
...@@ -7975,8 +7975,14 @@ fn callExpr(...@@ -7975,8 +7975,14 @@ fn callExpr(
79757975
7976 const callee = try calleeExpr(gz, scope, call.ast.fn_expr);7976 const callee = try calleeExpr(gz, scope, call.ast.fn_expr);
79777977
7978 const args = try astgen.gpa.alloc(Zir.Inst.Ref, call.ast.params.len);7978 // A large proportion of calls have 5 or less arguments, due to this preventing allocations
7979 defer astgen.gpa.free(args);7979 // for calls with few arguments has a sizeable effect on the aggregated runtime of this function
7980 var arg_buffer: [5]Zir.Inst.Ref = undefined;
7981 const args: []Zir.Inst.Ref = if (call.ast.params.len <= arg_buffer.len)
7982 arg_buffer[0..call.ast.params.len]
7983 else
7984 try astgen.gpa.alloc(Zir.Inst.Ref, call.ast.params.len);
7985 defer if (call.ast.params.len > arg_buffer.len) astgen.gpa.free(args);
79807986
7981 for (call.ast.params) |param_node, i| {7987 for (call.ast.params) |param_node, i| {
7982 // Parameters are always temporary values, they have no7988 // Parameters are always temporary values, they have no