[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