Avoid copying libcall results directly to user variables.
From-SVN: r36433
This commit is contained in:
parent
4eaa189a5c
commit
aff2c2d3af
@ -1,3 +1,8 @@
|
||||
2000-09-15 Bernd Schmidt <bernds@redhat.co.uk>
|
||||
|
||||
* optabs.c (emit_libcall_block): If target is a user variable,
|
||||
copy to a temporary first.
|
||||
|
||||
2000-09-15 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* expmed.c (store_bit_field): Consider naturally aligned
|
||||
|
@ -2756,8 +2756,14 @@ emit_libcall_block (insns, target, result, equiv)
|
||||
rtx result;
|
||||
rtx equiv;
|
||||
{
|
||||
rtx final_dest = target;
|
||||
rtx prev, next, first, last, insn;
|
||||
|
||||
/* If this is a reg with REG_USERVAR_P set, then it could possibly turn
|
||||
into a MEM later. Protect the libcall block from this change. */
|
||||
if (! REG_P (target) || REG_USERVAR_P (target))
|
||||
target = gen_reg_rtx (GET_MODE (target));
|
||||
|
||||
/* look for any CALL_INSNs in this sequence, and attach a REG_EH_REGION
|
||||
reg note to indicate that this call cannot throw or execute a nonlocal
|
||||
goto. (Unless there is already a REG_EH_REGION note, in which case
|
||||
@ -2833,6 +2839,8 @@ emit_libcall_block (insns, target, result, equiv)
|
||||
remove_note (last, find_reg_note (last, REG_EQUAL, NULL_RTX));
|
||||
}
|
||||
|
||||
emit_move_insn (final_dest, target);
|
||||
|
||||
if (prev == 0)
|
||||
first = get_insns ();
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user