diff options
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"); |