From f5c3f095b97dc5d8997ca448ffffbca67b3db4d5 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 15 Oct 2014 19:17:21 -0700 Subject: [PATCH] i965/vec4: Simplify visit(ir_expression *)'s result_src/dst setup. Using dst_reg(this, ir->type) automatically sets the writemask to the proper size for the type; src_reg(dst_reg) preserves that. This should be equivalent, but less code. Note that src_reg(dst_reg) either uses SWIZZLE_XXXX or SWIZZLE_XYZW, so the old code did need the manual writemask adjustment, since it constructed the registers the other way around. Signed-off-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 0b2b9ca..d0587cd 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -1259,8 +1259,6 @@ vec4_visitor::visit(ir_expression *ir) { unsigned int operand; src_reg op[Elements(ir->operands)]; - src_reg result_src; - dst_reg result_dst; vec4_instruction *inst; if (ir->operation == ir_binop_add) { @@ -1273,6 +1271,12 @@ vec4_visitor::visit(ir_expression *ir) return; } + /* Storage for our result. Ideally for an assignment we'd be using + * the actual storage for the result here, instead. + */ + dst_reg result_dst(this, ir->type); + src_reg result_src(result_dst); + for (operand = 0; operand < ir->get_num_operands(); operand++) { this->result.file = BAD_FILE; ir->operands[operand]->accept(this); @@ -1289,19 +1293,8 @@ vec4_visitor::visit(ir_expression *ir) assert(!ir->operands[operand]->type->is_matrix()); } - /* Storage for our result. Ideally for an assignment we'd be using - * the actual storage for the result here, instead. - */ - result_src = src_reg(this, ir->type); - /* convenience for the emit functions below. */ - result_dst = dst_reg(result_src); /* If nothing special happens, this is the result. */ this->result = result_src; - /* Limit writes to the channels that will be used by result_src later. - * This does limit this temp's use as a temporary for multi-instruction - * sequences. - */ - result_dst.writemask = (1 << ir->type->vector_elements) - 1; switch (ir->operation) { case ir_unop_logic_not: -- 2.7.4