i965/vec4: check swizzle before discarding a uniform on a 3src operand
authorAlejandro Piñeiro <apinheiro@igalia.com>
Wed, 23 Sep 2015 17:22:17 +0000 (19:22 +0200)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 24 Sep 2015 19:12:53 +0000 (21:12 +0200)
commit7fee23569b0e3a4d4636a83fb6751ee82987ec5f
treed47045f01c70f77920a57ce3b988acb724a8af03
parent1d040160f861955a14728bea48e697cfaed8e045
i965/vec4: check swizzle before discarding a uniform on a 3src operand

Without this commit, copy propagation is discarded if it involves
a uniform with an instruction that has 3 sources. But 3 sourced
instructions can access scalar values.

For example, this is what vec4_visitor::fix_3src_operand() is already
doing:

   if (src.file == UNIFORM && brw_is_single_value_swizzle(src.swizzle))
      return src;

Shader-db results (unfiltered) on NIR:
total instructions in shared programs: 6259650 -> 6241985 (-0.28%)
instructions in affected programs:     812755 -> 795090 (-2.17%)
helped:                                7930
HURT:                                  0

Shader-db results (unfiltered) on IR:
total instructions in shared programs: 6445822 -> 6441788 (-0.06%)
instructions in affected programs:     296630 -> 292596 (-1.36%)
helped:                                2533
HURT:                                  0

v2:
- Updated commit message, using Matt Turner suggestions
- Move the check after we've created the final value, as Jason
  Ekstrand suggested
- Clean up the condition

v3:
- Move the check back to the original place, to keep things
  tidy, as suggested by Jason Ekstrand

v4:
- Fixed missing is_single_value_swizzle() as pointed by Jason Ekstrand

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