This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, PR target/66015]: Fix alignments with attribute_optimize for aarch64


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" } } */
+
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]