glsl: Refactor AST-to-HIR code handling variable initializers
[mesa.git] / src / glsl / lower_jumps.cpp
index 9cd15ef73666e609c12e9c071354a81f8582749e..dd2601d1aad5b1b76c859d881ca95ba09145cc7d 100644 (file)
@@ -66,7 +66,7 @@ enum jump_strength
    strength_always_clears_execute_flag,
    strength_continue,
    strength_break,
-   strength_return,
+   strength_return
 };
 
 struct block_record
@@ -512,7 +512,11 @@ lower_continue:
       if(this->loop.may_set_return_flag) {
          assert(this->function.return_flag);
          ir_if* return_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->function.return_flag));
-         return_if->then_instructions.push_tail(new(ir) ir_loop_jump(saved_loop.loop ? ir_loop_jump::jump_break : ir_loop_jump::jump_continue));
+         saved_loop.may_set_return_flag = true;
+         if(saved_loop.loop)
+            return_if->then_instructions.push_tail(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
+         else
+            move_outer_block_inside(ir, &return_if->else_instructions);
          ir->insert_after(return_if);
       }