i965/vec4: don't do horizontal stride on some register file types
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Fri, 17 Mar 2017 10:55:49 +0000 (11:55 +0100)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 14 Apr 2017 21:56:09 +0000 (14:56 -0700)
horiz_offset() shouldn't be doing anything for scalar registers,
because all channels of any SIMD instructions will end up reading or
writing the same component of the register, so shifting the register
offset would be wrong.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
[ Francisco Jerez: Re-implement in terms of is_uniform() for
  simplicity.  Pass argument by const reference.  Clarify commit
  message. ]
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/intel/compiler/brw_ir_vec4.h

index 56548c38830b2b12f9aa5961304000b5fda509ea..a0e6402b0a4e60c8807a47a05e1d59bef74a694b 100644 (file)
@@ -192,9 +192,12 @@ offset(dst_reg reg, unsigned width, unsigned delta)
 }
 
 static inline dst_reg
-horiz_offset(dst_reg reg, unsigned delta)
+horiz_offset(const dst_reg &reg, unsigned delta)
 {
-   return byte_offset(reg, delta * type_sz(reg.type));
+   if (is_uniform(src_reg(reg)))
+      return reg;
+   else
+      return byte_offset(reg, delta * type_sz(reg.type));
 }
 
 static inline dst_reg