glsl: Add missing check for whether an expression is an add operation
authorNeil Roberts <neil@linux.intel.com>
Sat, 4 Jul 2015 21:40:58 +0000 (22:40 +0100)
committerNeil Roberts <neil@linux.intel.com>
Mon, 6 Jul 2015 18:52:10 +0000 (11:52 -0700)
There is a piece of code that is trying to match expressions of the
form (mul (floor (add (abs x) 0.5) (sign x))). However the check for
the add expression wasn't checking whether it had the expected
operation. It looks like this was just an oversight because it doesn't
match the pattern for the rest of the code snippet. The existing line
to check whether add_expr!=NULL was added as part of a coverity fix in
3384179f.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91226
Cc: Matt Turner <mattst88@gmail.com>
Cc: "10.6" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/glsl/opt_algebraic.cpp

index fa5db70f2dd3b3ae6eed13adebd9b03a4c571439..9b8a426d79ccc5db4b284ab7978d581f45e42549 100644 (file)
@@ -580,7 +580,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
             continue;
 
          ir_expression *add_expr = floor_expr->operands[0]->as_expression();
-         if (!add_expr)
+         if (!add_expr || add_expr->operation != ir_binop_add)
             continue;
 
          for (int j = 0; j < 2; j++) {