re PR target/66015 (align directives not propagated after __attribute__ ((__optimize__ ("O2"))))

PR target/66015
	* config/alpha/alpha.c (alpha_override_options_after_change): New.
	(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): New.
	(alpha_override_options): Move align_loops, align_jumps and
	align_functions handling into alpha_override_options_after_change.

From-SVN: r222870
This commit is contained in:
Uros Bizjak 2015-05-07 09:34:29 +02:00 committed by Uros Bizjak
parent 06cb4b647a
commit ad2c39af63
2 changed files with 32 additions and 11 deletions

View file

@ -1,3 +1,11 @@
2015-05-07 Uros Bizjak <ubizjak@gmail.com>
PR target/66015
* config/alpha/alpha.c (alpha_override_options_after_change): New.
(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): New.
(alpha_override_options): Move align_loops, align_jumps and
align_functions handling into alpha_override_options_after_change.
2015-05-06 Sandra Loosemore <sandra@codesourcery.com>
Chris Jones <chrisj@nvidia.com>
Joshua Conner <jconner@nvidia.com>

View file

@ -241,6 +241,7 @@ static struct machine_function *alpha_init_machine_status (void);
static rtx alpha_emit_xfloating_compare (enum rtx_code *, rtx, rtx);
static void alpha_handle_trap_shadows (void);
static void alpha_align_insns (void);
static void alpha_override_options_after_change (void);
#if TARGET_ABI_OPEN_VMS
static void alpha_write_linkage (FILE *, const char *);
@ -628,17 +629,7 @@ alpha_option_override (void)
else if (flag_pic == 2)
target_flags &= ~MASK_SMALL_DATA;
/* Align labels and loops for optimal branching. */
/* ??? Kludge these by not doing anything if we don't optimize. */
if (optimize > 0)
{
if (align_loops <= 0)
align_loops = 16;
if (align_jumps <= 0)
align_jumps = 16;
}
if (align_functions <= 0)
align_functions = 16;
alpha_override_options_after_change ();
/* Register variables and functions with the garbage collector. */
@ -662,6 +653,24 @@ alpha_option_override (void)
register_pass (&handle_trap_shadows_info);
register_pass (&align_insns_info);
}
/* Implement targetm.override_options_after_change. */
static void
alpha_override_options_after_change (void)
{
/* Align labels and loops for optimal branching. */
/* ??? Kludge these by not doing anything if we don't optimize. */
if (optimize > 0)
{
if (align_loops <= 0)
align_loops = 16;
if (align_jumps <= 0)
align_jumps = 16;
}
if (align_functions <= 0)
align_functions = 16;
}
/* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */
@ -10098,6 +10107,10 @@ alpha_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update)
#undef TARGET_OPTION_OVERRIDE
#define TARGET_OPTION_OVERRIDE alpha_option_override
#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE
#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE \
alpha_override_options_after_change
#ifdef TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
#undef TARGET_MANGLE_TYPE
#define TARGET_MANGLE_TYPE alpha_mangle_type