aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-06-07 17:10:58 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-06-07 15:10:58 +0000
commitd7e5d7feae8162262948978355a6a1c8aebb9b9d (patch)
tree5711fd02bcbda756226623b9aba91fcf6b11ba33 /gcc
parentf9b23f0c9c6cf618fda3a6f3a3ba819a24c2f571 (diff)
downloadgcc-d7e5d7feae8162262948978355a6a1c8aebb9b9d.zip
gcc-d7e5d7feae8162262948978355a6a1c8aebb9b9d.tar.gz
gcc-d7e5d7feae8162262948978355a6a1c8aebb9b9d.tar.bz2
toplev.c (rest_of_compilation): Revert previous patch.
* toplev.c (rest_of_compilation): Revert previous patch. * final.c (shorten_branches): Likewise. From-SVN: r42961
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/final.c20
-rw-r--r--gcc/toplev.c27
3 files changed, 37 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 856333d..00352ed 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Jun 7 17:09:50 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * toplev.c (rest_of_compilation): Revert previous patch.
+ * final.c (shorten_branches): Likewise.
+
2001-06-07 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* pself.c, pself1.c, pself2.c, pself3.c, pself4.c, pself5.c:
diff --git a/gcc/final.c b/gcc/final.c
index a3fe70d..7b36b1b 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -960,6 +960,26 @@ 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
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 0e197cc..ba08641 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -3685,16 +3685,18 @@ rest_of_compilation (decl)
}
#endif
- timevar_push (TV_SHORTEN_BRANCH);
- if (0
-#ifdef HAVE_ATTR_length
- || 1
-#endif
-#ifdef STACK_REGS
- || 1
+#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
- )
- split_all_insns (0);
+
+ /* 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 ());
timevar_pop (TV_SHORTEN_BRANCH);
#ifdef STACK_REGS
@@ -3707,14 +3709,9 @@ rest_of_compilation (decl)
timevar_pop (TV_REG_STACK);
ggc_collect ();
-#endif
convert_to_eh_region_ranges ();
-
- /* Shorten branches. */
- timevar_push (TV_SHORTEN_BRANCH);
- shorten_branches (get_insns ());
- timevar_pop (TV_SHORTEN_BRANCH);
+#endif
current_function_nothrow = nothrow_function_p ();
if (current_function_nothrow)