mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
glsl: Optimize mul(a, -1) into neg(a).
Two extra instructions in some heroesofnewerth shaders, but a win for everything else. total instructions in shared programs: 1531352 -> 1530815 (-0.04%) instructions in affected programs: 121898 -> 121361 (-0.44%) Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
197f3a33fb
commit
a360ca7476
1 changed files with 23 additions and 0 deletions
|
|
@ -84,6 +84,12 @@ is_vec_one(ir_constant *ir)
|
|||
return (ir == NULL) ? false : ir->is_one();
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_vec_negative_one(ir_constant *ir)
|
||||
{
|
||||
return (ir == NULL) ? false : ir->is_negative_one();
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_vec_basis(ir_constant *ir)
|
||||
{
|
||||
|
|
@ -287,6 +293,23 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
|||
this->progress = true;
|
||||
return ir_constant::zero(ir, ir->type);
|
||||
}
|
||||
if (is_vec_negative_one(op_const[0])) {
|
||||
this->progress = true;
|
||||
temp = new(mem_ctx) ir_expression(ir_unop_neg,
|
||||
ir->operands[1]->type,
|
||||
ir->operands[1],
|
||||
NULL);
|
||||
return swizzle_if_required(ir, temp);
|
||||
}
|
||||
if (is_vec_negative_one(op_const[1])) {
|
||||
this->progress = true;
|
||||
temp = new(mem_ctx) ir_expression(ir_unop_neg,
|
||||
ir->operands[0]->type,
|
||||
ir->operands[0],
|
||||
NULL);
|
||||
return swizzle_if_required(ir, temp);
|
||||
}
|
||||
|
||||
|
||||
/* Reassociate multiplication of constants so that we can do
|
||||
* constant folding.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue