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]

Re: [SFN+LVU+IEPM v4 5/9] [SFN] introduce statement frontier notes, still disabled


On 11/09/2017 07:34 PM, Alexandre Oliva wrote:
> This patch completes the infrastructure for the introduction of
> statement frontiers in C-family languages.
> 
> It brings in all the code remaining code needed to introduce and
> transform begin stmt trees, gimple stmts, insns and notes, and
> ultimately use them to generate the is_stmt column in DWARF2+ line
> number tables/programs, however none of it is activated: the option
> that would do so will be introduced in a subsequent patch.
> 
> This patch depends on an earlier patch with not-quite-boilerplate
> changes towards SFN.
> 
> for  gcc/c-family/ChangeLog
> 
> 	* c-semantics.c (pop_stmt_list): Move begin stmt marker into
> 	subsequent statement list.
> 
> for  gcc/c/ChangeLog
> 
> 	* c-objc-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true.
> 	* c-parser.c (add_debug_begin_stmt): New.
> 	(c_parser_declaration_or_fndef): Call it.
> 	(c_parser_compound_statement_nostart): Likewise.
> 	(c_parser_statement_after_labels): Likewise.
> 	* c-typeck (c_finish_stmt_expr): Skip begin stmts markers.
> 
> for  gcc/cp/ChangeLog
> 
> 	* constexpr.c (check_constexpr_ctor_body_1): Skip begin stmt
> 	markers.
> 	(constexpr_fn_retval): Likewise.
> 	(potential_constant_expression_1): Likewise.
> 	(cxx_eval_statement_list): Check that a begin stmt marker is
> 	not used as the value of a statement list.
> 	(cxx_eval_constant_expression): Return begin stmt markers
> 	unchanged.
> 	* cp-array-notation.c (stmt_location): New.
> 	(cp_expand_cond_array_notations): Use it.
> 	* cp-objcp-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true.
> 	* parser.c (add_debug_begin_stmt): New.
> 	(cp_parser_statement): Call it.
> 	* pt.c (tsubst_copy): Handle begin stmt markers.
> 
> for  gcc/ChangeLog
> 
> 	* cfgexpand.c (expand_gimple_basic_block): Handle begin stmt
> 	markers.  Integrate source bind into debug stmt expand loop.
> 	(pass_expand::execute): Check debug marker limit.  Avoid deep
> 	TER and expand debug locations for debug bind insns only.
> 	* cse.c (insn_live_p): Keep nonbind markers and debug bindings
> 	followed by them.
> 	* df-scan.c (df_insn_delete): Accept out-of-block debug insn.
> 	* final.c (reemit_insn_block_notes): Take current block from
> 	nonbind markers.  Declare note where it's first set.
> 	(final_scan_insn): Handle begin stmt notes.  Emit is_stmt according to
> 	begin stmt markers if enabled.
> 	(notice_source_line): Handle nonbind markers.  Fail if their
> 	location is unknown or that of builtins.
> 	(rest_of_handle_final): Convert begin stmt markers to notes if
> 	var-tracking didn't run.
> 	(rest_of_clean_state): Skip begin stmt markers.
> 	* gimple-pretty-print.c (dump_gimple_debug): Handle begin stmt
> 	markers.
> 	* function.c (allocate_struct_function): Set begin_stmt_markers.
> 	* function.h (struct function): Add debug_marker_count counter
> 	and debug_nonbind_markers flag.
> 	* gimple-iterator.c (gsi_remove): Adjust debug_marker_count.
> 	* gimple-low.c (lower_function_body): Adjust
> 	debug_nonbind_markers.
> 	(lower_stmt): Drop or skip gimple debug stmts.
> 	(lower_try_catch): Skip debug stmts.
> 	* gimple.c (gimple_build_debug_begin_stmt): New.
> 	(gimple_copy): Increment debug_marker_count if copying one.
> 	* gimple.h (gimple_build_debug_begin_stmt): Declare.
> 	* gimplify.c (rexpr_location): New.
> 	(rexpr_has_location): New.
> 	(warn_switch_unreachable_r): Handle gimple debug stmts.
> 	(shortcut_cond_r): Call expr_location.
> 	(find_goto): New.
> 	(find_goto_label): New.
> 	(shortcut_cond_expr): Call expr_has_location, expr_location, and
> 	find_goto_label.
> 	(gimplify_cond_expr): Call find_goto_label, expr_has_location, and
> 	expr_location.
> 	(gimplify_expr): Handle begin stmt markers.  Reject debug expr decls.
> 	* langhooks-def.h (LANG_HOOKS_EMITS_BEGIN_STMT): New.  Add to...
> 	(LANG_HOOKS_INITIALIZER): ... this.
> 	* langhooks.h (struct lang_hooks): Add emits_begin_stmt.
> 	* lra-contraints.c (inherit_reload_reg): Tolerate between-blocks
> 	debug insns.
> 	(update_ebb_live_info): Skip debug insn markers.
> 	* lra.c (debug_insn_static_data): Rename to...
> 	(debug_bind_static_data): ... this.
> 	(debug_marker_static_data): New.
> 	(lra_set_insn_recog_data): Select one of the above depending
> 	on debug insn kind.
> 	(lra_update_isn_regno_info): Don't assume debug insns have
> 	freqs.
> 	(push_insns): Skip debug insns.
> 	* lto-streamer-in.c (input_function): Drop debug stmts
> 	depending on active options.  Adjust debug_nonbind_markers.
> 	* params.def (PARAM_MAX_DEBUG_MARKER_COUNT): New.
> 	* print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle
> 	begin stmt marker notes.
> 	(print_insn): Likewise.
> 	* recog.c (extract_insn): Recognize rtl for debug markers.
> 	* rtl.def (DEBUG_MARKER): New.
> 	* tree-inline.c: Include params.h.
> 	(remap_gimple_stmt): Handle nonbind markers.
> 	(maybe_move_debug_stmts_to_successors): Likewise.
> 	(copy_debug_stmt): Likewise.
> 	* tree-iterator.c (append_to_statement_list_1): Append begin stmt
> 	markers regardless of no side effects.
> 	(tsi_link_before): Don't update container's side effects when adding
> 	a begin stmt marker.
> 	(tsi_link_after): Likewise.
> 	(expr_first): Skip begin stmt markers.
> 	(expr_last): Likewise.
> 	* tree-pretty-print (dump_generic_node): Handle begin stmt markers.
> 	* tree-ssa-threadedge.c (propagate_threaded_block_debug_info):
> 	Disregard nonbind markers.
> 	* tree.c (make_node_stat): Don't set side effects for begin stmt
> 	markers.
> 	(build1_stat): Likewise.
> 	* tree.def (DEBUG_BEGIN_STMT): New.
> 	* tree.h (GOTO_DESTINATION): Require a GOTO_EXPR.
> 	* var-tracking.c (delete_debug_insns): Renamed to...
> 	(delete_vta_debug_insns): ... this.
> 	(reemit_marker_as_note): New.
> 	(vt_initialize): Reemit markers.
> 	(delete_vta_debug_insns): Likewise.
> 	(vt_debug_insns_local): Reemit or delete markers.
> 	(variable_tracking_main_1): Likewise.
> 	* doc/generic.texi (DEBUG_BEGIN_STMT): Document.
> 	* doc/gimple.texi (gimple_debug_begin_stmt_p): New.
> 	(gimple_debug_nonbind_marker_p): New.
> 	(gimple_build_debug_bind): Adjust.
> 	(gimple_build_debug_begin_stmt): New.
> 	* doc/invoke.texi (max-debug-marker-count): New param.
> 	* doc/rtl.texi (debug_implicit_ptr, entry_value): New.
> 	(debug_parameter_ref, debug_marker): New.
> 	(NOTE_INSN_BEGIN_STMT): New.
> 	(DEBUG_INSN): Describe begin stmt markers.
Note I expect minor updates will be necessary due to the Cilk+ removal.
Such changes are pre-approved.

ok

Jeff


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