From d8ef55fc678c5f8e3f54a1c38db33b37ea898181 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Sat, 23 Mar 2013 11:13:39 +0000 Subject: * calls.c (expand_call): Add missing guard to code handling return of non-BLKmode structures in MSB. * function.c (expand_function_end): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@197003 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/function.c | 1 + 1 file changed, 1 insertion(+) (limited to 'gcc/function.c') diff --git a/gcc/function.c b/gcc/function.c index e673f21a57d..5419b88593d 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5093,6 +5093,7 @@ expand_function_end (void) amount. BLKmode results are handled using the group load/store machinery. */ if (TYPE_MODE (TREE_TYPE (decl_result)) != BLKmode + && REG_P (real_decl_rtl) && targetm.calls.return_in_msb (TREE_TYPE (decl_result))) { emit_move_insn (gen_rtx_REG (GET_MODE (decl_rtl), -- cgit v1.2.1 From 961299131ad5ad6a9b5fb8fa3b11dd1961cebfdb Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Mon, 25 Mar 2013 11:24:12 +0000 Subject: * function.c (emit_use_return_register_into_block): On cc0 targets, do not emit the sequence between cc0 setter and user. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@197036 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/function.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'gcc/function.c') diff --git a/gcc/function.c b/gcc/function.c index 5419b88593d..cd9cb855d40 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5598,12 +5598,17 @@ prepare_shrink_wrap (basic_block entry_block) static void emit_use_return_register_into_block (basic_block bb) { - rtx seq; + rtx seq, insn; start_sequence (); use_return_register (); seq = get_insns (); end_sequence (); - emit_insn_before (seq, BB_END (bb)); + insn = BB_END (bb); +#ifdef HAVE_cc0 + if (reg_mentioned_p (cc0_rtx, PATTERN (insn))) + insn = prev_cc0_setter (insn); +#endif + emit_insn_before (seq, insn); } -- cgit v1.2.1