summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/gallivm
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2014-05-12 14:29:04 +0100
committerJosé Fonseca <[email protected]>2014-05-14 11:05:00 +0100
commit2ea923cf571235dfe573c35c3f0d90f632bd86d8 (patch)
tree6b47d581160f824bf10b811691a9436dd6c88e96 /src/gallium/auxiliary/gallivm
parent920933e09e1643da146bc466df7f9c6c8bcb688f (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.c47
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");