The pass ultimately skips over any entries with assignment_count != 1, so there's no need to do further work once we've determined that there are multiple assignments.
The constant value could be a large array (i.e. uvec4[327]), at which point skipping the constant_expression_value() call (and the clone() call within) can save us piles of memory. No change in shader-db. Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/compiler/glsl/opt_constant_variable.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/compiler/glsl/opt_constant_variable.cpp b/src/compiler/glsl/opt_constant_variable.cpp index 3ddb129..1c06ffe 100644 --- a/src/compiler/glsl/opt_constant_variable.cpp +++ b/src/compiler/glsl/opt_constant_variable.cpp @@ -102,6 +102,13 @@ ir_constant_variable_visitor::visit_enter(ir_assignment *ir) assert(entry); entry->assignment_count++; + /* If there's more than one assignment, don't bother - we won't do anything + * with this variable anyway, and continuing just wastes memory cloning + * constant expressions. + */ + if (entry->assignment_count > 1) + return visit_continue; + /* If it's already constant, don't do the work. */ if (entry->var->constant_value) return visit_continue; -- 2.8.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev