aboutsummaryrefslogtreecommitdiff
path: root/src/link/SpirV.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-01-01 19:11:57 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-01-01 19:49:08 -0700
commitd5c1e7f7b1381036f7d98c1944607cb0e1c0d4da (patch)
treef78506c79713b855ed8f23426ce78e0e292e13ee /src/link/SpirV.zig
parenteae6d45cded76dd027569c86a7cdd5bc9039664b (diff)
downloadzig-d5c1e7f7b1381036f7d98c1944607cb0e1c0d4da.tar.gz
zig-d5c1e7f7b1381036f7d98c1944607cb0e1c0d4da.zip
link: accept the update arena in flush
This branch introduced an arena allocator for temporary allocations in Compilation.update. Almost every implementation of flush() inside the linker code was already creating a local arena that had the lifetime of the function call. This commit passes the update arena so that all those local ones can be deleted, resulting in slightly more efficient memory usage with every compilation update. While at it, this commit also removes the Compilation parameter from the linker flush function API since a reference to the Compilation is now already stored in `link.File`.
Diffstat (limited to 'src/link/SpirV.zig')
-rw-r--r--src/link/SpirV.zig9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/link/SpirV.zig b/src/link/SpirV.zig
index fc9e0c9a60..7b66d914bf 100644
--- a/src/link/SpirV.zig
+++ b/src/link/SpirV.zig
@@ -173,15 +173,17 @@ pub fn freeDecl(self: *SpirV, decl_index: InternPool.DeclIndex) void {
_ = decl_index;
}
-pub fn flush(self: *SpirV, comp: *Compilation, prog_node: *std.Progress.Node) link.File.FlushError!void {
- return self.flushModule(comp, prog_node);
+pub fn flush(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node) link.File.FlushError!void {
+ return self.flushModule(arena, prog_node);
}
-pub fn flushModule(self: *SpirV, comp: *Compilation, prog_node: *std.Progress.Node) link.File.FlushError!void {
+pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node) link.File.FlushError!void {
if (build_options.skip_non_native) {
@panic("Attempted to compile for architecture that was disabled by build configuration");
}
+ _ = arena; // Has the same lifetime as the call to Compilation.update.
+
const tracy = trace(@src());
defer tracy.end();
@@ -191,6 +193,7 @@ pub fn flushModule(self: *SpirV, comp: *Compilation, prog_node: *std.Progress.No
const spv = &self.object.spv;
+ const comp = self.base.comp;
const gpa = comp.gpa;
const target = comp.getTarget();