tm.texi.in (TARGET_ASM_JUMP_ALIGN_MAX_SKIP): New.

* doc/tm.texi.in (TARGET_ASM_JUMP_ALIGN_MAX_SKIP): New.
(TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Change to hook.
(TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Likewise.
(TARGET_ASM_LABEL_ALIGN_MAX_SKIP): Likewise.
* doc/tm.texi: Regenerate.
* targhooks.h (default_label_align_after_barrier_max_skip,
default_loop_align_max_skip, default_label_align_max_skip,
default_jump_align_max_skip): Declare.
* target.def (label_align_after_barrier_max_skip): New.
(loop_align_max_skip): New.
(label_align_max_skip): New.
(jump_align_max_skip): New.
* system.h (poison): Add those macros to the list.
* final.c (LABEL_ALIGN_MAX_SKIP): Remove.
(LOOP_ALIGN_MAX_SKIP): Remove.
(LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Remove.
(JUMP_ALIGN_MAX_SKIP): Remove.
(default_label_align_after_barrier_max_skip): New.
(default_loop_align_max_skip): New.
(default_label_align_max_skip): New.
(default_jump_align_max_skip): New.
(compute_alignments): Use the new hooks.
(shorten_branches): Likewise.

From-SVN: r165707
This commit is contained in:
DJ Delorie 2010-10-19 17:07:50 -04:00 committed by DJ Delorie
parent 351877cf31
commit ad0c4c363d
7 changed files with 134 additions and 44 deletions

View file

@ -1,3 +1,29 @@
2010-10-19 DJ Delorie <dj@redhat.com>
* doc/tm.texi.in (TARGET_ASM_JUMP_ALIGN_MAX_SKIP): New.
(TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Change to hook.
(TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Likewise.
(TARGET_ASM_LABEL_ALIGN_MAX_SKIP): Likewise.
* doc/tm.texi: Regenerate.
* targhooks.h (default_label_align_after_barrier_max_skip,
default_loop_align_max_skip, default_label_align_max_skip,
default_jump_align_max_skip): Declare.
* target.def (label_align_after_barrier_max_skip): New.
(loop_align_max_skip): New.
(label_align_max_skip): New.
(jump_align_max_skip): New.
* system.h (poison): Add those macros to the list.
* final.c (LABEL_ALIGN_MAX_SKIP): Remove.
(LOOP_ALIGN_MAX_SKIP): Remove.
(LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Remove.
(JUMP_ALIGN_MAX_SKIP): Remove.
(default_label_align_after_barrier_max_skip): New.
(default_loop_align_max_skip): New.
(default_label_align_max_skip): New.
(default_jump_align_max_skip): New.
(compute_alignments): Use the new hooks.
(shorten_branches): Likewise.
2010-10-19 Richard Henderson <rth@redhat.com>
* config/i386/i386.c (bdesc_multi_arg): Use fma4i_fmadd_<mode>.

View file

@ -8978,6 +8978,12 @@ to set the variable @var{align_jumps} in the target's
selection in @var{align_jumps} in a @code{JUMP_ALIGN} implementation.
@end defmac
@deftypefn {Target Hook} int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx @var{label})
The maximum number of bytes to skip before @var{label} when applying
@code{JUMP_ALIGN}. This works only if
@code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end deftypefn
@defmac LABEL_ALIGN_AFTER_BARRIER (@var{label})
The alignment (log base 2) to put in front of @var{label}, which follows
a @code{BARRIER}.
@ -8987,11 +8993,11 @@ to be done at such a time. Most machine descriptions do not currently
define the macro.
@end defmac
@defmac LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
The maximum number of bytes to skip when applying
@deftypefn {Target Hook} int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx @var{label})
The maximum number of bytes to skip before @var{label} when applying
@code{LABEL_ALIGN_AFTER_BARRIER}. This works only if
@code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end defmac
@end deftypefn
@defmac LOOP_ALIGN (@var{label})
The alignment (log base 2) to put in front of @var{label}, which follows
@ -9007,10 +9013,11 @@ to set the variable @code{align_loops} in the target's
selection in @code{align_loops} in a @code{LOOP_ALIGN} implementation.
@end defmac
@defmac LOOP_ALIGN_MAX_SKIP
The maximum number of bytes to skip when applying @code{LOOP_ALIGN}.
This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end defmac
@deftypefn {Target Hook} int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx @var{label})
The maximum number of bytes to skip when applying @code{LOOP_ALIGN} to
@var{label}. This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN} is
defined.
@end deftypefn
@defmac LABEL_ALIGN (@var{label})
The alignment (log base 2) to put in front of @var{label}.
@ -9023,10 +9030,11 @@ to set the variable @code{align_labels} in the target's
selection in @code{align_labels} in a @code{LABEL_ALIGN} implementation.
@end defmac
@defmac LABEL_ALIGN_MAX_SKIP
The maximum number of bytes to skip when applying @code{LABEL_ALIGN}.
This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end defmac
@deftypefn {Target Hook} int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx @var{label})
The maximum number of bytes to skip when applying @code{LABEL_ALIGN}
to @var{label}. This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN}
is defined.
@end deftypefn
@defmac ASM_OUTPUT_SKIP (@var{stream}, @var{nbytes})
A C statement to output to the stdio stream @var{stream} an assembler

View file

@ -8958,6 +8958,12 @@ to set the variable @var{align_jumps} in the target's
selection in @var{align_jumps} in a @code{JUMP_ALIGN} implementation.
@end defmac
@hook TARGET_ASM_JUMP_ALIGN_MAX_SKIP
The maximum number of bytes to skip before @var{label} when applying
@code{JUMP_ALIGN}. This works only if
@code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end deftypefn
@defmac LABEL_ALIGN_AFTER_BARRIER (@var{label})
The alignment (log base 2) to put in front of @var{label}, which follows
a @code{BARRIER}.
@ -8967,11 +8973,11 @@ to be done at such a time. Most machine descriptions do not currently
define the macro.
@end defmac
@defmac LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
The maximum number of bytes to skip when applying
@hook TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
The maximum number of bytes to skip before @var{label} when applying
@code{LABEL_ALIGN_AFTER_BARRIER}. This works only if
@code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end defmac
@end deftypefn
@defmac LOOP_ALIGN (@var{label})
The alignment (log base 2) to put in front of @var{label}, which follows
@ -8987,10 +8993,11 @@ to set the variable @code{align_loops} in the target's
selection in @code{align_loops} in a @code{LOOP_ALIGN} implementation.
@end defmac
@defmac LOOP_ALIGN_MAX_SKIP
The maximum number of bytes to skip when applying @code{LOOP_ALIGN}.
This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end defmac
@hook TARGET_ASM_LOOP_ALIGN_MAX_SKIP
The maximum number of bytes to skip when applying @code{LOOP_ALIGN} to
@var{label}. This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN} is
defined.
@end deftypefn
@defmac LABEL_ALIGN (@var{label})
The alignment (log base 2) to put in front of @var{label}.
@ -9003,10 +9010,11 @@ to set the variable @code{align_labels} in the target's
selection in @code{align_labels} in a @code{LABEL_ALIGN} implementation.
@end defmac
@defmac LABEL_ALIGN_MAX_SKIP
The maximum number of bytes to skip when applying @code{LABEL_ALIGN}.
This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN} is defined.
@end defmac
@hook TARGET_ASM_LABEL_ALIGN_MAX_SKIP
The maximum number of bytes to skip when applying @code{LABEL_ALIGN}
to @var{label}. This works only if @code{ASM_OUTPUT_MAX_SKIP_ALIGN}
is defined.
@end deftypefn
@defmac ASM_OUTPUT_SKIP (@var{stream}, @var{nbytes})
A C statement to output to the stdio stream @var{stream} an assembler

View file

@ -68,6 +68,7 @@ along with GCC; see the file COPYING3. If not see
#include "intl.h"
#include "basic-block.h"
#include "target.h"
#include "targhooks.h"
#include "debug.h"
#include "expr.h"
#include "cfglayout.h"
@ -497,33 +498,41 @@ get_attr_min_length (rtx insn)
#define LABEL_ALIGN(LABEL) align_labels_log
#endif
#ifndef LABEL_ALIGN_MAX_SKIP
#define LABEL_ALIGN_MAX_SKIP align_labels_max_skip
#endif
#ifndef LOOP_ALIGN
#define LOOP_ALIGN(LABEL) align_loops_log
#endif
#ifndef LOOP_ALIGN_MAX_SKIP
#define LOOP_ALIGN_MAX_SKIP align_loops_max_skip
#endif
#ifndef LABEL_ALIGN_AFTER_BARRIER
#define LABEL_ALIGN_AFTER_BARRIER(LABEL) 0
#endif
#ifndef LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
#define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP 0
#endif
#ifndef JUMP_ALIGN
#define JUMP_ALIGN(LABEL) align_jumps_log
#endif
#ifndef JUMP_ALIGN_MAX_SKIP
#define JUMP_ALIGN_MAX_SKIP align_jumps_max_skip
#endif
int
default_label_align_after_barrier_max_skip (rtx insn ATTRIBUTE_UNUSED)
{
return 0;
}
int
default_loop_align_max_skip (rtx insn ATTRIBUTE_UNUSED)
{
return align_loops_max_skip;
}
int
default_label_align_max_skip (rtx insn ATTRIBUTE_UNUSED)
{
return align_labels_max_skip;
}
int
default_jump_align_max_skip (rtx insn ATTRIBUTE_UNUSED)
{
return align_jumps_max_skip;
}
#ifndef ADDR_VEC_ALIGN
static int
@ -731,7 +740,7 @@ compute_alignments (void)
continue;
}
max_log = LABEL_ALIGN (label);
max_skip = LABEL_ALIGN_MAX_SKIP;
max_skip = targetm.asm_out.label_align_max_skip (label);
FOR_EACH_EDGE (e, ei, bb->preds)
{
@ -775,7 +784,7 @@ compute_alignments (void)
if (max_log < log)
{
max_log = log;
max_skip = JUMP_ALIGN_MAX_SKIP;
max_skip = targetm.asm_out.jump_align_max_skip (label);
}
}
/* In case block is frequent and reached mostly by non-fallthru edge,
@ -792,7 +801,7 @@ compute_alignments (void)
if (max_log < log)
{
max_log = log;
max_skip = LOOP_ALIGN_MAX_SKIP;
max_skip = targetm.asm_out.loop_align_max_skip (label);
}
}
LABEL_TO_ALIGNMENT (label) = max_log;
@ -925,7 +934,7 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
if (max_log < log)
{
max_log = log;
max_skip = LABEL_ALIGN_MAX_SKIP;
max_skip = targetm.asm_out.label_align_max_skip (insn);
}
}
/* ADDR_VECs only take room if read-only data goes into the text
@ -938,7 +947,7 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
if (max_log < log)
{
max_log = log;
max_skip = LABEL_ALIGN_MAX_SKIP;
max_skip = targetm.asm_out.label_align_max_skip (insn);
}
}
LABEL_TO_ALIGNMENT (insn) = max_log;
@ -958,7 +967,7 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED)
if (max_log < log)
{
max_log = log;
max_skip = LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP;
max_skip = targetm.asm_out.label_align_after_barrier_max_skip (label);
}
break;
}

View file

@ -717,7 +717,9 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
TRAMPOLINE_ADJUST_ADDRESS STATIC_CHAIN STATIC_CHAIN_INCOMING \
RETURN_POPS_ARGS UNITS_PER_SIMD_WORD OVERRIDE_OPTIONS \
OPTIMIZATION_OPTIONS CLASS_LIKELY_SPILLED_P \
USING_SJLJ_EXCEPTIONS TARGET_UNWIND_INFO
USING_SJLJ_EXCEPTIONS TARGET_UNWIND_INFO \
LABEL_ALIGN_MAX_SKIP LOOP_ALIGN_MAX_SKIP \
LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP JUMP_ALIGN_MAX_SKIP
/* Other obsolete target macros, or macros that used to be in target
headers and were not used, and may be obsolete or may never have

View file

@ -101,6 +101,38 @@ DEFHOOKPOD
DEFHOOKPOD (aligned_op, "*", struct asm_int_op, TARGET_ASM_ALIGNED_INT_OP)
DEFHOOKPOD (unaligned_op, "*", struct asm_int_op, TARGET_ASM_UNALIGNED_INT_OP)
/* The maximum number of bytes to skip when applying
LABEL_ALIGN_AFTER_BARRIER. */
DEFHOOK
(label_align_after_barrier_max_skip,
"",
int, (rtx label),
default_label_align_after_barrier_max_skip)
/* The maximum number of bytes to skip when applying
LOOP_ALIGN. */
DEFHOOK
(loop_align_max_skip,
"",
int, (rtx label),
default_loop_align_max_skip)
/* The maximum number of bytes to skip when applying
LABEL_ALIGN. */
DEFHOOK
(label_align_max_skip,
"",
int, (rtx label),
default_label_align_max_skip)
/* The maximum number of bytes to skip when applying
JUMP_ALIGN. */
DEFHOOK
(jump_align_max_skip,
"",
int, (rtx label),
default_jump_align_max_skip)
/* Try to output the assembler code for an integer object whose
value is given by X. SIZE is the size of the object in bytes and
ALIGNED_P indicates whether it is aligned. Return true if

View file

@ -162,3 +162,8 @@ extern enum unwind_info_type default_debug_unwind_info (void);
extern enum unwind_info_type default_except_unwind_info (void);
extern enum unwind_info_type dwarf2_except_unwind_info (void);
extern enum unwind_info_type sjlj_except_unwind_info (void);
extern int default_label_align_after_barrier_max_skip (rtx);
extern int default_loop_align_max_skip (rtx);
extern int default_label_align_max_skip (rtx);
extern int default_jump_align_max_skip (rtx);