diff options
| author | Joshua Huelsman <joshuahuelsman@gmail.com> | 2020-03-09 03:21:08 -0400 |
|---|---|---|
| committer | Joshua Huelsman <joshuahuelsman@gmail.com> | 2020-03-09 03:21:08 -0400 |
| commit | 4468ddf8f8edb5cd51e708ee623598bc6d0716de (patch) | |
| tree | 877517d61fe46ea8f051605c1dae77f19a856e2d | |
| parent | bf0c6f5a30e406a0e0f73014c024ba63dcb47b43 (diff) | |
LLVM: speed improvement changes.
| -rw-r--r-- | src/llvm_backend.cpp | 60 |
1 files changed, 31 insertions, 29 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 3b3fe4985..36b13d4f2 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -10157,6 +10157,33 @@ void lb_generate_code(lbGenerator *gen) { 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 for_array(i, info->files.entries) { AstFile *f = info->files.entries[i].value; @@ -10467,9 +10494,10 @@ void lb_generate_code(lbGenerator *gen) { LLVMPassManagerRef function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod); defer (LLVMDisposePassManager(function_pass_manager)); + LLVMAddMemCpyOptPass(function_pass_manager); LLVMAddPromoteMemoryToRegisterPass(function_pass_manager); LLVMAddMergedLoadStoreMotionPass(function_pass_manager); - LLVMAddDeadStoreEliminationPass(function_pass_manager); + // LLVMAddDeadStoreEliminationPass(function_pass_manager); LLVMAddAggressiveInstCombinerPass(function_pass_manager); LLVMAddConstantPropagationPass(function_pass_manager); LLVMAddAggressiveDCEPass(function_pass_manager); @@ -10595,6 +10623,7 @@ void lb_generate_code(lbGenerator *gen) { defer (LLVMDisposePassManager(module_pass_manager)); LLVMAddAlwaysInlinerPass(module_pass_manager); LLVMAddStripDeadPrototypesPass(module_pass_manager); + // LLVMAddConstantMergePass(module_pass_manager); LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate(); defer (LLVMPassManagerBuilderDispose(pass_manager_builder)); @@ -10604,10 +10633,7 @@ void lb_generate_code(lbGenerator *gen) { LLVMPassManagerBuilderPopulateLTOPassManager(pass_manager_builder, module_pass_manager, false, false); LLVMRunPassManager(module_pass_manager, mod); - - - - char *llvm_error = nullptr; + llvm_error = nullptr; defer (LLVMDisposeMessage(llvm_error)); 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); 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"); LLVMBool ok = LLVMTargetMachineEmitToFile(target_machine, mod, cast(char *)filepath_obj.text, LLVMObjectFile, &llvm_error); |