i965/vs: Fix incorrect subscript when resetting copy propagation records.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 24 Dec 2011 03:57:08 +0000 (19:57 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 27 Dec 2011 22:33:37 +0000 (14:33 -0800)
In this code, 'i' loops over the number of virtual GRFs, while 'j' loops
over the number of vector components (0 <= j <= 3).

It can't possibly be correct to see if bit 'i' is set in the destination
writemask, as it will have values much larger than 3.  Clearly this is
supposed to be 'j'.

Found by inspection.

Tested-by: Matt Turner <mattst88@gmail.com>
Tested-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp

index 93ae3d61cac8d30bbc8c8832f85c2c71afdc25db..95aa30614b155c8c239e3031b6055b9ec2091273 100644 (file)
@@ -323,7 +323,7 @@ vec4_visitor::opt_copy_propagation()
 
            for (int i = 0; i < virtual_grf_reg_count; i++) {
               for (int j = 0; j < 4; j++) {
-                 if (inst->dst.writemask & (1 << i) &&
+                 if (inst->dst.writemask & (1 << j) &&
                      cur_value[i][j] &&
                      cur_value[i][j]->file == GRF &&
                      cur_value[i][j]->reg == inst->dst.reg &&