diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2021-04-23 10:24:05 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2021-04-23 10:24:05 +0200 |
| commit | f10f7ebbf1c9833c74d09db68c0a0f5a149bde8d (patch) | |
| tree | d25d97bafc0f762e537428f99607680aa5e434b3 /src/llvm_backend_opt.cpp | |
| parent | 40ed7e48d0e4a1f000efbd03d19a4eebe9b8e2f6 (diff) | |
| parent | 17bbb48d8a04aaf6cc53777fe4da6ba1b7fff61b (diff) | |
Merge remote-tracking branch 'upstream/master' into prototype-fmt
Diffstat (limited to 'src/llvm_backend_opt.cpp')
| -rw-r--r-- | src/llvm_backend_opt.cpp | 69 |
1 files changed, 64 insertions, 5 deletions
diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index 5e1154af2..3b268dffa 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -1,11 +1,41 @@ +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); + LLVMAddMergedLoadStoreMotionPass(fpm); + LLVMAddConstantPropagationPass(fpm); + LLVMAddEarlyCSEPass(fpm); + + LLVMAddConstantPropagationPass(fpm); + LLVMAddMergedLoadStoreMotionPass(fpm); + LLVMAddPromoteMemoryToRegisterPass(fpm); + LLVMAddCFGSimplificationPass(fpm); +} + void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcpy_pass, 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 (!ignore_memcpy_pass) { + if (ignore_memcpy_pass) { + lb_basic_populate_function_pass_manager(fpm); + return; + } else if (optimization_level == 0) { LLVMAddMemCpyOptPass(fpm); + lb_basic_populate_function_pass_manager(fpm); + return; } + +#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); @@ -16,16 +46,45 @@ void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcp LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddCFGSimplificationPass(fpm); - // LLVMAddSLPVectorizePass(fpm); - // LLVMAddLoopVectorizePass(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); - // LLVMAddScalarizerPass(fpm); - // LLVMAddLoopIdiomPass(fpm); 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); + 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); |