OSDN Git Service

PR bootstrap/50621
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Oct 2011 17:17:12 +0000 (17:17 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Oct 2011 17:17:12 +0000 (17:17 +0000)
* config/i386/i386.c (ix86_add_cfa_restore_note): Omit notes only
if the function was not shrink-wrapped.
(ix86_expand_epilogue): Ensure queued cfa_adjust notes are attached
to an insn.
* function.c (thread_prologue_and_epilogue_insns): Make sure the
shrink_wrapped flag is set even if there is no dump file.

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

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

index 4bdda3d..cb4a1b9 100644 (file)
@@ -1,3 +1,13 @@
+2011-10-05  Bernd Schmidt  <bernds@codesourcery.com>
+
+       PR bootstrap/50621
+       * config/i386/i386.c (ix86_add_cfa_restore_note): Omit notes only
+       if the function was not shrink-wrapped.
+       (ix86_expand_epilogue): Ensure queued cfa_adjust notes are attached
+       to an insn.
+       * function.c (thread_prologue_and_epilogue_insns): Make sure the
+       shrink_wrapped flag is set even if there is no dump file.
+
 2011-10-05  DJ Delorie  <dj@redhat.com>
            Nick Clifton  <nickc@redhat.com>
 
index 4c1db3a..25bc887 100644 (file)
@@ -9134,7 +9134,8 @@ static GTY(()) rtx queued_cfa_restores;
 static void
 ix86_add_cfa_restore_note (rtx insn, rtx reg, HOST_WIDE_INT cfa_offset)
 {
-  if (cfa_offset <= cfun->machine->fs.red_zone_offset)
+  if (!crtl->shrink_wrapped
+      && cfa_offset <= cfun->machine->fs.red_zone_offset)
     return;
 
   if (insn)
@@ -10738,6 +10739,8 @@ ix86_expand_epilogue (int style)
                                 GEN_INT (m->fs.sp_offset - UNITS_PER_WORD),
                                 style, true);
     }
+  else
+    ix86_add_queued_cfa_restore_notes (get_last_insn ());
 
   /* Sibcall epilogues don't want a return instruction.  */
   if (style == 0)
index 863f09d..2c0b897 100644 (file)
@@ -5741,10 +5741,11 @@ thread_prologue_and_epilogue_insns (void)
          if (dump_file)
            fprintf (dump_file, "Shrink-wrapping aborted due to clobber.\n");
        }
-      else if (dump_file && entry_edge != orig_entry_edge)
+      else if (entry_edge != orig_entry_edge)
        {
          crtl->shrink_wrapped = true;
-         fprintf (dump_file, "Performing shrink-wrapping.\n");
+         if (dump_file)
+           fprintf (dump_file, "Performing shrink-wrapping.\n");
        }
 
     fail_shrinkwrap: