i965/vec4: Don't lose the force_writemask_all flag during CSE.
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 19 Mar 2015 13:08:16 +0000 (15:08 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Mon, 23 Mar 2015 12:13:00 +0000 (14:13 +0200)
And set it in the MOV instructions that copy the temporary to the
original destination if the generator instruction had it set.

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_vec4_cse.cpp

index 0a687313a4ebb08022c90418340c46a43d942b1a..31c01d609974b9702847748130b1fdf006ca9075 100644 (file)
@@ -114,6 +114,7 @@ instructions_match(vec4_instruction *a, vec4_instruction *b)
           a->conditional_mod == b->conditional_mod &&
           a->dst.type == b->dst.type &&
           a->dst.writemask == b->dst.writemask &&
+          a->force_writemask_all == b->force_writemask_all &&
           a->regs_written == b->regs_written &&
           operands_match(a, b);
 }
@@ -168,6 +169,8 @@ vec4_visitor::opt_cse_local(bblock_t *block)
                for (unsigned i = 0; i < entry->generator->regs_written; ++i) {
                   vec4_instruction *copy = MOV(offset(entry->generator->dst, i),
                                                offset(entry->tmp, i));
+                  copy->force_writemask_all =
+                     entry->generator->force_writemask_all;
                   entry->generator->insert_after(block, copy);
                }