diff --git a/src/compiler/glsl/ir.cpp b/src/compiler/glsl/ir.cpp index 517fddb2acd..095fc165164 100644 --- a/src/compiler/glsl/ir.cpp +++ b/src/compiler/glsl/ir.cpp @@ -2221,6 +2221,14 @@ ir_rvalue::error_value(void *mem_ctx) void visit_exec_list(exec_list *list, ir_visitor *visitor) +{ + foreach_in_list(ir_instruction, node, list) { + node->accept(visitor); + } +} + +void +visit_exec_list_safe(exec_list *list, ir_visitor *visitor) { foreach_in_list_safe(ir_instruction, node, list) { node->accept(visitor); diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h index 89a9df62c2a..332b662a8f6 100644 --- a/src/compiler/glsl/ir.h +++ b/src/compiler/glsl/ir.h @@ -2427,6 +2427,9 @@ public: void visit_exec_list(exec_list *list, ir_visitor *visitor); +void +visit_exec_list_safe(exec_list *list, ir_visitor *visitor); + /** * Validate invariants on each IR node in a list */ diff --git a/src/compiler/glsl/lower_jumps.cpp b/src/compiler/glsl/lower_jumps.cpp index f6efb9d78b8..e2c7da8d1b5 100644 --- a/src/compiler/glsl/lower_jumps.cpp +++ b/src/compiler/glsl/lower_jumps.cpp @@ -929,7 +929,7 @@ do_lower_jumps(exec_list *instructions, bool pull_out_jumps, bool lower_sub_retu bool progress_ever = false; do { v.progress = false; - visit_exec_list(instructions, &v); + visit_exec_list_safe(instructions, &v); progress_ever = v.progress || progress_ever; } while (v.progress);