From b84a6608065cacb454a5dc531243abeb119c8823 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Thu, 28 Mar 2024 21:09:37 -0400 Subject: Fix incorrect timings on macOS --- src/timings.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src/timings.cpp') diff --git a/src/timings.cpp b/src/timings.cpp index baa8b80da..e4165e3c0 100644 --- a/src/timings.cpp +++ b/src/timings.cpp @@ -33,22 +33,23 @@ gb_internal u64 win32_time_stamp__freq(void) { #include +gb_internal mach_timebase_info_data_t osx_init_timebase_info(void) { + mach_timebase_info_data_t data; + data.numer = 0; + data.denom = 0; + kern_return_t r = mach_timebase_info(&data); + GB_ASSERT(r == KERN_SUCCESS); + + return data; +} + gb_internal u64 osx_time_stamp_time_now(void) { - return mach_absolute_time(); + gb_local_persist mach_timebase_info_data_t data = osx_init_timebase_info(); + return (mach_absolute_time() * cast(u64)data.numer) / cast(u64)data.denom; // Effectively converts to nanoseconds } gb_internal u64 osx_time_stamp__freq(void) { - mach_timebase_info_data_t data; - data.numer = 0; - data.denom = 0; - mach_timebase_info(&data); -#if defined(GB_CPU_ARM) - // NOTE(bill, 2021-02-25): M1 Chip seems to have a different freq count - // TODO(bill): Is this truly correct? - return (1000000llu * cast(u64)data.numer) / cast(u64)data.denom; -#else - return (1000000000llu * cast(u64)data.numer) / cast(u64)data.denom; -#endif + return 1000000000ull; // Nanoseconds to seconds } #elif defined(GB_SYSTEM_UNIX) -- cgit v1.2.3 From 13b8a5b73d12ed7c6c9a8ca6714a0aa36b82ecf8 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Fri, 29 Mar 2024 05:04:40 -0400 Subject: Reverting to calculated frequency timings method on macOS, but fixed --- src/timings.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/timings.cpp') diff --git a/src/timings.cpp b/src/timings.cpp index e4165e3c0..712e804cb 100644 --- a/src/timings.cpp +++ b/src/timings.cpp @@ -44,12 +44,12 @@ gb_internal mach_timebase_info_data_t osx_init_timebase_info(void) { } gb_internal u64 osx_time_stamp_time_now(void) { - gb_local_persist mach_timebase_info_data_t data = osx_init_timebase_info(); - return (mach_absolute_time() * cast(u64)data.numer) / cast(u64)data.denom; // Effectively converts to nanoseconds + return mach_absolute_time(); } gb_internal u64 osx_time_stamp__freq(void) { - return 1000000000ull; // Nanoseconds to seconds + gb_local_persist mach_timebase_info_data_t data = osx_init_timebase_info(); + return 1000000000ull * cast(u64)data.denom / cast(u64)data.numer; } #elif defined(GB_SYSTEM_UNIX) -- cgit v1.2.3 From 2a219fa8305f2d246d5b3ae5b2b1e25c75bb4332 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 8 Jul 2024 15:13:40 +0100 Subject: Correct `-use-separate-module` behaviour --- src/entity.cpp | 3 +++ src/llvm_backend.cpp | 2 +- src/llvm_backend_general.cpp | 3 ++- src/main.cpp | 7 ++++++- src/timings.cpp | 7 ++++--- 5 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src/timings.cpp') diff --git a/src/entity.cpp b/src/entity.cpp index 8f55c1faf..9dee9cbe7 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -338,6 +338,9 @@ gb_internal Entity *alloc_entity(EntityKind kind, Scope *scope, Token token, Typ entity->token = token; entity->type = type; entity->id = 1 + global_entity_id.fetch_add(1); + if (token.pos.file_id) { + entity->file = thread_safe_get_ast_file_from_id(token.pos.file_id); + } return entity; } diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 8c82d7117..9818c5435 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3439,7 +3439,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { gbString label_object_generation = gb_string_make(heap_allocator(), "LLVM Object Generation"); if (gen->modules.count > 1) { - label_object_generation = gb_string_append_fmt(label_object_generation, " (%d modules)", gen->modules.count); + label_object_generation = gb_string_append_fmt(label_object_generation, " (%td modules)", gen->modules.count); } TIME_SECTION_WITH_LEN(label_object_generation, gb_string_length(label_object_generation)); diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index f65bc9ac7..77f78a24c 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -118,6 +118,7 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { map_init(&gen->anonymous_proc_lits, 1024); if (USE_SEPARATE_MODULES) { + bool module_per_file = build_context.module_per_file && build_context.optimization_level <= 0; for (auto const &entry : gen->info->packages) { AstPackage *pkg = entry.value; auto m = gb_alloc_item(permanent_allocator(), lbModule); @@ -125,7 +126,7 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { m->gen = gen; map_set(&gen->modules, cast(void *)pkg, m); lb_init_module(m, c); - if (build_context.module_per_file) { + if (module_per_file) { // NOTE(bill): Probably per file is not a good idea, so leave this for later for (AstFile *file : pkg->files) { auto m = gb_alloc_item(permanent_allocator(), lbModule); diff --git a/src/main.cpp b/src/main.cpp index 8ea0ae62c..89ce93b18 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3304,11 +3304,16 @@ int main(int arg_count, char const **arg_ptr) { } else #endif { - MAIN_TIME_SECTION("LLVM API Code Gen"); lbGenerator *gen = gb_alloc_item(permanent_allocator(), lbGenerator); if (!lb_init_generator(gen, checker)) { return 1; } + + gbString label_code_gen = gb_string_make(heap_allocator(), "LLVM API Code Gen"); + if (gen->modules.count > 1) { + label_code_gen = gb_string_append_fmt(label_code_gen, " ( %4td modules )", gen->modules.count); + } + MAIN_TIME_SECTION_WITH_LEN(label_code_gen, gb_string_length(label_code_gen)); if (lb_generate_code(gen)) { switch (build_context.build_mode) { case BuildMode_Executable: diff --git a/src/timings.cpp b/src/timings.cpp index 712e804cb..3f8402b36 100644 --- a/src/timings.cpp +++ b/src/timings.cpp @@ -146,9 +146,10 @@ gb_internal f64 time_stamp_as_us(TimeStamp const &ts, u64 freq) { return 1000000.0*time_stamp_as_s(ts, freq); } -#define MAIN_TIME_SECTION(str) do { debugf("[Section] %s\n", str); timings_start_section(&global_timings, str_lit(str)); } while (0) -#define TIME_SECTION(str) do { debugf("[Section] %s\n", str); if (build_context.show_more_timings) timings_start_section(&global_timings, str_lit(str)); } while (0) -#define TIME_SECTION_WITH_LEN(str, len) do { debugf("[Section] %s\n", str); if (build_context.show_more_timings) timings_start_section(&global_timings, make_string((u8 *)str, len)); } while (0) +#define MAIN_TIME_SECTION(str) do { debugf("[Section] %s\n", str); timings_start_section(&global_timings, str_lit(str)); } while (0) +#define MAIN_TIME_SECTION_WITH_LEN(str, len) do { debugf("[Section] %s\n", str); timings_start_section(&global_timings, make_string((u8 *)str, len)); } while (0) +#define TIME_SECTION(str) do { debugf("[Section] %s\n", str); if (build_context.show_more_timings) timings_start_section(&global_timings, str_lit(str)); } while (0) +#define TIME_SECTION_WITH_LEN(str, len) do { debugf("[Section] %s\n", str); if (build_context.show_more_timings) timings_start_section(&global_timings, make_string((u8 *)str, len)); } while (0) enum TimingUnit { -- cgit v1.2.3