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:
Ilya Enkovich 2014-10-03 08:43:21 +00:00 committed by Kirill Yukhin
parent f598c55c56
commit 54bddf1d58
3 changed files with 28 additions and 12 deletions

View File

@ -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,

View File

@ -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;

View File

@ -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;