summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2014-12-16 12:26:38 -0800
committerJason Ekstrand <[email protected]>2015-01-15 07:20:22 -0800
commite2a8f9e5ccb136f1e9460255054e34c11a41a422 (patch)
tree9c2bb82419ccb15ed519aaa67ca8f958b089e05c
parent46f3e1ab504f016ab900c045f165a8376cf3fc0c (diff)
nir/search: Use nir_op_infos to determine if an operation is commutative
Prior to this commit, we had a big switch statement for this. Now it's baked into the opcode metadata so we can just use that. Reviewed-by: Connor Abbott <[email protected]>
-rw-r--r--src/glsl/nir/nir_search.c35
1 files changed, 2 insertions, 33 deletions
diff --git a/src/glsl/nir/nir_search.c b/src/glsl/nir/nir_search.c
index f2797b2f5b6..35323f92a6b 100644
--- a/src/glsl/nir/nir_search.c
+++ b/src/glsl/nir/nir_search.c
@@ -33,38 +33,6 @@ struct match_state {
};
static bool
-is_commutative_binop(nir_op op)
-{
- switch (op) {
- case nir_op_fadd:
- case nir_op_iadd:
- case nir_op_fmul:
- case nir_op_imul:
- case nir_op_imul_high:
- case nir_op_umul_high:
- case nir_op_feq:
- case nir_op_fne:
- case nir_op_ieq:
- case nir_op_ine:
- case nir_op_fand:
- case nir_op_for:
- case nir_op_fxor:
- case nir_op_iand:
- case nir_op_ior:
- case nir_op_ixor:
- case nir_op_fmin:
- case nir_op_fmax:
- case nir_op_imin:
- case nir_op_imax:
- case nir_op_umin:
- case nir_op_umax:
- return true;
- default:
- return false;
- }
-}
-
-static bool
match_expression(const nir_search_expression *expr, nir_alu_instr *instr,
unsigned num_components, const uint8_t *swizzle,
struct match_state *state);
@@ -207,7 +175,8 @@ match_expression(const nir_search_expression *expr, nir_alu_instr *instr,
if (matched)
return true;
- if (is_commutative_binop(instr->op)) {
+ if (nir_op_infos[instr->op].num_inputs == 2 &&
+ (nir_op_infos[instr->op].algebraic_properties & NIR_OP_IS_COMMUTATIVE)) {
if (!match_value(expr->srcs[0], instr, 1, num_components,
swizzle, state))
return false;