diff options
author | Ian Romanick <[email protected]> | 2010-08-09 09:54:47 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-08-09 10:19:39 -0700 |
commit | fe277089c7a9bb402ef40d89f641b69fb508f2dc (patch) | |
tree | 9fb1727a1437220c4b7d12bbaf769d13f25d7d47 /src/glsl/ir_algebraic.cpp | |
parent | 3adce986c498539d9a5d8db95926e66e1315da03 (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/glsl/ir_algebraic.cpp')
-rw-r--r-- | src/glsl/ir_algebraic.cpp | 28 |
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])) { |