re PR target/66015 (align directives not propagated after __attribute__ ((__optimize_...
authorChristian Bruel <christian.bruel@st.com>
Wed, 6 May 2015 10:54:40 +0000 (12:54 +0200)
committerChristian Bruel <chrbr@gcc.gnu.org>
Wed, 6 May 2015 10:54:40 +0000 (12:54 +0200)
2015-05-06  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.

From-SVN: r222847

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c [new file with mode: 0644]

index f201ab905cb10483eab2b8a59543f01ce3d3eda4..07ea864db7b8d5c3f046a753a5d0de0cd935942d 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-06  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-06  Richard Biener  <rguenther@suse.de>
 
        * tree-vect-slp.c (vect_supported_load_permutation_p): Use
index 7bc28ae7cf2f8d6f5ef136158c6c43d39e540435..7a34e4905f7683c987f023706bf8e54b4b9d0126 100644 (file)
@@ -7053,18 +7053,6 @@ aarch64_override_options (void)
 #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 ();
 
@@ -7080,6 +7068,18 @@ aarch64_override_options_after_change (void)
     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 c42a9d4a862e9eaca55a21522d752742e1ea9930..2bea3f8c3681e8db2ef77e9d1690d7c1449f8e2a 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-06  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/66015
+       * gcc.target/aarch64/iinline-attr-1.c: New test.
+
 2015-05-06  Richard Biener  <rguenther@suse.de>
 
        * gcc.dg/vect/bb-slp-34.c: New testcase.
diff --git a/gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c b/gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c
new file mode 100644 (file)
index 0000000..4b390ca
--- /dev/null
@@ -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" } } */
+
+