i965/vec4: fix record clearing in copy propagation
authorChia-I Wu <olv@lunarg.com>
Mon, 7 Apr 2014 04:31:14 +0000 (12:31 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Tue, 8 Apr 2014 13:04:22 +0000 (21:04 +0800)
commit4ddf51db6af36736d5d42c1043eeea86e47459ce
treebd4e849183c92f37d667acce0b51b807ce09772a
parent57d6e7b7ee1a5f4c326b4383b388d3ead7f99c43
i965/vec4: fix record clearing in copy propagation

Given

  mov vgrf7, vgrf9.xyxz
  add vgrf9.xyz, vgrf4.xyzw, vgrf5.xyzw
  add vgrf10.x, vgrf6.xyzw, vgrf7.wwww

the last instruction would be wrongly changed to

  add vgrf10.x, vgrf6.xyzw, vgrf9.zzzz

during copy propagation.

The issue is that when deciding if a record should be cleared, the old code
checked for

  inst->dst.writemask & (1 << ch)

instead of

  inst->dst.writemask & (1 << BRW_GET_SWZ(src->swizzle, ch))

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76749
Signed-off-by: Chia-I Wu <olv@lunarg.com>
Cc: Jordan Justen <jljusten@gmail.com>
Cc: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romainck <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Cc: "10.1" <mesa-stable@freedesktop.org>
src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp