diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-03-03 20:45:49 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-03-03 20:45:49 +0000 |
commit | f554d41301d404453695ec17b6d3e005d9c638c3 (patch) | |
tree | f6188cbd7b5136452a061cafd98479dc96d0c06f /gcc/final.c | |
parent | 3477da8002ed93f5c277c12f9b71c618415fc083 (diff) | |
download | gcc-f554d41301d404453695ec17b6d3e005d9c638c3.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@18390 138bc75d-0d04-0410-961f-82ee72b054a4
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 c9bc23397e8..a3ad85af912 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; |