Skip to content
This repository has been archived by the owner on Sep 27, 2024. It is now read-only.

Commit

Permalink
compiler: JIT zig reduce
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewrk authored and RossComputerGuy committed Mar 20, 2024
1 parent 78225d4 commit 5c2ed59
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 24 deletions.
4 changes: 0 additions & 4 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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_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 only_reduce = b.option(bool, "only-reduce", "only build zig reduce") orelse false;

const docgen_exe = b.addExecutable(.{
.name = "docgen",
Expand Down Expand Up @@ -245,7 +244,6 @@ pub fn build(b: *std.Build) !void {
exe_options.addOption(bool, "force_gpa", force_gpa);
exe_options.addOption(bool, "only_c", only_c);
exe_options.addOption(bool, "only_core_functionality", only_c);
exe_options.addOption(bool, "only_reduce", only_reduce);

if (link_libc) {
exe.linkLibC();
Expand Down Expand Up @@ -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, "only_c", only_c);
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_wine", b.enable_wine);
test_cases_options.addOption(bool, "enable_wasmtime", b.enable_wasmtime);
Expand Down Expand Up @@ -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, "value_tracing", false);
exe_options.addOption(bool, "only_core_functionality", true);
exe_options.addOption(bool, "only_reduce", false);

const run_opt = b.addSystemCommand(&.{
"wasm-opt",
Expand Down
19 changes: 16 additions & 3 deletions src/reduce.zig → lib/std/zig/reduce.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ const std = @import("std");
const mem = std.mem;
const Allocator = std.mem.Allocator;
const assert = std.debug.assert;
const fatal = @import("./main.zig").fatal;
const Ast = std.zig.Ast;
const Walk = @import("reduce/Walk.zig");
const AstGen = std.zig.AstGen;
Expand Down Expand Up @@ -47,15 +46,24 @@ const Interestingness = enum { interesting, unknown, boring };
// - reduce flags sent to the compiler
// - 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_root_source_file_path: ?[]const u8 = null;
var argv: []const []const u8 = &.{};
var seed: u32 = 0;
var skip_smoke_test = false;

{
var i: usize = 2; // skip over "zig" and "reduce"
var i: usize = 1;
while (i < args.len) : (i += 1) {
const arg = args[i];
if (mem.startsWith(u8, arg, "-")) {
Expand Down Expand Up @@ -411,3 +419,8 @@ fn parse(gpa: Allocator, file_path: []const u8) !Ast {

return tree;
}

fn fatal(comptime format: []const u8, args: anytype) noreturn {
std.log.err(format, args);
std.process.exit(1);
}
File renamed without changes.
30 changes: 14 additions & 16 deletions src/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -302,7 +294,7 @@ fn mainArgs(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
} else if (mem.eql(u8, cmd, "rc")) {
return cmdRc(gpa, arena, args[1..]);
} 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")) {
return @import("objcopy.zig").cmdObjCopy(gpa, arena, cmd_args);
} else if (mem.eql(u8, cmd, "fetch")) {
Expand All @@ -325,7 +317,7 @@ fn mainArgs(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
verifyLibcxxCorrectlyLinked();
return @import("print_env.zig").cmdEnv(arena, cmd_args, io.getStdOut().writer());
} 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")) {
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")) {
Expand Down Expand Up @@ -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 target_query: std.Target.Query = .{};
Expand All @@ -5721,7 +5719,7 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
};

const exe_basename = try std.zig.binNameAlloc(arena, .{
.root_name = "fmt",
.root_name = cmd_name,
.target = resolved_target.result,
.output_mode = .Exe,
});
Expand Down Expand Up @@ -5771,7 +5769,7 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
.root_dir = zig_lib_directory,
.sub_path = "std/zig",
},
.root_src_path = "fmt.zig",
.root_src_path = root_src_path,
};

const config = try Compilation.Config.resolve(.{
Expand Down Expand Up @@ -5801,7 +5799,7 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
.zig_lib_directory = zig_lib_directory,
.local_cache_directory = global_cache_directory,
.global_cache_directory = global_cache_directory,
.root_name = "fmt",
.root_name = cmd_name,
.config = config,
.root_mod = root_mod,
.main_mod = root_mod,
Expand All @@ -5820,8 +5818,8 @@ fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
else => |e| return e,
};

const fmt_exe = try global_cache_directory.join(arena, &.{comp.cache_use.whole.bin_sub_path.?});
child_argv.appendAssumeCapacity(fmt_exe);
const exe_path = try global_cache_directory.join(arena, &.{comp.cache_use.whole.bin_sub_path.?});
child_argv.appendAssumeCapacity(exe_path);
}

child_argv.appendSliceAssumeCapacity(args);
Expand Down
1 change: 0 additions & 1 deletion stage1/config.zig.in
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,3 @@ pub const skip_non_native = false;
pub const only_c = false;
pub const force_gpa = false;
pub const only_core_functionality = true;
pub const only_reduce = false;

0 comments on commit 5c2ed59

Please sign in to comment.