Thu Jun 7 13:20:14 CEST 2001 Jan Hubicka <jh@suse.cz>
authorJan Hubicka <jh@suse.cz>
Thu, 7 Jun 2001 11:23:34 +0000 (13:23 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 7 Jun 2001 11:23:34 +0000 (11:23 +0000)
* expr.c (copy_blkmode_from_reg): Fix operand_subword_force call.

Thu Jun  7 12:12:58 CEST 2001  Jan Hubicka  <jh@suse.cz>

* toplev.c (rest_of_compilation): Call split_all_insns
before reg-stack and shorten-branches. Do shorten-branches
after reg-stack.
* final.c (shorten_branches): Remove insn splitting code.

From-SVN: r42956

gcc/ChangeLog
gcc/expr.c
gcc/final.c
gcc/toplev.c

index e48f8d4..199f94d 100644 (file)
@@ -1,3 +1,14 @@
+Thu Jun  7 13:20:14 CEST 2001  Jan Hubicka  <jh@suse.cz>
+
+       * expr.c (copy_blkmode_from_reg): Fix operand_subword_force call.
+
+Thu Jun  7 12:12:58 CEST 2001  Jan Hubicka  <jh@suse.cz>
+
+       * toplev.c (rest_of_compilation): Call split_all_insns
+       before reg-stack and shorten-branches. Do shorten-branches
+       after reg-stack.
+       * final.c (shorten_branches): Remove insn splitting code.
+
 2001-06-07  Nathan Sidwell  <nathan@codesourcery.com>
 
        * configure.in (sparc*-*-*): Check assembler R_SPARC_UA32 support.
index 7fb0654..aaaab7a 100644 (file)
@@ -2200,7 +2200,8 @@ copy_blkmode_from_reg (tgtblk, srcreg, type)
         (the first time through).  */
       if (xbitpos % BITS_PER_WORD == 0
          || xbitpos == big_endian_correction)
-       src = operand_subword_force (srcreg, xbitpos / BITS_PER_WORD, BLKmode);
+       src = operand_subword_force (srcreg, xbitpos / BITS_PER_WORD,
+                                    GET_MODE (srcreg));
 
       /* We need a new destination operand each time bitpos is on
         a word boundary.  */
index 7b36b1b..a3fe70d 100644 (file)
@@ -960,26 +960,6 @@ shorten_branches (first)
   int uid;
   rtx align_tab[MAX_CODE_ALIGN];
 
-  /* In order to make sure that all instructions have valid length info,
-     we must split them before we compute the address/length info.  */
-
-  for (insn = NEXT_INSN (first); insn; insn = NEXT_INSN (insn))
-    if (INSN_P (insn))
-      {
-       rtx old = insn;
-       /* Don't split the insn if it has been deleted.  */
-       if (! INSN_DELETED_P (old))
-         insn = try_split (PATTERN (old), old, 1);
-       /* When not optimizing, the old insn will be still left around
-          with only the 'deleted' bit set.  Transform it into a note
-          to avoid confusion of subsequent processing.  */
-       if (INSN_DELETED_P (old))
-         {
-           PUT_CODE (old, NOTE);
-           NOTE_LINE_NUMBER (old) = NOTE_INSN_DELETED;
-           NOTE_SOURCE_FILE (old) = 0;
-         }
-      }
 #endif
 
   /* We must do some computations even when not actually shortening, in
index ba08641..0e197cc 100644 (file)
@@ -3685,18 +3685,16 @@ rest_of_compilation (decl)
     }
 #endif
 
-#ifndef STACK_REGS
-  /* ??? Do this before shorten branches so that we aren't creating
-     insns too late and fail sanity checks in final. */
-  convert_to_eh_region_ranges ();
-#endif
-
-  /* Shorten branches.
-
-     Note this must run before reg-stack because of death note (ab)use
-     in the ia32 backend.  */
   timevar_push (TV_SHORTEN_BRANCH);
-  shorten_branches (get_insns ());
+  if (0
+#ifdef HAVE_ATTR_length
+      || 1
+#endif
+#ifdef STACK_REGS
+      || 1
+#endif
+      )
+    split_all_insns (0);
   timevar_pop (TV_SHORTEN_BRANCH);
 
 #ifdef STACK_REGS
@@ -3709,9 +3707,14 @@ rest_of_compilation (decl)
   timevar_pop (TV_REG_STACK);
 
   ggc_collect ();
+#endif
 
   convert_to_eh_region_ranges ();
-#endif
+
+  /* Shorten branches.  */
+  timevar_push (TV_SHORTEN_BRANCH);
+  shorten_branches (get_insns ());
+  timevar_pop (TV_SHORTEN_BRANCH);
 
   current_function_nothrow = nothrow_function_p ();
   if (current_function_nothrow)