i965/fs: Only do CSE when the dst types match.
authorEric Anholt <eric@anholt.net>
Sat, 16 Feb 2013 05:55:30 +0000 (21:55 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 19 Feb 2013 18:33:41 +0000 (10:33 -0800)
We could potentially do some CSE even when the dst types aren't the same
on gen6 where there is no implicit dst type conversion iirc, or in the
case of uniform pull constant loads where the dst type doesn't impact
what's stored.  But it's not worth worrying about.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
NOTE: This is a candidate for the 9.1 branch.

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

index 70c143af90e21e78d5243af3fc0c230ec78ee407..a13ca362699a9402fd7d639bbea72a0db6c30fcc 100644 (file)
@@ -105,7 +105,8 @@ fs_visitor::opt_cse_local(bblock_t *block, exec_list *aeb)
            /* Match current instruction's expression against those in AEB. */
            if (inst->opcode == entry->generator->opcode &&
                inst->saturate == entry->generator->saturate &&
-               operands_match(entry->generator->src, inst->src)) {
+                inst->dst.type == entry->generator->dst.type &&
+                operands_match(entry->generator->src, inst->src)) {
 
               found = true;
               progress = true;