reload1.c (reload): Do not set reload_completed or split insns here.
authorJeffrey A Law <law@cygnus.com>
Tue, 1 Dec 1998 14:36:51 +0000 (14:36 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 1 Dec 1998 14:36:51 +0000 (07:36 -0700)
        * reload1.c (reload): Do not set reload_completed or split insns
        here.  Instead...
        * toplev.c (rest_of_compilation): Set reload_completed after
        reload returns.  Split insns after reload_cse has run.

From-SVN: r24037

gcc/ChangeLog
gcc/reload1.c
gcc/toplev.c

index ac20dac..37abb2a 100644 (file)
@@ -1,3 +1,10 @@
+Tue Dec  1 15:20:44 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * reload1.c (reload): Do not set reload_completed or split insns
+       here.  Instead...
+       * toplev.c (rest_of_compilation): Set reload_completed after
+       reload returns.  Split insns after reload_cse has run.
+
 Tue Dec  1 11:55:04 1998  Richard Henderson  <rth@cygnus.com>
 
        * final.c (final_scan_insn): Abort if block_depth falls below 0.
index d27663c..1b94254 100644 (file)
@@ -1100,10 +1100,6 @@ reload (first, global, dumpfile)
        }
     }
 
-  /* We've finished reloading.  This reload_completed must be set before we
-     perform instruction splitting below.  */
-  reload_completed = 1;
-
   /* Make a pass over all the insns and delete all USEs which we inserted
      only to tag a REG_EQUAL note on them.  Remove all REG_DEAD and REG_UNUSED
      notes.  Delete all CLOBBER insns and simplify (subreg (reg)) operands.  */
@@ -1135,24 +1131,6 @@ reload (first, global, dumpfile)
 
        /* And simplify (subreg (reg)) if it appears as an operand.  */
        cleanup_subreg_operands (insn);
-
-       /* If optimizing and we are performing instruction scheduling after
-          reload, then go ahead and split insns now since we are about to
-          recompute flow information anyway.  */
-       if (optimize && flag_schedule_insns_after_reload)
-         {
-           rtx last;
-
-           last = try_split (PATTERN (insn), insn, 1);
-
-           if (last != insn)
-             {
-               PUT_CODE (insn, NOTE);
-               NOTE_SOURCE_FILE (insn) = 0;
-               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
-             }
-         }
-          
       }
 
   /* If we are doing stack checking, give a warning if this function's
index e5c9319..e0fc108 100644 (file)
@@ -3968,10 +3968,40 @@ rest_of_compilation (decl)
   if (failure)
     goto exit_rest_of_compilation;
 
+  reload_completed = 1;
+
   /* Do a very simple CSE pass over just the hard registers.  */
   if (optimize > 0)
     reload_cse_regs (insns);
 
+  /* If optimizing and we are performing instruction scheduling after
+     reload, then go ahead and split insns now since we are about to
+     recompute flow information anyway.
+
+     reload_cse_regs may expose more splitting opportunities, expecially
+     for double-word operations.  */
+  if (optimize > 0 && flag_schedule_insns_after_reload)
+    {
+      rtx insn;
+
+      for (insn = insns; insn; insn = NEXT_INSN (insn))
+       {
+         rtx last;
+
+         if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
+           continue;
+
+         last = try_split (PATTERN (insn), insn, 1);
+
+         if (last != insn)
+           {
+             PUT_CODE (insn, NOTE);
+             NOTE_SOURCE_FILE (insn) = 0;
+             NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
+           }
+       }
+    }
+
   /* Re-create the death notes which were deleted during reload.  */
   if (optimize)
     TIMEVAR