glsl: add lowering for double divide to rcp/mul
It looks like no hw does div anyways, so we should just lower at the GLSL level. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
0e82817247
commit
2e9f4eadfb
|
@ -199,7 +199,7 @@ lower_instructions_visitor::sub_to_add_neg(ir_expression *ir)
|
||||||
void
|
void
|
||||||
lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
|
lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
|
||||||
{
|
{
|
||||||
assert(ir->operands[1]->type->is_float());
|
assert(ir->operands[1]->type->is_float() || ir->operands[1]->type->is_double());
|
||||||
|
|
||||||
/* New expression for the 1.0 / op1 */
|
/* New expression for the 1.0 / op1 */
|
||||||
ir_rvalue *expr;
|
ir_rvalue *expr;
|
||||||
|
@ -327,7 +327,7 @@ lower_instructions_visitor::mod_to_floor(ir_expression *ir)
|
||||||
/* Don't generate new IR that would need to be lowered in an additional
|
/* Don't generate new IR that would need to be lowered in an additional
|
||||||
* pass.
|
* pass.
|
||||||
*/
|
*/
|
||||||
if (lowering(DIV_TO_MUL_RCP) && ir->type->is_float())
|
if (lowering(DIV_TO_MUL_RCP) && (ir->type->is_float() || ir->type->is_double()))
|
||||||
div_to_mul_rcp(div_expr);
|
div_to_mul_rcp(div_expr);
|
||||||
|
|
||||||
ir_expression *const floor_expr =
|
ir_expression *const floor_expr =
|
||||||
|
@ -1014,7 +1014,8 @@ lower_instructions_visitor::visit_leave(ir_expression *ir)
|
||||||
case ir_binop_div:
|
case ir_binop_div:
|
||||||
if (ir->operands[1]->type->is_integer() && lowering(INT_DIV_TO_MUL_RCP))
|
if (ir->operands[1]->type->is_integer() && lowering(INT_DIV_TO_MUL_RCP))
|
||||||
int_div_to_mul_rcp(ir);
|
int_div_to_mul_rcp(ir);
|
||||||
else if (ir->operands[1]->type->is_float() && lowering(DIV_TO_MUL_RCP))
|
else if ((ir->operands[1]->type->is_float() ||
|
||||||
|
ir->operands[1]->type->is_double()) && lowering(DIV_TO_MUL_RCP))
|
||||||
div_to_mul_rcp(ir);
|
div_to_mul_rcp(ir);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue