rx.h (JUMP_ALIGN, [...]): Define.
authorDJ Delorie <dj@redhat.com>
Tue, 10 May 2011 11:01:49 +0000 (07:01 -0400)
committerNick Clifton <nickc@gcc.gnu.org>
Tue, 10 May 2011 11:01:49 +0000 (11:01 +0000)
* config/rx/rx.h (JUMP_ALIGN, LABEL_ALIGN, LOOP_ALIGN): Define.
(LABEL_ALIGN_AFTER_BARRIER): Pass label to rx_align_for_label
* config/rx/rx.c (rx_align_for_label): Add label and
uses_threshold parameters.  Do not align when the label is not
used enough.
* config/rx/rx-protos.h (rx_align_for_label): Update prototype.

From-SVN: r173615

gcc/ChangeLog
gcc/config/rx/rx-protos.h
gcc/config/rx/rx.c
gcc/config/rx/rx.h

index 7e5d7b957d3421223ce406ad58aca6413d01ef55..43784a6d08743587c1490ebca1d9cc8cc310b677 100644 (file)
@@ -1,3 +1,12 @@
+2011-05-10  DJ Delorie  <dj@redhat.com>
+
+       * config/rx/rx.h (JUMP_ALIGN, LABEL_ALIGN, LOOP_ALIGN): Define.
+       (LABEL_ALIGN_AFTER_BARRIER): Pass label to rx_align_for_label
+       * config/rx/rx.c (rx_align_for_label): Add label and
+       uses_threshold parameters.  Do not align when the label is not
+       used enough.
+       * config/rx/rx-protos.h (rx_align_for_label): Update prototype.
+
 2011-05-10  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-forwprop.c (combine_conversions): Pattern-match
index c43b3981817dacd971e6b876178d36a157b65de5..72cb199ce3052d776112cff474b6703cae00020f 100644 (file)
 #ifndef GCC_RX_PROTOS_H
 #define GCC_RX_PROTOS_H
 
-extern int             rx_align_for_label (void);
 extern void            rx_expand_prologue (void);
 extern int             rx_initial_elimination_offset (int, int);
 
 #ifdef RTX_CODE
 extern int             rx_adjust_insn_length (rtx, int);
+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);
@@ -35,7 +35,7 @@ extern bool           rx_legitimate_constant_p (enum machine_mode, rtx);
 extern bool            rx_is_restricted_memory_address (rtx,
                                                         enum machine_mode);
 extern bool            rx_match_ccmode (rtx, enum machine_mode);
-extern void            rx_notice_update_cc (rtx body, rtx insn);
+extern void            rx_notice_update_cc (rtx, rtx);
 extern void            rx_split_cbranch (enum machine_mode, enum rtx_code,
                                          rtx, rtx, rtx);
 extern enum machine_mode       rx_select_cc_mode (enum rtx_code, rtx, rtx);
index ccf1a5d11b96c359e85bd62930389a7884b9b1fa..30886dc3bc2dc04ed527376b3d88c5c4932ea1f7 100644 (file)
@@ -2776,8 +2776,15 @@ rx_match_ccmode (rtx insn, enum machine_mode cc_mode)
 }
 \f
 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;
 }
 
index 742d83f341481808c601d84c04935fe9b98ff6b9..1780867dcbfd7a28ce5a71399144ca64d7bb3700 100644 (file)
@@ -397,7 +397,13 @@ typedef unsigned int CUMULATIVE_ARGS;
 #undef  USER_LABEL_PREFIX
 #define USER_LABEL_PREFIX      "_"
 
-#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                                           \