i965/vec4: Don't emit null MOVs in CSE.
authorMatt Turner <mattst88@gmail.com>
Wed, 11 Jun 2014 22:24:52 +0000 (15:24 -0700)
committerMatt Turner <mattst88@gmail.com>
Mon, 7 Jul 2014 01:18:52 +0000 (18:18 -0700)
Port of commit 219b43c6 to the vec4 code.

src/mesa/drivers/dri/i965/brw_vec4_cse.cpp

index 296142b740f8ad38b8ac0d87dc1ba030271717d5..f3a69ed9fb6b67ac9d65a502f72465a2abefd1a5 100644 (file)
@@ -159,7 +159,7 @@ vec4_visitor::opt_cse_local(bblock_t *block, exec_list *aeb)
              * If we don't have a temporary already, make one.
              */
             bool no_existing_temp = entry->tmp.file == BAD_FILE;
-            if (no_existing_temp) {
+            if (no_existing_temp && !entry->generator->dst.is_null()) {
                entry->tmp = src_reg(this, glsl_type::float_type);
                entry->tmp.type = inst->dst.type;
                entry->tmp.swizzle = BRW_SWIZZLE_XYZW;
@@ -170,10 +170,12 @@ vec4_visitor::opt_cse_local(bblock_t *block, exec_list *aeb)
             }
 
             /* dest <- temp */
-            assert(inst->dst.type == entry->tmp.type);
-            vec4_instruction *copy = MOV(inst->dst, entry->tmp);
-            copy->force_writemask_all = inst->force_writemask_all;
-            inst->insert_before(copy);
+            if (!inst->dst.is_null()) {
+               assert(inst->dst.type == entry->tmp.type);
+               vec4_instruction *copy = MOV(inst->dst, entry->tmp);
+               copy->force_writemask_all = inst->force_writemask_all;
+               inst->insert_before(copy);
+            }
 
             /* Set our iterator so that next time through the loop inst->next
              * will get the instruction in the basic block after the one we've