From 0be6ddc7e2149a1f6b8fbc08ecf2674926c11785 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 20 Oct 2020 12:25:11 +0100 Subject: Add `-microarch:` (e.g. `-microarch:native`) --- src/llvm_backend.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/llvm_backend.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index e2259cefb..921f996f6 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -11858,7 +11858,21 @@ void lb_generate_code(lbGenerator *gen) { code_mode = LLVMCodeModelJITDefault; } - LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, "generic", "", LLVMCodeGenLevelNone, LLVMRelocDefault, code_mode); + char const *host_cpu_name = LLVMGetHostCPUName(); + char const *llvm_cpu = "generic"; + char const *llvm_features = ""; + if (build_context.microarch.len != 0) { + if (build_context.microarch == "native") { + llvm_cpu = host_cpu_name; + } else { + llvm_cpu = alloc_cstring(heap_allocator(), build_context.microarch); + } + if (gb_strcmp(llvm_cpu, host_cpu_name) == 0) { + llvm_features = LLVMGetHostCPUFeatures(); + } + } + + LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, llvm_cpu, llvm_features, LLVMCodeGenLevelNone, LLVMRelocDefault, code_mode); defer (LLVMDisposeTargetMachine(target_machine)); LLVMSetModuleDataLayout(mod, LLVMCreateTargetDataLayout(target_machine)); @@ -12424,6 +12438,7 @@ void lb_generate_code(lbGenerator *gen) { defer (LLVMDisposePassManager(module_pass_manager)); LLVMAddAlwaysInlinerPass(module_pass_manager); LLVMAddStripDeadPrototypesPass(module_pass_manager); + LLVMAddAnalysisPasses(target_machine, module_pass_manager); // if (build_context.optimization_level >= 2) { // LLVMAddArgumentPromotionPass(module_pass_manager); // LLVMAddConstantMergePass(module_pass_manager); -- cgit v1.2.3