This fixes PR target/66015 and a latent issue revealed by gcc.dg/ipa/iinline-attr.c since https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01609.html
Regtested on aarch64-linux-gnu by Linaro. OK for trunk ? Many thanks Christian
2015-05-05 Christian Bruel <christian.br...@st.com> PR target/66015 * config/aarch64/aarch64.c (aarch64_override_options): Move align_loops, align_jumps, align_functions into aarch64_override_options_after_change. 2015-05-05 Christian Bruel <christian.br...@st.com> PR target/66015 * gcc.target/aarch64/iinline-attr-1.c: New test. Index: gcc/config/aarch64/aarch64.c =================================================================== --- gcc/config/aarch64/aarch64.c (revision 222803) +++ gcc/config/aarch64/aarch64.c (working copy) @@ -7024,18 +7024,6 @@ #endif } - /* If not opzimizing for size, set the default - alignment to what the target wants */ - if (!optimize_size) - { - if (align_loops <= 0) - align_loops = aarch64_tune_params->loop_align; - if (align_jumps <= 0) - align_jumps = aarch64_tune_params->jump_align; - if (align_functions <= 0) - align_functions = aarch64_tune_params->function_align; - } - if (AARCH64_TUNE_FMA_STEERING) aarch64_register_fma_steering (); @@ -7051,6 +7039,18 @@ flag_omit_leaf_frame_pointer = false; else if (flag_omit_leaf_frame_pointer) flag_omit_frame_pointer = true; + + /* If not optimizing for size, set the default + alignment to what the target wants */ + if (!optimize_size) + { + if (align_loops <= 0) + align_loops = aarch64_tune_params->loop_align; + if (align_jumps <= 0) + align_jumps = aarch64_tune_params->jump_align; + if (align_functions <= 0) + align_functions = aarch64_tune_params->function_align; + } } static struct machine_function * Index: gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c (revision 0) +++ gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c (working copy) @@ -0,0 +1,29 @@ +/* Verify that alignment flags are set when attribute __optimize is used. */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +extern void non_existent(int); + +__attribute__ ((__optimize__ ("O2"))) +static void hooray () +{ + non_existent (1); +} + +__attribute__ ((__optimize__ ("O2"))) +static void hiphip (void (*f)()) +{ + non_existent (2); + f (); +} + +__attribute__ ((__optimize__ ("O2"))) +int test (void) +{ + hiphip (hooray); + return 0; +} + +/* { dg-final { scan-assembler "p2align" } } */ + +