summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/final.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/final.c')
-rw-r--r--contrib/gcc/final.c147
1 files changed, 72 insertions, 75 deletions
diff --git a/contrib/gcc/final.c b/contrib/gcc/final.c
index ef50ed9..90cad92 100644
--- a/contrib/gcc/final.c
+++ b/contrib/gcc/final.c
@@ -343,15 +343,13 @@ int insn_current_align;
for each insn we'll call the alignment chain of this insn in the following
comments. */
-struct label_alignment
-{
- short alignment;
- short max_skip;
-};
-
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
static rtx *uid_align;
static int *uid_shuid;
-static struct label_alignment *label_align;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
/* Indicate that branch shortening hasn't yet been done. */
@@ -555,20 +553,16 @@ final_addr_vec_align (rtx addr_vec)
#define INSN_SHUID(INSN) (uid_shuid[INSN_UID (INSN)])
-static int min_labelno, max_labelno;
-
-#define LABEL_TO_ALIGNMENT(LABEL) \
- (label_align[CODE_LABEL_NUMBER (LABEL) - min_labelno].alignment)
-
-#define LABEL_TO_MAX_SKIP(LABEL) \
- (label_align[CODE_LABEL_NUMBER (LABEL) - min_labelno].max_skip)
-
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
/* For the benefit of port specific code do this also as a function. */
int
label_to_alignment (rtx label)
{
- return LABEL_TO_ALIGNMENT (label);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ return LABEL_ALIGN_LOG (label);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
}
#ifdef HAVE_ATTR_length
@@ -617,7 +611,9 @@ align_fuzz (rtx start, rtx end, int known_align_log, unsigned int growth)
align_addr = INSN_ADDRESSES (uid) - insn_lengths[uid];
if (uid_shuid[uid] > end_shuid)
break;
- known_align_log = LABEL_TO_ALIGNMENT (align_label);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ known_align_log = LABEL_ALIGN_LOG (align_label);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
new_align = 1 << known_align_log;
if (new_align < known_align)
continue;
@@ -682,18 +678,12 @@ insn_current_reference_address (rtx branch)
static unsigned int
compute_alignments (void)
{
- int log, max_skip, max_log;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
basic_block bb;
- if (label_align)
- {
- free (label_align);
- label_align = 0;
- }
-
- max_labelno = max_label_num ();
- min_labelno = get_first_label_num ();
- label_align = XCNEWVEC (struct label_alignment, max_labelno - min_labelno + 1);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
/* If not optimizing or optimizing for size, don't assign any alignments. */
if (! optimize || optimize_size)
@@ -705,10 +695,19 @@ compute_alignments (void)
int fallthru_frequency = 0, branch_frequency = 0, has_fallthru = 0;
edge e;
edge_iterator ei;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ int log, max_skip, max_log;
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
if (!LABEL_P (label)
|| probably_never_executed_bb_p (bb))
continue;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ /* If user has specified an alignment, honour it. */
+ if (LABEL_ALIGN_LOG (label) > 0)
+ continue;
+
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
max_log = LABEL_ALIGN (label);
max_skip = LABEL_ALIGN_MAX_SKIP;
@@ -757,8 +756,9 @@ compute_alignments (void)
max_skip = LOOP_ALIGN_MAX_SKIP;
}
}
- LABEL_TO_ALIGNMENT (label) = max_log;
- LABEL_TO_MAX_SKIP (label) = max_skip;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ SET_LABEL_ALIGN (label, max_log, max_skip);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
}
return 0;
}
@@ -811,7 +811,9 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
#endif
- /* Compute maximum UID and allocate label_align / uid_shuid. */
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ /* Compute maximum UID and allocate uid_shuid. */
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
max_uid = get_max_uid ();
/* Free uid_shuid before reallocating it. */
@@ -819,29 +821,8 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
uid_shuid = XNEWVEC (int, max_uid);
- if (max_labelno != max_label_num ())
- {
- int old = max_labelno;
- int n_labels;
- int n_old_labels;
-
- max_labelno = max_label_num ();
-
- n_labels = max_labelno - min_labelno + 1;
- n_old_labels = old - min_labelno + 1;
-
- label_align = xrealloc (label_align,
- n_labels * sizeof (struct label_alignment));
-
- /* Range of labels grows monotonically in the function. Failing here
- means that the initialization of array got lost. */
- gcc_assert (n_old_labels <= n_labels);
-
- memset (label_align + n_old_labels, 0,
- (n_labels - n_old_labels) * sizeof (struct label_alignment));
- }
-
- /* Initialize label_align and set up uid_shuid to be strictly
+ /* APPLE LOCAL for-fsf-4_4 3274130 5295549 */ \
+ /* Initialize 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
@@ -863,11 +844,15 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
rtx next;
/* Merge in alignments computed by compute_alignments. */
- log = LABEL_TO_ALIGNMENT (insn);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ log = LABEL_ALIGN_LOG (insn);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
if (max_log < log)
{
max_log = log;
- max_skip = LABEL_TO_MAX_SKIP (insn);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ max_skip = LABEL_MAX_SKIP (insn);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
}
log = LABEL_ALIGN (insn);
@@ -895,8 +880,9 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
}
}
}
- LABEL_TO_ALIGNMENT (insn) = max_log;
- LABEL_TO_MAX_SKIP (insn) = max_skip;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ SET_LABEL_ALIGN (insn, max_log, max_skip);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
max_log = 0;
max_skip = 0;
}
@@ -943,7 +929,9 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
{
int uid = INSN_UID (seq);
int log;
- log = (LABEL_P (seq) ? LABEL_TO_ALIGNMENT (seq) : 0);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ log = (LABEL_P (seq) ? LABEL_ALIGN_LOG (seq) : 0);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
uid_align[uid] = align_tab[0];
if (log)
{
@@ -991,8 +979,10 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
max = shuid;
max_lab = lab;
}
- if (min_align > LABEL_TO_ALIGNMENT (lab))
- min_align = LABEL_TO_ALIGNMENT (lab);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ if (min_align > (int) LABEL_ALIGN_LOG (lab))
+ min_align = LABEL_ALIGN_LOG (lab);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
}
XEXP (pat, 2) = gen_rtx_LABEL_REF (Pmode, min_lab);
XEXP (pat, 3) = gen_rtx_LABEL_REF (Pmode, max_lab);
@@ -1021,7 +1011,9 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
if (LABEL_P (insn))
{
- int log = LABEL_TO_ALIGNMENT (insn);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ int log = LABEL_ALIGN_LOG (insn);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
if (log)
{
int align = 1 << log;
@@ -1127,7 +1119,9 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
if (LABEL_P (insn))
{
- int log = LABEL_TO_ALIGNMENT (insn);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ int log = LABEL_ALIGN_LOG (insn);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
if (log > insn_current_align)
{
int align = 1 << log;
@@ -1176,7 +1170,9 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
prev = PREV_INSN (prev))
if (varying_length[INSN_UID (prev)] & 2)
{
- rel_align = LABEL_TO_ALIGNMENT (prev);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ rel_align = LABEL_ALIGN_LOG (prev);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
break;
}
@@ -1848,26 +1844,27 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
case CODE_LABEL:
/* The target port might emit labels in the output function for
some insn, e.g. sh.c output_branchy_insn. */
- if (CODE_LABEL_NUMBER (insn) <= max_labelno)
- {
- int align = LABEL_TO_ALIGNMENT (insn);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+ {
+ int align = LABEL_ALIGN_LOG (insn);
#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
- int max_skip = LABEL_TO_MAX_SKIP (insn);
+ int max_skip = LABEL_MAX_SKIP (insn);
#endif
-
- if (align && NEXT_INSN (insn))
- {
+
+ if (align && NEXT_INSN (insn))
+ {
#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
- ASM_OUTPUT_MAX_SKIP_ALIGN (file, align, max_skip);
+ ASM_OUTPUT_MAX_SKIP_ALIGN (file, align, max_skip);
#else
#ifdef ASM_OUTPUT_ALIGN_WITH_NOP
- ASM_OUTPUT_ALIGN_WITH_NOP (file, align);
+ ASM_OUTPUT_ALIGN_WITH_NOP (file, align);
#else
- ASM_OUTPUT_ALIGN (file, align);
+ ASM_OUTPUT_ALIGN (file, align);
#endif
#endif
- }
- }
+ }
+ }
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
#ifdef HAVE_cc0
CC_STATUS_INIT;
/* If this label is reached from only one place, set the condition
OpenPOWER on IntegriCloud