* config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 May 2010 12:14:49 +0000 (12:14 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 May 2010 12:14:49 +0000 (12:14 +0000)
for tail call epilogues.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160050 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index 938ddbb..005db41 100644 (file)
@@ -1,5 +1,10 @@
 2010-05-30  Jan Hubicka  <jh@suse.cz>
 
+       * config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP
+       for tail call epilogues.
+
+2010-05-30  Jan Hubicka  <jh@suse.cz>
+
        * passes.c (ipa_write_optimization_summaries_1, ipa_write_summaries_2,
        ipa_read_summaries_1, ipa_read_optimization_summaries_1): Initilalize dump
        files.
index de291c7..76dace5 100644 (file)
@@ -8363,17 +8363,21 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
     insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64 (dest, src, offset));
   else
     {
-      rtx r11;
+      rtx tmp;
       /* r11 is used by indirect sibcall return as well, set before the
-        epilogue and used after the epilogue.  ATM indirect sibcall
-        shouldn't be used together with huge frame sizes in one
-        function because of the frame_size check in sibcall.c.  */
-      gcc_assert (style);
-      r11 = gen_rtx_REG (DImode, R11_REG);
-      insn = emit_insn (gen_rtx_SET (DImode, r11, offset));
+        epilogue and used after the epilogue.  */
+      if (style)
+        tmp = gen_rtx_REG (DImode, R11_REG);
+      else
+       {
+         gcc_assert (src != hard_frame_pointer_rtx
+                     && dest != hard_frame_pointer_rtx);
+         tmp = hard_frame_pointer_rtx;
+       }
+      insn = emit_insn (gen_rtx_SET (DImode, tmp, offset));
       if (style < 0)
        RTX_FRAME_RELATED_P (insn) = 1;
-      insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, r11,
+      insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, tmp,
                                                               offset));
     }