aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-20 08:54:03 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-20 08:54:03 +0000
commit257caa552bf930e2770100de70a459a4ede837c0 (patch)
treef451a876ef90a91912575133c1f26b0708b25830 /gcc/calls.c
parentcf0d189eb989906d17010ca7c0b07f1763d5fde5 (diff)
downloadgcc-257caa552bf930e2770100de70a459a4ede837c0.zip
gcc-257caa552bf930e2770100de70a459a4ede837c0.tar.gz
gcc-257caa552bf930e2770100de70a459a4ede837c0.tar.bz2
Add a pass_by_reference flag to function_arg_info
This patch adds a flag that tells targets whether an argument has been converted to pass-by-reference form. This replaces assign_parm_data_one::passed_pointer in function.c. The flag is set automatically for places that call apply_pass_by_reference_rules. Places that apply pass-by-reference manually need to set it themselves. (After previous changes, no targets apply pass-by-reference manually. They all go through apply_pass_by_reference_rules.) 2019-08-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * calls.h (function_arg_info): Add a pass_by_reference field, defaulting to false. * calls.c (apply_pass_by_reference_rules): Set pass_by_reference when applying pass-by-reference semantics. (initialize_argument_information): Likewise. (emit_library_call_value_1): Likewise. * function.c (assign_parm_data_one): Remove passed_pointer field. (assign_parm_find_data_types): Don't set it. (assign_parm_find_stack_rtl, assign_parm_adjust_stack_rtl) (assign_parm_setup_reg, assign_parms, gimplify_parameters): Use arg.pass_by_reference instead of passed_pointer. From-SVN: r274707
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 454e513..6eefeec 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -946,6 +946,7 @@ apply_pass_by_reference_rules (CUMULATIVE_ARGS *ca, function_arg_info &arg)
{
arg.type = build_pointer_type (arg.type);
arg.mode = TYPE_MODE (arg.type);
+ arg.pass_by_reference = true;
return true;
}
return false;
@@ -2125,6 +2126,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
"argument must be passed"
" by copying");
}
+ arg.pass_by_reference = true;
}
unsignedp = TYPE_UNSIGNED (type);
@@ -4957,6 +4959,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
call_fusage);
arg.mode = Pmode;
+ arg.pass_by_reference = true;
val = force_operand (XEXP (slot, 0), NULL_RTX);
}