aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2012-09-14 13:28:44 +0000
committerEric Botcazou <ebotcazou@adacore.com>2012-09-14 13:28:44 +0000
commit79a27e8036e57919d4d844e56432b01fc8ca021e (patch)
tree5c32661073d991fc5ce315762062115ab0af337c /gcc/calls.c
parentd115344c882b5be76a4eea25ecc3be519c3fb24b (diff)
PR rtl-optimization/44194
* calls.c (expand_call): In the PARALLEL case, copy the return value into pseudos instead of spilling it onto the stack. * emit-rtl.c (adjust_address_1): Rename ADJUST into ADJUST_ADDRESS and add new ADJUST_OBJECT parameter. If ADJUST_OBJECT is set, drop the underlying object if it cannot be proved that the adjusted memory access is still within its bounds. (adjust_automodify_address_1): Adjust call to adjust_address_1. (widen_memory_access): Likewise. * expmed.c (store_bit_field_1): Call adjust_bitfield_address instead of adjust_address. Do not drop the underlying object of a MEM. (store_fixed_bit_field): Likewise. (extract_bit_field_1): Likewise. Fix oversight in recursion. (extract_fixed_bit_field): Likewise. * expr.h (adjust_address_1): Adjust prototype. (adjust_address): Adjust call to adjust_address_1. (adjust_address_nv): Likewise. (adjust_bitfield_address): New macro. (adjust_bitfield_address_nv): Likewise. * expr.c (expand_assignment): Handle a PARALLEL in more cases. (store_expr): Likewise. (store_field): Likewise. * dse.c: Fix typos in the head comment. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@191302 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 5bc1b1ebb87..d4d0917bd1e 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3272,16 +3272,8 @@ expand_call (tree exp, rtx target, int ignore)
else if (GET_CODE (valreg) == PARALLEL)
{
if (target == 0)
- {
- /* This will only be assigned once, so it can be readonly. */
- tree nt = build_qualified_type (rettype,
- (TYPE_QUALS (rettype)
- | TYPE_QUAL_CONST));
-
- target = assign_temp (nt, 1, 1);
- }
-
- if (! rtx_equal_p (target, valreg))
+ target = emit_group_move_into_temps (valreg);
+ else if (!rtx_equal_p (target, valreg))
emit_group_store (target, valreg, rettype,
int_size_in_bytes (rettype));