diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-03-03 20:45:49 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-03-03 13:45:49 -0700 |
commit | de7987a645e310ed5701e693ccbbc8d25179686b (patch) | |
tree | f6188cbd7b5136452a061cafd98479dc96d0c06f /gcc/final.c | |
parent | 27d8f9ea6f7eafd14b8ec9a877b8cc2734ab2f06 (diff) | |
download | gcc-de7987a645e310ed5701e693ccbbc8d25179686b.zip gcc-de7987a645e310ed5701e693ccbbc8d25179686b.tar.gz gcc-de7987a645e310ed5701e693ccbbc8d25179686b.tar.bz2 |
final.c (max_labelno): New static variable.
* final.c (max_labelno): New static variable.
(final_scan_insn): Check max_labelno before outputting an
alignment for a label.
(shorten_branches): Remove unused variable length_align.
Fix some minor problems with new shortening code.
From-SVN: r18390
Diffstat (limited to 'gcc/final.c')
-rw-r--r-- | gcc/final.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/gcc/final.c b/gcc/final.c index c9bc233..a3ad85a 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -795,7 +795,7 @@ short *label_align; /* sh.c needs this to calculate constant tables. */ #define INSN_SHUID(INSN) (uid_shuid[INSN_UID (INSN)]) -static int min_labelno; +static int min_labelno, max_labelno; #define LABEL_TO_ALIGNMENT(LABEL) \ (label_align[CODE_LABEL_NUMBER (LABEL) - min_labelno]) @@ -932,7 +932,6 @@ shorten_branches (first) rtx insn; int max_uid; int i; - int max_labelno; int max_log; #ifdef HAVE_ATTR_length #define MAX_CODE_ALIGN 16 @@ -1079,7 +1078,6 @@ shorten_branches (first) { int uid = INSN_UID (seq); int log; - int length_align; log = (GET_CODE (seq) == CODE_LABEL ? LABEL_TO_ALIGNMENT (seq) : 0); uid_align[uid] = align_tab[0]; insn_addresses[uid] = --insn_current_address; @@ -2011,12 +2009,16 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) break; case CODE_LABEL: - { - int align = LABEL_TO_ALIGNMENT (insn); + if (CODE_LABEL_NUMBER (insn) <= max_labelno) + { + int align = LABEL_TO_ALIGNMENT (insn); - if (align && NEXT_INSN (insn)) - ASM_OUTPUT_ALIGN (file, align); - } + /* The target port might emit labels in the output function for + some insn, e.g. sh.c output_branchy_insn. */ + if (align && NEXT_INSN (insn) + && CODE_LABEL_NUMBER (insn) <= max_labelno) + ASM_OUTPUT_ALIGN (file, align); + } CC_STATUS_INIT; if (prescan > 0) break; |