[Mesa-dev] [PATCH 06/12] gallivm: Run passes per module, not per function.

Roland Scheidegger sroland at vmware.com
Tue May 13 09:36:38 PDT 2014


Am 13.05.2014 14:01, schrieb jfonseca at vmware.com:
> 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");
> 

4-6 also look good to me (difficult to tell though but the idea looks
right).

Roland


More information about the mesa-dev mailing list