re PR target/64835 (-fno-ipa-cp is inconsitently supported when attributes optimize...
authorChristian Bruel <christian.bruel@st.com>
Wed, 29 Apr 2015 06:52:23 +0000 (08:52 +0200)
committerChristian Bruel <chrbr@gcc.gnu.org>
Wed, 29 Apr 2015 06:52:23 +0000 (08:52 +0200)
2015-04-29  Christian Bruel  <christian.bruel@st.com>

PR target/64835
* config/i386/i386.c (ix86_default_align): New function.
(ix86_override_options_after_change): Call ix86_default_align.
(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): New hook.
(ix86_override_options_after_change): New function.

From-SVN: r222559

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/iinline-attr.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/iinline-attr-2.c [new file with mode: 0644]

index 27752264ad53e5320c93306754f11155a2243ee7..9a58cbe9b26ec7207a28a9153f0d5d8fc6c084e4 100644 (file)
@@ -1,3 +1,11 @@
+2015-04-29  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/64835
+       * config/i386/i386.c (ix86_default_align): New function.
+       (ix86_override_options_after_change): Call ix86_default_align.
+       (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): New hook.
+       (ix86_override_options_after_change): New function.
+
 2015-04-28  Jeff Law  <law@redhat.com>
 
        * tree-ssa-dom.c (record_equality); Fix comment typos.
index 77a6109b711cbf12b8db409b993dba9abb4552b6..0e8477d20fd4db06ef80c060ea796e188ea05699 100644 (file)
@@ -3106,6 +3106,35 @@ set_ix86_tune_features (enum processor_type ix86_tune, bool dump)
 }
 
 
+/* Default align_* from the processor table.  */
+
+static void
+ix86_default_align (struct gcc_options *opts)
+{
+  if (opts->x_align_loops == 0)
+    {
+      opts->x_align_loops = processor_target_table[ix86_tune].align_loop;
+      align_loops_max_skip = processor_target_table[ix86_tune].align_loop_max_skip;
+    }
+  if (opts->x_align_jumps == 0)
+    {
+      opts->x_align_jumps = processor_target_table[ix86_tune].align_jump;
+      align_jumps_max_skip = processor_target_table[ix86_tune].align_jump_max_skip;
+    }
+  if (opts->x_align_functions == 0)
+    {
+      opts->x_align_functions = processor_target_table[ix86_tune].align_func;
+    }
+}
+
+/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE hook.  */
+
+static void
+ix86_override_options_after_change (void)
+{
+  ix86_default_align (&global_options);
+}
+
 /* Override various settings based on options.  If MAIN_ARGS_P, the
    options are from the command line, otherwise they are from
    attributes.  */
@@ -3903,20 +3932,7 @@ ix86_option_override_internal (bool main_args_p,
     opts->x_ix86_regparm = REGPARM_MAX;
 
   /* Default align_* from the processor table.  */
-  if (opts->x_align_loops == 0)
-    {
-      opts->x_align_loops = processor_target_table[ix86_tune].align_loop;
-      align_loops_max_skip = processor_target_table[ix86_tune].align_loop_max_skip;
-    }
-  if (opts->x_align_jumps == 0)
-    {
-      opts->x_align_jumps = processor_target_table[ix86_tune].align_jump;
-      align_jumps_max_skip = processor_target_table[ix86_tune].align_jump_max_skip;
-    }
-  if (opts->x_align_functions == 0)
-    {
-      opts->x_align_functions = processor_target_table[ix86_tune].align_func;
-    }
+  ix86_default_align (opts);
 
   /* Provide default for -mbranch-cost= value.  */
   if (!opts_set->x_ix86_branch_cost)
@@ -52098,6 +52114,9 @@ ix86_operands_ok_for_move_multiple (rtx *operands, bool load,
 #undef TARGET_PROMOTE_FUNCTION_MODE
 #define TARGET_PROMOTE_FUNCTION_MODE ix86_promote_function_mode
 
+#undef  TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE
+#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE ix86_override_options_after_change
+
 #undef TARGET_MEMBER_TYPE_FORCES_BLK
 #define TARGET_MEMBER_TYPE_FORCES_BLK ix86_member_type_forces_blk
 
index 1a018fa3a9e9ee521d38f601d4f61ca119b78665..71ef124c2631057479f49112ef3e7b25e897c8e7 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-29  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/64835
+       * gcc.dg/ipa/iinline-attr.c: New test.
+       * gcc.target/i386/iinline-attr-2.c: New test.
+
 2015-04-28  Andre Vehreschild  <vehre@gmx.de>
 
        * gfortran.dg/implicit_class_1.f90: Adding flag to check, if
diff --git a/gcc/testsuite/gcc.dg/ipa/iinline-attr.c b/gcc/testsuite/gcc.dg/ipa/iinline-attr.c
new file mode 100644 (file)
index 0000000..119d61f
--- /dev/null
@@ -0,0 +1,27 @@
+/* Verify that simple indirect calls are inlined even when
+   attribute __optimize is used.  */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-inline"  } */
+
+extern void non_existent(int);
+
+static void hooray ()
+{
+  non_existent (1);
+}
+
+__attribute__ ((__optimize__ ("O2")))
+static void hiphip (void (*f)())
+{
+  non_existent (2);
+  f ();
+}
+
+int test (void)
+{
+  hiphip (hooray);
+  return 0;
+}
+
+/* { dg-final { scan-ipa-dump "hooray\[^\\n\]*inline copy in test"  "inline"  } } */
+/* { dg-final { cleanup-ipa-dump "inline" } } */
diff --git a/gcc/testsuite/gcc.target/i386/iinline-attr-2.c b/gcc/testsuite/gcc.target/i386/iinline-attr-2.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" } } */
+
+