[Mesa-dev] [PATCH] llvmpipe: do IR counting for shader cache management after optimization.
Brian Paul
brianp at vmware.com
Sat May 17 08:00:32 PDT 2014
On 05/16/2014 02:47 PM, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> 2ea923cf571235dfe573c35c3f0d90f632bd86d8 had the side effect of IR counting
> now being done after IR optimization instead of before. Some quick analysis
> shows that there's roughly 1.5 times more IR instructions before optimization
> than after, hence the effective shader cache size got quite a bit smaller.
> Could counter this with an increase of the instruction limit but it probably
> makes more sense to count them after optimizations, so move that code.
> ---
> src/gallium/auxiliary/gallivm/lp_bld_type.c | 20 +++++++++++++++++++-
> src/gallium/auxiliary/gallivm/lp_bld_type.h | 2 +-
> src/gallium/drivers/llvmpipe/lp_state_fs.c | 4 ++--
> 3 files changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c b/src/gallium/auxiliary/gallivm/lp_bld_type.c
> index 9b25e15..5a80199 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_type.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c
> @@ -394,7 +394,7 @@ lp_build_context_init(struct lp_build_context *bld,
> /**
> * Count the number of instructions in a function.
> */
> -unsigned
> +static unsigned
> lp_build_count_instructions(LLVMValueRef function)
> {
> unsigned num_instrs = 0;
> @@ -414,3 +414,21 @@ lp_build_count_instructions(LLVMValueRef function)
>
> return num_instrs;
> }
> +
> +
> +/**
> + * Count the number of instructions in a module.
> + */
> +unsigned
> +lp_build_count_ir_module(LLVMModuleRef module)
> +{
> + LLVMValueRef func;
> + unsigned num_instrs = 0;
> +
> + func = LLVMGetFirstFunction(module);
> + while (func) {
> + num_instrs += lp_build_count_instructions(func);
> + func = LLVMGetNextFunction(func);
> + }
> + return num_instrs;
> +}
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h b/src/gallium/auxiliary/gallivm/lp_bld_type.h
> index d0b490b..191cf92 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_type.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h
> @@ -447,7 +447,7 @@ lp_build_context_init(struct lp_build_context *bld,
>
>
> unsigned
> -lp_build_count_instructions(LLVMValueRef function);
> +lp_build_count_ir_module(LLVMModuleRef module);
>
>
> #endif /* !LP_BLD_TYPE_H */
> diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
> index 4872e0d..0b74d15 100644
> --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
> +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
> @@ -2438,8 +2438,6 @@ generate_fragment(struct llvmpipe_context *lp,
> LLVMBuildRetVoid(builder);
>
> gallivm_verify_function(gallivm, function);
> -
> - variant->nr_instrs += lp_build_count_instructions(function);
> }
>
>
> @@ -2629,6 +2627,8 @@ generate_variant(struct llvmpipe_context *lp,
>
> gallivm_compile_module(variant->gallivm);
>
> + variant->nr_instrs += lp_build_count_ir_module(variant->gallivm->module);
> +
> if (variant->function[RAST_EDGE_TEST]) {
> variant->jit_function[RAST_EDGE_TEST] = (lp_jit_frag_func)
> gallivm_jit_function(variant->gallivm,
>
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list