glsl: optimize (0 cmp x + y) into (-x cmp y).

The optimization done by commit 34ec1a24d did not take it into account.

Fixes:

dEQP-GLES3.functional.shaders.random.all_features.fragment.20

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: "10.4 10.5" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
Samuel Iglesias Gonsalvez
2015-02-24 19:02:57 +01:00
committed by Eduardo Lima Mitev
parent cf6f33ee68
commit b43bbfa90a

View File

@@ -626,9 +626,18 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
if (!is_vec_zero(zero))
continue;
return new(mem_ctx) ir_expression(ir->operation,
add->operands[0],
neg(add->operands[1]));
/* Depending of the zero position we want to optimize
* (0 cmp x+y) into (-x cmp y) or (x+y cmp 0) into (x cmp -y)
*/
if (add_pos == 1) {
return new(mem_ctx) ir_expression(ir->operation,
neg(add->operands[0]),
add->operands[1]);
} else {
return new(mem_ctx) ir_expression(ir->operation,
add->operands[0],
neg(add->operands[1]));
}
}
break;