V2: Fix whitespace issues Put in alphabetic order Split resolve of add into a separate function for reuse later
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com> --- src/glsl/opt_minmax.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/glsl/opt_minmax.cpp b/src/glsl/opt_minmax.cpp index 43d6061..4153a48 100644 --- a/src/glsl/opt_minmax.cpp +++ b/src/glsl/opt_minmax.cpp @@ -282,6 +282,24 @@ range_intersection(minmax_range r0, minmax_range r1) return ret; } +/* Takes the range of the operands in an add-operation as parameters + * and uses this to solve the range of the add-operation itself. + */ +static minmax_range +resolv_add_range(minmax_range r0, minmax_range r1) +{ + ir_constant *low = NULL; + ir_constant *high = NULL; + + if (r0.low && r1.low) + low = add(r0.low, r1.low)->constant_expression_value(); + + if (r0.high && r1.high) + high = add(r0.high, r1.high)->constant_expression_value(); + + return minmax_range(low, high); +} + static minmax_range get_range(ir_rvalue *rval) { @@ -360,6 +378,11 @@ get_range(ir_rvalue *rval) return minmax_range(new(mem_ctx) ir_constant(-1.0f), new(mem_ctx) ir_constant(1.0f)); + case ir_binop_add: + r0 = get_range(expr->operands[0]); + r1 = get_range(expr->operands[1]); + return resolv_add_range(r0, r1); + case ir_binop_min: case ir_binop_max: r0 = get_range(expr->operands[0]); -- 2.2.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev