aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2025-05-28 22:45:19 -0400
committerJacob Young <15544577+jacobly0@users.noreply.github.com>2025-05-29 03:57:48 -0400
commitc04be630d996a0e01fd3cf05e6cade006e4226ce (patch)
treeedd9d55ad05435b91bd3cb95208a76ead2001094 /src/codegen.zig
parentf25212a479c4f26566b6b851e245e49c6f508b96 (diff)
downloadzig-c04be630d996a0e01fd3cf05e6cade006e4226ce.tar.gz
zig-c04be630d996a0e01fd3cf05e6cade006e4226ce.zip
Legalize: introduce a new pass before liveness
Each target can opt into different sets of legalize features. By performing these transformations before liveness, instructions that become unreferenced will have up-to-date liveness information.
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 6577667c7c..f5108162ca 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -14,7 +14,6 @@ const Allocator = mem.Allocator;
const Compilation = @import("Compilation.zig");
const ErrorMsg = Zcu.ErrorMsg;
const InternPool = @import("InternPool.zig");
-const Liveness = @import("Liveness.zig");
const Zcu = @import("Zcu.zig");
const Type = @import("Type.zig");
@@ -33,15 +32,18 @@ fn devFeatureForBackend(comptime backend: std.builtin.CompilerBackend) dev.Featu
return @field(dev.Feature, @tagName(backend)["stage2_".len..] ++ "_backend");
}
-fn importBackend(comptime backend: std.builtin.CompilerBackend) type {
+pub fn importBackend(comptime backend: std.builtin.CompilerBackend) ?type {
return switch (backend) {
.stage2_aarch64 => @import("arch/aarch64/CodeGen.zig"),
.stage2_arm => @import("arch/arm/CodeGen.zig"),
+ .stage2_c => @import("codegen/c.zig"),
+ .stage2_llvm => @import("codegen/llvm.zig"),
.stage2_powerpc => @import("arch/powerpc/CodeGen.zig"),
.stage2_riscv64 => @import("arch/riscv64/CodeGen.zig"),
.stage2_sparc64 => @import("arch/sparc64/CodeGen.zig"),
+ .stage2_spirv64 => @import("codegen/spirv.zig"),
.stage2_x86_64 => @import("arch/x86_64/CodeGen.zig"),
- else => unreachable,
+ else => null,
};
}
@@ -51,7 +53,7 @@ pub fn generateFunction(
src_loc: Zcu.LazySrcLoc,
func_index: InternPool.Index,
air: Air,
- liveness: Liveness,
+ liveness: Air.Liveness,
code: *std.ArrayListUnmanaged(u8),
debug_output: link.File.DebugInfoOutput,
) CodeGenError!void {
@@ -68,7 +70,7 @@ pub fn generateFunction(
.stage2_x86_64,
=> |backend| {
dev.check(devFeatureForBackend(backend));
- return importBackend(backend).generate(lf, pt, src_loc, func_index, air, liveness, code, debug_output);
+ return importBackend(backend).?.generate(lf, pt, src_loc, func_index, air, liveness, code, debug_output);
},
}
}
@@ -93,7 +95,7 @@ pub fn generateLazyFunction(
.stage2_x86_64,
=> |backend| {
dev.check(devFeatureForBackend(backend));
- return importBackend(backend).generateLazy(lf, pt, src_loc, lazy_sym, code, debug_output);
+ return importBackend(backend).?.generateLazy(lf, pt, src_loc, lazy_sym, code, debug_output);
},
}
}