re PR target/66015 (align directives not propagated after __attribute__ ((__optimize_...
authorUros Bizjak <ubizjak@gmail.com>
Thu, 7 May 2015 07:34:29 +0000 (09:34 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 7 May 2015 07:34:29 +0000 (09:34 +0200)
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

gcc/ChangeLog
gcc/config/alpha/alpha.c

index a3ccaf63f43e0a53a7525e01a84a7b4cc979f907..19cd61cde92f219d1084d57bd65cdb3b3bd5d5b0 100644 (file)
@@ -1,3 +1,11 @@
+2015-05-07  Uros Bizjak  <ubizjak@gmail.com>
+
+       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  <sandra@codesourcery.com>
            Chris Jones  <chrisj@nvidia.com>
            Joshua Conner  <jconner@nvidia.com>
index 6f797b3d688992aaab1ee833f4ea42da6b315100..5ed4dc6154b27d6ca6ed639a471e8e795903b118 100644 (file)
@@ -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;
+}
 \f
 /* 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