Skip to content
  • Timothy Arceri's avatar
    nir: shuffle constants to the top · fb2269fe
    Timothy Arceri authored
    
    
    V2: mark float opts as inexact
    
    If one of the inputs to an mul/add is the result of another
    mul/add there is a chance that we can reuse the result of that
    mul/add in other calls if we do the multiplication in the right
    order.
    
    Also by attempting to move all constants to the top we increase
    the chance of constant folding.
    
    For example it is a fairly common pattern for shaders to do something
    similar to this:
    
      const float a = 0.5;
      in vec4 b;
      in float c;
    
      ...
    
      b.x = b.x * c;
      b.y = b.y * c;
    
      ...
    
      b.x = b.x * a + a;
      b.y = b.y * a + a;
    
    So by simply detecting that constant a is part of the multiplication
    in ffma and switching it with previous fmul that updates b we end up
    with:
    
      ...
    
      c = a * c;
    
      ...
    
      b.x = b.x * c + a;
      b.y = b.y * c + a;
    
    Shader-db results BDW:
    
    total instructions in shared programs: 13011050 -> 12967888 (-0.33%)
    instructions in affected programs: 4118366 -> 4075204 (-1.05%)
    helped: 17739
    HURT: 1343
    
    total cycles in shared programs: 246717952 -> 246410716 (-0.12%)
    cycles in affected programs: 166870802 -> 166563566 (-0.18%)
    helped: 18493
    HURT: 7965
    
    total spills in shared programs: 14937 -> 14560 (-2.52%)
    spills in affected programs: 9331 -> 8954 (-4.04%)
    helped: 284
    HURT: 33
    
    total fills in shared programs: 20211 -> 19671 (-2.67%)
    fills in affected programs: 12586 -> 12046 (-4.29%)
    helped: 286
    HURT: 33
    
    LOST:   39
    GAINED: 33
    
    Some of the hurt will go away when we shuffle things back down to the
    bottom in the following patch. It's also noteworthy that almost all of the
    spill changes are in Deus Ex both hurt and helped.
    
    Reviewed-by: default avatarElie Tournier <elie.tournier@collabora.com>
    Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
    fb2269fe