diff options
| author | gingerBill <bill@gingerbill.org> | 2021-04-22 13:54:26 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-04-22 13:54:26 +0100 |
| commit | 1c9f48031deb4a214735de4b5206b4837a0cacfc (patch) | |
| tree | 2489d0c2361d8468762731cc11b2242c4c1e1b37 /src/llvm_backend_opt.cpp | |
| parent | 7fcd5ecbd52c6488043dc0344e175f0e6535eea1 (diff) | |
Change function pass manager passes
Diffstat (limited to 'src/llvm_backend_opt.cpp')
| -rw-r--r-- | src/llvm_backend_opt.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index 52cfa1808..3b268dffa 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -1,6 +1,7 @@ void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcpy_pass, i32 optimization_level); void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm, i32 optimization_level); void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPassManagerRef mpm, i32 optimization_level); +void lb_populate_function_pass_manager_specific(LLVMPassManagerRef fpm, i32 optimization_level); void lb_basic_populate_function_pass_manager(LLVMPassManagerRef fpm) { LLVMAddPromoteMemoryToRegisterPass(fpm); @@ -28,8 +29,46 @@ void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcp return; } -#if 1 +#if 0 + LLVMPassManagerBuilderRef pmb = LLVMPassManagerBuilderCreate(); + LLVMPassManagerBuilderSetOptLevel(pmb, optimization_level); + LLVMPassManagerBuilderSetSizeLevel(pmb, optimization_level); + LLVMPassManagerBuilderPopulateFunctionPassManager(pmb, fpm); +#else + LLVMAddMemCpyOptPass(fpm); + LLVMAddPromoteMemoryToRegisterPass(fpm); + LLVMAddMergedLoadStoreMotionPass(fpm); + LLVMAddConstantPropagationPass(fpm); + LLVMAddEarlyCSEPass(fpm); + + LLVMAddConstantPropagationPass(fpm); + LLVMAddMergedLoadStoreMotionPass(fpm); + LLVMAddPromoteMemoryToRegisterPass(fpm); + LLVMAddCFGSimplificationPass(fpm); + + LLVMAddSCCPPass(fpm); + + LLVMAddPromoteMemoryToRegisterPass(fpm); + LLVMAddUnifyFunctionExitNodesPass(fpm); + + LLVMAddCFGSimplificationPass(fpm); + LLVMAddEarlyCSEPass(fpm); + LLVMAddLowerExpectIntrinsicPass(fpm); +#endif +} +void lb_populate_function_pass_manager_specific(LLVMPassManagerRef fpm, i32 optimization_level) { + // NOTE(bill): Treat -opt:3 as if it was -opt:2 + // TODO(bill): Determine which opt definitions should exist in the first place + optimization_level = gb_clamp(optimization_level, 0, 2); + + if (optimization_level == 0) { + LLVMAddMemCpyOptPass(fpm); + lb_basic_populate_function_pass_manager(fpm); + return; + } + +#if 1 LLVMPassManagerBuilderRef pmb = LLVMPassManagerBuilderCreate(); LLVMPassManagerBuilderSetOptLevel(pmb, optimization_level); LLVMPassManagerBuilderSetSizeLevel(pmb, optimization_level); |