Patchwork [fortran] Introducing -fdump-optimized-tree

login
register
mail settings
Submitter Thomas Koenig
Date Oct. 30, 2010, 1:25 p.m.
Message ID <1288445116.3588.5.camel@linux-fd1f.site>
Download mbox | patch
Permalink /patch/69654/
State New
Headers show

Comments

Thomas Koenig - Oct. 30, 2010, 1:25 p.m.
[Sorry if anybody sees this twice...]

Hi Tobias,

> >> fdump-fortran-xxx?  Or perhaps have an umbrella fdump=...
> > fdump-fortran-original and fdump-fortran-optimized sounds good to me.
> 
> Looks also fine to me.

Here's a patch which implements these options.  Regression-tested, 
also tested with "make info", "make dvi" and "make pdf".

OK for trunk?

2010-10-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

	* gfortran.h (gfc_option_t):  Replace dump_parse_tree by
	dump_fortran_original and add dump_fortran_optimized.
	* lang.opt: Add fdump-fortran-original and
	fdump-fortran-optimized.  Document that fdump-parse-tree is
	deprecated.
	* gfortran.texi: Add -fdump-fortran-original and
	-fdump-fortran-optimized.  -fdump-parse-tree is deprecated.
	* frontend-passes.c (gfc_run_passes):  If optimizing and
	if gfc_option.dump_fortran_optimized is set, dump the parse tree
	after optimization.
	* parse.c:  Rename gfc_option.dump_parse_tree to
	gfc_option.dump_fortran_original.
	* options.c (gfc_init_options):  Rename gfc_option.dump_parse_tree
	to gfc_option.dump_fortran_original and handle
	gfc_option.dump_fortran_optimize.
	(gfc_post_options): Rename gfc_option.dump_parse_tree
	to gfc_option.dump_fortran_original.
	(gfc_handle_option):  Rename OPT_fdump_parse_tree to
	OPT_fdump_fortran_original and gfc_option.dump_parse_tree
	to gfc_option.dump_fortran_original.  Handle
	OPT_fdump_fortran_optimized.

> > Should we keep fdump-parse-tree around as an alias for 4.6, then remove
> > it for 4.7?
> 
> Well, in principle one should really avoid removing flags; thus, we can 
> deprecate it, but I am not sure that we should already remove it in 4.7. 
> (On the other hand, -fdump-parse-tree is presumably extremely rarely 
> used by users and also I hardly every use it - thus, it does not matter 
> as much as removing -fbounds-check in favour of -fcheck=bounds would do.)

I think we can defer that decision until 4.7.

	Thomas
Mikael Morin - Oct. 30, 2010, 1:58 p.m.
On Saturday 30 October 2010 15:25:16 Thomas Koenig wrote:
> Here's a patch which implements these options.  Regression-tested,
> also tested with "make info", "make dvi" and "make pdf".
> 
> OK for trunk?
> 
> 2010-10-30  Thomas Koenig  <tkoenig@gcc.gnu.org>
> 
> 	* gfortran.h (gfc_option_t):  Replace dump_parse_tree by
> 	dump_fortran_original and add dump_fortran_optimized.
> 	* lang.opt: Add fdump-fortran-original and
> 	fdump-fortran-optimized.  Document that fdump-parse-tree is
> 	deprecated.
> 	* gfortran.texi: Add -fdump-fortran-original and
> 	-fdump-fortran-optimized.  -fdump-parse-tree is deprecated.
> 	* frontend-passes.c (gfc_run_passes):  If optimizing and
> 	if gfc_option.dump_fortran_optimized is set, dump the parse tree
> 	after optimization.
> 	* parse.c:  Rename gfc_option.dump_parse_tree to
> 	gfc_option.dump_fortran_original.
> 	* options.c (gfc_init_options):  Rename gfc_option.dump_parse_tree
> 	to gfc_option.dump_fortran_original and handle
> 	gfc_option.dump_fortran_optimize.
> 	(gfc_post_options): Rename gfc_option.dump_parse_tree
> 	to gfc_option.dump_fortran_original.
> 	(gfc_handle_option):  Rename OPT_fdump_parse_tree to
> 	OPT_fdump_fortran_original and gfc_option.dump_parse_tree
> 	to gfc_option.dump_fortran_original.  Handle
> 	OPT_fdump_fortran_optimized.
> 
> > > Should we keep fdump-parse-tree around as an alias for 4.6, then remove
> > > it for 4.7?
> > 
> > Well, in principle one should really avoid removing flags; thus, we can
> > deprecate it, but I am not sure that we should already remove it in 4.7.
> > (On the other hand, -fdump-parse-tree is presumably extremely rarely
> > used by users and also I hardly every use it - thus, it does not matter
> > as much as removing -fbounds-check in favour of -fcheck=bounds would do.)
> 
> I think we can defer that decision until 4.7.
> 
> 	Thomas


> Index: invoke.texi
> ===================================================================
> --- invoke.texi (Revision 166074)
> +++ invoke.texi (Arbeitskopie)
> @@ -143,8 +143,8 @@ and warnings}.
>  
>  @item Debugging Options
>  @xref{Debugging Options,,Options for debugging your program or GNU 
Fortran}.
> -@gccoptlist{-fdump-parse-tree  -ffpe-trap=@var{list} @gol
> --fdump-core -fbacktrace}
> +@gccoptlist{-fdump-fortran-original  -fdump-fortran-optimized @gol
> +-ffpe-trap=@var{list}  -fdump-core -fbacktrace -fdump-parse-tree}
>  
>  @item Directory Options
>  @xref{Directory Options,,Options for directory search}.
> @@ -879,10 +879,23 @@ GNU Fortran has various special options that are u
>  either your program or the GNU Fortran compiler.
>  
>  @table @gcctabopt
> -@item -fdump-parse-tree
> +@item -fdump-fortran-original
> +@opindex @code{fdump-fortran-original}
> +Output the internal parse tree after translating the source program
> +into internal representation.  Only really useful for debugging the
> +GNU Fortran compiler itself.  This option is deprecated; use
> +@code{-fdump-fortran-original} instead.
maximum recursion depth exceeded ;-)
Also, I would prefer "Output the internal parse tree _after parsing the source 
program_." as the internal representation seems ambiguous to me (front-end vs 
middle-end representation). Actually, I don't like my sentence either ("parse 
tree after parsing" isn't very nice). Oh well...

> +
> +@item -fdump-optimized-tree
> +@opindex @code{fdump-fortran-optimized}
> +Output the parse tree after front-end optimization.  Only really
> +useful for debugging the GNU Fortran compiler itself.
> +
>  @opindex @code{fdump-parse-tree}
> -Output the internal parse tree before starting code generation.  Only
> -really useful for debugging the GNU Fortran compiler itself.
> +Output the internal parse tree after translating the source program
> +into internal representation.  Only really useful for debugging the
> +GNU Fortran compiler itself.  This option is deprecated; use
> +@code{-fdump-fortran-original} instead.
>  
>  @item -ffpe-trap=@var{list}
>  @opindex @code{ffpe-trap=}@var{list}

OK with the documentation fixed.
Thanks

Mikael
Thomas Koenig - Oct. 30, 2010, 3:20 p.m.
Am Samstag, den 30.10.2010, 15:58 +0200 schrieb Mikael Morin:
> 
> OK with the documentation fixed. 

Thanks!  Committed as rev. 166091, after fixing the recursive reference.

	Thomas

Patch

Index: gfortran.h
===================================================================
--- gfortran.h	(Revision 166074)
+++ gfortran.h	(Arbeitskopie)
@@ -2178,7 +2178,8 @@  typedef struct
   int max_continue_fixed;
   int max_continue_free;
   int max_identifier_length;
-  int dump_parse_tree;
+  int dump_fortran_original;
+  int dump_fortran_optimized;
 
   int warn_aliasing;
   int warn_ampersand;
Index: lang.opt
===================================================================
--- lang.opt	(Revision 166074)
+++ lang.opt	(Arbeitskopie)
@@ -358,10 +358,18 @@  fdump-core
 Fortran
 Dump a core file when a runtime error occurs
 
-fdump-parse-tree
+fdump-fortran-original
 Fortran
 Display the code tree after parsing
 
+fdump-fortran-optimized
+Fortran
+Display the code tree after front end optimization
+
+fdump-parse-tree
+Fortran
+Display the code tree after parsing; deprecated option
+
 fexternal-blas
 Fortran
 Specify that an external BLAS library should be used for matmul calls on large-size arrays
Index: invoke.texi
===================================================================
--- invoke.texi	(Revision 166074)
+++ invoke.texi	(Arbeitskopie)
@@ -143,8 +143,8 @@  and warnings}.
 
 @item Debugging Options
 @xref{Debugging Options,,Options for debugging your program or GNU Fortran}.
-@gccoptlist{-fdump-parse-tree  -ffpe-trap=@var{list} @gol
--fdump-core -fbacktrace}
+@gccoptlist{-fdump-fortran-original  -fdump-fortran-optimized @gol
+-ffpe-trap=@var{list}  -fdump-core -fbacktrace -fdump-parse-tree}
 
 @item Directory Options
 @xref{Directory Options,,Options for directory search}.
@@ -879,10 +879,23 @@  GNU Fortran has various special options that are u
 either your program or the GNU Fortran compiler.
 
 @table @gcctabopt
-@item -fdump-parse-tree
+@item -fdump-fortran-original
+@opindex @code{fdump-fortran-original}
+Output the internal parse tree after translating the source program
+into internal representation.  Only really useful for debugging the
+GNU Fortran compiler itself.  This option is deprecated; use
+@code{-fdump-fortran-original} instead.
+
+@item -fdump-optimized-tree
+@opindex @code{fdump-fortran-optimized}
+Output the parse tree after front-end optimization.  Only really
+useful for debugging the GNU Fortran compiler itself.
+
 @opindex @code{fdump-parse-tree}
-Output the internal parse tree before starting code generation.  Only
-really useful for debugging the GNU Fortran compiler itself.
+Output the internal parse tree after translating the source program
+into internal representation.  Only really useful for debugging the
+GNU Fortran compiler itself.  This option is deprecated; use
+@code{-fdump-fortran-original} instead.
 
 @item -ffpe-trap=@var{list}
 @opindex @code{ffpe-trap=}@var{list}
Index: frontend-passes.c
===================================================================
--- frontend-passes.c	(Revision 166074)
+++ frontend-passes.c	(Arbeitskopie)
@@ -42,7 +42,11 @@  void
 gfc_run_passes (gfc_namespace *ns)
 {
   if (optimize)
-    optimize_namespace (ns);
+    {
+      optimize_namespace (ns);
+      if (gfc_option.dump_fortran_optimized)
+	gfc_dump_parse_tree (ns, stdout);
+    }
 }
 
 /* Callback for each gfc_code node invoked through gfc_code_walker
Index: parse.c
===================================================================
--- parse.c	(Revision 166074)
+++ parse.c	(Arbeitskopie)
@@ -4373,7 +4373,7 @@  loop:
   gfc_resolve (gfc_current_ns);
 
   /* Dump the parse tree if requested.  */
-  if (gfc_option.dump_parse_tree)
+  if (gfc_option.dump_fortran_original)
     gfc_dump_parse_tree (gfc_current_ns, stdout);
 
   gfc_get_errors (NULL, &errors);
@@ -4431,7 +4431,7 @@  prog_units:
 
   /* Do the parse tree dump.  */ 
   gfc_current_ns
-	= gfc_option.dump_parse_tree ? gfc_global_ns_list : NULL;
+	= gfc_option.dump_fortran_original ? gfc_global_ns_list : NULL;
 
   for (; gfc_current_ns; gfc_current_ns = gfc_current_ns->sibling)
     {
Index: options.c
===================================================================
--- options.c	(Revision 166074)
+++ options.c	(Arbeitskopie)
@@ -90,7 +90,8 @@  gfc_init_options (unsigned int decoded_options_cou
   gfc_option.flag_max_array_constructor = 65535;
   gfc_option.convert = GFC_CONVERT_NATIVE;
   gfc_option.record_marker = 0;
-  gfc_option.dump_parse_tree = 0;
+  gfc_option.dump_fortran_original = 0;
+  gfc_option.dump_fortran_optimized = 0;
 
   gfc_option.warn_aliasing = 0;
   gfc_option.warn_ampersand = 0;
@@ -270,7 +271,7 @@  gfc_post_options (const char **pfilename)
     gfc_option.rtcheck |= GFC_RTCHECK_BOUNDS;
 
   if (flag_compare_debug)
-    gfc_option.dump_parse_tree = 0;
+    gfc_option.dump_fortran_original = 0;
 
   /* Verify the input file name.  */
   if (!filename || strcmp (filename, "-") == 0)
@@ -686,10 +687,15 @@  gfc_handle_option (size_t scode, const char *arg,
       gfc_option.flag_d_lines = 0;
       break;
 
+    case OPT_fdump_fortran_original:
     case OPT_fdump_parse_tree:
-      gfc_option.dump_parse_tree = value;
+      gfc_option.dump_fortran_original = value;
       break;
 
+    case OPT_fdump_fortran_optimized:
+      gfc_option.dump_fortran_optimized = value;
+      break;
+
     case OPT_ffixed_form:
       gfc_option.source_form = FORM_FIXED;
       break;