function.c (thread_prologue_and_epilogue): Move NOTE_INSN_FUNCTION_END and NOTE_INSN_...
authorUlrich Weigand <uweigand@de.ibm.com>
Sat, 27 Mar 2004 16:18:56 +0000 (16:18 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Sat, 27 Mar 2004 16:18:56 +0000 (16:18 +0000)
* function.c (thread_prologue_and_epilogue): Move
NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG notes
before the epilogue.

From-SVN: r80025

gcc/ChangeLog
gcc/function.c

index e60ed81..15a79c9 100644 (file)
@@ -1,5 +1,11 @@
 2004-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
 
+       * function.c (thread_prologue_and_epilogue): Move
+       NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG notes
+       before the epilogue.
+
+2004-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
+
        * expr.c (store_constructor): Use gen_int_mode to correctly
        sign-extend CONST_INT value.
 
index 4236d15..0972615 100644 (file)
@@ -8014,11 +8014,16 @@ epilogue_done:
 
       /* Similarly, move any line notes that appear after the epilogue.
          There is no need, however, to be quite so anal about the existence
-        of such a note.  */
+        of such a note.  Also move the NOTE_INSN_FUNCTION_END and (possibly)
+        NOTE_INSN_FUNCTION_BEG notes, as those can be relevant for debug
+        info generation.  */
       for (insn = epilogue_end; insn; insn = next)
        {
          next = NEXT_INSN (insn);
-         if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
+         if (GET_CODE (insn) == NOTE 
+             && (NOTE_LINE_NUMBER (insn) > 0
+                 || NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG
+                 || NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_END))
            reorder_insns (insn, insn, PREV_INSN (epilogue_end));
        }
     }