Patchwork [12/44] Dump each scop in a separate file.

login
register
mail settings
Submitter Sebastian Pop
Date Sept. 30, 2010, 6:01 p.m.
Message ID <1285869696-10915-13-git-send-email-sebpop@gmail.com>
Download mbox | patch
Permalink /patch/66199/
State New
Headers show

Comments

Sebastian Pop - Sept. 30, 2010, 6:01 p.m.
From: spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>

2010-08-17  Riyadh Baghdadi <baghdadi.mr@gmail.com>

	* graphite-poly.c (init_graphite_out_file): New.
	(init_graphite_in_file): New.
	(apply_poly_transforms): Updated to enable reading and writing of
	multiple scop files.
	* toplev.c (init_asm_output): Remove graphite in/out file initialization.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/graphite@163315 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog          |    7 +++++
 gcc/ChangeLog.graphite |    8 +++++
 gcc/graphite-poly.c    |   68 ++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 81 insertions(+), 2 deletions(-)

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 12a289c..b90eae7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@ 
+2010-09-30  Riyadh Baghdadi <baghdadi.mr@gmail.com>
+
+	* graphite-poly.c (init_graphite_out_file): New.
+	(init_graphite_in_file): New.
+	(apply_poly_transforms): Updated to enable reading and writing of
+	multiple scop files.
+
 2010-09-30  Tobias Grosser  <grosser@fim.uni-passau.de>
 
 	* graphite-scop-detection.c (graphite_can_represent_scev): Remove
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index cb63848..e61bee6 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,11 @@ 
+2010-08-17  Riyadh Baghdadi <baghdadi.mr@gmail.com>
+
+	* graphite-poly.c (init_graphite_out_file): New.
+	(init_graphite_in_file): New.
+	(apply_poly_transforms): Updated to enable reading and writing of
+	multiple scop files.
+	* toplev.c (init_asm_output): Remove graphite in/out file initialization.
+
 2010-08-17  Tobias Grosser  <grosser@fim.uni-passau.de>
 
 	* graphite-scop-detection.c (graphite_can_represent_scev): Remove
diff --git a/gcc/graphite-poly.c b/gcc/graphite-poly.c
index eb4d61f..27215e1 100644
--- a/gcc/graphite-poly.c
+++ b/gcc/graphite-poly.c
@@ -683,18 +683,78 @@  graphite_read_scop_file (FILE *file, scop_p scop)
   return transform_done;
 }
 
+/* Initialize and return a file that will be used to write a scop.  SCOP_NUMBER
+   is a sequential number (identifier) used to differentiate scop files.
+   Examples of the generated file names: dump_base_name.0.graphite,
+   dump_base_name.1.graphite, dump_base_name.2.graphite, etc.  */
+
+static FILE *
+init_graphite_out_file (int scop_number)
+{
+  FILE *graphite_out_file;
+  int len = strlen (dump_base_name);
+  char *dumpname = XNEWVEC (char, len + 25);
+  char *s_scop_number = XNEWVEC (char, 15);
+
+  memcpy (dumpname, dump_base_name, len + 1);
+  strip_off_ending (dumpname, len);
+  sprintf (s_scop_number, ".%d", scop_number);
+  strcat (dumpname, s_scop_number);
+  strcat (dumpname, ".graphite");
+  graphite_out_file = fopen (dumpname, "w+b");
+
+  if (graphite_out_file == 0)
+    fatal_error ("can%'t open %s for writing: %m", dumpname);
+
+  free (dumpname);
+
+  return graphite_out_file;
+}
+
+/* Open and return a file used for scop reading.  SCOP_NUMBER is a sequential
+   number (identifier) used to differentiate scop files.  Examples of the
+   generated file names: dump_base_name.0.graphite, dump_base_name.1.graphite,
+   dump_base_name.2.graphite, etc.  */
+
+static FILE *
+init_graphite_in_file (int scop_number)
+{
+  FILE *graphite_in_file;
+  int len = strlen (dump_base_name);
+  char *dumpname = XNEWVEC (char, len + 25);
+  char *s_scop_number = XNEWVEC (char, 15);
+
+  memcpy (dumpname, dump_base_name, len + 1);
+  strip_off_ending (dumpname, len);
+  sprintf (s_scop_number, ".%d", scop_number);
+  strcat (dumpname, s_scop_number);
+  strcat (dumpname, ".graphite");
+  graphite_in_file = fopen (dumpname, "r+b");
+
+  if (graphite_in_file == 0)
+    fatal_error ("can%'t open %s for reading: %m", dumpname);
+
+  free (dumpname);
+
+  return graphite_in_file;
+}
+
 /* Apply graphite transformations to all the basic blocks of SCOP.  */
 
 bool
 apply_poly_transforms (scop_p scop)
 {
   bool transform_done = false;
+  FILE *graphite_file;
+  static size_t file_scop_number = 0;
 
   /* This feature is only enabled in the Graphite branch.  */
   if (0)
     {
-      transform_done |= graphite_read_scop_file (dump_file, scop);
+      graphite_file = init_graphite_in_file (file_scop_number);
+      transform_done |= graphite_read_scop_file (graphite_file, scop);
       gcc_assert (graphite_legal_transform (scop));
+      file_scop_number++;
     }
 
   /* Generate code even if we did not apply any real transformation.
@@ -721,7 +781,11 @@  apply_poly_transforms (scop_p scop)
 
   /* This feature is only enabled in the Graphite branch.  */
   if (0)
-    print_scop (dump_file, scop, 1);
+    {
+      graphite_file = init_graphite_out_file (file_scop_number);
+      print_scop (graphite_file, scop, 1);
+      file_scop_number++;
+    }
 
   return transform_done;
 }