diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-09-14 13:28:44 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2012-09-14 13:28:44 +0000 |
commit | 79a27e8036e57919d4d844e56432b01fc8ca021e (patch) | |
tree | 5c32661073d991fc5ce315762062115ab0af337c /gcc/calls.c | |
parent | d115344c882b5be76a4eea25ecc3be519c3fb24b (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.c | 12 |
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)); |