On Fri, 24 Jun 2011 17:35:10 -0700, "Ian Romanick" <i...@freedesktop.org> wrote: > From: Ian Romanick <ian.d.roman...@intel.com> > > And don't delete them. Let ralloc clean them up. Deleting the > temporary IR leaves dangling references in the prog_instruction. That > results in a bad dererfernce when printing the IR with MESA_GLSL=dump.
dereference > NOTE: This is a candidate for the 7.10 branch. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38584 > --- > src/mesa/program/ir_to_mesa.cpp | 28 ++++++++++++---------------- > 1 files changed, 12 insertions(+), 16 deletions(-) > > diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp > index 0086997..12bcc97 100644 > --- a/src/mesa/program/ir_to_mesa.cpp > +++ b/src/mesa/program/ir_to_mesa.cpp > @@ -803,48 +803,44 @@ ir_to_mesa_visitor::visit(ir_loop *ir) > ir_dereference_variable *counter = NULL; > > if (ir->counter != NULL) > - counter = new(ir) ir_dereference_variable(ir->counter); > + counter = new(this->mem_ctx) ir_dereference_variable(ir->counter); In the rest of the visitor, we're using "mem_ctx" without "this->". > > if (ir->from != NULL) { > assert(ir->counter != NULL); > > - ir_assignment *a = new(ir) ir_assignment(counter, ir->from, NULL); > + ir_assignment *a = > + new(this->mem_ctx) ir_assignment(counter, ir->from, NULL); > > a->accept(this); > - delete a; > } > > emit(NULL, OPCODE_BGNLOOP); > > if (ir->to) { > ir_expression *e = > - new(ir) ir_expression(ir->cmp, glsl_type::bool_type, > - counter, ir->to); > - ir_if *if_stmt = new(ir) ir_if(e); > + new(this->mem_ctx) ir_expression(ir->cmp, glsl_type::bool_type, > + counter, ir->to); > + ir_if *if_stmt = new(this->mem_ctx) ir_if(e); > > - ir_loop_jump *brk = new(ir) ir_loop_jump(ir_loop_jump::jump_break); > + ir_loop_jump *brk = > + new(this->mem_ctx) ir_loop_jump(ir_loop_jump::jump_break); > > if_stmt->then_instructions.push_tail(brk); > > if_stmt->accept(this); > - > - delete if_stmt; > - delete e; > - delete brk; > } > > visit_exec_list(&ir->body_instructions, this); > > if (ir->increment) { > ir_expression *e = > - new(ir) ir_expression(ir_binop_add, counter->type, > - counter, ir->increment); > + new(this->mem_ctx) ir_expression(ir_binop_add, counter->type, > + counter, ir->increment); > > - ir_assignment *a = new(ir) ir_assignment(counter, e, NULL); > + ir_assignment *a = > + new(this->mem_ctx) ir_assignment(counter, e, NULL); > > a->accept(this); > - delete a; > - delete e; > } other than that, Reviewed-by: Eric Anholt <e...@anholt.net>
pgpj8lMI0NJnW.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev