From: Jason Ekstrand Date: Tue, 16 Dec 2014 20:26:38 +0000 (-0800) Subject: nir/search: Use nir_op_infos to determine if an operation is commutative X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e2a8f9e5ccb136f1e9460255054e34c11a41a422;p=mesa.git 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 --- 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 @@ -32,38 +32,6 @@ struct match_state { nir_alu_src variables[NIR_SEARCH_MAX_VARIABLES]; }; -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, @@ -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;