[Mesa-dev] [PATCH 06/12] gallivm: Run passes per module, not per function.
jfonseca at vmware.com
jfonseca at vmware.com
Tue May 13 05:01:12 PDT 2014
From: José Fonseca <jfonseca at vmware.com>
This is how it is meant to be done nowadays.
---
src/gallium/auxiliary/gallivm/lp_bld_init.c | 47 ++++++++++++-----------------
1 file 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 2d854e9..a3549c1 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");
--
1.9.1
More information about the mesa-dev
mailing list