summaryrefslogtreecommitdiff
path: root/ir_function_inlining.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ir_function_inlining.cpp')
-rw-r--r--ir_function_inlining.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/ir_function_inlining.cpp b/ir_function_inlining.cpp
index 385ce9ef6d..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);
}
@@ -389,15 +388,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;