mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 06:38:47 +00:00
LLVM: speed improvement changes.
This commit is contained in:
+31
-29
@@ -10157,6 +10157,33 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
|
|
||||||
auto *min_dep_set = &info->minimum_dependency_set;
|
auto *min_dep_set = &info->minimum_dependency_set;
|
||||||
|
|
||||||
|
TIME_SECTION("LLVM Initializtion");
|
||||||
|
|
||||||
|
LLVMInitializeAllTargetInfos();
|
||||||
|
LLVMInitializeAllTargets();
|
||||||
|
LLVMInitializeAllTargetMCs();
|
||||||
|
LLVMInitializeAllAsmPrinters();
|
||||||
|
LLVMInitializeAllAsmParsers();
|
||||||
|
LLVMInitializeAllDisassemblers();
|
||||||
|
LLVMInitializeNativeTarget();
|
||||||
|
|
||||||
|
|
||||||
|
char const *target_triple = "x86_64-pc-windows-msvc";
|
||||||
|
char const *target_data_layout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128";
|
||||||
|
LLVMSetTarget(mod, target_triple);
|
||||||
|
|
||||||
|
LLVMTargetRef target = {};
|
||||||
|
char *llvm_error = nullptr;
|
||||||
|
LLVMGetTargetFromTriple(target_triple, &target, &llvm_error);
|
||||||
|
GB_ASSERT(target != nullptr);
|
||||||
|
|
||||||
|
TIME_SECTION("LLVM Create Target Machine");
|
||||||
|
|
||||||
|
LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, "generic", "", LLVMCodeGenLevelNone, LLVMRelocDefault, LLVMCodeModelDefault);
|
||||||
|
defer (LLVMDisposeTargetMachine(target_machine));
|
||||||
|
|
||||||
|
LLVMSetModuleDataLayout(mod, LLVMCreateTargetDataLayout(target_machine));
|
||||||
|
|
||||||
{ // Debug Info
|
{ // Debug Info
|
||||||
for_array(i, info->files.entries) {
|
for_array(i, info->files.entries) {
|
||||||
AstFile *f = info->files.entries[i].value;
|
AstFile *f = info->files.entries[i].value;
|
||||||
@@ -10467,9 +10494,10 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
LLVMPassManagerRef function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod);
|
LLVMPassManagerRef function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod);
|
||||||
defer (LLVMDisposePassManager(function_pass_manager));
|
defer (LLVMDisposePassManager(function_pass_manager));
|
||||||
|
|
||||||
|
LLVMAddMemCpyOptPass(function_pass_manager);
|
||||||
LLVMAddPromoteMemoryToRegisterPass(function_pass_manager);
|
LLVMAddPromoteMemoryToRegisterPass(function_pass_manager);
|
||||||
LLVMAddMergedLoadStoreMotionPass(function_pass_manager);
|
LLVMAddMergedLoadStoreMotionPass(function_pass_manager);
|
||||||
LLVMAddDeadStoreEliminationPass(function_pass_manager);
|
// LLVMAddDeadStoreEliminationPass(function_pass_manager);
|
||||||
LLVMAddAggressiveInstCombinerPass(function_pass_manager);
|
LLVMAddAggressiveInstCombinerPass(function_pass_manager);
|
||||||
LLVMAddConstantPropagationPass(function_pass_manager);
|
LLVMAddConstantPropagationPass(function_pass_manager);
|
||||||
LLVMAddAggressiveDCEPass(function_pass_manager);
|
LLVMAddAggressiveDCEPass(function_pass_manager);
|
||||||
@@ -10595,6 +10623,7 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
defer (LLVMDisposePassManager(module_pass_manager));
|
defer (LLVMDisposePassManager(module_pass_manager));
|
||||||
LLVMAddAlwaysInlinerPass(module_pass_manager);
|
LLVMAddAlwaysInlinerPass(module_pass_manager);
|
||||||
LLVMAddStripDeadPrototypesPass(module_pass_manager);
|
LLVMAddStripDeadPrototypesPass(module_pass_manager);
|
||||||
|
// LLVMAddConstantMergePass(module_pass_manager);
|
||||||
|
|
||||||
LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate();
|
LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate();
|
||||||
defer (LLVMPassManagerBuilderDispose(pass_manager_builder));
|
defer (LLVMPassManagerBuilderDispose(pass_manager_builder));
|
||||||
@@ -10604,10 +10633,7 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
LLVMPassManagerBuilderPopulateLTOPassManager(pass_manager_builder, module_pass_manager, false, false);
|
LLVMPassManagerBuilderPopulateLTOPassManager(pass_manager_builder, module_pass_manager, false, false);
|
||||||
LLVMRunPassManager(module_pass_manager, mod);
|
LLVMRunPassManager(module_pass_manager, mod);
|
||||||
|
|
||||||
|
llvm_error = nullptr;
|
||||||
|
|
||||||
|
|
||||||
char *llvm_error = nullptr;
|
|
||||||
defer (LLVMDisposeMessage(llvm_error));
|
defer (LLVMDisposeMessage(llvm_error));
|
||||||
|
|
||||||
String filepath_ll = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".ll"));
|
String filepath_ll = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".ll"));
|
||||||
@@ -10624,30 +10650,6 @@ void lb_generate_code(lbGenerator *gen) {
|
|||||||
LLVMVerifyModule(mod, LLVMAbortProcessAction, &llvm_error);
|
LLVMVerifyModule(mod, LLVMAbortProcessAction, &llvm_error);
|
||||||
llvm_error = nullptr;
|
llvm_error = nullptr;
|
||||||
|
|
||||||
TIME_SECTION("LLVM Initializtion");
|
|
||||||
|
|
||||||
LLVMInitializeAllTargetInfos();
|
|
||||||
LLVMInitializeAllTargets();
|
|
||||||
LLVMInitializeAllTargetMCs();
|
|
||||||
LLVMInitializeAllAsmPrinters();
|
|
||||||
LLVMInitializeAllAsmParsers();
|
|
||||||
LLVMInitializeAllDisassemblers();
|
|
||||||
LLVMInitializeNativeTarget();
|
|
||||||
|
|
||||||
|
|
||||||
char const *target_triple = "x86_64-pc-windows-msvc";
|
|
||||||
char const *target_data_layout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128";
|
|
||||||
LLVMSetTarget(mod, target_triple);
|
|
||||||
|
|
||||||
LLVMTargetRef target = {};
|
|
||||||
LLVMGetTargetFromTriple(target_triple, &target, &llvm_error);
|
|
||||||
GB_ASSERT(target != nullptr);
|
|
||||||
|
|
||||||
TIME_SECTION("LLVM Create Target Machine");
|
|
||||||
|
|
||||||
LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, "generic", "", LLVMCodeGenLevelNone, LLVMRelocDefault, LLVMCodeModelDefault);
|
|
||||||
defer (LLVMDisposeTargetMachine(target_machine));
|
|
||||||
|
|
||||||
TIME_SECTION("LLVM Object Generation");
|
TIME_SECTION("LLVM Object Generation");
|
||||||
|
|
||||||
LLVMBool ok = LLVMTargetMachineEmitToFile(target_machine, mod, cast(char *)filepath_obj.text, LLVMObjectFile, &llvm_error);
|
LLVMBool ok = LLVMTargetMachineEmitToFile(target_machine, mod, cast(char *)filepath_obj.text, LLVMObjectFile, &llvm_error);
|
||||||
|
|||||||
Reference in New Issue
Block a user