glsl/opt_algebraic: Drop pow optimizations.

These should all be covered by NIR.  Minor shader-db changes on freedreno,
which appear to be scheduling noise.

total instructions in shared programs: 11013132 -> 11013112 (<.01%)
instructions in affected programs: 3408 -> 3388 (-0.59%)

Acked-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21475>
This commit is contained in:
Emma Anholt
2023-02-22 11:54:15 -08:00
committed by Marge Bot
parent bb1b37e6c1
commit 6b53d4b825

View File

@@ -112,18 +112,6 @@ is_vec_one(ir_constant *ir)
return (ir == NULL) ? false : ir->is_one();
}
static inline bool
is_vec_two(ir_constant *ir)
{
return (ir == NULL) ? false : ir->is_value(2.0, 2);
}
static inline bool
is_vec_four(ir_constant *ir)
{
return (ir == NULL) ? false : ir->is_value(4.0, 4);
}
static inline bool
is_vec_negative_one(ir_constant *ir)
{
@@ -635,43 +623,6 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
}
break;
case ir_binop_pow:
/* 1^x == 1 */
if (is_vec_one(op_const[0]))
return op_const[0];
/* x^1 == x */
if (is_vec_one(op_const[1]))
return ir->operands[0];
/* pow(2,x) == exp2(x) */
if (is_vec_two(op_const[0]))
return expr(ir_unop_exp2, ir->operands[1]);
if (is_vec_two(op_const[1])) {
ir_variable *x = new(ir) ir_variable(ir->operands[1]->type, "x",
ir_var_temporary);
base_ir->insert_before(x);
base_ir->insert_before(assign(x, ir->operands[0]));
return mul(x, x);
}
if (is_vec_four(op_const[1])) {
ir_variable *x = new(ir) ir_variable(ir->operands[1]->type, "x",
ir_var_temporary);
base_ir->insert_before(x);
base_ir->insert_before(assign(x, ir->operands[0]));
ir_variable *squared = new(ir) ir_variable(ir->operands[1]->type,
"squared",
ir_var_temporary);
base_ir->insert_before(squared);
base_ir->insert_before(assign(squared, mul(x, x)));
return mul(squared, squared);
}
break;
case ir_binop_min:
case ir_binop_max:
if (!ir->type->is_float())