[Mesa-dev] [PATCH 5/5] i965/fs: Add support for constant propagating into sources with modifiers.

Matt Turner mattst88 at gmail.com
Fri Jan 30 15:54:32 PST 2015


All but 16 of the programs helped were ARB fp programs.

total instructions in shared programs: 5949286 -> 5945470 (-0.06%)
instructions in affected programs:     275162 -> 271346 (-1.39%)
helped:                                1197
GAINED:                                1
---
 src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
index 70f417f..1d95769 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
@@ -445,16 +445,22 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
           (entry->dst.reg_offset + entry->regs_written) * 32)
          continue;
 
-      /* Don't bother with cases that should have been taken care of by the
-       * GLSL compiler's constant folding pass.
-       */
-      if (inst->src[i].negate || inst->src[i].abs)
-         continue;
-
       fs_reg val = entry->src;
       val.effective_width = inst->src[i].effective_width;
       val.type = inst->src[i].type;
 
+      if (inst->src[i].abs) {
+         if (!brw_abs_immediate(val.type, &val.fixed_hw_reg)) {
+            continue;
+         }
+      }
+
+      if (inst->src[i].negate) {
+         if (!brw_negate_immediate(val.type, &val.fixed_hw_reg)) {
+            continue;
+         }
+      }
+
       switch (inst->opcode) {
       case BRW_OPCODE_MOV:
       case SHADER_OPCODE_LOAD_PAYLOAD:
-- 
2.0.4



More information about the mesa-dev mailing list