Make sleep calls optional and disabled by default
This commit is contained in:
parent
8713de03d3
commit
e4dd1bb7b9
@ -1,4 +1,5 @@
|
|||||||
const compiler = @This();
|
const compiler = @This();
|
||||||
|
const configuration = @import("configuration");
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
const library = @import("library.zig");
|
const library = @import("library.zig");
|
||||||
@ -1309,9 +1310,13 @@ fn control_thread(unit: *Unit) void {
|
|||||||
|
|
||||||
iterations_without_work_done += @intFromBool(task_done_this_iteration == 0);
|
iterations_without_work_done += @intFromBool(task_done_this_iteration == 0);
|
||||||
|
|
||||||
|
if (configuration.sleep_on_thread_hot_loops) {
|
||||||
if (iterations_without_work_done > 5) {
|
if (iterations_without_work_done > 5) {
|
||||||
std.time.sleep(100);
|
std.time.sleep(100);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
std.atomic.spinLoopHint();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var objects = PinnedArray([]const u8){};
|
var objects = PinnedArray([]const u8){};
|
||||||
@ -1580,7 +1585,7 @@ pub fn link(options: LinkerOptions) void {
|
|||||||
_ = argv.append(object);
|
_ = argv.append(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ci = @import("configuration").ci;
|
const ci = configuration.ci;
|
||||||
switch (builtin.os.tag) {
|
switch (builtin.os.tag) {
|
||||||
.macos => {
|
.macos => {
|
||||||
_ = argv.append("-dynamic");
|
_ = argv.append("-dynamic");
|
||||||
@ -2094,10 +2099,13 @@ fn worker_thread(thread_index: u32, cpu_count: *u32) void {
|
|||||||
assert(thread.task_system.job.worker.completed == c + 1);
|
assert(thread.task_system.job.worker.completed == c + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (configuration.sleep_on_thread_hot_loops) {
|
||||||
std.time.sleep(1000);
|
std.time.sleep(1000);
|
||||||
|
} else {
|
||||||
std.atomic.spinLoopHint();
|
std.atomic.spinLoopHint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn llvm_get_value(thread: *Thread, value: *Value) *LLVM.Value {
|
fn llvm_get_value(thread: *Thread, value: *Value) *LLVM.Value {
|
||||||
if (value.llvm) |llvm| {
|
if (value.llvm) |llvm| {
|
||||||
@ -3943,7 +3951,7 @@ pub const LLVM = struct {
|
|||||||
|
|
||||||
pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, return_address: ?usize) noreturn {
|
pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, return_address: ?usize) noreturn {
|
||||||
@setCold(true);
|
@setCold(true);
|
||||||
const print_stack_trace = @import("configuration").print_stack_trace;
|
const print_stack_trace = configuration.print_stack_trace;
|
||||||
switch (print_stack_trace) {
|
switch (print_stack_trace) {
|
||||||
true => @call(.always_inline, std.builtin.default_panic, .{ message, stack_trace, return_address }),
|
true => @call(.always_inline, std.builtin.default_panic, .{ message, stack_trace, return_address }),
|
||||||
false => {
|
false => {
|
||||||
|
@ -30,6 +30,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
const use_editor = b.option(bool, "editor", "Use the GUI editor to play around the programming language") orelse (!is_ci and enable_editor);
|
const use_editor = b.option(bool, "editor", "Use the GUI editor to play around the programming language") orelse (!is_ci and enable_editor);
|
||||||
const use_debug = b.option(bool, "use_debug", "This option enables the LLVM debug build in the development PC") orelse false;
|
const use_debug = b.option(bool, "use_debug", "This option enables the LLVM debug build in the development PC") orelse false;
|
||||||
const sanitize = b.option(bool, "sanitize", "This option enables sanitizers for the compiler") orelse false;
|
const sanitize = b.option(bool, "sanitize", "This option enables sanitizers for the compiler") orelse false;
|
||||||
|
const sleep_on_thread_hot_loops = b.option(bool, "sleep_on_thread_hot_loops", "This option enables sleep calls on hot threaded loops") orelse false;
|
||||||
const static = b.option(bool, "static", "This option enables the compiler to be built statically") orelse switch (@import("builtin").os.tag) {
|
const static = b.option(bool, "static", "This option enables the compiler to be built statically") orelse switch (@import("builtin").os.tag) {
|
||||||
else => use_debug,
|
else => use_debug,
|
||||||
.windows => true,
|
.windows => true,
|
||||||
@ -39,6 +40,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
compiler_options.addOption(bool, "print_stack_trace", print_stack_trace);
|
compiler_options.addOption(bool, "print_stack_trace", print_stack_trace);
|
||||||
compiler_options.addOption(bool, "ci", is_ci);
|
compiler_options.addOption(bool, "ci", is_ci);
|
||||||
compiler_options.addOption(bool, "editor", use_editor);
|
compiler_options.addOption(bool, "editor", use_editor);
|
||||||
|
compiler_options.addOption(bool, "sleep_on_thread_hot_loops", sleep_on_thread_hot_loops);
|
||||||
|
|
||||||
const fetcher = b.addExecutable(.{
|
const fetcher = b.addExecutable(.{
|
||||||
.name = "llvm_fetcher",
|
.name = "llvm_fetcher",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user