summaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorkyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-03 08:43:21 +0000
committerkyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-03 08:43:21 +0000
commite88cf7afb8c5b002d778687fac41c7f6d3f2a7c3 (patch)
treecb18144264106e9531c4d4df7a79d5ff50b16098 /gcc/lra-constraints.c
parent321d85d9e8bddb1b9b8f000cf13710228a865779 (diff)
downloadgcc-e88cf7afb8c5b002d778687fac41c7f6d3f2a7c3.tar.gz
gcc/
* lra-constraints.c (inherit_in_ebb): Handle calls with multiple return values. * caller-save.c (save_call_clobbered_regs): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215839 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 5f6839968d6..f1642f3b390 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -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;