From f3ec346ab19d25de43a3fd14f533fbc40522d8ea Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 5 Jun 2018 15:04:24 -0700 Subject: [PATCH] glsl: Don't copy propagate from SSBO or shared variables either Since SSBOs can be written by other GPU threads, copy propagating a read can cause the value to magically change. SSBO reads are also very expensive, so doing it twice will be slower. Haswell, Broadwell, and Skylake had similar results. (Skylake shown) total instructions in shared programs: 14399120 -> 14399119 (<.01%) instructions in affected programs: 684 -> 683 (-0.15%) helped: 1 HURT: 0 total cycles in shared programs: 532978931 -> 532973113 (<.01%) cycles in affected programs: 530484 -> 524666 (-1.10%) helped: 1 HURT: 0 Signed-off-by: Ian Romanick Reviewed-by: Caio Marcelo de Oliveira Filho Cc: mesa-stable@lists.freedesktop.org Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106774 (cherry picked from commit 461a5c899c08064467abb635536381a5a5659280) --- src/compiler/glsl/opt_copy_propagation.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/compiler/glsl/opt_copy_propagation.cpp b/src/compiler/glsl/opt_copy_propagation.cpp index 6220aa86da9..206dffe4f1c 100644 --- a/src/compiler/glsl/opt_copy_propagation.cpp +++ b/src/compiler/glsl/opt_copy_propagation.cpp @@ -347,6 +347,8 @@ ir_copy_propagation_visitor::add_copy(ir_assignment *ir) if (lhs_var != NULL && rhs_var != NULL && lhs_var != rhs_var) { if (lhs_var->data.mode != ir_var_shader_storage && lhs_var->data.mode != ir_var_shader_shared && + rhs_var->data.mode != ir_var_shader_storage && + rhs_var->data.mode != ir_var_shader_shared && lhs_var->data.precise == rhs_var->data.precise) { _mesa_hash_table_insert(acp, lhs_var, rhs_var); }