Skip to content
  • Andrii Simiklit's avatar
    i965/vec4: Ignore swizzle of VGRF for use by var_range_end() · d1b74628
    Andrii Simiklit authored
    Issue description from Matt's commit e7c376ad:
     "var_range_end(v, n) loops over the n components of variable number v and
      finds the maximum value, giving the last use of any component of v.
      Therefore it expects v to correspond to the variable associated with the
      .x channel of the VGRF.
    
      var_from_reg() however returns the variable for the first channel of the
      VGRF, post-swizzle.
    
      So, if the last register had a swizzle with y, z, or w in the swizzle
      component, we would read out of bounds. For any other register, we would
      read liveness information from the next register.
    
      The fix is to convert the src_reg to a dst_reg in order to call the
      dst_reg version of var_from_reg() that doesn't consider the swizzle."
    
    Closes: #3003
    Fixes: 48dfb30f
    
     ('intel/compiler: Move all live interval analysis results into vec4_live_variables')
    Reviewed-by: default avatarMatt Turner <mattst88@gmail.com>
    Signed-off-by: default avatarAndrii Simiklit <asimiklit.work@gmail.com>
    Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4941>
    d1b74628