authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-30 12:56:52-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-31 18:54:28-04:00
log77e6513030a6258a893c2f11ad9708c9612b7715
treed6821410ab84c13ba0a440bc499422d430b03f7a
parent6198f7afb76b7a5a6d359bfd24f8fbdabc77939b

cbe: implement `stdbool.h` reserved identifiers

Also remove the legalize pass from zig1.

13 files changed, 55 insertions(+), 28 deletions(-)

src/Air/Legalize.zig+3-1
......@@ -164,13 +164,14 @@ pub const Features = std.enums.EnumSet(Feature);
164164pub const Error = std.mem.Allocator.Error;
165165
166166pub fn legalize(air: *Air, pt: Zcu.PerThread, features: *const Features) Error!void {
167 dev.check(.legalize);
168 assert(!features.bits.eql(.initEmpty())); // backend asked to run legalize, but no features were enabled
167169 var l: Legalize = .{
168170 .pt = pt,
169171 .air_instructions = air.instructions.toMultiArrayList(),
170172 .air_extra = air.extra,
171173 .features = features,
172174 };
173 if (l.features.bits.eql(.initEmpty())) return;
174175 defer air.* = l.getTmpAir();
175176 const main_extra = l.extraData(Air.Block, l.air_extra.items[@intFromEnum(Air.ExtraIndex.main_block)]);
176177 try l.legalizeBody(main_extra.end, main_extra.data.body_len);
......@@ -845,6 +846,7 @@ inline fn replaceInst(l: *Legalize, inst: Air.Inst.Index, tag: Air.Inst.Tag, dat
845846
846847const Air = @import("../Air.zig");
847848const assert = std.debug.assert;
849const dev = @import("../dev.zig");
848850const Legalize = @This();
849851const std = @import("std");
850852const Type = @import("../Type.zig");
src/Zcu/PerThread.zig+3-1
......@@ -1741,7 +1741,9 @@ pub fn linkerUpdateFunc(pt: Zcu.PerThread, func_index: InternPool.Index, air: *A
17411741 return;
17421742 }
17431743
1744 try air.legalize(pt, @import("../codegen.zig").legalizeFeatures(pt, nav_index));
1744 legalize: {
1745 try air.legalize(pt, @import("../codegen.zig").legalizeFeatures(pt, nav_index) orelse break :legalize);
1746 }
17451747
17461748 var liveness = try Air.Liveness.analyze(gpa, air.*, ip);
17471749 defer liveness.deinit(gpa);
src/arch/aarch64/CodeGen.zig+2-2
......@@ -40,8 +40,8 @@ const gp = abi.RegisterClass.gp;
4040
4141const InnerError = CodeGenError || error{OutOfRegisters};
4242
43pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
44 return comptime &.initEmpty();
43pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
44 return null;
4545}
4646
4747gpa: Allocator,
src/arch/arm/CodeGen.zig+2-2
......@@ -41,8 +41,8 @@ const gp = abi.RegisterClass.gp;
4141
4242const InnerError = CodeGenError || error{OutOfRegisters};
4343
44pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
45 return comptime &.initEmpty();
44pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
45 return null;
4646}
4747
4848gpa: Allocator,
src/arch/powerpc/CodeGen.zig+2-2
......@@ -10,8 +10,8 @@ const Zcu = @import("../../Zcu.zig");
1010const assert = std.debug.assert;
1111const log = std.log.scoped(.codegen);
1212
13pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
14 return comptime &.initEmpty();
13pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
14 return null;
1515}
1616
1717pub fn generate(
src/arch/riscv64/CodeGen.zig+2-2
......@@ -51,8 +51,8 @@ const Instruction = encoding.Instruction;
5151
5252const InnerError = CodeGenError || error{OutOfRegisters};
5353
54pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
55 return comptime &.initEmpty();
54pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
55 return null;
5656}
5757
5858pt: Zcu.PerThread,
src/arch/sparc64/CodeGen.zig+2-2
......@@ -41,8 +41,8 @@ const Self = @This();
4141
4242const InnerError = CodeGenError || error{OutOfRegisters};
4343
44pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
45 return comptime &.initEmpty();
44pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
45 return null;
4646}
4747
4848const RegisterView = enum(u1) {
src/arch/wasm/CodeGen.zig+2-2
......@@ -31,8 +31,8 @@ const libcFloatSuffix = target_util.libcFloatSuffix;
3131const compilerRtFloatAbbrev = target_util.compilerRtFloatAbbrev;
3232const compilerRtIntAbbrev = target_util.compilerRtIntAbbrev;
3333
34pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
35 return comptime &.initEmpty();
34pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
35 return null;
3636}
3737
3838/// Reference to the function declaration the code
src/codegen.zig+23-7
......@@ -27,9 +27,22 @@ pub const CodeGenError = GenerateSymbolError || error{
2727 CodegenFail,
2828};
2929
30fn devFeatureForBackend(comptime backend: std.builtin.CompilerBackend) dev.Feature {
31 comptime assert(mem.startsWith(u8, @tagName(backend), "stage2_"));
32 return @field(dev.Feature, @tagName(backend)["stage2_".len..] ++ "_backend");
30fn devFeatureForBackend(backend: std.builtin.CompilerBackend) dev.Feature {
31 return switch (backend) {
32 .other, .stage1 => unreachable,
33 .stage2_aarch64 => .aarch64_backend,
34 .stage2_arm => .arm_backend,
35 .stage2_c => .c_backend,
36 .stage2_llvm => .llvm_backend,
37 .stage2_powerpc => .powerpc_backend,
38 .stage2_riscv64 => .riscv64_backend,
39 .stage2_sparc64 => .sparc64_backend,
40 .stage2_spirv64 => .spirv64_backend,
41 .stage2_wasm => .wasm_backend,
42 .stage2_x86 => .x86_backend,
43 .stage2_x86_64 => .x86_64_backend,
44 _ => unreachable,
45 };
3346}
3447
3548fn importBackend(comptime backend: std.builtin.CompilerBackend) type {
......@@ -49,10 +62,10 @@ fn importBackend(comptime backend: std.builtin.CompilerBackend) type {
4962 };
5063}
5164
52pub fn legalizeFeatures(pt: Zcu.PerThread, nav_index: InternPool.Nav.Index) *const Air.Legalize.Features {
65pub fn legalizeFeatures(pt: Zcu.PerThread, nav_index: InternPool.Nav.Index) ?*const Air.Legalize.Features {
5366 const zcu = pt.zcu;
5467 const target = &zcu.navFileScope(nav_index).mod.?.resolved_target.result;
55 return switch (target_util.zigBackend(target.*, zcu.comp.config.use_llvm)) {
68 switch (target_util.zigBackend(target.*, zcu.comp.config.use_llvm)) {
5669 else => unreachable,
5770 inline .stage2_llvm,
5871 .stage2_c,
......@@ -65,8 +78,11 @@ pub fn legalizeFeatures(pt: Zcu.PerThread, nav_index: InternPool.Nav.Index) *con
6578 .stage2_sparc64,
6679 .stage2_spirv64,
6780 .stage2_powerpc,
68 => |backend| importBackend(backend).legalizeFeatures(target),
69 };
81 => |backend| {
82 dev.check(devFeatureForBackend(backend));
83 return importBackend(backend).legalizeFeatures(target);
84 },
85 }
7086}
7187
7288pub fn generateFunction(
src/codegen/c.zig+7-3
......@@ -20,8 +20,8 @@ const Alignment = InternPool.Alignment;
2020const BigIntLimb = std.math.big.Limb;
2121const BigInt = std.math.big.int;
2222
23pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
24 return comptime &.initEmpty();
23pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
24 return null;
2525}
2626
2727pub const CType = @import("c/Type.zig");
......@@ -210,7 +210,6 @@ const reserved_idents = std.StaticStringMap(void).initComptime(.{
210210 .{ "atomic_ushort", {} },
211211 .{ "atomic_wchar_t", {} },
212212 .{ "auto", {} },
213 .{ "bool", {} },
214213 .{ "break", {} },
215214 .{ "case", {} },
216215 .{ "char", {} },
......@@ -270,6 +269,11 @@ const reserved_idents = std.StaticStringMap(void).initComptime(.{
270269 .{ "va_end", {} },
271270 .{ "va_copy", {} },
272271
272 // stdbool.h
273 .{ "bool", {} },
274 .{ "false", {} },
275 .{ "true", {} },
276
273277 // stddef.h
274278 .{ "offsetof", {} },
275279
src/codegen/llvm.zig+2-2
......@@ -36,8 +36,8 @@ const compilerRtIntAbbrev = target_util.compilerRtIntAbbrev;
3636
3737const Error = error{ OutOfMemory, CodegenFail };
3838
39pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
40 return comptime &.initEmpty();
39pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
40 return null;
4141}
4242
4343fn subArchName(features: std.Target.Cpu.Feature.Set, arch: anytype, mappings: anytype) ?[]const u8 {
src/codegen/spirv.zig+2-2
......@@ -28,8 +28,8 @@ const SpvAssembler = @import("spirv/Assembler.zig");
2828
2929const InstMap = std.AutoHashMapUnmanaged(Air.Inst.Index, IdRef);
3030
31pub inline fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
32 return comptime &.initEmpty();
31pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
32 return null;
3333}
3434
3535pub const zig_call_abi_ver = 3;
src/dev.zig+3
......@@ -67,6 +67,7 @@ pub const Env = enum {
6767 .incremental,
6868 .ast_gen,
6969 .sema,
70 .legalize,
7071 .llvm_backend,
7172 .c_backend,
7273 .wasm_backend,
......@@ -144,6 +145,7 @@ pub const Env = enum {
144145 .build_command,
145146 .stdio_listen,
146147 .incremental,
148 .legalize,
147149 .x86_64_backend,
148150 .elf_linker,
149151 => true,
......@@ -222,6 +224,7 @@ pub const Feature = enum {
222224 incremental,
223225 ast_gen,
224226 sema,
227 legalize,
225228
226229 llvm_backend,
227230 c_backend,