aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-02-23 08:47:27 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1996-02-23 08:47:27 -0500
commite6e68157d3ff41c37a736656e4f093a41d7c3e28 (patch)
tree867d9f30243a652b7139b3af01cc4b2b4599146c /gcc/sched.c
parentb453cb0b75e558aad1baa4f299b09b5af0616573 (diff)
downloadgcc-e6e68157d3ff41c37a736656e4f093a41d7c3e28.zip
gcc-e6e68157d3ff41c37a736656e4f093a41d7c3e28.tar.gz
gcc-e6e68157d3ff41c37a736656e4f093a41d7c3e28.tar.bz2
(sched_analyze): Record NOTE_INSN_SETJMP if no CALL_INSN as prev;
preserve CONST_CALL_P bit. (reemit_notes): Restore CONST_CALL_P. From-SVN: r11342
Diffstat (limited to 'gcc/sched.c')
-rw-r--r--gcc/sched.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/sched.c b/gcc/sched.c
index f279512..d690a82 100644
--- a/gcc/sched.c
+++ b/gcc/sched.c
@@ -2278,9 +2278,14 @@ sched_analyze (head, tail)
}
else if (GET_CODE (insn) == NOTE
&& (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
- || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END))
- loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
- GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
+ || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END
+ || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP
+ && GET_CODE (PREV_INSN (insn)) != CALL_INSN)))
+ {
+ loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
+ GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
+ CONST_CALL_P (loop_notes) = CONST_CALL_P (insn);
+ }
if (insn == tail)
return n_insns;
@@ -3147,7 +3152,8 @@ reemit_notes (insn, last)
&& GET_CODE (XEXP (note, 0)) == CONST_INT)
{
if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
- emit_note_after (INTVAL (XEXP (note, 0)), insn);
+ CONST_CALL_P (emit_note_after (INTVAL (XEXP (note, 0)), insn))
+ = CONST_CALL_P (note);
else
last = emit_note_before (INTVAL (XEXP (note, 0)), last);
remove_note (insn, note);