compiler: JIT zig reduce

See #19063
This commit is contained in:
Andrew Kelley 2024-02-26 23:07:11 -07:00
parent ba575595bb
commit 0157e1196c
5 changed files with 30 additions and 24 deletions

View File

@ -34,7 +34,6 @@ pub fn build(b: *std.Build) !void {
const skip_install_langref = b.option(bool, "no-langref", "skip copying of langref to the installation prefix") orelse skip_install_lib_files; const skip_install_langref = b.option(bool, "no-langref", "skip copying of langref to the installation prefix") orelse skip_install_lib_files;
const skip_install_autodocs = b.option(bool, "no-autodocs", "skip copying of standard library autodocs to the installation prefix") orelse skip_install_lib_files; const skip_install_autodocs = b.option(bool, "no-autodocs", "skip copying of standard library autodocs to the installation prefix") orelse skip_install_lib_files;
const no_bin = b.option(bool, "no-bin", "skip emitting compiler binary") orelse false; const no_bin = b.option(bool, "no-bin", "skip emitting compiler binary") orelse false;
const only_reduce = b.option(bool, "only-reduce", "only build zig reduce") orelse false;
const docgen_exe = b.addExecutable(.{ const docgen_exe = b.addExecutable(.{
.name = "docgen", .name = "docgen",
@ -245,7 +244,6 @@ pub fn build(b: *std.Build) !void {
exe_options.addOption(bool, "force_gpa", force_gpa); exe_options.addOption(bool, "force_gpa", force_gpa);
exe_options.addOption(bool, "only_c", only_c); exe_options.addOption(bool, "only_c", only_c);
exe_options.addOption(bool, "only_core_functionality", only_c); exe_options.addOption(bool, "only_core_functionality", only_c);
exe_options.addOption(bool, "only_reduce", only_reduce);
if (link_libc) { if (link_libc) {
exe.linkLibC(); exe.linkLibC();
@ -407,7 +405,6 @@ pub fn build(b: *std.Build) !void {
test_cases_options.addOption(bool, "force_gpa", force_gpa); test_cases_options.addOption(bool, "force_gpa", force_gpa);
test_cases_options.addOption(bool, "only_c", only_c); test_cases_options.addOption(bool, "only_c", only_c);
test_cases_options.addOption(bool, "only_core_functionality", true); test_cases_options.addOption(bool, "only_core_functionality", true);
test_cases_options.addOption(bool, "only_reduce", false);
test_cases_options.addOption(bool, "enable_qemu", b.enable_qemu); test_cases_options.addOption(bool, "enable_qemu", b.enable_qemu);
test_cases_options.addOption(bool, "enable_wine", b.enable_wine); test_cases_options.addOption(bool, "enable_wine", b.enable_wine);
test_cases_options.addOption(bool, "enable_wasmtime", b.enable_wasmtime); test_cases_options.addOption(bool, "enable_wasmtime", b.enable_wasmtime);
@ -599,7 +596,6 @@ fn addWasiUpdateStep(b: *std.Build, version: [:0]const u8) !void {
exe_options.addOption(bool, "enable_tracy_allocation", false); exe_options.addOption(bool, "enable_tracy_allocation", false);
exe_options.addOption(bool, "value_tracing", false); exe_options.addOption(bool, "value_tracing", false);
exe_options.addOption(bool, "only_core_functionality", true); exe_options.addOption(bool, "only_core_functionality", true);
exe_options.addOption(bool, "only_reduce", false);
const run_opt = b.addSystemCommand(&.{ const run_opt = b.addSystemCommand(&.{
"wasm-opt", "wasm-opt",

View File

@ -2,7 +2,6 @@ const std = @import("std");
const mem = std.mem; const mem = std.mem;
const Allocator = std.mem.Allocator; const Allocator = std.mem.Allocator;
const assert = std.debug.assert; const assert = std.debug.assert;
const fatal = @import("./main.zig").fatal;
const Ast = std.zig.Ast; const Ast = std.zig.Ast;
const Walk = @import("reduce/Walk.zig"); const Walk = @import("reduce/Walk.zig");
const AstGen = std.zig.AstGen; const AstGen = std.zig.AstGen;
@ -47,7 +46,16 @@ const Interestingness = enum { interesting, unknown, boring };
// - reduce flags sent to the compiler // - reduce flags sent to the compiler
// - integrate with the build system? // - integrate with the build system?
pub fn main(gpa: Allocator, arena: Allocator, args: []const []const u8) !void { pub fn main() !void {
var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena_instance.deinit();
const arena = arena_instance.allocator();
var general_purpose_allocator: std.heap.GeneralPurposeAllocator(.{}) = .{};
const gpa = general_purpose_allocator.allocator();
const args = try std.process.argsAlloc(arena);
var opt_checker_path: ?[]const u8 = null; var opt_checker_path: ?[]const u8 = null;
var opt_root_source_file_path: ?[]const u8 = null; var opt_root_source_file_path: ?[]const u8 = null;
var argv: []const []const u8 = &.{}; var argv: []const []const u8 = &.{};
@ -55,7 +63,7 @@ pub fn main(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
var skip_smoke_test = false; var skip_smoke_test = false;
{ {
var i: usize = 2; // skip over "zig" and "reduce" var i: usize = 1;
while (i < args.len) : (i += 1) { while (i < args.len) : (i += 1) {
const arg = args[i]; const arg = args[i];
if (mem.startsWith(u8, arg, "-")) { if (mem.startsWith(u8, arg, "-")) {
@ -411,3 +419,8 @@ fn parse(gpa: Allocator, file_path: []const u8) !Ast {
return tree; return tree;
} }
fn fatal(comptime format: []const u8, args: anytype) noreturn {
std.log.err(format, args);
std.process.exit(1);
}

View File

@ -203,14 +203,6 @@ pub fn main() anyerror!void {
} }
} }
if (build_options.only_reduce) {
if (mem.eql(u8, args[1], "reduce")) {
return @import("reduce.zig").main(gpa, arena, args);
} else {
@panic("only reduce is supported in a -Donly-reduce build");
}
}
return mainArgs(gpa, arena, args); return mainArgs(gpa, arena, args);
} }
@ -302,7 +294,7 @@ fn mainArgs(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
} else if (mem.eql(u8, cmd, "rc")) { } else if (mem.eql(u8, cmd, "rc")) {
return cmdRc(gpa, arena, args[1..]); return cmdRc(gpa, arena, args[1..]);
} else if (mem.eql(u8, cmd, "fmt")) { } else if (mem.eql(u8, cmd, "fmt")) {
return cmdFmt(gpa, arena, cmd_args); return jitCmd(gpa, arena, cmd_args, "fmt", "fmt.zig");
} else if (mem.eql(u8, cmd, "objcopy")) { } else if (mem.eql(u8, cmd, "objcopy")) {
return @import("objcopy.zig").cmdObjCopy(gpa, arena, cmd_args); return @import("objcopy.zig").cmdObjCopy(gpa, arena, cmd_args);
} else if (mem.eql(u8, cmd, "fetch")) { } else if (mem.eql(u8, cmd, "fetch")) {
@ -325,7 +317,7 @@ fn mainArgs(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
verifyLibcxxCorrectlyLinked(); verifyLibcxxCorrectlyLinked();
return @import("print_env.zig").cmdEnv(arena, cmd_args, io.getStdOut().writer()); return @import("print_env.zig").cmdEnv(arena, cmd_args, io.getStdOut().writer());
} else if (mem.eql(u8, cmd, "reduce")) { } else if (mem.eql(u8, cmd, "reduce")) {
return @import("reduce.zig").main(gpa, arena, args); return jitCmd(gpa, arena, cmd_args, "reduce", "reduce.zig");
} else if (mem.eql(u8, cmd, "zen")) { } else if (mem.eql(u8, cmd, "zen")) {
return io.getStdOut().writeAll(info_zen); return io.getStdOut().writeAll(info_zen);
} else if (mem.eql(u8, cmd, "help") or mem.eql(u8, cmd, "-h") or mem.eql(u8, cmd, "--help")) { } else if (mem.eql(u8, cmd, "help") or mem.eql(u8, cmd, "-h") or mem.eql(u8, cmd, "--help")) {
@ -5710,7 +5702,13 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
} }
} }
fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void { fn jitCmd(
gpa: Allocator,
arena: Allocator,
args: []const []const u8,
cmd_name: []const u8,
root_src_path: []const u8,
) !void {
const color: Color = .auto; const color: Color = .auto;
const target_query: std.Target.Query = .{}; const target_query: std.Target.Query = .{};
@ -5721,7 +5719,7 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
}; };
const exe_basename = try std.zig.binNameAlloc(arena, .{ const exe_basename = try std.zig.binNameAlloc(arena, .{
.root_name = "fmt", .root_name = cmd_name,
.target = resolved_target.result, .target = resolved_target.result,
.output_mode = .Exe, .output_mode = .Exe,
}); });
@ -5771,7 +5769,7 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
.root_dir = zig_lib_directory, .root_dir = zig_lib_directory,
.sub_path = "std/zig", .sub_path = "std/zig",
}, },
.root_src_path = "fmt.zig", .root_src_path = root_src_path,
}; };
const config = try Compilation.Config.resolve(.{ const config = try Compilation.Config.resolve(.{
@ -5801,7 +5799,7 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
.zig_lib_directory = zig_lib_directory, .zig_lib_directory = zig_lib_directory,
.local_cache_directory = global_cache_directory, .local_cache_directory = global_cache_directory,
.global_cache_directory = global_cache_directory, .global_cache_directory = global_cache_directory,
.root_name = "fmt", .root_name = cmd_name,
.config = config, .config = config,
.root_mod = root_mod, .root_mod = root_mod,
.main_mod = root_mod, .main_mod = root_mod,
@ -5820,8 +5818,8 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
else => |e| return e, else => |e| return e,
}; };
const fmt_exe = try global_cache_directory.join(arena, &.{comp.cache_use.whole.bin_sub_path.?}); const exe_path = try global_cache_directory.join(arena, &.{comp.cache_use.whole.bin_sub_path.?});
child_argv.appendAssumeCapacity(fmt_exe); child_argv.appendAssumeCapacity(exe_path);
} }
child_argv.appendSliceAssumeCapacity(args); child_argv.appendSliceAssumeCapacity(args);

View File

@ -13,4 +13,3 @@ pub const skip_non_native = false;
pub const only_c = false; pub const only_c = false;
pub const force_gpa = false; pub const force_gpa = false;
pub const only_core_functionality = true; pub const only_core_functionality = true;
pub const only_reduce = false;