From e2faec75889fb1f824b6013a73e90a6783dd1dff Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Wed, 4 Mar 1998 07:54:28 +0000 Subject: [PATCH] final.c (shorten_branches): Tag the loop alignment onto the first label after NOTE_INSN_LOOP_BEG even if... * final.c (shorten_branches): Tag the loop alignment onto the first label after NOTE_INSN_LOOP_BEG even if there is an intervening insn. From-SVN: r18396 --- gcc/ChangeLog | 6 ++++++ gcc/final.c | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 454f439d337..52f74dbd6cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Wed Mar 4 15:51:19 1998 J"orn Rennecke + + * final.c (shorten_branches): Tag the loop alignment onto the + first label after NOTE_INSN_LOOP_BEG even if there is an + intervening insn. + Tue Mar 3 21:48:35 1998 J"orn Rennecke * final.c (insn_current_reference_address): diff --git a/gcc/final.c b/gcc/final.c index 35628f6419d..9fb40ac871e 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -982,13 +982,23 @@ shorten_branches (first) /* Initialize label_align and set up uid_shuid to be strictly monotonically rising with insn order. */ + /* We use max_log here to keep track of the maximum alignment we want to + impose on the next CODE_LABEL (or the current one if we are processing + the CODE_LABEL itself). */ + for (max_log = 0, insn = get_insns (), i = 1; insn; insn = NEXT_INSN (insn)) { int log; INSN_SHUID (insn) = i++; if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') - max_log = 0; + { + /* reorg might make the first insn of a loop being run once only, + and delete the label in front of it. Then we want to apply + the loop alignment to the new label created by reorg, which + is separated by the former loop start insn from the + NOTE_INSN_LOOP_BEG. */ + } else if (GET_CODE (insn) == CODE_LABEL) { rtx next; @@ -1028,13 +1038,14 @@ shorten_branches (first) break; } } + /* Again, we allow NOTE_INSN_LOOP_BEG - INSN - CODE_LABEL + sequences in order to handle reorg output efficiently. */ else if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) { rtx label; - for (label = insn; label && GET_RTX_CLASS (GET_CODE (label)) != 'i'; - label = NEXT_INSN (label)) + for (label = insn; label; label = NEXT_INSN (label)) if (GET_CODE (label) == CODE_LABEL) { log = LOOP_ALIGN (insn); -- 2.30.2