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 e60ed81dbee08a8cbc7ea8045dbff5799f5063b6..15a79c9319c2647e87ab4d80b3c176ee7176d3a3 100644 (file)
@@ -1,3 +1,9 @@
+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
index 4236d156bb9d21b8eaa21d0038a15eb57b99cb6a..0972615d89f7b25cda9d2a76046fe4b02de2005c 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));
        }
     }