mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
gallivm: Setup a global optimization pass.
Modules are still free to setup their own optimization passes, but for the normal case it should not be necessary.
This commit is contained in:
parent
83ced5a918
commit
e277d5c1f6
2 changed files with 31 additions and 0 deletions
|
|
@ -32,6 +32,8 @@
|
|||
#include "lp_bld_debug.h"
|
||||
#include "lp_bld_init.h"
|
||||
|
||||
#include <llvm-c/Transforms/Scalar.h>
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
unsigned gallivm_debug = 0;
|
||||
|
|
@ -50,6 +52,7 @@ LLVMModuleRef lp_build_module = NULL;
|
|||
LLVMExecutionEngineRef lp_build_engine = NULL;
|
||||
LLVMModuleProviderRef lp_build_provider = NULL;
|
||||
LLVMTargetDataRef lp_build_target = NULL;
|
||||
LLVMPassManagerRef lp_build_pass = NULL;
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -127,6 +130,33 @@ lp_build_init(void)
|
|||
if (!lp_build_target)
|
||||
lp_build_target = LLVMGetExecutionEngineTargetData(lp_build_engine);
|
||||
|
||||
if (!lp_build_pass) {
|
||||
lp_build_pass = LLVMCreateFunctionPassManager(lp_build_provider);
|
||||
LLVMAddTargetData(lp_build_target, lp_build_pass);
|
||||
|
||||
if ((gallivm_debug & GALLIVM_DEBUG_NO_OPT) == 0) {
|
||||
/* These are the passes currently listed in llvm-c/Transforms/Scalar.h,
|
||||
* but there are more on SVN. */
|
||||
/* TODO: Add more passes */
|
||||
LLVMAddCFGSimplificationPass(lp_build_pass);
|
||||
LLVMAddPromoteMemoryToRegisterPass(lp_build_pass);
|
||||
LLVMAddConstantPropagationPass(lp_build_pass);
|
||||
if(util_cpu_caps.has_sse4_1) {
|
||||
/* FIXME: There is a bug in this pass, whereby the combination of fptosi
|
||||
* and sitofp (necessary for trunc/floor/ceil/round implementation)
|
||||
* somehow becomes invalid code.
|
||||
*/
|
||||
LLVMAddInstructionCombiningPass(lp_build_pass);
|
||||
}
|
||||
LLVMAddGVNPass(lp_build_pass);
|
||||
} else {
|
||||
/* We need at least this pass to prevent the backends to fail in
|
||||
* unexpected ways.
|
||||
*/
|
||||
LLVMAddPromoteMemoryToRegisterPass(lp_build_pass);
|
||||
}
|
||||
}
|
||||
|
||||
util_cpu_detect();
|
||||
|
||||
#if 0
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ extern LLVMModuleRef lp_build_module;
|
|||
extern LLVMExecutionEngineRef lp_build_engine;
|
||||
extern LLVMModuleProviderRef lp_build_provider;
|
||||
extern LLVMTargetDataRef lp_build_target;
|
||||
extern LLVMPassManagerRef lp_build_pass;
|
||||
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue