===================================================================
@@ -617,7 +617,13 @@
#define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode((OP), (X), (Y))
-#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label ()
+/* Compute the alignment needed for label X in various situations.
+ If the user has specified an alignment then honour that, otherwise
+ use rx_align_for_label. */
+#define JUMP_ALIGN(x) (align_jumps ? align_jumps : rx_align_for_label (x, 0))
+#define LABEL_ALIGN(x) (align_labels ? align_labels : rx_align_for_label (x, 3))
+#define LOOP_ALIGN(x) (align_loops ? align_loops : rx_align_for_label (x, 2))
+#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label (x, 0)
#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
do \
===================================================================
@@ -30,7 +30,7 @@
extern int rx_initial_elimination_offset (int, int);
#ifdef RTX_CODE
-extern int rx_align_for_label (void);
+extern int rx_align_for_label (rtx, int);
extern void rx_emit_stack_popm (rtx *, bool);
extern void rx_emit_stack_pushm (rtx *);
extern void rx_expand_epilogue (bool);
===================================================================
@@ -2752,8 +2752,15 @@
int
-rx_align_for_label (void)
+rx_align_for_label (rtx lab, int uses_threshold)
{
+ /* This is a simple heuristic to guess when an alignment would not be useful
+ because the delay due to the inserted NOPs would be greater than the delay
+ due to the misaligned branch. If uses_threshold is zero then the alignment
+ is always useful. */
+ if (LABEL_NUSES (lab) < uses_threshold)
+ return 0;
+
return optimize_size ? 1 : 3;
}