diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2011-10-19 15:50:00 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2011-10-19 15:50:00 +0000 |
commit | 09dbcd96d6b668e325e3b34297648d12f25e51b9 (patch) | |
tree | 09d9289cc5c7291cb78b366d6d4743cff25a797d /gcc/rtl.h | |
parent | 2f47b8d3be24beae7974234c972aaae5612aae4e (diff) | |
download | gcc-09dbcd96d6b668e325e3b34297648d12f25e51b9.zip gcc-09dbcd96d6b668e325e3b34297648d12f25e51b9.tar.gz gcc-09dbcd96d6b668e325e3b34297648d12f25e51b9.tar.bz2 |
re PR middle-end/49310 (Compile time hog in var-tracking emit)
PR debug/49310
* var-tracking.c (loc_exp_dep, onepart_aux): New structs.
(variable_part): Replace offset with union.
(enum onepart_enum, onepart_enum_t): New.
(variable_def): Drop cur_loc_changed, add onepart.
(value_chain_def, const_value_chain): Remove.
(VAR_PART_OFFSET, VAR_LOC_1PAUX): New macros, with checking.
(VAR_LOC_DEP_LST, VAR_LOC_DEP_LSTP): New macros.
(VAR_LOC_FROM, VAR_LOC_DEPTH, VAR_LOC_DEP_VEC): Likewise.
(value_chain_pool, value_chains): Remove.
(dropped_values): New.
(struct parm_reg): Only if HAVE_window_save.
(vt_stack_adjustments): Don't record register arguments.
(dv_as_rtx): New.
(dv_onepart_p): Return a onepart_enum_t.
(onepart_pool): New.
(dv_pool): Remove.
(dv_from_rtx): New.
(variable_htab_free): Release onepart aux data. Reset flags.
(value_chain_htab_hash, value_chain_htab_eq): Remove.
(unshare_variable): Use onepart field. Propagate onepart aux
data or offset. Drop cur_loc_changed.
(val_store): Cope with NULL insn. Rephrase dump output. Check
for unsuitable locs. Add FIXME on using cselib locs.
(val_reset): Remove FIXME of unfounded concerns.
(val_resolve): Check for unsuitable locs. Add FIXME on using
cselib locs.
(variable_union): Use onepart field, adjust access to offset.
(NO_LOC_P): New.
(VALUE_CHANGED, DECL_CHANGED): Update doc.
(set_dv_changed): Clear NO_LOC_P when changed.
(find_loc_in_1pdv): Use onepart field.
(intersect_loc_chains): Likewise.
(unsuitable_loc): New.
(loc_cmp): Keep ENTRY_VALUEs at the end of the loc list.
(add_value_chain, add_value_chains): Remove.
(add_cselib_value_chains, remove_value_chain): Likewise.
(remove_value_chains, remove_cselib_value_chains): Likewise.
(canonicalize_loc_order_check): Use onepart. Drop cur_loc_changed.
(canonicalize_values_star, canonicalize_vars_star): Use onepart.
(variable_merge_over_cur): Likewise. Adjust access to offset.
Drop cur_loc_changed.
(variable_merge_over_src): Use onepart field.
(remove_duplicate_values): Likewise.
(variable_post_merge_new_vals): Likewise.
(find_mem_expr_in_1pdv): Likewise.
(dataflow_set_preserve_mem_locs): Likewise. Drop cur_loc_changed
and value chains.
(dataflow_set_remove_mem_locs): Likewise. Use VAR_LOC_FROM.
(variable_different_p): Use onepart field. Move onepart test out
of the loop.
(argument_reg_set): Drop.
(add_uses, add_stores): Preserve but do not record in dynamic
tables equivalences for ENTRY_VALUEs and CFA_based addresses.
Avoid unsuitable address expressions.
(EXPR_DEPTH): Unlimit.
(EXPR_USE_DEPTH): Repurpose PARAM_MAX_VARTRACK_EXPR_DEPTH.
(prepare_call_arguments): Use DECL_RTL_IF_SET.
(dump_var): Adjust access to offset.
(variable_from_dropped, recover_dropped_1paux): New.
(variable_was_changed): Drop cur_loc_changed. Use onepart.
Preserve onepart aux in empty_var. Recover empty_var and onepart
aux from dropped_values.
(find_variable_location_part): Special-case onepart. Adjust
access to offset.
(set_slot_part): Use onepart. Drop cur_loc_changed. Adjust
access to offset. Initialize onepaux. Drop value chains.
(delete_slot_part): Drop value chains. Use VAR_LOC_FROM.
(VEC (variable, heap), VEC (rtx, stack)): Define.
(expand_loc_callback_data): Drop dummy, cur_loc_changed,
ignore_cur_loc. Add expanding, pending, depth.
(loc_exp_dep_alloc, loc_exp_dep_clear): New.
(loc_exp_dep_insert, loc_exp_dep_set): New.
(notify_dependents_of_resolved_value): New.
(update_depth, vt_expand_var_loc_chain): New.
(vt_expand_loc_callback): Revamped.
(resolve_expansions_pending_recursion): New.
(INIT_ELCD, FINI_ELCD): New.
(vt_expand_loc): Use the new macros above. Drop ignore_cur_loc
parameter, adjust all callers.
(vt_expand_loc_dummy): Drop.
(vt_expand_1pvar): New.
(emit_note_insn_var_location): Operate on non-debug decls only.
Revamp multi-part cur_loc recomputation and one-part expansion.
Drop cur_loc_changed. Adjust access to offset.
(VEC (variable, heap)): Drop.
(changed_variables_stack, changed_values_stack): Drop.
(check_changed_vars_0, check_changed_vars_1): Remove.
(check_changed_vars_2, check_changed_vars_3): Remove.
(values_to_stack, remove_value_from_changed_variables): New.
(notify_dependents_of_changed_value, process_changed_values): New.
(emit_notes_for_changes): Revamp onepart updates.
(emit_notes_for_differences_1): Use onepart. Drop cur_loc_changed
and value chains. Propagate onepaux. Recover empty_var and onepaux
from dropped_values.
(emit_notes_for_differences_2): Drop value chains.
(emit_notes_in_bb): Adjust.
(vt_emit_notes): Drop value chains, changed_variables_stack.
Initialize and release dropped_values.
(create_entry_value): Revamp.
(vt_add_function_parameter): Use new interface.
(note_register_arguments): Remove.
(vt_initialize): Drop value chains and register arguments.
(vt_finalize): Drop value chains. Release windowed_parm_regs only
if HAVE_window_save.
* rtl.h: Document various pass-local uses of RTL flags.
* tree.h (DECL_RTL_KNOWN_SET): New.
* doc/invoke.texi (param max-vartrack-expr-depth): Update
description and default.
From-SVN: r180194
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r-- | gcc/rtl.h | 21 |
1 files changed, 15 insertions, 6 deletions
@@ -265,7 +265,8 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"), when we access a component. 1 in a CALL_INSN if it is a sibling call. 1 in a SET that is for a return. - In a CODE_LABEL, part of the two-bit alternate entry field. */ + In a CODE_LABEL, part of the two-bit alternate entry field. + 1 in a CONCAT is VAL_EXPR_IS_COPIED in var-tracking.c. */ unsigned int jump : 1; /* In a CODE_LABEL, part of the two-bit alternate entry field. 1 in a MEM if it cannot trap. @@ -278,7 +279,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"), constants pool. 1 in a CALL_INSN logically equivalent to ECF_CONST and TREE_READONLY. 1 in a NOTE, or EXPR_LIST for a const call. - 1 in a JUMP_INSN of an annulling branch. */ + 1 in a JUMP_INSN of an annulling branch. + 1 in a CONCAT is VAL_EXPR_IS_CLOBBERED in var-tracking.c. + 1 in a preserved VALUE is PRESERVED_VALUE_P in cselib.c. */ unsigned int unchanging : 1; /* 1 in a MEM or ASM_OPERANDS expression if the memory reference is volatile. 1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL, BARRIER, or NOTE @@ -290,7 +293,8 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"), non-local label. In a SYMBOL_REF, this flag is used for machine-specific purposes. In a PREFETCH, this flag indicates that it should be considered a scheduling - barrier. */ + barrier. + 1 in a CONCAT is VAL_NEEDS_RESOLUTION in var-tracking.c. */ unsigned int volatil : 1; /* 1 in a MEM referring to a field of an aggregate. 0 if the MEM was a variable or the result of a * operator in C; @@ -311,19 +315,24 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"), In a REG, this is not needed for that purpose, and used instead in `leaf_renumber_regs_insn'. 1 in a SYMBOL_REF, means that emit_library_call - has used it as the function. */ + has used it as the function. + 1 in a CONCAT is VAL_HOLDS_TRACK_EXPR in var-tracking.c. + 1 in a VALUE or DEBUG_EXPR is VALUE_RECURSED_INTO in var-tracking.c. */ unsigned int used : 1; /* 1 in an INSN or a SET if this rtx is related to the call frame, either changing how we compute the frame address or saving and restoring registers in the prologue and epilogue. 1 in a REG or MEM if it is a pointer. 1 in a SYMBOL_REF if it addresses something in the per-function - constant string pool. */ + constant string pool. + 1 in a VALUE is VALUE_CHANGED in var-tracking.c. */ unsigned frame_related : 1; /* 1 in a REG or PARALLEL that is the current function's return value. 1 in a MEM if it refers to a scalar. 1 in a SYMBOL_REF for a weak symbol. - 1 in a CALL_INSN logically equivalent to ECF_PURE and DECL_PURE_P. */ + 1 in a CALL_INSN logically equivalent to ECF_PURE and DECL_PURE_P. + 1 in a CONCAT is VAL_EXPR_HAS_REVERSE in var-tracking.c. + 1 in a VALUE or DEBUG_EXPR is NO_LOC_P in var-tracking.c. */ unsigned return_val : 1; /* The first element of the operands of this rtx. |