[hsa-branch] Outline HSA function attribute modification

Martin Jambor mjambor@suse.cz
Wed Aug 3 14:36:00 GMT 2016


Hi,

since future changes will want to do this from two places, this patch
outlines function attribute changes to a special private method.

Martin

2016-07-20  Martin Jambor  <mjambor@suse.cz>

	* hsa.h (hsa_summary_t): Add provate member function
	process_gpu_implementation_attributes.
	* hsa.c (process_gpu_implementation_attributes): New function.
	(link_functions): Move some functionality into it.
---
 gcc/hsa.c | 31 +++++++++++++++++++------------
 gcc/hsa.h |  3 +++
 2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/gcc/hsa.c b/gcc/hsa.c
index fdadcb1..caca939 100644
--- a/gcc/hsa.c
+++ b/gcc/hsa.c
@@ -813,6 +813,24 @@ hsa_get_declaration_name (tree decl)
   return name;
 }
 
+/* Add a flatten attribute and disable vectorization for gpu implementation
+   function decl GDECL.  */
+
+void hsa_summary_t::process_gpu_implementation_attributes (tree gdecl)
+{
+  DECL_ATTRIBUTES (gdecl)
+    = tree_cons (get_identifier ("flatten"), NULL_TREE,
+		 DECL_ATTRIBUTES (gdecl));
+
+  tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (gdecl);
+  if (fn_opts == NULL_TREE)
+    fn_opts = optimization_default_node;
+  fn_opts = copy_node (fn_opts);
+  TREE_OPTIMIZATION (fn_opts)->x_flag_tree_loop_vectorize = false;
+  TREE_OPTIMIZATION (fn_opts)->x_flag_tree_slp_vectorize = false;
+  DECL_FUNCTION_SPECIFIC_OPTIMIZATION (gdecl) = fn_opts;
+}
+
 void
 hsa_summary_t::link_functions (cgraph_node *gpu, cgraph_node *host,
 			       hsa_function_kind kind, bool gridified_kernel_p)
@@ -832,18 +850,7 @@ hsa_summary_t::link_functions (cgraph_node *gpu, cgraph_node *host,
   gpu_summary->m_binded_function = host;
   host_summary->m_binded_function = gpu;
 
-  tree gdecl = gpu->decl;
-  DECL_ATTRIBUTES (gdecl)
-    = tree_cons (get_identifier ("flatten"), NULL_TREE,
-		 DECL_ATTRIBUTES (gdecl));
-
-  tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (gdecl);
-  if (fn_opts == NULL_TREE)
-    fn_opts = optimization_default_node;
-  fn_opts = copy_node (fn_opts);
-  TREE_OPTIMIZATION (fn_opts)->x_flag_tree_loop_vectorize = false;
-  TREE_OPTIMIZATION (fn_opts)->x_flag_tree_slp_vectorize = false;
-  DECL_FUNCTION_SPECIFIC_OPTIMIZATION (gdecl) = fn_opts;
+  process_gpu_implementation_attributes (gpu->decl);
 
   /* Create reference between a kernel and a corresponding host implementation
      to quarantee LTO streaming to a same LTRANS.  */
diff --git a/gcc/hsa.h b/gcc/hsa.h
index f13e216..4d98bb3 100644
--- a/gcc/hsa.h
+++ b/gcc/hsa.h
@@ -1322,6 +1322,9 @@ public:
 
   void link_functions (cgraph_node *gpu, cgraph_node *host,
 		       hsa_function_kind kind, bool gridified_kernel_p);
+
+private:
+  void process_gpu_implementation_attributes (tree gdecl);
 };
 
 /* OMP simple builtin describes behavior that should be done for
-- 
2.9.0



More information about the Gcc-patches mailing list