Skip to content
Snippets Groups Projects
Commit 37dcca9a authored by Timothy Arceri's avatar Timothy Arceri Committed by Emil Velikov
Browse files

glsl: fix opt_minmax redundancy checks against baserange


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>
(cherry picked from commit 1edc53a6)
parent 17cd8edc
No related branches found
No related tags found
No related merge requests found
......@@ -355,7 +355,7 @@ ir_minmax_visitor::prune_expression(ir_expression *expr, minmax_range baserange)
*/
if (!is_redundant && limits[i].low && baserange.high) {
cr = compare_components(limits[i].low, baserange.high);
if (cr >= EQUAL && cr != MIXED)
if (cr > EQUAL && cr != MIXED)
is_redundant = true;
}
} else {
......@@ -373,7 +373,7 @@ ir_minmax_visitor::prune_expression(ir_expression *expr, minmax_range baserange)
*/
if (!is_redundant && limits[i].high && baserange.low) {
cr = compare_components(limits[i].high, baserange.low);
if (cr <= EQUAL)
if (cr < EQUAL)
is_redundant = true;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment