mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Minor changes to function pass manager in llvm_backend.cpp
This commit is contained in:
+33
-27
@@ -11535,8 +11535,7 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da
|
|||||||
|
|
||||||
for_array(type_info_type_index, info->type_info_types) {
|
for_array(type_info_type_index, info->type_info_types) {
|
||||||
Type *t = info->type_info_types[type_info_type_index];
|
Type *t = info->type_info_types[type_info_type_index];
|
||||||
t = default_type(t);
|
if (t == nullptr || t == t_invalid) {
|
||||||
if (t == t_invalid) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12568,6 +12567,8 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
|
|
||||||
LLVMPassManagerRef default_function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod);
|
LLVMPassManagerRef default_function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod);
|
||||||
defer (LLVMDisposePassManager(default_function_pass_manager));
|
defer (LLVMDisposePassManager(default_function_pass_manager));
|
||||||
|
|
||||||
|
LLVMInitializeFunctionPassManager(default_function_pass_manager);
|
||||||
{
|
{
|
||||||
auto dfpm = default_function_pass_manager;
|
auto dfpm = default_function_pass_manager;
|
||||||
|
|
||||||
@@ -12632,10 +12633,12 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
} while (repeat_count --> 0);
|
} while (repeat_count --> 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LLVMFinalizeFunctionPassManager(default_function_pass_manager);
|
||||||
|
|
||||||
|
|
||||||
LLVMPassManagerRef default_function_pass_manager_without_memcpy = LLVMCreateFunctionPassManagerForModule(mod);
|
LLVMPassManagerRef default_function_pass_manager_without_memcpy = LLVMCreateFunctionPassManagerForModule(mod);
|
||||||
defer (LLVMDisposePassManager(default_function_pass_manager_without_memcpy));
|
defer (LLVMDisposePassManager(default_function_pass_manager_without_memcpy));
|
||||||
|
LLVMInitializeFunctionPassManager(default_function_pass_manager_without_memcpy);
|
||||||
{
|
{
|
||||||
auto dfpm = default_function_pass_manager_without_memcpy;
|
auto dfpm = default_function_pass_manager_without_memcpy;
|
||||||
LLVMAddPromoteMemoryToRegisterPass(dfpm);
|
LLVMAddPromoteMemoryToRegisterPass(dfpm);
|
||||||
@@ -12648,8 +12651,9 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
LLVMAddCFGSimplificationPass(dfpm);
|
LLVMAddCFGSimplificationPass(dfpm);
|
||||||
// LLVMAddUnifyFunctionExitNodesPass(dfpm);
|
// LLVMAddUnifyFunctionExitNodesPass(dfpm);
|
||||||
}
|
}
|
||||||
|
LLVMFinalizeFunctionPassManager(default_function_pass_manager_without_memcpy);
|
||||||
|
|
||||||
TIME_SECTION("LLVM Runtime Creation");
|
TIME_SECTION("LLVM Runtime Type Information Creation");
|
||||||
|
|
||||||
lbProcedure *startup_type_info = nullptr;
|
lbProcedure *startup_type_info = nullptr;
|
||||||
lbProcedure *startup_runtime = nullptr;
|
lbProcedure *startup_runtime = nullptr;
|
||||||
@@ -12678,6 +12682,7 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
|
|
||||||
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
||||||
}
|
}
|
||||||
|
TIME_SECTION("LLVM Runtime Startup Creation (Global Variables)");
|
||||||
{ // Startup Runtime
|
{ // Startup Runtime
|
||||||
Type *params = alloc_type_tuple();
|
Type *params = alloc_type_tuple();
|
||||||
Type *results = alloc_type_tuple();
|
Type *results = alloc_type_tuple();
|
||||||
@@ -12780,6 +12785,7 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(build_context.build_mode == BuildMode_DynamicLibrary && !has_dll_main)) {
|
if (!(build_context.build_mode == BuildMode_DynamicLibrary && !has_dll_main)) {
|
||||||
|
TIME_SECTION("LLVM DLL main");
|
||||||
|
|
||||||
|
|
||||||
Type *params = alloc_type_tuple();
|
Type *params = alloc_type_tuple();
|
||||||
@@ -12880,29 +12886,29 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
|
|
||||||
|
|
||||||
TIME_SECTION("LLVM Function Pass");
|
TIME_SECTION("LLVM Function Pass");
|
||||||
|
{
|
||||||
for_array(i, m->procedures_to_generate) {
|
for_array(i, m->procedures_to_generate) {
|
||||||
lbProcedure *p = m->procedures_to_generate[i];
|
lbProcedure *p = m->procedures_to_generate[i];
|
||||||
if (p->body != nullptr) { // Build Procedure
|
if (p->body != nullptr) { // Build Procedure
|
||||||
for (i32 i = 0; i <= build_context.optimization_level; i++) {
|
for (i32 i = 0; i <= build_context.optimization_level; i++) {
|
||||||
if (p->flags & lbProcedureFlag_WithoutMemcpyPass) {
|
if (p->flags & lbProcedureFlag_WithoutMemcpyPass) {
|
||||||
LLVMRunFunctionPassManager(default_function_pass_manager_without_memcpy, p->value);
|
LLVMRunFunctionPassManager(default_function_pass_manager_without_memcpy, p->value);
|
||||||
} else {
|
} else {
|
||||||
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for_array(i, m->equal_procs.entries) {
|
for_array(i, m->equal_procs.entries) {
|
||||||
lbProcedure *p = m->equal_procs.entries[i].value;
|
lbProcedure *p = m->equal_procs.entries[i].value;
|
||||||
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
||||||
|
}
|
||||||
|
for_array(i, m->hasher_procs.entries) {
|
||||||
|
lbProcedure *p = m->hasher_procs.entries[i].value;
|
||||||
|
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for_array(i, m->hasher_procs.entries) {
|
|
||||||
lbProcedure *p = m->hasher_procs.entries[i].value;
|
|
||||||
LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TIME_SECTION("LLVM Module Pass");
|
TIME_SECTION("LLVM Module Pass");
|
||||||
|
|
||||||
@@ -12911,12 +12917,12 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
LLVMAddAlwaysInlinerPass(module_pass_manager);
|
LLVMAddAlwaysInlinerPass(module_pass_manager);
|
||||||
LLVMAddStripDeadPrototypesPass(module_pass_manager);
|
LLVMAddStripDeadPrototypesPass(module_pass_manager);
|
||||||
LLVMAddAnalysisPasses(target_machine, module_pass_manager);
|
LLVMAddAnalysisPasses(target_machine, module_pass_manager);
|
||||||
// if (build_context.optimization_level >= 2) {
|
if (build_context.optimization_level >= 2) {
|
||||||
// LLVMAddArgumentPromotionPass(module_pass_manager);
|
LLVMAddArgumentPromotionPass(module_pass_manager);
|
||||||
// LLVMAddConstantMergePass(module_pass_manager);
|
LLVMAddConstantMergePass(module_pass_manager);
|
||||||
// LLVMAddGlobalDCEPass(module_pass_manager);
|
LLVMAddGlobalDCEPass(module_pass_manager);
|
||||||
// LLVMAddDeadArgEliminationPass(module_pass_manager);
|
LLVMAddDeadArgEliminationPass(module_pass_manager);
|
||||||
// }
|
}
|
||||||
|
|
||||||
LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate();
|
LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate();
|
||||||
defer (LLVMPassManagerBuilderDispose(pass_manager_builder));
|
defer (LLVMPassManagerBuilderDispose(pass_manager_builder));
|
||||||
|
|||||||
Reference in New Issue
Block a user