mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
i965/fs: Emit MADs from (x + -(y * z)).
Just use the negation source modifier on one of the multiplicand arguments. total instructions in shared programs: 5889529 -> 5880016 (-0.16%) instructions in affected programs: 600846 -> 591333 (-1.58%) Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
0d05d1226e
commit
c4fab711ed
1 changed files with 12 additions and 0 deletions
|
|
@ -431,10 +431,21 @@ fs_visitor::try_emit_mad(ir_expression *ir)
|
|||
ir_rvalue *nonmul = ir->operands[1];
|
||||
ir_expression *mul = ir->operands[0]->as_expression();
|
||||
|
||||
bool mul_negate = false;
|
||||
if (mul && mul->operation == ir_unop_neg) {
|
||||
mul = mul->operands[0]->as_expression();
|
||||
mul_negate = true;
|
||||
}
|
||||
|
||||
if (!mul || mul->operation != ir_binop_mul) {
|
||||
nonmul = ir->operands[0];
|
||||
mul = ir->operands[1]->as_expression();
|
||||
|
||||
if (mul && mul->operation == ir_unop_neg) {
|
||||
mul = mul->operands[0]->as_expression();
|
||||
mul_negate = true;
|
||||
}
|
||||
|
||||
if (!mul || mul->operation != ir_binop_mul)
|
||||
return false;
|
||||
}
|
||||
|
|
@ -449,6 +460,7 @@ fs_visitor::try_emit_mad(ir_expression *ir)
|
|||
|
||||
mul->operands[0]->accept(this);
|
||||
fs_reg src1 = this->result;
|
||||
src1.negate ^= mul_negate;
|
||||
|
||||
mul->operands[1]->accept(this);
|
||||
fs_reg src2 = this->result;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue