i965/fs: Constant propagate into 2-src math instructions on Gen8.
authorMatt Turner <mattst88@gmail.com>
Tue, 24 Jun 2014 05:07:20 +0000 (22:07 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 25 Jun 2014 20:00:53 +0000 (13:00 -0700)
total instructions in shared programs: 1878133 -> 1876986 (-0.06%)
instructions in affected programs:     153007 -> 151860 (-0.75%)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp

index 28c6ca7ac29ff3f077471922f3f5bd8c9453f661..3c6e616d92a904e3ba65e6bd9965b745047ce6fe 100644 (file)
@@ -368,7 +368,8 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
 
 
 static bool
-try_constant_propagate(fs_inst *inst, acp_entry *entry)
+try_constant_propagate(struct brw_context *brw, fs_inst *inst,
+                       acp_entry *entry)
 {
    bool progress = false;
 
@@ -396,6 +397,12 @@ try_constant_propagate(fs_inst *inst, acp_entry *entry)
          progress = true;
          break;
 
+      case SHADER_OPCODE_POW:
+      case SHADER_OPCODE_INT_QUOTIENT:
+      case SHADER_OPCODE_INT_REMAINDER:
+         if (brw->gen < 8)
+            break;
+         /* fallthrough */
       case BRW_OPCODE_BFI1:
       case BRW_OPCODE_ASR:
       case BRW_OPCODE_SHL:
@@ -537,7 +544,7 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block,
          foreach_list(entry_node, &acp[inst->src[i].reg % ACP_HASH_SIZE]) {
             acp_entry *entry = (acp_entry *)entry_node;
 
-            if (try_constant_propagate(inst, entry))
+            if (try_constant_propagate(brw, inst, entry))
                progress = true;
 
             if (try_copy_propagate(inst, i, entry))