OSDN Git Service

* jump.c (jump_optimize_1): Only set CAN_REACH_END if
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 31 May 1999 13:34:55 +0000 (13:34 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 31 May 1999 13:34:55 +0000 (13:34 +0000)
        calculate_can_reach_end returns nonzero.

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

gcc/ChangeLog
gcc/jump.c

index e83b9fe..a771927 100644 (file)
@@ -18,6 +18,9 @@ Mon May 31 11:40:20 EDT 1999  John Wehle  (john@feith.com)
 
 Mon May 31 00:46:17 1999  Jeffrey A Law  (law@cygnus.com)
 
+       * jump.c (jump_optimize_1): Only set CAN_REACH_END if 
+       calculate_can_reach_end returns nonzero.
+
        * configure.in (native gas tests): Search for an assembler in the
        same manner that the installed compiler will.
        * configure: Rebuilt.
index 01df0db..6b6a90a 100644 (file)
@@ -235,7 +235,12 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
 
   if (!optimize)
     {
-      can_reach_end = calculate_can_reach_end (last_insn, 1, 0);
+      /* CAN_REACH_END is persistent for each function.  Once set it should
+        not be cleared.  This is especially true for the case where we
+        delete the NOTE_FUNCTION_END note.  CAN_REACH_END is cleared by
+        the front-end before compiling each function.  */
+      if (calculate_can_reach_end (last_insn, 1, 0))
+       can_reach_end = 1;
 
       /* Zero the "deleted" flag of all the "deleted" insns.  */
       for (insn = f; insn; insn = NEXT_INSN (insn))
@@ -2068,7 +2073,12 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
     }
 #endif
 
-  can_reach_end = calculate_can_reach_end (last_insn, 0, 1);
+  /* CAN_REACH_END is persistent for each function.  Once set it should
+     not be cleared.  This is especially true for the case where we
+     delete the NOTE_FUNCTION_END note.  CAN_REACH_END is cleared by
+     the front-end before compiling each function.  */
+  if (calculate_can_reach_end (last_insn, 0, 1))
+    can_reach_end = 1;
 
   /* Show JUMP_CHAIN no longer valid.  */
   jump_chain = 0;