llvmpipe: do IR counting for shader cache management after optimization.
2ea923cf57 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.
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user