diff options
author | Jason Ekstrand <[email protected]> | 2014-12-16 12:26:38 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-01-15 07:20:22 -0800 |
commit | e2a8f9e5ccb136f1e9460255054e34c11a41a422 (patch) | |
tree | 9c2bb82419ccb15ed519aaa67ca8f958b089e05c /src | |
parent | 46f3e1ab504f016ab900c045f165a8376cf3fc0c (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]>
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/nir/nir_search.c | 35 |
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; |