+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,
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;
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;