Shaves 1.6% (+/- 1.0%) off of ff_fragment_shader glean texCombine time (n=5).tags/android-x86-2.2-r2
@@ -748,8 +748,10 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration | |||
progress = optimize_redundant_jumps(ir) || progress; | |||
loop_state *ls = analyze_loop_variables(ir); | |||
progress = set_loop_controls(ir, ls) || progress; | |||
progress = unroll_loops(ir, ls, max_unroll_iterations) || progress; | |||
if (ls->loop_found) { | |||
progress = set_loop_controls(ir, ls) || progress; | |||
progress = unroll_loops(ir, ls, max_unroll_iterations) || progress; | |||
} | |||
delete ls; | |||
return progress; |
@@ -38,6 +38,7 @@ loop_state::loop_state() | |||
this->ht = hash_table_ctor(0, hash_table_pointer_hash, | |||
hash_table_pointer_compare); | |||
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_variable_state *ls = new(this->mem_ctx) loop_variable_state; | |||
hash_table_insert(this->ht, ls, ir); | |||
this->loop_found = true; | |||
return ls; | |||
} |
@@ -214,6 +214,8 @@ public: | |||
loop_variable_state *insert(ir_loop *ir); | |||
bool loop_found; | |||
private: | |||
loop_state(); | |||