glsl: Skip the rest of loop unrolling if no loops were found.
Shaves 1.6% (+/- 1.0%) off of ff_fragment_shader glean texCombine time (n=5).
This commit is contained in:
@@ -748,8 +748,10 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
|
|||||||
progress = optimize_redundant_jumps(ir) || progress;
|
progress = optimize_redundant_jumps(ir) || progress;
|
||||||
|
|
||||||
loop_state *ls = analyze_loop_variables(ir);
|
loop_state *ls = analyze_loop_variables(ir);
|
||||||
progress = set_loop_controls(ir, ls) || progress;
|
if (ls->loop_found) {
|
||||||
progress = unroll_loops(ir, ls, max_unroll_iterations) || progress;
|
progress = set_loop_controls(ir, ls) || progress;
|
||||||
|
progress = unroll_loops(ir, ls, max_unroll_iterations) || progress;
|
||||||
|
}
|
||||||
delete ls;
|
delete ls;
|
||||||
|
|
||||||
return progress;
|
return progress;
|
||||||
|
@@ -38,6 +38,7 @@ loop_state::loop_state()
|
|||||||
this->ht = hash_table_ctor(0, hash_table_pointer_hash,
|
this->ht = hash_table_ctor(0, hash_table_pointer_hash,
|
||||||
hash_table_pointer_compare);
|
hash_table_pointer_compare);
|
||||||
this->mem_ctx = talloc_init("loop state");
|
this->mem_ctx = talloc_init("loop state");
|
||||||
|
this->loop_found = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -52,7 +53,9 @@ loop_variable_state *
|
|||||||
loop_state::insert(ir_loop *ir)
|
loop_state::insert(ir_loop *ir)
|
||||||
{
|
{
|
||||||
loop_variable_state *ls = new(this->mem_ctx) loop_variable_state;
|
loop_variable_state *ls = new(this->mem_ctx) loop_variable_state;
|
||||||
|
|
||||||
hash_table_insert(this->ht, ls, ir);
|
hash_table_insert(this->ht, ls, ir);
|
||||||
|
this->loop_found = true;
|
||||||
|
|
||||||
return ls;
|
return ls;
|
||||||
}
|
}
|
||||||
|
@@ -214,6 +214,8 @@ public:
|
|||||||
|
|
||||||
loop_variable_state *insert(ir_loop *ir);
|
loop_variable_state *insert(ir_loop *ir);
|
||||||
|
|
||||||
|
bool loop_found;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
loop_state();
|
loop_state();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user