From 0da994a9f15b461d16cf88ce16dc07e98dfada6f Mon Sep 17 00:00:00 2001 From: Bryan Cain Date: Thu, 21 Jul 2011 16:29:56 -0500 Subject: [PATCH] glsl_to_tgsi: make assignment hack safer Fixes an assertion failure in piglit test glsl-texcoord-array. --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 389e5d8e2ef..6e01a44a733 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -1917,12 +1917,13 @@ glsl_to_tgsi_visitor::visit(ir_assignment *ir) ir->rhs == ((glsl_to_tgsi_instruction *)this->instructions.get_tail())->ir && type_size(ir->lhs->type) == 1) { /* To avoid emitting an extra MOV when assigning an expression to a - * variable, change the destination register of the last instruction - * emitted as part of the expression to the assignment variable. + * variable, emit the last instruction of the expression again, but + * replace the destination register with the target of the assignment. + * Dead code elimination will remove the original instruction. */ glsl_to_tgsi_instruction *inst; inst = (glsl_to_tgsi_instruction *)this->instructions.get_tail(); - inst->dst = l; + emit(ir, inst->op, l, inst->src[0], inst->src[1], inst->src[2]); } else { for (i = 0; i < type_size(ir->lhs->type); i++) { emit(ir, TGSI_OPCODE_MOV, l, r); -- 2.30.2