This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[hsa] Move some stuff from hsa-gen.c to new file hsa.c


Hi,

Some functionality does not belong neither to hsa-gen.c not to
hsa-brig.c and there is enough of it to warrant a separate file.  This
is the initial movement of such things to a new file hsa.c.

Martin

2015-06-18  Martin Jambor  <mjambor@suse.cz>

	* hsa.c: New file.
	* Makefile.in (OBJS): Add hsa.o.
	(GTFILES): Add hsa.c.
	* hsa-gen.c (hsa_cfun): Move to hsa.c.
	(hsa_decl_kernel_map_element): Likewise.
	(hsa_decl_kernel_mapping): Likewise.
	(hsa_global_variable_symbols): Likewise.
	(compilation_unit_data_initialized): Likewise.
	(hsa_init_compilation_unit_data): Likewise.
	(hsa_deinit_compilation_unit_data): Likewise.
	(hsa_machine_large_p): Likewise.
	(hsa_full_profile_p): Likewise.
	(hsa_get_segment_addr_type): Made static.
	(hsa_opcode_op_output_p): Moved to hsa.c.
	(hsa_add_kern_decl_mapping): Likewise.
	(hsa_get_number_decl_kernel_mappings): Likewise.
	(hsa_get_decl_kernel_mapping_decl): Likewise.
	(hsa_get_decl_kernel_mapping_name): Likewise.
	(hsa_free_decl_kernel_mapping): Likewise.
	* hsa.h: Reorganize declarations to match the other changes.
---
 gcc/ChangeLog.hsa |  23 ++++++
 gcc/Makefile.in   |   2 +
 gcc/hsa-gen.c     | 130 +---------------------------------
 gcc/hsa.c         | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gcc/hsa.h         |  17 +++--
 5 files changed, 240 insertions(+), 136 deletions(-)
 create mode 100644 gcc/hsa.c

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 6319cf2..5365890 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1280,6 +1280,7 @@ OBJS = \
 	graphite-sese-to-poly.o \
 	gtype-desc.o \
 	haifa-sched.o \
+	hsa.o \
 	hsa-gen.o \
 	hsa-regalloc.o \
 	hsa-brig.o \
@@ -2365,6 +2366,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
   $(srcdir)/sanopt.c \
   $(srcdir)/ipa-devirt.c \
   $(srcdir)/internal-fn.h \
+  $(srcdir)/hsa.c \
   $(srcdir)/hsa-gen.c \
   @all_gtfiles@
 
diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c
index 0349efd..7be4db7 100644
--- a/gcc/hsa-gen.c
+++ b/gcc/hsa-gen.c
@@ -72,24 +72,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "print-tree.h"
 #include "hsa.h"
 
-/* Structure containing intermediate HSA representation of the generated
-   function. */
-struct hsa_function_representation hsa_cfun;
-
-/* Element of the mapping vector between a host decl and an HSA kernel.  */
-
-struct GTY(()) hsa_decl_kernel_map_element
-{
-  /* The decl of the host function.  */
-  tree decl;
-  /* Name of the HSA kernel in BRIG.  */
-  char * GTY((skip)) name;
-};
-
-/* Mapping between decls and corresponding HSA kernels in this compilation
-   unit.  */
-static GTY (()) vec<hsa_decl_kernel_map_element, va_gc> *hsa_decl_kernel_mapping;
-
 /* Alloc pools for allocating basic hsa structures such as operands,
    instructions and other basic entitie.s */
 static pool_allocator<hsa_op_address> *hsa_allocp_operand_address;
@@ -116,37 +98,6 @@ static vec <hsa_op_reg *> hsa_list_operand_reg;
 static vec <hsa_insn_call_block *> hsa_list_insn_call_block;
 static vec <hsa_insn_call *> hsa_list_insn_call;
 
-/* Hash function to lookup a symbol for a decl.  */
-hash_table <hsa_free_symbol_hasher> *hsa_global_variable_symbols;
-
-/* True if compilation unit-wide data are already allocated and initialized.  */
-static bool compilation_unit_data_initialized;
-
-/* Allocate HSA structures that are are used when dealing with different
-   functions.  */
-
-void
-hsa_init_compilation_unit_data (void)
-{
-  if (compilation_unit_data_initialized)
-    return;
-
-  compilation_unit_data_initialized = true;
-  hsa_global_variable_symbols = new hash_table <hsa_free_symbol_hasher> (8);
-}
-
-/* Free data structures that are used when dealing with different
-   functions.  */
-
-void
-hsa_deinit_compilation_unit_data (void)
-{
-  if (!compilation_unit_data_initialized)
-    return;
-
-  delete hsa_global_variable_symbols;
-}
-
 /* Allocate HSA structures that we need only while generating with this.  */
 
 static void
@@ -258,26 +209,9 @@ hsa_deinit_data_for_cfun (void)
   hsa_cfun.spill_symbols.release();
 }
 
-/* Return true if we are generating large HSA machine model.  */
-
-bool
-hsa_machine_large_p (void)
-{
-  /* FIXME: I suppose this is techically wrong but should work for me now.  */
-  return (GET_MODE_BITSIZE (Pmode) == 64);
-}
-
-/* Return the HSA profile we are using.  */
-
-bool
-hsa_full_profile_p (void)
-{
-  return true;
-}
-
 /* Return the type which holds addresses in the given SEGMENT.  */
 
-BrigType16_t
+static BrigType16_t
 hsa_get_segment_addr_type (BrigSegment8_t segment)
 {
   switch (segment)
@@ -300,23 +234,6 @@ hsa_get_segment_addr_type (BrigSegment8_t segment)
   gcc_unreachable ();
 }
 
-/* Return true if operand number OPNUM of instruction with OPCODE is an output.
-   False if it is an input.  */
-
-bool
-hsa_opcode_op_output_p (BrigOpcode16_t opcode, int opnum)
-{
-  switch (opcode)
-    {
-    case BRIG_OPCODE_CBR:
-    case BRIG_OPCODE_ST:
-      /* FIXME: There are probably missing cases here, double check.  */
-      return false;
-    default:
-     return opnum == 0;
-    }
-}
-
 /* Return HSA type for tree TYPE, which has to fit into BrigType16_t.  Pointers
    are assumed to use flat addressing.  */
 
@@ -2297,51 +2214,6 @@ gen_function_parameters (vec <hsa_op_reg_p> ssa_map)
     }
 }
 
-/* Create a mapping between the original function DECL and kernel name NAME.  */
-
-static void
-hsa_add_kern_decl_mapping (tree decl, char *name)
-{
-  hsa_decl_kernel_map_element dkm;
-  dkm.decl = decl;
-  dkm.name = name;
-  vec_safe_push (hsa_decl_kernel_mapping, dkm);
-}
-
-/* Return the number of kernel decl name mappings.  */
-
-unsigned
-hsa_get_number_decl_kernel_mappings (void)
-{
-  return vec_safe_length (hsa_decl_kernel_mapping);
-}
-
-/* Return the decl in the Ith kernel decl name mapping.  */
-
-tree
-hsa_get_decl_kernel_mapping_decl (unsigned i)
-{
-  return (*hsa_decl_kernel_mapping)[i].decl;
-}
-
-/* Return the name in the Ith kernel decl name mapping.  */
-
-char *
-hsa_get_decl_kernel_mapping_name (unsigned i)
-{
-  return (*hsa_decl_kernel_mapping)[i].name;
-}
-
-/* Free the mapping between original decls and kernel names.  */
-
-void
-hsa_free_decl_kernel_mapping (void)
-{
-  for (unsigned i = 0; i < hsa_decl_kernel_mapping->length (); ++i)
-    free ((*hsa_decl_kernel_mapping)[i].name);
-  ggc_free (hsa_decl_kernel_mapping);
-}
-
 static void
 sanitize_hsa_name (char *p)
 {
diff --git a/gcc/hsa.c b/gcc/hsa.c
new file mode 100644
index 0000000..966949b
--- /dev/null
+++ b/gcc/hsa.c
@@ -0,0 +1,204 @@
+/* Implementation of commonly needed HSAIL related functions and methods.
+   Copyright (C) 2013 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* TODO: Some of the following includes might be redundand because of ongoing
+   header cleanups.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "is-a.h"
+#include "hash-set.h"
+#include "defaults.h"
+#include "hard-reg-set.h"
+#include "symtab.h"
+#include "vec.h"
+#include "input.h"
+#include "alias.h"
+#include "double-int.h"
+#include "inchash.h"
+#include "tree.h"
+#include "tree-pass.h"
+#include "tree-ssa-alias.h"
+#include "internal-fn.h"
+#include "gimple-expr.h"
+#include "dominance.h"
+#include "cfg.h"
+#include "function.h"
+#include "predict.h"
+#include "basic-block.h"
+#include "fold-const.h"
+#include "gimple.h"
+#include "gimple-iterator.h"
+#include "machmode.h"
+#include "output.h"
+#include "function.h"
+#include "bitmap.h"
+#include "dumpfile.h"
+#include "gimple-pretty-print.h"
+#include "diagnostic-core.h"
+#include "alloc-pool.h"
+#include "tree-ssa-operands.h"
+#include "gimple-ssa.h"
+#include "tree-phinodes.h"
+#include "stringpool.h"
+#include "tree-ssanames.h"
+#include "rtl.h"
+#include "expr.h"
+#include "tree-dfa.h"
+#include "ssa-iterators.h"
+#include "ipa-ref.h"
+#include "lto-streamer.h"
+#include "cgraph.h"
+#include "stor-layout.h"
+#include "gimplify-me.h"
+#include "print-tree.h"
+#include "hsa.h"
+
+/* Structure containing intermediate HSA representation of the generated
+   function. */
+struct hsa_function_representation hsa_cfun;
+
+/* Element of the mapping vector between a host decl and an HSA kernel.  */
+
+struct GTY(()) hsa_decl_kernel_map_element
+{
+  /* The decl of the host function.  */
+  tree decl;
+  /* Name of the HSA kernel in BRIG.  */
+  char * GTY((skip)) name;
+};
+
+/* Mapping between decls and corresponding HSA kernels in this compilation
+   unit.  */
+static GTY (()) vec<hsa_decl_kernel_map_element, va_gc> *hsa_decl_kernel_mapping;
+
+
+/* Hash function to lookup a symbol for a decl.  */
+hash_table <hsa_free_symbol_hasher> *hsa_global_variable_symbols;
+
+/* True if compilation unit-wide data are already allocated and initialized.  */
+static bool compilation_unit_data_initialized;
+
+/* Allocate HSA structures that are are used when dealing with different
+   functions.  */
+
+void
+hsa_init_compilation_unit_data (void)
+{
+  if (compilation_unit_data_initialized)
+    return;
+
+  compilation_unit_data_initialized = true;
+  hsa_global_variable_symbols = new hash_table <hsa_free_symbol_hasher> (8);
+}
+
+/* Free data structures that are used when dealing with different
+   functions.  */
+
+void
+hsa_deinit_compilation_unit_data (void)
+{
+  if (!compilation_unit_data_initialized)
+    return;
+
+  delete hsa_global_variable_symbols;
+}
+
+/* Return true if we are generating large HSA machine model.  */
+
+bool
+hsa_machine_large_p (void)
+{
+  /* FIXME: I suppose this is techically wrong but should work for me now.  */
+  return (GET_MODE_BITSIZE (Pmode) == 64);
+}
+
+/* Return the HSA profile we are using.  */
+
+bool
+hsa_full_profile_p (void)
+{
+  return true;
+}
+
+/* Return true if operand number OPNUM of instruction with OPCODE is an output.
+   False if it is an input.  */
+
+bool
+hsa_opcode_op_output_p (BrigOpcode16_t opcode, int opnum)
+{
+  switch (opcode)
+    {
+    case BRIG_OPCODE_CBR:
+    case BRIG_OPCODE_ST:
+      /* FIXME: There are probably missing cases here, double check.  */
+      return false;
+    default:
+     return opnum == 0;
+    }
+}
+
+/* Create a mapping between the original function DECL and kernel name NAME.  */
+
+void
+hsa_add_kern_decl_mapping (tree decl, char *name)
+{
+  hsa_decl_kernel_map_element dkm;
+  dkm.decl = decl;
+  dkm.name = name;
+  vec_safe_push (hsa_decl_kernel_mapping, dkm);
+}
+
+/* Return the number of kernel decl name mappings.  */
+
+unsigned
+hsa_get_number_decl_kernel_mappings (void)
+{
+  return vec_safe_length (hsa_decl_kernel_mapping);
+}
+
+/* Return the decl in the Ith kernel decl name mapping.  */
+
+tree
+hsa_get_decl_kernel_mapping_decl (unsigned i)
+{
+  return (*hsa_decl_kernel_mapping)[i].decl;
+}
+
+/* Return the name in the Ith kernel decl name mapping.  */
+
+char *
+hsa_get_decl_kernel_mapping_name (unsigned i)
+{
+  return (*hsa_decl_kernel_mapping)[i].name;
+}
+
+/* Free the mapping between original decls and kernel names.  */
+
+void
+hsa_free_decl_kernel_mapping (void)
+{
+  for (unsigned i = 0; i < hsa_decl_kernel_mapping->length (); ++i)
+    free ((*hsa_decl_kernel_mapping)[i].name);
+  ggc_free (hsa_decl_kernel_mapping);
+}
+
+#include "gt-hsa.h"
diff --git a/gcc/hsa.h b/gcc/hsa.h
index b605b63..e8dec42 100644
--- a/gcc/hsa.h
+++ b/gcc/hsa.h
@@ -604,23 +604,26 @@ struct hsa_function_representation
   bool kern_p;
 };
 
-/* In hsa-gen.c.  */
+/* in hsa.c */
 extern struct hsa_function_representation hsa_cfun;
 extern hash_table <hsa_free_symbol_hasher> *hsa_global_variable_symbols;
+void hsa_init_compilation_unit_data (void);
+void hsa_deinit_compilation_unit_data (void);
 bool hsa_machine_large_p (void);
-BrigType16_t hsa_get_segment_addr_type (BrigSegment8_t);
 bool hsa_full_profile_p (void);
 bool hsa_opcode_op_output_p (BrigOpcode16_t, int);
+void hsa_add_kern_decl_mapping (tree decl, char *name);
+unsigned hsa_get_number_decl_kernel_mappings (void);
+tree hsa_get_decl_kernel_mapping_decl (unsigned i);
+char *hsa_get_decl_kernel_mapping_name (unsigned i);
+void hsa_free_decl_kernel_mapping (void);
+
+/* In hsa-gen.c.  */
 void hsa_build_append_simple_mov (hsa_op_reg *, hsa_op_base *, hsa_bb *);
 hsa_symbol *hsa_get_spill_symbol (BrigType16_t);
 hsa_op_reg *hsa_spill_in (hsa_insn_basic *, hsa_op_reg *, hsa_op_reg **);
 hsa_op_reg *hsa_spill_out (hsa_insn_basic *, hsa_op_reg *, hsa_op_reg **);
 hsa_bb *hsa_init_new_bb (basic_block);
-void hsa_deinit_compilation_unit_data (void);
-unsigned hsa_get_number_decl_kernel_mappings (void);
-tree hsa_get_decl_kernel_mapping_decl (unsigned i);
-char *hsa_get_decl_kernel_mapping_name (unsigned i);
-void hsa_free_decl_kernel_mapping (void);
 
 /* In hsa-regalloc.c.  */
 void hsa_regalloc (void);
-- 
2.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]