Skip to content
  • Timothy Arceri's avatar
    glsl: fix opt_minmax redundancy checks against baserange · 1edc53a6
    Timothy Arceri authored
    
    
    Marking operations as redundant if they are equal to the base
    range is fine when the tree structure is something like this:
    
            max
          /     \
         max     b
        /   \
       3    max
           /   \
          3     a
    
    But the opt falls apart with a tree like this:
    
            max
         /       \
        max     max
       /   \   /   \
      3    a   b    3
    
    The problem is that both branches are treated the same: descending in
    the left branch will prune the constant, and then descending the right
    branch will prune the constant there as well, because limits[0] wasn't
    updated to take the change on the left branch into account, and so we
    still get [3,\infty) as baserange.
    
    In order to fix the bug we just disable the marking of redundant expressions
    when they match the baserange.
    
    NIR algebraic opt will clean up the first tree for anyway, hopefully
    other backends are smart enough to do this also.
    
    Cc: "13.0" <mesa-stable@lists.freedesktop.org>
    Reviewed-by: default avatarNicolai Hähnle <nicolai.haehnle@amd.com>
    1edc53a6