diff mbox series

[5/9,SFN] Introduce -gstatement-frontiers option, enable debug markers

Message ID 20170930090827.6604-5-aoliva@redhat.com
State New
Headers show
Series [1/9,SFN] adjust RTL insn-walking API | expand

Commit Message

Alexandre Oliva Sept. 30, 2017, 9:08 a.m. UTC
Introduce a command line option to enable statement frontiers, enabled
by default in optimized builds with DWARF2+ debug information.

This patch depends on an earlier patch that completed the
infrastructure for debug markers, and on another patch that turns -g
into a negatable option prefix.

gcc/ChangeLog

	* common.opt (gstatement-frontiers): New, setting
	debug_nonbind_markers_p.
	* rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): Activate.
	* toplev.c (process_options): Autodetect value for debug statement
	frontiers option.
	* tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Activate.
	* doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): New.
---
 gcc/common.opt      |  4 ++++
 gcc/doc/invoke.texi | 12 ++++++++++++
 gcc/rtl.h           |  2 +-
 gcc/toplev.c        |  4 ++++
 gcc/tree.h          |  2 +-
 5 files changed, 22 insertions(+), 2 deletions(-)

Comments

Richard Biener Oct. 9, 2017, 1:11 p.m. UTC | #1
On Sat, Sep 30, 2017 at 11:08 AM, Alexandre Oliva <aoliva@redhat.com> wrote:
> Introduce a command line option to enable statement frontiers, enabled
> by default in optimized builds with DWARF2+ debug information.
>
> This patch depends on an earlier patch that completed the
> infrastructure for debug markers, and on another patch that turns -g
> into a negatable option prefix.

Ok.

Richard.

> gcc/ChangeLog
>
>         * common.opt (gstatement-frontiers): New, setting
>         debug_nonbind_markers_p.
>         * rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): Activate.
>         * toplev.c (process_options): Autodetect value for debug statement
>         frontiers option.
>         * tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Activate.
>         * doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): New.
> ---
>  gcc/common.opt      |  4 ++++
>  gcc/doc/invoke.texi | 12 ++++++++++++
>  gcc/rtl.h           |  2 +-
>  gcc/toplev.c        |  4 ++++
>  gcc/tree.h          |  2 +-
>  5 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/common.opt b/gcc/common.opt
> index dfde6ad..a12c11c 100644
> --- a/gcc/common.opt
> +++ b/gcc/common.opt
> @@ -2889,6 +2889,10 @@ gstabs+
>  Common Driver JoinedOrMissing Negative(gvms)
>  Generate debug information in extended STABS format.
>
> +gstatement-frontiers
> +Common Driver Var(debug_nonbind_markers_p) Init(2)
> +Emit progressive recommended breakpoint locations.
> +
>  gstrict-dwarf
>  Common Driver Report Var(dwarf_strict) Init(0)
>  Don't emit DWARF additions beyond selected version.
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 108d730..85e41e4 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -346,6 +346,7 @@ Objective-C and Objective-C++ Dialects}.
>  -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
>  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
>  -gcolumn-info  -gno-column-info @gol
> +-gstatement-frontiers  -gno-statement-frontiers @gol
>  -gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
>  -fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
>  -fno-eliminate-unused-debug-types @gol
> @@ -7040,6 +7041,17 @@ Emit location column information into DWARF debugging information, rather
>  than just file and line.
>  This option is disabled by default.
>
> +@item -gstatement-frontiers
> +@item -gno-statement-frontiers
> +@opindex gstatement-frontiers
> +@opindex gno-statement-frontiers
> +This option causes GCC to create markers in the internal representation
> +at the beginning of statements, and to keep them roughly in place
> +throughout compilation, using them to guide the output of @code{is_stmt}
> +markers in the line number table.  This is enabled by default when
> +compiling with optimization (@option{-Os}, @option{-O}, @option{-O2},
> +@dots{}), and outputting DWARF 2 debug information at the normal level.
> +
>  @item -gz@r{[}=@var{type}@r{]}
>  @opindex gz
>  Produce compressed debug sections in DWARF format, if that is supported.
> diff --git a/gcc/rtl.h b/gcc/rtl.h
> index c79a277..a0c27fc 100644
> --- a/gcc/rtl.h
> +++ b/gcc/rtl.h
> @@ -816,7 +816,7 @@ struct GTY(()) rtvec_def {
>  #define NONDEBUG_INSN_P(X) (INSN_P (X) && !DEBUG_INSN_P (X))
>
>  /* Nonzero if DEBUG_MARKER_INSN_P may possibly hold.  */
> -#define MAY_HAVE_DEBUG_MARKER_INSNS 0 /* debug_nonbind_markers_p */
> +#define MAY_HAVE_DEBUG_MARKER_INSNS debug_nonbind_markers_p
>  /* Nonzero if DEBUG_BIND_INSN_P may possibly hold.  */
>  #define MAY_HAVE_DEBUG_BIND_INSNS flag_var_tracking_assignments
>  /* Nonzero if DEBUG_INSN_P may possibly hold.  */
> diff --git a/gcc/toplev.c b/gcc/toplev.c
> index bee79d3..0ef46da 100644
> --- a/gcc/toplev.c
> +++ b/gcc/toplev.c
> @@ -1514,6 +1514,10 @@ process_options (void)
>      warning_at (UNKNOWN_LOCATION, 0,
>                 "var-tracking-assignments changes selective scheduling");
>
> +  if (debug_nonbind_markers_p == AUTODETECT_VALUE)
> +    debug_nonbind_markers_p = optimize && debug_info_level >= DINFO_LEVEL_NORMAL
> +      && (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG);
> +
>    if (flag_tree_cselim == AUTODETECT_VALUE)
>      {
>        if (HAVE_conditional_move)
> diff --git a/gcc/tree.h b/gcc/tree.h
> index 62a85ea..8c3bda1 100644
> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -1127,7 +1127,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
>    ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
>
>  /* Nonzero if gimple_debug_nonbind_marker_p() may possibly hold.  */
> -#define MAY_HAVE_DEBUG_MARKER_STMTS 0 /* debug_nonbind_markers_p */
> +#define MAY_HAVE_DEBUG_MARKER_STMTS debug_nonbind_markers_p
>  /* Nonzero if gimple_debug_bind_p() (and thus
>     gimple_debug_source_bind_p()) may possibly hold.  */
>  #define MAY_HAVE_DEBUG_BIND_STMTS flag_var_tracking_assignments
> --
> 2.9.5
>
diff mbox series

Patch

diff --git a/gcc/common.opt b/gcc/common.opt
index dfde6ad..a12c11c 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -2889,6 +2889,10 @@  gstabs+
 Common Driver JoinedOrMissing Negative(gvms)
 Generate debug information in extended STABS format.
 
+gstatement-frontiers
+Common Driver Var(debug_nonbind_markers_p) Init(2)
+Emit progressive recommended breakpoint locations.
+
 gstrict-dwarf
 Common Driver Report Var(dwarf_strict) Init(0)
 Don't emit DWARF additions beyond selected version.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 108d730..85e41e4 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -346,6 +346,7 @@  Objective-C and Objective-C++ Dialects}.
 -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
 -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
 -gcolumn-info  -gno-column-info @gol
+-gstatement-frontiers  -gno-statement-frontiers @gol
 -gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
 -fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
 -fno-eliminate-unused-debug-types @gol
@@ -7040,6 +7041,17 @@  Emit location column information into DWARF debugging information, rather
 than just file and line.
 This option is disabled by default.
 
+@item -gstatement-frontiers
+@item -gno-statement-frontiers
+@opindex gstatement-frontiers
+@opindex gno-statement-frontiers
+This option causes GCC to create markers in the internal representation
+at the beginning of statements, and to keep them roughly in place
+throughout compilation, using them to guide the output of @code{is_stmt}
+markers in the line number table.  This is enabled by default when
+compiling with optimization (@option{-Os}, @option{-O}, @option{-O2},
+@dots{}), and outputting DWARF 2 debug information at the normal level.
+
 @item -gz@r{[}=@var{type}@r{]}
 @opindex gz
 Produce compressed debug sections in DWARF format, if that is supported.
diff --git a/gcc/rtl.h b/gcc/rtl.h
index c79a277..a0c27fc 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -816,7 +816,7 @@  struct GTY(()) rtvec_def {
 #define NONDEBUG_INSN_P(X) (INSN_P (X) && !DEBUG_INSN_P (X))
 
 /* Nonzero if DEBUG_MARKER_INSN_P may possibly hold.  */
-#define MAY_HAVE_DEBUG_MARKER_INSNS 0 /* debug_nonbind_markers_p */
+#define MAY_HAVE_DEBUG_MARKER_INSNS debug_nonbind_markers_p
 /* Nonzero if DEBUG_BIND_INSN_P may possibly hold.  */
 #define MAY_HAVE_DEBUG_BIND_INSNS flag_var_tracking_assignments
 /* Nonzero if DEBUG_INSN_P may possibly hold.  */
diff --git a/gcc/toplev.c b/gcc/toplev.c
index bee79d3..0ef46da 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1514,6 +1514,10 @@  process_options (void)
     warning_at (UNKNOWN_LOCATION, 0,
 		"var-tracking-assignments changes selective scheduling");
 
+  if (debug_nonbind_markers_p == AUTODETECT_VALUE)
+    debug_nonbind_markers_p = optimize && debug_info_level >= DINFO_LEVEL_NORMAL
+      && (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG);
+
   if (flag_tree_cselim == AUTODETECT_VALUE)
     {
       if (HAVE_conditional_move)
diff --git a/gcc/tree.h b/gcc/tree.h
index 62a85ea..8c3bda1 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1127,7 +1127,7 @@  extern void omp_clause_range_check_failed (const_tree, const char *, int,
   ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
 
 /* Nonzero if gimple_debug_nonbind_marker_p() may possibly hold.  */
-#define MAY_HAVE_DEBUG_MARKER_STMTS 0 /* debug_nonbind_markers_p */
+#define MAY_HAVE_DEBUG_MARKER_STMTS debug_nonbind_markers_p
 /* Nonzero if gimple_debug_bind_p() (and thus
    gimple_debug_source_bind_p()) may possibly hold.  */
 #define MAY_HAVE_DEBUG_BIND_STMTS flag_var_tracking_assignments