diff options
author | Kenneth Graunke <[email protected]> | 2010-12-01 15:06:47 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-12-09 16:42:05 -0800 |
commit | 528fa8ce329c22d6376d075c2afa69f177423bfa (patch) | |
tree | 6597567db3f140b0577b9ef2f675444489d619b9 /src/glsl/loop_unroll.cpp | |
parent | b13a2e640f749530d3bf40cbbc30504b1ed58470 (diff) |
glsl: Clean up code by adding a new is_break() function.
Diffstat (limited to 'src/glsl/loop_unroll.cpp')
-rw-r--r-- | src/glsl/loop_unroll.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/glsl/loop_unroll.cpp b/src/glsl/loop_unroll.cpp index 11709587e24..4e6acda907e 100644 --- a/src/glsl/loop_unroll.cpp +++ b/src/glsl/loop_unroll.cpp @@ -43,6 +43,14 @@ public: }; +static bool +is_break(ir_instruction *ir) +{ + return ir != NULL && ir->ir_type == ir_type_loop_jump + && ((ir_loop_jump *) ir)->is_break(); +} + + ir_visitor_status loop_unroll_visitor::visit_leave(ir_loop *ir) { @@ -93,14 +101,12 @@ loop_unroll_visitor::visit_leave(ir_loop *ir) ir_instruction *last = (ir_instruction *) last_if->then_instructions.get_tail(); - if (last && last->ir_type == ir_type_loop_jump - && ((ir_loop_jump*) last)->is_break()) { + if (is_break(last)) { continue_from_then_branch = false; } else { last = (ir_instruction *) last_if->then_instructions.get_tail(); - if (last && last->ir_type == ir_type_loop_jump - && ((ir_loop_jump*) last)->is_break()) + if (is_break(last)) continue_from_then_branch = true; else /* Bail out if neither if-statement branch ends with a break. @@ -141,8 +147,7 @@ loop_unroll_visitor::visit_leave(ir_loop *ir) this->progress = true; return visit_continue; - } else if (last_ir->ir_type == ir_type_loop_jump - && ((ir_loop_jump *)last_ir)->is_break()) { + } else if (is_break(last_ir)) { /* If the only loop-jump is a break at the end of the loop, the loop * will execute exactly once. Remove the break, set the iteration * count, and fall through to the normal unroller. |