]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm-c.c (arm_option_override): Initialize target_option_current_node.
authorChristian Bruel <chrbr@gcc.gnu.org>
Wed, 24 Feb 2016 08:19:12 +0000 (09:19 +0100)
committerChristian Bruel <chrbr@gcc.gnu.org>
Wed, 24 Feb 2016 08:19:12 +0000 (09:19 +0100)
2016-02-24  Christian Bruel  <christian.bruel@st.com>

* config/arm/arm-c.c (arm_option_override): Initialize
target_option_current_node.
* config/arm/arm.c (arm_pragma_target_parse): Replace
build_target_option_node call by target_option_current_node.
Set target_option_current_node.
Fix comments.

From-SVN: r233654

gcc/ChangeLog
gcc/config/arm/arm-c.c
gcc/config/arm/arm.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c [new file with mode: 0644]

index 0ba100dedf24f9165b0c939ebc43ba9ec1bc5677..405796963771cc24ed53c05ed0763ed3eabeab3b 100644 (file)
@@ -1,3 +1,12 @@
+2016-02-24  Christian Bruel  <christian.bruel@st.com>
+
+       * config/arm/arm-c.c (arm_option_override): Initialize
+       target_option_current_node.
+       * config/arm/arm.c (arm_pragma_target_parse): Replace
+       build_target_option_node call by target_option_current_node.
+       Set target_option_current_node.
+       Fix comments.
+
 2016-02-23  David Edelsohn  <dje.gcc@gmail.com>
 
        PR target/69810
index 982a606ece174180caa5f616c62a4b3d6473abdf..4fbdfc50d03507380e4fb59883923a81d9367489 100644 (file)
@@ -199,7 +199,7 @@ arm_cpu_cpp_builtins (struct cpp_reader * pfile)
 static bool
 arm_pragma_target_parse (tree args, tree pop_target)
 {
-  tree prev_tree = build_target_option_node (&global_options);
+  tree prev_tree = target_option_current_node;
   tree cur_tree;
   struct cl_target_option *prev_opt;
   struct cl_target_option *cur_opt;
@@ -220,11 +220,16 @@ arm_pragma_target_parse (tree args, tree pop_target)
                                    TREE_TARGET_OPTION (prev_tree));
          return false;
        }
+
+      /* handle_pragma_pop_options and handle_pragma_reset_options will set
+       target_option_current_node, but not handle_pragma_target.  */
+      target_option_current_node = cur_tree;
     }
 
-  /* Figure out the previous mode.  */
-  prev_opt  = TREE_TARGET_OPTION (prev_tree);
-  cur_opt   = TREE_TARGET_OPTION (cur_tree);
+  /* Update macros if target_node changes. The global state will be restored
+     by arm_set_current_function.  */
+  prev_opt = TREE_TARGET_OPTION (prev_tree);
+  cur_opt  = TREE_TARGET_OPTION (cur_tree);
 
   gcc_assert (prev_opt);
   gcc_assert (cur_opt);
index 765d0021e8035f23685c25154eaefdd3eb99cc6c..948934390150fbeac5905878c2471b62c434d59b 100644 (file)
@@ -3453,8 +3453,9 @@ arm_option_override (void)
   arm_add_gc_roots ();
 
   /* Save the initial options in case the user does function specific
-     options.  */
-  target_option_default_node = build_target_option_node (&global_options);
+     options or #pragma target.  */
+  target_option_default_node = target_option_current_node
+    = build_target_option_node (&global_options);
 
   /* Init initial mode for testing.  */
   thumb_flipper = TARGET_THUMB;
index 2e524ece716c803c4c384c55df450980f3192c7f..beb802600078f76346ef099fcec1afe135005204 100644 (file)
@@ -1,3 +1,7 @@
+2016-02-24  Christian Bruel  <christian.bruel@st.com>
+
+       * gcc.target/arm/pragma_cpp_fma.c: New test.
+
 2016-02-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/61156
@@ -89,6 +93,7 @@
        PR c/69900
        * gcc.dg/pr69900.c: New test.
 
+>>>>>>> .r233653
 2016-02-23  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimization/69666
diff --git a/gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c b/gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c
new file mode 100644 (file)
index 0000000..be63256
--- /dev/null
@@ -0,0 +1,36 @@
+/* Test that FMA macro is correctly undef.  */
+/* { dg-do compile } */
+/* { dg-skip-if "Default no fma" { *-*-* } { "-mfpu=*vfpv4*" "-mfpu=*armv8"} } */
+/* { dg-require-effective-target arm_fp_ok } */
+/* { dg-add-options arm_fp } */
+
+#pragma GCC push_options
+#pragma GCC target ("fpu=crypto-neon-fp-armv8")
+
+#ifndef __ARM_FEATURE_FMA
+#error "__ARM_FEATURE_FMA is not defined but should be"
+#endif
+
+#ifndef __ARM_FEATURE_CRYPTO
+#error "__ARM_FEATURE_CRYPTO is not defined but should be"
+#endif
+
+#if __ARM_NEON_FP != 6
+#error "__ARM_NEON_FP"
+#endif
+
+#if __ARM_FP != 14
+#error "__ARM_FP"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("fpu=neon-vfpv4")
+#pragma GCC pop_options
+
+#ifdef __ARM_FEATURE_FMA
+#error "__ARM_FEATURE_FMA is defined but should not be"
+#endif
+
+