[Mesa-dev] [PATCH] glsl: fix opt_minmax redundancy checks against baserange
Timothy Arceri
timothy.arceri at collabora.com
Thu Jan 5 23:26:24 UTC 2017
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
I'm not 100% sure what is going wrong as a tree like:
max
/ \
max max
/ \ / \
3 a b 4
Will remove the right hand side max just fine. But not marking
limits that equal the base range seems to fix the problem.
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 at lists.freedesktop.org>
---
src/compiler/glsl/opt_minmax.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/compiler/glsl/opt_minmax.cpp b/src/compiler/glsl/opt_minmax.cpp
index 29482ee..9f64db9 100644
--- a/src/compiler/glsl/opt_minmax.cpp
+++ b/src/compiler/glsl/opt_minmax.cpp
@@ -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;
}
}
--
2.9.3
More information about the mesa-dev
mailing list