This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, PR target/66015]: Fix alignments with attribute_optimize for aarch64
- From: Christian Bruel <christian dot bruel at st dot com>
- To: <marcus dot shawcroft at arm dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Yvan Roux <yvan dot roux at linaro dot org>, "Bin.Cheng" <amker dot cheng at gmail dot com>
- Date: Tue, 5 May 2015 13:07:13 +0200
- Subject: [PATCH, PR target/66015]: Fix alignments with attribute_optimize for aarch64
- Authentication-results: sourceware.org; auth=none
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.bruel@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.bruel@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" } } */
+
+