summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-08-09 09:54:47 -0700
committerIan Romanick <[email protected]>2010-08-09 10:19:39 -0700
commitfe277089c7a9bb402ef40d89f641b69fb508f2dc (patch)
tree9fb1727a1437220c4b7d12bbaf769d13f25d7d47 /src
parent3adce986c498539d9a5d8db95926e66e1315da03 (diff)
ir_algebraic: Convert ir_unop_logic_not handler to use a switch statement
Currently only ir_binop_equal and ir_binop_nequal are supported, but soon all of the relational operators will be added. Making this change now will simplify those commits.
Diffstat (limited to 'src')
-rw-r--r--src/glsl/ir_algebraic.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/glsl/ir_algebraic.cpp b/src/glsl/ir_algebraic.cpp
index a6ecad7b659..d9e7b680f7d 100644
--- a/src/glsl/ir_algebraic.cpp
+++ b/src/glsl/ir_algebraic.cpp
@@ -161,22 +161,32 @@ ir_algebraic_visitor::handle_expression(ir_rvalue *in_ir)
}
switch (ir->operation) {
- case ir_unop_logic_not:
- if (op_expr[0] && op_expr[0]->operation == ir_binop_equal) {
- this->progress = true;
- return new(ir) ir_expression(ir_binop_nequal,
- ir->type,
- op_expr[0]->operands[0],
- op_expr[0]->operands[1]);
+ case ir_unop_logic_not: {
+ enum ir_expression_operation new_op = ir_unop_logic_not;
+
+ if (op_expr[0] == NULL)
+ break;
+
+ switch (op_expr[0]->operation) {
+ case ir_binop_equal: new_op = ir_binop_nequal; break;
+ case ir_binop_nequal: new_op = ir_binop_equal; break;
+
+ default:
+ /* The default case handler is here to silence a warning from GCC.
+ */
+ break;
}
- if (op_expr[0] && op_expr[0]->operation == ir_binop_nequal) {
+
+ if (new_op != ir_unop_logic_not) {
this->progress = true;
- return new(ir) ir_expression(ir_binop_equal,
+ return new(ir) ir_expression(new_op,
ir->type,
op_expr[0]->operands[0],
op_expr[0]->operands[1]);
}
+
break;
+ }
case ir_binop_add:
if (is_vec_zero(op_const[0])) {