lra-constraints.c (inherit_in_ebb): Handle calls with multiple return values.
gcc/ * lra-constraints.c (inherit_in_ebb): Handle calls with multiple return values. * caller-save.c (save_call_clobbered_regs): Likewise. From-SVN: r215839
This commit is contained in:
parent
f598c55c56
commit
54bddf1d58
@ -1,3 +1,9 @@
|
||||
2014-10-03 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
* lra-constraints.c (inherit_in_ebb): Handle calls with
|
||||
multiple return values.
|
||||
* caller-save.c (save_call_clobbered_regs): Likewise.
|
||||
|
||||
2014-10-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tree-vect-data-refs.c (vect_permute_load_chain,
|
||||
|
@ -879,8 +879,13 @@ save_call_clobbered_regs (void)
|
||||
if (GET_CODE (pat) == PARALLEL)
|
||||
pat = XVECEXP (pat, 0, 0);
|
||||
dest = SET_DEST (pat);
|
||||
newpat = gen_rtx_SET (VOIDmode, cheap, copy_rtx (dest));
|
||||
chain = insert_one_insn (chain, 0, -1, newpat);
|
||||
/* For multiple return values dest is PARALLEL.
|
||||
Currently we handle only single return value case. */
|
||||
if (REG_P (dest))
|
||||
{
|
||||
newpat = gen_rtx_SET (VOIDmode, cheap, copy_rtx (dest));
|
||||
chain = insert_one_insn (chain, 0, -1, newpat);
|
||||
}
|
||||
}
|
||||
}
|
||||
last = chain;
|
||||
|
@ -5348,16 +5348,21 @@ inherit_in_ebb (rtx_insn *head, rtx_insn *tail)
|
||||
if (GET_CODE (pat) == PARALLEL)
|
||||
pat = XVECEXP (pat, 0, 0);
|
||||
dest = SET_DEST (pat);
|
||||
start_sequence ();
|
||||
emit_move_insn (cheap, copy_rtx (dest));
|
||||
restore = get_insns ();
|
||||
end_sequence ();
|
||||
lra_process_new_insns (curr_insn, NULL, restore,
|
||||
"Inserting call parameter restore");
|
||||
/* We don't need to save/restore of the pseudo from
|
||||
this call. */
|
||||
usage_insns[regno].calls_num = calls_num;
|
||||
bitmap_set_bit (&check_only_regs, regno);
|
||||
/* For multiple return values dest is PARALLEL.
|
||||
Currently we handle only single return value case. */
|
||||
if (REG_P (dest))
|
||||
{
|
||||
start_sequence ();
|
||||
emit_move_insn (cheap, copy_rtx (dest));
|
||||
restore = get_insns ();
|
||||
end_sequence ();
|
||||
lra_process_new_insns (curr_insn, NULL, restore,
|
||||
"Inserting call parameter restore");
|
||||
/* We don't need to save/restore of the pseudo from
|
||||
this call. */
|
||||
usage_insns[regno].calls_num = calls_num;
|
||||
bitmap_set_bit (&check_only_regs, regno);
|
||||
}
|
||||
}
|
||||
}
|
||||
to_inherit_num = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user