i965/vec4: Constant propagate into 2-src math instructions on Gen8.
authorMatt Turner <mattst88@gmail.com>
Tue, 24 Jun 2014 05:07:38 +0000 (22:07 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 25 Jun 2014 20:00:54 +0000 (13:00 -0700)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp

index 11571ad3b0a4ec2c86f586a159107ad55395632d..278ec7b3601c6b275b2fa3d20e2b2be2f98a3ec7 100644 (file)
@@ -73,7 +73,8 @@ is_channel_updated(vec4_instruction *inst, src_reg *values[4], int ch)
 }
 
 static bool
-try_constant_propagation(vec4_instruction *inst, int arg, src_reg *values[4])
+try_constant_propagation(struct brw_context *brw, vec4_instruction *inst,
+                         int arg, src_reg *values[4])
 {
    /* For constant propagation, we only handle the same constant
     * across all 4 channels.  Some day, we should handle the 8-bit
@@ -110,6 +111,12 @@ try_constant_propagation(vec4_instruction *inst, int arg, src_reg *values[4])
       inst->src[arg] = value;
       return true;
 
+   case SHADER_OPCODE_POW:
+   case SHADER_OPCODE_INT_QUOTIENT:
+   case SHADER_OPCODE_INT_REMAINDER:
+      if (brw->gen < 8)
+         break;
+      /* fallthrough */
    case BRW_OPCODE_DP2:
    case BRW_OPCODE_DP3:
    case BRW_OPCODE_DP4:
@@ -360,7 +367,7 @@ vec4_visitor::opt_copy_propagation()
         if (c != 4)
            continue;
 
-        if (try_constant_propagation(inst, i, values) ||
+        if (try_constant_propagation(brw, inst, i, values) ||
             try_copy_propagation(inst, i, values))
            progress = true;
       }