diff options
author | José Fonseca <[email protected]> | 2014-05-12 14:29:04 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2014-05-14 11:05:00 +0100 |
commit | 2ea923cf571235dfe573c35c3f0d90f632bd86d8 (patch) | |
tree | 6b47d581160f824bf10b811691a9436dd6c88e96 /src/gallium/auxiliary/gallivm | |
parent | 920933e09e1643da146bc466df7f9c6c8bcb688f (diff) |
gallivm: Run passes per module, not per function.
This is how it is meant to be done nowadays.
Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_init.c | 47 |
1 files changed, 19 insertions, 28 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c index 2d854e996f6..a3549c171e9 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_init.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c @@ -499,32 +499,6 @@ gallivm_destroy(struct gallivm_state *gallivm) /** - * Validate and optimze a function. - */ -static void -gallivm_optimize_function(struct gallivm_state *gallivm, - LLVMValueRef func) -{ - if (0) { - debug_printf("optimizing %s...\n", LLVMGetValueName(func)); - } - - assert(gallivm->passmgr); - - /* Apply optimizations to LLVM IR */ - LLVMRunFunctionPassManager(gallivm->passmgr, func); - - if (0) { - if (gallivm_debug & GALLIVM_DEBUG_IR) { - /* Print the LLVM IR to stderr */ - lp_debug_dump_value(func); - debug_printf("\n"); - } - } -} - - -/** * Validate a function. */ void @@ -540,8 +514,6 @@ gallivm_verify_function(struct gallivm_state *gallivm, } #endif - gallivm_optimize_function(gallivm, func); - if (gallivm_debug & GALLIVM_DEBUG_IR) { /* Print the LLVM IR to stderr */ lp_debug_dump_value(func); @@ -553,8 +525,27 @@ gallivm_verify_function(struct gallivm_state *gallivm, void gallivm_compile_module(struct gallivm_state *gallivm) { + LLVMValueRef func; + assert(!gallivm->compiled); + if (gallivm->builder) { + LLVMDisposeBuilder(gallivm->builder); + gallivm->builder = NULL; + } + + /* Run optimization passes */ + LLVMInitializeFunctionPassManager(gallivm->passmgr); + func = LLVMGetFirstFunction(gallivm->module); + while (func) { + if (0) { + debug_printf("optimizing %s...\n", LLVMGetValueName(func)); + } + LLVMRunFunctionPassManager(gallivm->passmgr, func); + func = LLVMGetNextFunction(func); + } + LLVMFinalizeFunctionPassManager(gallivm->passmgr); + /* Dump byte code to a file */ if (0) { LLVMWriteBitcodeToFile(gallivm->module, "llvmpipe.bc"); |