[AArch64][14/14] Reuse target_option_current_node when passing pragma string to targe...
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 4 Aug 2015 10:45:48 +0000 (10:45 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Tue, 4 Aug 2015 10:45:48 +0000 (10:45 +0000)
* config/aarch64/aarch64.c (aarch64_option_valid_attribute_p):
Exit early and use target_option_current_node if processing current
pragma.

From-SVN: r226567

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 798b11af69a92e1b735a4ee894e49d0c4cf06776..a76cf0380b5707c559311e88b1de4ec4b9c4e0b5 100644 (file)
@@ -1,3 +1,9 @@
+2015-08-04  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_option_valid_attribute_p):
+       Exit early and use target_option_current_node if processing current
+       pragma.
+
 2015-08-04  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * doc/extend.texi (AArch64 Function Attributes): New node.
index 63b49ab172111838e4e75744841a9ae3cd365160..ad6c330b75e5bd1987c0ffbaa4f4d223b6755cac 100644 (file)
@@ -8414,6 +8414,18 @@ aarch64_option_valid_attribute_p (tree fndecl, tree, tree args, int)
   tree old_optimize;
   tree new_target, new_optimize;
   tree existing_target = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
+
+  /* If what we're processing is the current pragma string then the
+     target option node is already stored in target_option_current_node
+     by aarch64_pragma_target_parse in aarch64-c.c.  Use that to avoid
+     having to re-parse the string.  This is especially useful to keep
+     arm_neon.h compile times down since that header contains a lot
+     of intrinsics enclosed in pragmas.  */
+  if (!existing_target && args == current_target_pragma)
+    {
+      DECL_FUNCTION_SPECIFIC_TARGET (fndecl) = target_option_current_node;
+      return true;
+    }
   tree func_optimize = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
 
   old_optimize = build_optimization_node (&global_options);