From: Uros Bizjak Date: Thu, 7 May 2015 07:34:29 +0000 (+0200) Subject: re PR target/66015 (align directives not propagated after __attribute__ ((__optimize_... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ad2c39af63eecbca99b3b316bb4147d0a0a0fe0a;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a3ccaf63f43..19cd61cde92 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-05-07 Uros Bizjak + + 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 Chris Jones Joshua Conner diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 6f797b3d688..5ed4dc6154b 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -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