From c07fdae33f083f6337a2810c36d6dcb2dbeacff2 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 30 Apr 2010 23:38:50 -0700 Subject: Fix incorrect comments in function inliner. --- ir_function_inlining.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ir_function_inlining.cpp') diff --git a/ir_function_inlining.cpp b/ir_function_inlining.cpp index 385ce9ef6d..c623cd010b 100644 --- a/ir_function_inlining.cpp +++ b/ir_function_inlining.cpp @@ -389,15 +389,15 @@ ir_call::generate_inline(ir_instruction *next_ir) next_ir->insert_before(v.result); } - /* Generate the declarations for the parameters to our inlined code, - * and set up the mapping of real function body variables to ours. + /* Copy back the value of any 'out' parameters from the function body + * variables to our own. */ i = 0; param_iter = this->actual_parameters.iterator(); for (i = 0; i < num_parameters; i++) { ir_instruction *const param = (ir_instruction *) param_iter.get(); - /* Move the actual param into our param variable if it's an 'in' type. */ + /* Move our param variable into the actual param if it's an 'out' type. */ if (parameters[i]->mode == ir_var_out || parameters[i]->mode == ir_var_inout) { ir_assignment *assign; -- cgit v1.2.3 From 05ddebac0a45bf07fa60b04b22f29234ca26a4a4 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sat, 1 May 2010 00:31:35 -0700 Subject: Fix ir_return cloning to actually use the cloned subexpression. This caused a nasty bug where the function inliner would create new variables for each of the formal parameters, but the body would still reference the old copies. This was highly visible since the dead code eliminator (rightly) removed the new declarations, leading to printed IR that referenced non-existent variable names. --- ir_function_inlining.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'ir_function_inlining.cpp') diff --git a/ir_function_inlining.cpp b/ir_function_inlining.cpp index c623cd010b..0d072c1b76 100644 --- a/ir_function_inlining.cpp +++ b/ir_function_inlining.cpp @@ -264,8 +264,7 @@ ir_function_cloning_visitor::visit(ir_return *ir) rval = this->result->as_rvalue(); assert(rval); - result = new ir_assignment(new ir_dereference(this->retval), - ir->get_value(), NULL); + result = new ir_assignment(new ir_dereference(this->retval), rval, NULL); } -- cgit v1.2.3