freedreno/ir3: consider instruction neighbors in cp
authorRob Clark <robclark@freedesktop.org>
Fri, 24 Oct 2014 13:27:37 +0000 (09:27 -0400)
committerRob Clark <robclark@freedesktop.org>
Sat, 25 Oct 2014 16:07:43 +0000 (12:07 -0400)
commit13862812dc910a4ef57cb72cb9fe777ce3c14515
treeebbb71fa5a4460fd56958845fd53061c4eae467b
parent4dff2a642913cb9b72eccc3c290b1e5a71560156
freedreno/ir3: consider instruction neighbors in cp

Fanin (merge) nodes require it's srcs to be "adjacent" in consecutive
scalar registers.  Keep track of instruction neighbors in copy-
propagation step and avoid eliminating mov's which would cause an
instruction to need multiple distinct left and/or right neighbors.

This lets us not fall on our face when we encounter things like:

  1: MOV TEMP[2], IN[0].xyzw
  2: TEX OUT[0].xy, TEMP[2], SAMP[0], SHADOW2D
  3: MOV TEMP[2].xy, IN[0].yxzz
  4: TEX OUT[0].zw, TEMP[2], SAMP[0], SHADOW2D
  5: END

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3.h
src/gallium/drivers/freedreno/ir3/ir3_cp.c