summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2021-04-16 13:50:41 -0400
committerMarge Bot <eric+marge@anholt.net>2021-04-20 18:54:57 +0000
commit5ef4296cb651e39402263c426d3edbee99ea1220 (patch)
treec85b8cda4ad634667d68e0552c2a8ec53e91c38c
parent9fb1f9303b5e082f1aa6133c76a71cbf075bfd11 (diff)
compiler/glsl: Return progress from propagate_invariance()
Doing so allow you to easily tell what the pass did using the existing infrastructure in the OPT macro. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10292>
-rw-r--r--src/compiler/glsl/glsl_parser_extras.cpp2
-rw-r--r--src/compiler/glsl/ir_optimization.h2
-rw-r--r--src/compiler/glsl/propagate_invariance.cpp6
3 files changed, 7 insertions, 3 deletions
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp
index 0cabd73be49..90f2328e67c 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -2331,7 +2331,7 @@ do_common_optimization(exec_list *ir, bool linked,
OPT(do_dead_functions, ir);
OPT(do_structure_splitting, ir);
}
- propagate_invariance(ir);
+ OPT(propagate_invariance, ir);
OPT(do_if_simplification, ir);
OPT(opt_flatten_nested_if_blocks, ir);
OPT(opt_conditional_discard, ir);
diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h
index 9f002e9b9e2..7a3aadd6295 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -177,7 +177,7 @@ bool lower_blend_equation_advanced(gl_linked_shader *shader, bool coherent);
bool lower_builtins(exec_list *instructions);
bool lower_subroutine(exec_list *instructions, struct _mesa_glsl_parse_state *state);
-void propagate_invariance(exec_list *instructions);
+bool propagate_invariance(exec_list *instructions);
namespace ir_builder { class ir_factory; };
diff --git a/src/compiler/glsl/propagate_invariance.cpp b/src/compiler/glsl/propagate_invariance.cpp
index b3f1d810cdb..2673fa16378 100644
--- a/src/compiler/glsl/propagate_invariance.cpp
+++ b/src/compiler/glsl/propagate_invariance.cpp
@@ -113,13 +113,17 @@ ir_invariance_propagation_visitor::visit(ir_dereference_variable *ir)
return visit_continue;
}
-void
+bool
propagate_invariance(exec_list *instructions)
{
ir_invariance_propagation_visitor visitor;
+ bool progress = false;
do {
visitor.progress = false;
visit_list_elements(&visitor, instructions);
+ progress = progress || visitor.progress;
} while (visitor.progress);
+
+ return progress;
}