diff options
| author | gingerBill <bill@gingerbill.org> | 2020-03-15 14:37:46 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-03-15 14:37:46 +0000 |
| commit | 1707e004eca1a2f6406f56db7924da3992618107 (patch) | |
| tree | 9253079064da95fe78aec705ea885c6d423d0358 /src/llvm_backend.cpp | |
| parent | 5169dc07c7c2d34e5170279433e6557d40b3afb8 (diff) | |
| parent | 775e6caf3118e4b771513bdade6c3ded6da7d9b1 (diff) | |
Merge branch 'llvm-integration' of https://github.com/odin-lang/Odin into llvm-integration
Diffstat (limited to 'src/llvm_backend.cpp')
| -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 7e7080f55..040a1f335 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -10167,6 +10167,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; @@ -10477,9 +10504,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); @@ -10605,6 +10633,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)); @@ -10614,10 +10643,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")); @@ -10634,30 +10660,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); |