summaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-03-03 20:45:49 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-03-03 20:45:49 +0000
commitf554d41301d404453695ec17b6d3e005d9c638c3 (patch)
treef6188cbd7b5136452a061cafd98479dc96d0c06f /gcc/final.c
parent3477da8002ed93f5c277c12f9b71c618415fc083 (diff)
downloadgcc-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.c18
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;