summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/jump.c17
-rw-r--r--gcc/regclass.c7
3 files changed, 12 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c47326d5608..e176a7e3488 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -21,6 +21,10 @@ Wed Oct 7 02:27:52 1998 Jeffrey A Law (law@cygnus.com)
Wed Oct 7 01:08:43 1998 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+ * jump.c (duplicate_loop_exit_test): Strip REG_WAS_0 notes off all
+ insns we're going to copy.
+ * regclass.c (reg_scan_mark_refs): Don't test X for NULL_RTX.
+
* loop.c (count_one_set): Add prototype.
* caller-save.c (restore_referenced_regs): Lose mode argument.
diff --git a/gcc/jump.c b/gcc/jump.c
index 77c3556a8b7..967981aef44 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -480,12 +480,9 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
remove_death (dreg, trial);
break;
}
-#ifdef PRESERVE_DEATH_INFO_REGNO_P
- /* Deleting insn could lose a death-note for SREG
- so don't do it if final needs accurate
- death-notes. */
- if (PRESERVE_DEATH_INFO_REGNO_P (sreg)
- && (trial = find_regno_note (insn, REG_DEAD, sreg)))
+
+ /* Deleting insn could lose a death-note for SREG. */
+ if ((trial = find_regno_note (insn, REG_DEAD, sreg)))
{
/* Change this into a USE so that we won't emit
code for it, but still can keep the note. */
@@ -497,7 +494,6 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
XEXP (trial, 1) = NULL_RTX;
}
else
-#endif
delete_insn (insn);
}
}
@@ -2434,8 +2430,7 @@ duplicate_loop_exit_test (loop_start)
has a REG_RETVAL or REG_LIBCALL note (hard to adjust)
is a NOTE_INSN_LOOP_BEG because this means we have a nested loop
is a NOTE_INSN_BLOCK_{BEG,END} because duplicating these notes
- are not valid
-
+ is not valid.
We also do not do this if we find an insn with ASM_OPERANDS. While
this restriction should not be necessary, copying an insn with
@@ -2480,6 +2475,10 @@ duplicate_loop_exit_test (loop_start)
break;
case JUMP_INSN:
case INSN:
+ /* The code below would grossly mishandle REG_WAS_0 notes,
+ so get rid of them here. */
+ while ((p = find_reg_note (insn, REG_WAS_0, NULL_RTX)) != 0)
+ remove_note (insn, p);
if (++num_insns > 20
|| find_reg_note (insn, REG_RETVAL, NULL_RTX)
|| find_reg_note (insn, REG_LIBCALL, NULL_RTX)
diff --git a/gcc/regclass.c b/gcc/regclass.c
index 793c9ac050e..cd882df5cd1 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -1995,13 +1995,6 @@ reg_scan_mark_refs (x, insn, note_flag, min_regno)
register rtx dest;
register rtx note;
- /* This can happen when scanning insns referenced by certain notes.
-
- It is unclear if we should be scanning such insns; until someone can
- say for sure this seems like the safest fix. */
- if (x == NULL_RTX)
- return;
-
code = GET_CODE (x);
switch (code)
{
OpenPOWER on IntegriCloud