aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_general.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-09-19 14:15:25 +0100
committergingerBill <gingerBill@users.noreply.github.com>2025-09-19 14:15:25 +0100
commit6bca1475edb8e2aec4bcbe942835bcc54f9e837e (patch)
treef3722ed3c238c49b515b67b3723f366a020652f3 /src/llvm_backend_general.cpp
parentee3b10335b09181808fd98ccf46fe9369a11db13 (diff)
Convert `procedures_to_generate` to a queue
Diffstat (limited to 'src/llvm_backend_general.cpp')
-rw-r--r--src/llvm_backend_general.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 49a7fb13f..c84edc178 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -97,12 +97,16 @@ gb_internal WORKER_TASK_PROC(lb_init_module_worker_proc) {
map_init(&m->function_type_map);
string_map_init(&m->gen_procs);
if (USE_SEPARATE_MODULES) {
- array_init(&m->procedures_to_generate, a, 0, 1<<10);
+ mpsc_init(&m->procedures_to_generate, a);
map_init(&m->procedure_values, 1<<11);
+ array_init(&m->generated_procedures, a, 0, 1<<10);
} else {
- array_init(&m->procedures_to_generate, a, 0, c->info.all_procedures.count);
+ mpsc_init(&m->procedures_to_generate, a);
map_init(&m->procedure_values, c->info.all_procedures.count*2);
+ array_init(&m->generated_procedures, a, 0, c->info.all_procedures.count*2);
}
+
+
array_init(&m->global_procedures_to_create, a, 0, 1024);
array_init(&m->global_types_to_create, a, 0, 1024);
array_init(&m->missing_procedures_to_check, a, 0, 16);
@@ -213,6 +217,14 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) {
}
}
}
+
+ if (LLVM_WEAK_MONOMORPHIZATION) {
+ lbModule *m = gb_alloc_item(permanent_allocator(), lbModule);
+ gen->equal_module = m;
+ m->checker = c;
+ map_set(&gen->modules, cast(void *)m, m); // point to itself just add it to the list
+ lb_init_module(m, do_threading);
+ }
}
gen->default_module.gen = gen;
@@ -3169,7 +3181,7 @@ gb_internal lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &pr
value.value = p->value;
value.type = p->type;
- array_add(&m->procedures_to_generate, p);
+ mpsc_enqueue(&m->procedures_to_generate, p);
if (parent != nullptr) {
array_add(&parent->children, p);
} else {