GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "target.h"
#include "rtl.h"
#include "tree.h"
#include "gimple.h"
#include "cfghooks.h"
#include "tree-pass.h"
#include "ssa.h"
#include "cgraph.h"
#include "tree-pretty-print.h"
#include "diagnostic-core.h"
#include "gimple-predict.h"
#include "fold-const.h"
#include "stor-layout.h"
#include "calls.h"
#include "tree-inline.h"
#include "langhooks.h"
#include "cfganal.h"
#include "tree-iterator.h"
#include "intl.h"
#include "gimple-iterator.h"
#include "gimple-fold.h"
#include "tree-eh.h"
#include "gimplify.h"
#include "gimplify-me.h"
#include "gimple-walk.h"
#include "tree-cfg.h"
#include "tree-into-ssa.h"
#include "tree-dfa.h"
#include "tree-ssa.h"
#include "except.h"
#include "debug.h"
#include "value-prof.h"
#include "cfgloop.h"
#include "builtins.h"
#include "stringpool.h"
#include "attribs.h"
#include "sreal.h"
#include "tree-cfgcleanup.h"
#include "tree-ssa-live.h"
#include "alloc-pool.h"
#include "symbol-summary.h"
#include "symtab-thunks.h"
#include "symtab-clones.h"
#include "asan.h"
Macros | |
#define | RETURN_TRUE_IF_VAR(T) |
Variables | |
eni_weights | eni_size_weights |
eni_weights | eni_time_weights |
static int | processing_debug_stmt = 0 |
static const char * | inline_forbidden_reason |
#define RETURN_TRUE_IF_VAR | ( | T | ) |
Referenced by remap_type_2().
|
static |
Insert clobbers for automatic variables of inlined ID->src_fn function at the start of basic block ID->eh_landing_pad_dest.
References auto_var_in_fn_p(), basic_block_def::aux, bitmap_bit_p, build_clobber(), compute_live_vars(), DECL_ATTRIBUTES, DECL_HARD_REGISTER, DECL_HAS_VALUE_EXPR_P, DECL_UID, destroy_live_vars(), FOR_EACH_EDGE, FOR_EACH_VEC_SAFE_ELT, hash_map< KeyId, Value, Traits >::get(), gimple_build_assign(), gsi_after_labels(), gsi_insert_before(), GSI_NEW_STMT, i, basic_block_def::index, is_gimple_reg(), lookup_attribute(), NULL, basic_block_def::preds, hash_map< KeyId, Value, Traits >::put(), TREE_THIS_VOLATILE, TREE_TYPE, and VAR_P.
Referenced by copy_cfg_body().
|
inlinestatic |
Add local variables from CALLEE to CALLER.
References add_local_decl(), can_be_nonlocal(), copy_tree_body_r(), DECL_DEBUG_EXPR, DECL_HAS_DEBUG_EXPR_P, FOR_EACH_LOCAL_DECL, NULL, remap_decl(), SET_DECL_DEBUG_EXPR, VAR_P, and walk_tree.
Referenced by expand_call_inline(), and tree_function_versioning().
Duplicate a type, fields and all.
References cfun, copy_decl_no_change(), current_function_decl, copy_body_data::debug_map, NULL, remap_type_1(), type(), and TYPE_CANONICAL.
|
static |
Decide if DECL can be put into BLOCK_NONLOCAL_VARs.
References auto_var_in_fn_p(), TREE_CODE, and VAR_P.
Referenced by add_local_variables(), remap_decls(), and replace_locals_stmt().
|
static |
Return a copy of the function's argument tree without any modifications.
References DECL_CHAIN, lang_hooks::dup_lang_specific_decl, NULL, remap_decl(), and TREE_CODE.
Referenced by tree_function_versioning().
|
static |
Copy basic block, scale profile accordingly. Edges will be taken care of later
References symtab_node::address_taken, profile_count::adjust_for_ipa_scaling(), profile_count::apply_probability(), profile_count::apply_scale(), as_a(), basic_block_def::aux, build_int_cst(), cgraph_edge::call_stmt, CB_CGE_DUPLICATE, CB_CGE_MOVE, CB_CGE_MOVE_CLONES, cfun, cgraph_edge::clone(), basic_block_def::count, cgraph_edge::count, count, create_basic_block(), create_tmp_reg_or_ssa_name(), DECL_ARGUMENTS, DECL_CHAIN, symtab_node::definition, dump_file, symtab_node::dump_name(), dyn_cast(), fndecl_built_in_p(), gcc_assert, gcc_checking_assert, gcc_unreachable, cgraph_node::get_create(), gimple_build_assign(), gimple_build_call_vec(), gimple_call_arg_ptr(), gimple_call_copy_flags(), gimple_call_fn(), gimple_call_fndecl(), gimple_call_fntype(), gimple_call_internal_fn(), gimple_call_internal_p(), gimple_call_lhs(), gimple_call_num_args(), gimple_call_set_fntype(), gimple_call_set_lhs(), gimple_call_set_va_arg_pack(), gimple_call_va_arg_pack_p(), gimple_duplicate_stmt_histograms(), gimple_location(), gimple_nop_p(), gimple_regimplify_operands(), gimple_seq_empty_p(), gimple_set_location(), gimple_uid(), walk_stmt_info::gsi, gsi_end_p(), gsi_insert_after(), gsi_last_bb(), GSI_NEW_STMT, gsi_next(), gsi_remove(), gsi_replace(), gsi_start(), gsi_start_bb(), gsi_stmt(), integer_type_node, is_a(), maybe_duplicate_eh_stmt_fn(), cgraph_edge::next_speculative_call_target(), notice_special_calls(), NULL, cgraph_edge::num_speculative_call_targets_p(), basic_block_def::prev_bb, profile_count::probability_in(), remap_gimple_stmt(), SANITIZE_ADDRESS, sanitize_flags_p(), SANITIZE_HWADDRESS, cgraph_edge::set_call_stmt(), cgraph_edge::speculative_call_indirect_edge(), walk_stmt_info::stmt, and profile_count::zero().
Referenced by copy_cfg_body().
|
static |
References BIND_EXPR_BLOCK, BIND_EXPR_VARS, copy_tree_r(), NULL, remap_block(), and remap_decls().
Referenced by copy_tree_body_r().
|
static |
Make a copy of the body of FN so that it can be inserted inline in another function.
References copy_cfg_body(), copy_debug_stmts(), DECL_STRUCT_FUNCTION, ENTRY_BLOCK_PTR_FOR_FN, gcc_assert, ipa_release_ssas_in_hash(), and NULL.
Referenced by expand_call_inline(), and tree_function_versioning().
|
static |
Make a copy of the body of FN so that it can be inserted inline in another function. Walks FN via CFG, returns new fndecl.
References add_clobbers_to_eh_landing_pad(), profile_count::adjust_for_ipa_scaling(), profile_probability::always(), basic_block_def::aux, BASIC_BLOCK_FOR_FN, bitmap_bit_p, CB_CGE_DUPLICATE, cfun, copy_bb(), copy_edges_for_bb(), copy_loops(), copy_phis_for_bb(), basic_block_def::count, current_loops, DECL_STRUCT_FUNCTION, duplicate_eh_regions(), ENTRY_BLOCK, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK, EXIT_BLOCK_PTR_FOR_FN, FOR_ALL_BB_FN, FOR_EACH_BB_FN, FOR_EACH_EDGE, gcc_assert, get_abnormal_succ_dispatcher(), get_loop(), gimple_bb(), gimple_in_ssa_p(), gimple_register_cfg_hooks(), gsi_end_p(), gsi_for_stmt(), gsi_next(), basic_block_def::index, last, last_basic_block_for_fn, basic_block_def::loop_father, loops_for_fn(), LOOPS_NEED_FIXUP, loops_state_set(), make_edge(), maybe_move_debug_stmts_to_successors(), NULL, basic_block_def::preds, redirect_all_calls(), remap_decl_1(), stmt_can_make_abnormal_goto(), and profile_count::zero().
Referenced by copy_body().
|
static |
Copy the debug STMT using ID. We deal with these statements in a special way: if any variable in their VALUE expression wasn't remapped yet, we won't remap it, because that would get decl uids out of sync, causing codegen differences between -g and -g0. If this arises, we drop the VALUE expression altogether.
References decl_debug_args_lookup(), DECL_ORIGIN, gcc_assert, gcc_unreachable, gimple_block(), GIMPLE_DEBUG_BIND, gimple_debug_bind_get_value_ptr(), gimple_debug_bind_get_var(), gimple_debug_bind_has_value_p(), gimple_debug_bind_p(), gimple_debug_bind_reset_value(), gimple_debug_bind_set_value(), gimple_debug_bind_set_var(), gimple_debug_nonbind_marker_p(), gimple_debug_source_bind_get_value(), gimple_debug_source_bind_get_value_ptr(), gimple_debug_source_bind_get_var(), gimple_debug_source_bind_p(), gimple_debug_source_bind_set_var(), gimple_set_block(), walk_stmt_info::gsi, gsi_for_stmt(), gsi_remove(), i, is_global_var(), NULL, NULL_TREE, processing_debug_stmt, remap_gimple_op_r(), walk_stmt_info::stmt, gimple::subcode, TREE_CODE, update_stmt(), VAR_P, vec_safe_length(), and walk_tree.
Referenced by copy_debug_stmts().
|
static |
Process deferred debug stmts. In order to give values better odds of being successfully remapped, we delay the processing of debug stmts until all other stmts that might require remapping are processed.
References copy_debug_stmt(), and walk_stmt_info::stmt.
Referenced by copy_body().
tree copy_decl_for_dup_finish | ( | copy_body_data * | id, |
tree | decl, | ||
tree | copy ) |
Copy NODE (which must be a DECL). The DECL originally was in the FROM_FN, but now it will be in the TO_FN. PARM_TO_VAR means enable PARM_DECL to VAR_DECL translation.
References DECL_ABSTRACT_ORIGIN, DECL_ARTIFICIAL, DECL_ATTRIBUTES, DECL_CONTEXT, DECL_EXTERNAL, DECL_IGNORED_P, DECL_ORIGIN, get_identifier(), HAS_RTL_P, is_gimple_reg(), lookup_attribute(), NULL, SET_DECL_MODE, SET_DECL_RTL, tree_cons(), TREE_STATIC, TREE_TYPE, TREE_USED, TYPE_MODE, VAR_P, and VECTOR_TYPE_P.
Referenced by assumption_copy_decl(), copy_decl_no_change(), copy_decl_to_var(), copy_result_decl_to_var(), and create_asan_shadow_var().
|
static |
References copy_decl_no_change(), copy_decl_to_var(), and TREE_CODE.
Referenced by optimize_inline_calls().
tree copy_decl_no_change | ( | tree | decl, |
copy_body_data * | id ) |
References copy_decl_for_dup_finish(), copy_node(), DECL_ABSTRACT_P, lang_hooks::dup_lang_specific_decl, LABEL_DECL_UID, TREE_ADDRESSABLE, and TREE_CODE.
Referenced by build_duplicate_type(), copy_decl_maybe_to_var(), copy_fn(), copy_gimple_seq_and_replace_locals(), gimplify_omp_loop(), maybe_inline_call_in_expr(), nesting_copy_decl(), and tree_function_versioning().
tree copy_decl_to_var | ( | tree | decl, |
copy_body_data * | id ) |
Create a new VAR_DECL that is indentical in all respect to DECL except that DECL can be either a VAR_DECL, a PARM_DECL or RESULT_DECL. The original DECL must come from ID->src_fn and the copy will be part of ID->dst_fn.
References build_decl(), copy_decl_for_dup_finish(), DECL_BY_REFERENCE, DECL_NAME, DECL_NOT_GIMPLE_REG_P, DECL_PT_UID, DECL_PT_UID_SET_P, DECL_SOURCE_LOCATION, gcc_assert, SET_DECL_PT_UID, TREE_ADDRESSABLE, TREE_CODE, TREE_READONLY, TREE_THIS_VOLATILE, TREE_TYPE, and type().
Referenced by ipa_param_body_adjustments::common_initialization(), copy_decl_maybe_to_var(), and setup_one_parameter().
|
static |
Copy edges from BB into its copy constructed earlier, scale profile accordingly. Edges will be taken care of later. Assume aux pointers to point to the copies of each BB. Return true if any debug stmts are left after a statement that must end the basic block.
References profile_count::apply_scale(), as_a(), basic_block_def::aux, boolean_true_node, cfun, computed_goto_p(), basic_block_def::count, ENTRY_BLOCK, EXIT_BLOCK, EXIT_BLOCK_PTR_FOR_FN, find_edge(), FOR_EACH_EDGE, gcc_assert, get_abnormal_succ_dispatcher(), gimple_bb(), gimple_call_arg(), gimple_call_internal_fn(), gimple_call_internal_p(), gimple_in_ssa_p(), gsi_end_p(), gsi_last_bb(), gsi_prev(), gsi_stmt(), basic_block_def::index, is_gimple_call(), is_gimple_debug(), make_edge(), make_eh_dispatch_edges(), make_eh_edge(), make_single_succ_edge(), profile_probability::never(), NULL, basic_block_def::preds, remap_location(), si, single_succ_edge(), single_succ_p(), split_block(), stmt_can_make_abnormal_goto(), stmt_can_throw_internal(), basic_block_def::succs, and update_ssa_across_abnormal_edges().
Referenced by copy_cfg_body().
Unshare the entire DECL_SAVED_TREE of FN and return the remapped parameters and RESULT_DECL in PARMS and RESULT. Used by C++ constexpr evaluation.
References CB_CGE_DUPLICATE, copy_decl_no_change(), copy_tree_body(), current_function_decl, DECL_ARGUMENTS, DECL_CHAIN, copy_body_data::decl_map, DECL_RESULT, DECL_STRUCT_FUNCTION, NULL_TREE, remap_decl(), and TREE_CODE.
Referenced by expand_assign_tm(), gimple_build_omp_task(), and gimple_omp_task_set_copy_fn().
const char * copy_forbidden | ( | struct function * | fun | ) |
Determine if the function can be copied. If so return NULL. If not return a string describng the reason for failure.
References function::cannot_be_copied_reason, function::cannot_be_copied_set, G_, function::has_forced_label_in_static, and function::has_nonlocal_label.
Referenced by expand_target_clones(), inline_forbidden_p(), and tree_versionable_function_p().
|
static |
Copy a GIMPLE_BIND statement STMT, remapping all the symbols in its block using the mapping information in ID.
References gimple_bind_block(), gimple_bind_body(), gimple_bind_vars(), gimple_build_bind(), NULL, remap_block(), remap_decls(), and remap_gimple_seq().
Referenced by remap_gimple_stmt().
gimple_seq copy_gimple_seq_and_replace_locals | ( | gimple_seq | seq | ) |
Copies everything in SEQ and replaces variables and labels local to current_function_decl.
References CB_CGE_DUPLICATE, cfun, copy_decl_no_change(), current_function_decl, gimple_seq_copy(), mark_local_labels_stmt(), NULL, replace_locals_op(), replace_locals_stmt(), visited, and walk_gimple_seq().
Referenced by lower_omp_for_scan(), lower_omp_scan(), lower_transaction(), lower_try_finally_dup_block(), optimize_double_finally(), scan_omp_simd(), and scan_omp_simd_scan().
|
static |
Make a copy of the sub-loops of SRC_PARENT and place them as siblings of DEST_PARENT.
References alloc_loop(), basic_block_def::aux, bitmap_bit_p, cfun, copy_loop_info(), copy_loops(), flow_loop_tree_node_add(), loop::force_vectorize, loop::header, basic_block_def::index, loop::inner, loop::latch, basic_block_def::loop_father, loop::next, NULL, loop::owned_clique, place_new_loop(), remap_decl(), remap_dependence_clique(), loop::simduid, and loop::unroll.
Referenced by copy_cfg_body(), and copy_loops().
|
static |
Copy the PHIs. All blocks and edges are copied, some blocks was possibly split and new outgoing EH edges inserted. BB points to the block of original function and AUX pointers links the original and newly copied blocks.
References add_phi_arg(), basic_block_def::aux, copy_tree_body_r(), create_phi_node(), EDGE_COUNT, find_edge(), FOR_EACH_EDGE, force_gimple_operand(), gcc_assert, gimple_build_nop(), gimple_phi_arg_location_from_edge(), gsi_commit_one_edge_insert(), gsi_end_p(), gsi_insert_seq_on_edge(), gsi_next(), gsi_start_phis(), input_location, is_gimple_val(), NULL, PHI_ARG_DEF_FROM_EDGE, PHI_RESULT, basic_block_def::preds, remap_location(), si, SSA_NAME_DEF_STMT, TREE_CODE, virtual_operand_p(), and walk_tree.
Referenced by copy_cfg_body().
|
static |
Like copy_decl_to_var, but create a return slot object instead of a pointer variable for return by invisible reference.
References aggregate_value_p(), build_decl(), copy_decl_for_dup_finish(), DECL_BY_REFERENCE, DECL_NAME, DECL_NOT_GIMPLE_REG_P, DECL_PT_UID, DECL_PT_UID_SET_P, DECL_SOURCE_LOCATION, gcc_assert, SET_DECL_PT_UID, TREE_ADDRESSABLE, TREE_CODE, TREE_READONLY, TREE_THIS_VOLATILE, TREE_TYPE, and type().
Referenced by declare_return_variable(), and tree_function_versioning().
|
static |
References alloc_stmt_list(), copy_statement_list(), TREE_CODE, TREE_TYPE, TSI_CONTINUE_LINKING, tsi_end_p(), tsi_link_after(), tsi_next(), tsi_start(), and tsi_stmt().
Referenced by copy_statement_list(), copy_tree_body_r(), and copy_tree_r().
|
static |
Return a copy of the function's static chain.
References DECL_CHAIN, lang_hooks::dup_lang_specific_decl, and remap_decl().
Referenced by tree_function_versioning().
|
static |
Make a copy of the body of SRC_FN so that it can be inserted inline in another function.
References copy_tree_body_r(), DECL_SAVED_TREE, NULL, and walk_tree.
Referenced by copy_fn(), and maybe_inline_call_in_expr().
Called from copy_body_id via walk_tree. DATA is really a `copy_body_data *'.
References auto_var_in_fn_p(), build1(), build_empty_stmt(), CONSTANT_CLASS_P, copy_bind_expr(), copy_node(), copy_statement_list(), copy_tree_body_r(), copy_tree_r(), copy_warning(), DECL_CONTEXT, decl_function_context(), EXPR_LOCATION, EXPR_P, fold_build2, fold_convert, fold_indirect_ref_1(), gcc_assert, gimple_fold_indirect_ref(), i, INDIRECT_REF_P, is_gimple_min_invariant(), is_parm(), MR_DEPENDENCE_BASE, MR_DEPENDENCE_CLIQUE, NULL, NULL_TREE, OMP_CLAUSE_AFFINITY, OMP_CLAUSE_CODE, OMP_CLAUSE_DECL, OMP_CLAUSE_DEPEND, recompute_tree_invariant_for_addr_expr(), REF_REVERSE_STORAGE_ORDER, remap_block(), remap_decl(), remap_dependence_clique(), remap_save_expr(), remap_ssa_name(), remap_type(), STRIP_TYPE_NOPS, wi::to_wide(), TREE_BLOCK, TREE_CODE, TREE_CONSTANT, TREE_OPERAND, TREE_PURPOSE, TREE_READONLY, TREE_SET_BLOCK, TREE_SIDE_EFFECTS, TREE_THIS_NOTRAP, TREE_THIS_VOLATILE, TREE_TYPE, TREE_VALUE, TREE_VEC_ELT, TYPE_P, unshare_expr(), walk_tree, and wide_int_to_tree().
Referenced by add_local_variables(), copy_phis_for_bb(), copy_tree_body(), copy_tree_body_r(), fixup_child_record_type(), fixup_remapped_decl(), gimplify_omp_loop(), remap_decl(), remap_decls(), remap_type_1(), remap_vla_decls(), task_copyfn_remap_type(), and update_clone_info().
Passed to walk_tree. Copies the node pointed to, if appropriate.
References BIND_EXPR_BLOCK, CODE_CONTAINS_STRUCT, CONSTRUCTOR_ELTS, copy_node(), copy_statement_list(), IS_EXPR_CODE_CLASS, NULL_TREE, tcc_constant, tcc_declaration, tcc_type, TREE_CHAIN, TREE_CODE, TREE_CODE_CLASS, and vec_safe_copy().
Referenced by copy_bind_expr(), copy_self_referential_tree_r(), copy_tree_body_r(), mostly_copy_tree_r(), and remap_gimple_op_r().
DEBUG_FUNCTION bool debug_find_tree | ( | tree | top, |
tree | search ) |
References debug_find_tree_1(), and walk_tree_without_duplicates.
Allow someone to determine if SEARCH is a child of TOP from gdb.
References NULL.
Referenced by debug_find_tree().
Declare the variables created by the inliner. Add all the variables in VARS to BIND_EXPR.
References add_local_decl(), BLOCK_VARS, cfun, chainon(), DECL_CHAIN, DECL_SEEN_IN_BIND_EXPR_P, gcc_assert, TREE_ASM_WRITTEN, and TREE_STATIC.
Referenced by declare_return_variable(), initialize_inlined_parameters(), and tree_function_versioning().
|
static |
Prototypes.
Declare a return variable to replace the RESULT_DECL for the function we are calling. An appropriate DECL_STMT is returned. The USE_STMT is filled to contain a use of the declaration to indicate the return value of the function. RETURN_SLOT, if non-null is place where to store the result. It is set only for CALL_EXPR_RETURN_SLOT_OPT. MODIFY_DEST, if non-null, was the LHS of the MODIFY_EXPR to which this call is the RHS. The return value is a (possibly null) value that holds the result as seen by the caller.
References build1(), build_fold_addr_expr, build_int_cst(), copy_result_decl_to_var(), create_tmp_var, DECL_BY_REFERENCE, DECL_NOT_GIMPLE_REG_P, DECL_P, DECL_RESULT, DECL_SEEN_IN_BIND_EXPR_P, declare_inline_vars(), fold_build2, fold_convert, fold_convertible_p(), gcc_assert, get_base_address(), gimple_build_assign(), gimple_in_ssa_p(), insert_decl_map(), insert_init_stmt(), is_gimple_reg(), is_gimple_reg_type(), is_gimple_val(), is_global_var(), make_ssa_name(), mark_addressable(), NULL, NULL_TREE, poly_int_tree_p(), ptr_type_node, ssa_default_def(), STRIP_USELESS_TYPE_CONVERSION, suppress_warning(), TREE_ADDRESSABLE, TREE_CODE, TREE_TYPE, TYPE_SIZE_UNIT, useless_type_conversion_p(), and VOID_TYPE_P.
Referenced by expand_call_inline().
|
static |
Create a copy of SEQ and remap all decls in it.
References gimple_seq_copy(), mark_local_labels_stmt(), NULL, replace_locals_op(), replace_locals_stmt(), and walk_gimple_seq().
Referenced by replace_locals_op().
Estimate the cost of a memory move of type TYPE. Use machine dependent word size and take possible memcpy call into account and return cost based on whether optimizing for size or speed according to SPEED_P.
References estimated_poly_value(), gcc_assert, GET_MODE_SIZE(), int_size_in_bytes(), MOVE_MAX_PIECES, SCALAR_TYPE_MODE, targetm, TREE_TYPE, TYPE_MODE, VECTOR_TYPE_P, and VOID_TYPE_P.
Referenced by consider_split(), estimate_local_effects(), estimate_num_insns(), gather_context_independent_values(), and ipa_populate_param_decls().
int estimate_num_insns | ( | gimple * | stmt, |
eni_weights * | weights ) |
Estimate number of instructions that will be created by expanding STMT. WEIGHTS contains weights attributed to various constructs.
References as_a(), asm_str_count(), BUILT_IN_NORMAL, eni_weights::call_cost, count, dconst2, DECL_FUNCTION_CODE(), symtab_node::definition, estimate_move_cost(), estimate_num_insns_seq(), estimate_operator_cost(), floor_log2(), fndecl_built_in_p(), gcc_unreachable, cgraph_node::get(), get_gimple_rhs_class(), gimple_asm_inline_p(), gimple_asm_string(), gimple_assign_lhs(), gimple_assign_load_p(), gimple_assign_rhs1(), gimple_assign_rhs2(), gimple_assign_rhs_code(), GIMPLE_BINARY_RHS, gimple_bind_body(), gimple_call_arg(), gimple_call_builtin_p(), gimple_call_fndecl(), gimple_call_internal_p(), gimple_call_lhs(), gimple_call_num_args(), gimple_catch_handler(), gimple_clobber_p(), gimple_cond_code(), gimple_eh_filter_failure(), gimple_omp_body(), gimple_omp_for_pre_body(), gimple_op(), gimple_store_p(), gimple_switch_num_labels(), gimple_transaction_body(), gimple_try_cleanup(), gimple_try_eval(), i, eni_weights::indirect_call_cost, is_inexpensive_builtin(), is_simple_builtin(), MAX, MIN, NULL, eni_weights::omp_cost, real_equal(), eni_weights::return_cost, walk_stmt_info::stmt, eni_weights::target_builtin_call_cost, eni_weights::time_based, eni_weights::tm_cost, TREE_CODE, TREE_REAL_CST, and TREE_TYPE.
Referenced by analyze_bb(), analyze_function_body(), back_threader_profitability::back_threader_profitability(), compute_added_num_insns(), early_inliner(), estimate_num_insns_fn(), estimate_num_insns_seq(), execute_split_functions(), gimple_account_profile_record(), init_loop_unswitch_info(), ipa_profile_generate_summary(), back_threader_profitability::possibly_profitable_path_p(), record_temporary_equivalences(), reorder_operands(), should_duplicate_loop_header_p(), tree_estimate_loop_size(), tree_num_loop_insns(), and value_replacement().
int estimate_num_insns_fn | ( | tree | fndecl, |
eni_weights * | weights ) |
Estimate number of instructions that will be created by expanding function FNDECL. WEIGHTS contains weights attributed to various constructs.
References function::cfg, DECL_STRUCT_FUNCTION, estimate_num_insns(), FOR_EACH_BB_FN, gcc_assert, gsi_end_p(), gsi_next(), gsi_start_bb(), and gsi_stmt().
int estimate_num_insns_seq | ( | gimple_seq | stmts, |
eni_weights * | weights ) |
Estimate number of instructions that will be created by expanding the statements in the statement sequence STMTS. WEIGHTS contains weights attributed to various constructs.
References estimate_num_insns(), walk_stmt_info::gsi, gsi_end_p(), gsi_next(), gsi_start(), and gsi_stmt().
Referenced by compute_added_num_insns(), decide_copy_try_finally(), estimate_num_insns(), and value_replacement().
|
static |
Returns cost of operation CODE, according to WEIGHTS
References CASE_CONVERT, eni_weights::div_mod_cost, gcc_assert, get_gimple_rhs_class(), GIMPLE_SINGLE_RHS, and TREE_CODE.
Referenced by estimate_num_insns().
|
static |
If STMT is a GIMPLE_CALL, replace it with its inline expansion.
References _, add_local_variables(), bitmap_set_bit, BLOCK_ABSTRACT_ORIGIN, BLOCK_CHAIN, BLOCK_SOURCE_LOCATION, BLOCK_SUBBLOCKS, BLOCK_VARS, build1(), build_clobber(), build_pointer_type(), builtin_decl_implicit(), BUILTINS_LOCATION, cgraph_edge::call_stmt, cgraph_edge::callee, cgraph_edge::caller, function::calls_eh_return, cfun, cgraph_inline_failed_string(), cgraph_inline_failed_type(), CIF_FINAL_ERROR, CLOBBER_STORAGE_END, CONVERT_EXPR_CODE_P, copy_body(), basic_block_def::count, cgraph_edge::count, count, create_tmp_reg_fn(), function::curr_properties, debug_hooks, symtab_node::decl, DECL_ABSTRACT_ORIGIN, DECL_ARGUMENTS, DECL_ATTRIBUTES, DECL_CHAIN, DECL_DECLARED_INLINE_P, DECL_EXTERNAL, DECL_FUNCTION_PERSONALITY, DECL_IGNORED_P, DECL_IN_SYSTEM_HEADER, DECL_INITIAL, DECL_IS_OPERATOR_NEW_P, DECL_NO_INLINE_WARNING_P, DECL_ORIGIN, DECL_P, DECL_SOURCE_LOCATION, DECL_STRUCT_FUNCTION, declare_return_variable(), dump_enabled_p(), dump_file, dump_flags, dump_printf_loc(), dyn_cast(), error(), expand_call_inline(), thunk_info::fixed_offset, g, gcc_assert, gcc_checking_assert, thunk_info::get(), varpool_node::get(), get_base_address(), cgraph_node::get_create(), cgraph_node::get_untransformed_body(), gimple_assign_rhs1(), gimple_assign_rhs_code(), gimple_assign_single_p(), gimple_block(), gimple_build_assign(), gimple_build_call(), gimple_build_call_internal_vec(), gimple_build_debug_inline_entry(), gimple_build_nop(), gimple_build_predict(), gimple_call_alloca_for_var_p(), gimple_call_arg(), gimple_call_internal_p(), gimple_call_lhs(), gimple_call_noreturn_p(), gimple_call_num_args(), gimple_call_return_slot_opt_p(), gimple_call_set_arg(), gimple_call_set_fndecl(), gimple_call_set_lhs(), gimple_has_body_p(), gimple_location(), gimple_maybe_alloca_call_p(), gimple_set_location(), gimple_uid(), gimple_vdef(), symbol_table::global_info_ready, gsi_end_p(), gsi_for_stmt(), gsi_insert_after(), gsi_insert_before(), gsi_last_bb(), GSI_NEW_STMT, gsi_next(), gsi_prev(), gsi_remove(), gsi_replace(), GSI_SAME_STMT, gsi_start_bb(), gsi_stmt(), i, basic_block_def::index, cgraph_edge::indirect_inlining_edge, thunk_info::indirect_offset, cgraph_edge::indirect_unknown_callee, inform(), initialize_inlined_parameters(), cgraph_edge::inline_failed, inlined_function_outer_scope_p(), input_location, is_gimple_assign(), is_gimple_call(), is_gimple_reg(), last_basic_block_for_fn, LOCATION_LOCUS, lookup_attribute(), lookup_stmt_eh_lp(), basic_block_def::loop_father, make_node(), make_ssa_name(), maybe_clean_or_replace_eh_stmt(), maybe_remove_unused_call_args(), MSG_NOTE, MSG_PRIORITY_INTERNALS, symtab_node::name(), NOT_TAKEN, NULL, NULL_TREE, profile_count::one(), opt_for_fn, gcc_debug_hooks::outlining_inline_function, prepend_lexical_block(), PROFILE_ABSENT, profile_status_for_fn, PROP_gimple_lomp_dev, PROP_gimple_lva, pt_solution_reset(), ptr_type_node, cgraph_edge::recursive_p(), cgraph_node::redefined_extern_inline, release_ssa_name(), remap_blocks(), remap_blocks_to_null(), cgraph_edge::remove(), cgraph_node::remove(), remove_edge(), reset_debug_bindings(), set_ssa_default_def(), SET_SSA_NAME_VAR_OR_IDENTIFIER, si, loop::simduid, single_imm_use(), size_int, split_block(), SR_NONE, cgraph_edge::sreal_frequency(), ssa_default_def(), SSA_NAME_DEF_STMT, SSA_NAME_VAR, stmt_ends_bb_p(), suppress_warning(), symtab, TDF_DETAILS, thunk_info::this_adjusting, thunk_adjust(), sreal::to_double(), to_purge, TREE_CHAIN, TREE_CODE, TREE_STATIC, TREE_THIS_VOLATILE, TREE_TYPE, TREE_USED, UNKNOWN_LOCATION, unlink_stmt_vdef(), update_stmt(), VAR_P, vec_alloc(), vec_free(), symtab_node::verify(), thunk_info::virtual_offset_p, thunk_info::virtual_value, warning(), and symtab_node::writeonly.
Referenced by expand_call_inline(), and gimple_expand_calls_inline().
Walk all basic blocks created after FIRST and try to fold every statement in the STATEMENTS pointer set.
References bitmap_bit_p, bitmap_clear(), bitmap_set_bit, cfun, cgraph_update_edges_for_call_stmt(), hash_set< KeyId, Lazy, Traits >::contains(), EDGE_COUNT, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, find_taken_edge(), fndecl_built_in_p(), fold_stmt(), FOR_EACH_EDGE, gimple_call_fndecl(), gimple_purge_all_dead_eh_edges(), gsi_end_p(), gsi_next(), gsi_prev(), gsi_start_bb(), gsi_stmt(), i2, basic_block_def::index, is_gimple_call(), last_basic_block_for_fn, maybe_clean_or_replace_eh_stmt(), n_basic_blocks_for_fn, NULL, NULL_TREE, single_succ_edge(), basic_block_def::succs, to_purge, update_stmt(), and visited.
Referenced by optimize_inline_calls(), and tree_function_versioning().
Deal with mismatched formal/actual parameters, in a rather brute-force way if need be (which should only be necessary for invalid programs). Attempt to convert VAL to TYPE and return the result if it is possible, just return a zero constant of the given type if it fails.
References build_zero_cst(), error_mark_node, fold_build1, fold_convert, fold_convertible_p(), is_gimple_reg_type(), TREE_CODE, TREE_TYPE, and TYPE_SIZE.
Referenced by initialize_inlined_parameters(), ipa_param_adjustments::modify_call(), and setup_one_parameter().
|
static |
Return false if the function FNDECL cannot be inlined on account of its attributes, true otherwise.
References a, scoped_attributes::attributes, DECL_ATTRIBUTES, get_attribute_name(), is_attribute_p(), targetm, and TREE_CHAIN.
Referenced by tree_inlinable_function_p().
|
static |
Expand call statements reachable from STMT_P. We can only have CALL_EXPRs as the "toplevel" tree code or nested in a MODIFY_EXPR.
References expand_call_inline(), gimple_call_internal_p(), gsi_end_p(), gsi_last_bb(), gsi_prev(), gsi_stmt(), is_gimple_call(), and to_purge.
Referenced by optimize_inline_calls().
void init_inline_once | ( | void | ) |
Initializes weights used by estimate_num_insns.
References eni_weights::call_cost, eni_weights::div_mod_cost, eni_size_weights, eni_time_weights, eni_weights::indirect_call_cost, eni_weights::omp_cost, eni_weights::return_cost, eni_weights::target_builtin_call_cost, eni_weights::time_based, and eni_weights::tm_cost.
Referenced by backend_init().
|
static |
Build struct function and associated datastructures for the new clone NEW_FNDECL to be build. CALLEE_FNDECL is the original. Function changes the cfun to the function of new_fndecl (and current_function_decl too).
References profile_count::adjust_for_ipa_scaling(), function::after_inlining, function::calls_eh_return, function::can_delete_dead_exceptions, function::can_throw_non_call_exceptions, function::cfg, cfun, count, function::curr_properties, DECL_STRUCT_FUNCTION, function::eh, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, control_flow_graph::full_profile, function::function_end_locus, gcc_assert, function::gimple_df, gimple_register_cfg_hooks(), function::has_nonlocal_label, gimple_df::in_ssa_p, init_eh_for_function(), init_empty_tree_cfg(), init_ssa_operands(), init_tree_ssa(), function::last_verified, function::nonlocal_goto_save_area, NULL, profile_status_for_fn, push_struct_function(), function::returns_pcc_struct, function::returns_struct, function::static_chain_decl, function::stdarg, targetm, function::va_list_fpr_size, function::va_list_gpr_size, and VALUE_HISTOGRAMS.
Referenced by tree_function_versioning().
|
static |
Generate code to initialize the parameters of the function at the top of the stack in ID from the GIMPLE_CALL STMT.
References cfun, current_function_decl, DECL_ARGUMENTS, DECL_CHAIN, DECL_STRUCT_FUNCTION, declare_inline_vars(), error_mark_node, force_value_to_type(), gcc_assert, gimple_build_assign(), gimple_call_arg(), gimple_call_chain(), gimple_call_num_args(), gimple_in_ssa_p(), i, insert_init_stmt(), is_gimple_reg(), make_ssa_name(), nreverse(), NULL, NULL_TREE, remap_type(), setup_one_parameter(), ssa_default_def(), SSA_NAME_VAR, walk_stmt_info::stmt, TREE_CODE, TREE_TYPE, useless_type_conversion_p(), and VAR_P.
Referenced by expand_call_inline().
Return true if FNDECL is a function that cannot be inlined into another one.
References bb_seq(), copy_forbidden(), DECL_ARGUMENTS, DECL_CHAIN, DECL_SIZE, DECL_STRUCT_FUNCTION, FOR_EACH_BB_FN, G_, inline_forbidden_p_stmt(), inline_forbidden_reason, NULL, poly_int_tree_p(), and walk_gimple_seq().
Referenced by tree_inlinable_function_p().
|
static |
A callback for walk_gimple_seq to handle statements. Returns non-null iff a function cannot be inlined. Also sets the reason why.
References as_a(), BUILT_IN_NORMAL, DECL_ATTRIBUTES, DECL_BUILT_IN_CLASS, DECL_FUNCTION_CODE(), G_, gimple_call_alloca_for_var_p(), gimple_call_fndecl(), gimple_goto_dest(), gimple_maybe_alloca_call_p(), walk_stmt_info::gsi, gsi_stmt(), walk_stmt_info::info, inline_forbidden_reason, lookup_attribute(), NULL_TREE, setjmp_call_p(), walk_stmt_info::stmt, and TREE_CODE.
Referenced by inline_forbidden_p().
void insert_decl_map | ( | copy_body_data * | id, |
tree | key, | ||
tree | value ) |
Insert a tree->tree mapping for ID. Despite the name suggests that the trees should be variables, it is used for more than that.
Referenced by add_taskreg_looptemp_clauses(), ipa_param_body_adjustments::common_initialization(), declare_return_variable(), install_var_local(), lower_omp_for(), ipa_param_body_adjustments::mark_dead_statements(), mark_local_labels_stmt(), omp_copy_decl(), remap_block(), remap_blocks_to_null(), remap_decl(), remap_ssa_name(), remap_type(), remap_type_1(), scan_omp_1_stmt(), scan_omp_parallel(), scan_sharing_clauses(), setup_one_parameter(), and tree_function_versioning().
|
static |
Append to BB a debug annotation that binds VAR to VALUE, inheriting lexical block and line number information from base_stmt, if given, or from the last stmt of the block otherwise.
References error_mark_node, gimple_build_debug_bind(), gimple_in_ssa_p(), walk_stmt_info::gsi, gsi_end_p(), gsi_insert_after(), gsi_insert_before(), gsi_last_bb(), GSI_SAME_STMT, gsi_stmt(), NULL, NULL_TREE, opt_for_fn, target_for_debug_bind(), and unshare_expr().
Referenced by insert_init_stmt(), and setup_one_parameter().
|
static |
References build1(), force_gimple_operand_gsi(), gimple_assign_lhs(), gimple_assign_rhs1(), gimple_assign_rhs_class(), gimple_assign_rhs_code(), gimple_assign_set_rhs1(), gimple_assign_set_rhs_code(), gimple_regimplify_operands(), GIMPLE_UNARY_RHS, gsi_insert_after(), gsi_last_bb(), GSI_NEW_STMT, insert_init_debug_bind(), is_gimple_debug(), is_gimple_reg(), is_gimple_reg_type(), NULL_TREE, si, TREE_CODE, and TREE_TYPE.
Referenced by declare_return_variable(), initialize_inlined_parameters(), setup_one_parameter(), and tree_function_versioning().
Return true if DECL is a parameter or a SSA_NAME for a parameter.
References SSA_NAME_VAR, and TREE_CODE.
Referenced by copy_tree_body_r(), and remap_gimple_op_r().
|
static |
Called via walk_gimple_seq. If *GSIP points to a GIMPLE_LABEL for a local label, copies the declaration and enters it in the splay_tree in DATA (which is really a 'copy_body_data *'.
References dyn_cast(), gimple_label_label(), gsi_stmt(), insert_decl_map(), and NULL_TREE.
Referenced by copy_gimple_seq_and_replace_locals(), and duplicate_remap_omp_clause_seq().
EXP is CALL_EXPR present in a GENERIC expression tree. Try to integrate the callee and return the inlined body on success.
References CB_CGE_DUPLICATE, copy_decl_no_change(), copy_tree_body(), current_function_decl, DECL_ARGUMENTS, DECL_CHAIN, DECL_SAVED_TREE, DECL_STRUCT_FUNCTION, exp(), first_call_expr_arg(), get_callee_fndecl(), NULL_TREE, hash_map< KeyId, Value, Traits >::put(), TREE_CODE, TREE_OPERAND, and TREE_READONLY.
Referenced by substitute_in_expr().
|
static |
Helper function for copy_cfg_body. Move debug stmts from the end of NEW_BB to the beginning of successor basic blocks when needed. If the successor has multiple predecessors, reset them, otherwise keep their value.
References as_a(), cfun, ei_one_before_end_p(), FOR_EACH_EDGE, gcc_unreachable, gimple_build_debug_bind(), gimple_build_debug_source_bind(), gimple_copy(), gimple_debug_bind_get_value(), gimple_debug_bind_get_var(), gimple_debug_bind_p(), gimple_debug_bind_reset_value(), gimple_debug_nonbind_marker_p(), gimple_debug_source_bind_get_value(), gimple_debug_source_bind_get_var(), gimple_debug_source_bind_p(), gimple_set_location(), gsi_after_labels(), gsi_end_p(), gsi_insert_before(), gsi_last_bb(), gsi_last_nondebug_bb(), GSI_NEW_STMT, gsi_one_before_end_p(), gsi_prev(), gsi_remove(), gsi_stmt(), is_gimple_debug(), NULL, NULL_TREE, si, single_pred_p(), stmt_can_make_abnormal_goto(), stmt_can_throw_internal(), basic_block_def::succs, UNKNOWN_LOCATION, and unshare_expr().
Referenced by copy_cfg_body().
unsigned int optimize_inline_calls | ( | tree | fn | ) |
Expand calls to inline functions in the body of FN.
References BASIC_BLOCK_FOR_FN, CB_CGE_DUPLICATE, CDI_DOMINATORS, CDI_POST_DOMINATORS, cfun, copy_decl_maybe_to_var(), current_function_decl, delete_unreachable_blocks_update_callgraph(), EXECUTE_IF_SET_IN_BITMAP, fold_marked_statements(), FOR_EACH_BB_FN, free_dominance_info(), gcc_assert, cgraph_node::get(), gimple_expand_calls_inline(), gimple_in_ssa_p(), gimple_purge_dead_abnormal_call_edges(), gimple_purge_dead_eh_edges(), gimple_register_cfg_hooks(), i, cgraph_edge::inline_failed, last, n_basic_blocks_for_fn, cgraph_edge::next_callee, NULL, number_blocks(), pop_gimplify_context(), push_gimplify_context(), to_purge, TODO_cleanup_cfg, TODO_remove_unused_locals, TODO_update_address_taken, TODO_update_ssa, and update_max_bb_count().
Referenced by autofdo::afdo_vpt_for_early_inline(), early_inliner(), and inline_transform().
Install new lexical TREE_BLOCK underneath 'current_block'.
References BLOCK_CHAIN, BLOCK_SUBBLOCKS, and BLOCK_SUPERCONTEXT.
Referenced by expand_call_inline(), and remap_blocks().
void redirect_all_calls | ( | copy_body_data * | id, |
basic_block | bb ) |
Call redirect_call_stmt_to_callee on all calls in BB.
References gimple_purge_dead_eh_edges(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), is_gimple_call(), last, last_nondebug_stmt(), maybe_clean_eh_stmt(), cgraph_edge::redirect_call_stmt_to_callee(), and si.
Referenced by copy_cfg_body().
|
static |
Copy the BLOCK to contain remapped versions of the variables therein. And hook the new block into the block-tree.
References BLOCK_ABSTRACT_ORIGIN, BLOCK_NONLOCALIZED_VARS, BLOCK_ORIGIN, BLOCK_SOURCE_LOCATION, BLOCK_VARS, insert_decl_map(), make_node(), remap_decls(), TREE_USED, and vec_safe_copy().
Referenced by copy_bind_expr(), copy_gimple_bind(), copy_tree_body_r(), remap_blocks(), and replace_locals_stmt().
|
static |
Copy the whole block tree and root it in id->block.
References BLOCK_CHAIN, BLOCK_SUBBLOCKS, blocks_nreverse(), gcc_assert, NULL, prepend_lexical_block(), remap_block(), and remap_blocks().
Referenced by expand_call_inline(), remap_blocks(), and tree_function_versioning().
|
static |
Remap the block tree rooted at BLOCK to nothing.
References BLOCK_CHAIN, BLOCK_SUBBLOCKS, insert_decl_map(), NULL_TREE, and remap_blocks_to_null().
Referenced by expand_call_inline(), and remap_blocks_to_null().
tree remap_decl | ( | tree | decl, |
copy_body_data * | id ) |
Remap DECL during the copying of the BLOCK tree for the function.
References build_variant_type_copy(), copy_tree_body_r(), DECL_CONTEXT, DECL_FIELD_OFFSET, DECL_ORIGINAL_TYPE, DECL_P, DECL_QUALIFIER, DECL_SIZE, DECL_SIZE_UNIT, insert_decl_map(), NULL, processing_debug_stmt, remap_type(), TREE_CODE, TREE_TYPE, TYPE_NAME, TYPE_STUB_DECL, unshare_expr(), VAR_P, and walk_tree.
Referenced by add_local_variables(), adjust_assumption_stmt_op(), ipa_param_body_adjustments::carry_over_param(), copy_arguments_nochange(), copy_fn(), copy_loops(), copy_static_chain(), copy_tree_body_r(), finalize_nesting_tree_1(), fixup_remapped_decl(), remap_decl_1(), remap_decls(), remap_gimple_op_r(), remap_gimple_stmt(), remap_ssa_name(), remap_type_1(), remap_type_3(), remap_vla_decls(), replace_locals_stmt(), scan_omp_1_op(), and tree_function_versioning().
Wrapper for remap_decl so it can be used as a callback.
References remap_decl().
Referenced by copy_cfg_body().
|
static |
References add_local_decl(), can_be_nonlocal(), cfun, copy_tree_body_r(), DECL_CHAIN, DECL_EXTERNAL, DECL_HAS_VALUE_EXPR_P, DECL_IGNORED_P, DECL_P, DECL_VALUE_EXPR, decls, DINFO_LEVEL_TERSE, gcc_assert, nreverse(), NULL, NULL_TREE, remap_decl(), SET_DECL_VALUE_EXPR, VAR_P, vec_safe_push(), and walk_tree.
Referenced by copy_bind_expr(), copy_gimple_bind(), remap_block(), and replace_locals_stmt().
|
static |
Remap the dependence CLIQUE from the source to the destination function as specified in ID.
References cfun, get_new_clique(), hash_map< KeyId, Value, Traits >::get_or_insert(), and processing_debug_stmt.
Referenced by copy_loops(), copy_tree_body_r(), and remap_gimple_op_r().
|
static |
Helper for remap_gimple_stmt. Given an EH region number for the source function, map that to the duplicate EH region number in the destination function.
References get_eh_region_from_number_fn(), and eh_region_d::index.
Referenced by remap_eh_region_tree_nr(), and remap_gimple_stmt().
|
static |
Similar, but operate on INTEGER_CSTs.
References build_int_cst(), integer_type_node, remap_eh_region_nr(), and tree_to_shwi().
Referenced by remap_gimple_stmt().
Remap the GIMPLE operand pointed to by *TP. DATA is really a 'struct walk_stmt_info *'. DATA->INFO is a 'copy_body_data *'. WALK_SUBTREES is used to indicate walk_gimple_op whether to keep recursing into the children nodes of *TP.
References auto_var_in_fn_p(), CONSTANT_CLASS_P, copy_node(), copy_tree_r(), copy_warning(), DECL_CONTEXT, decl_function_context(), EXPR_P, fold_build2, fold_convert, gcc_assert, gcc_unreachable, walk_stmt_info::info, is_gimple_min_invariant(), walk_stmt_info::is_lhs, is_parm(), MR_DEPENDENCE_BASE, MR_DEPENDENCE_CLIQUE, NULL, NULL_TREE, recompute_tree_invariant_for_addr_expr(), REF_REVERSE_STORAGE_ORDER, remap_decl(), remap_dependence_clique(), remap_gimple_op_r(), remap_ssa_name(), remap_type(), SSA_NAME_DEF_STMT, walk_stmt_info::stmt, STRIP_TYPE_NOPS, wi::to_wide(), TREE_BLOCK, TREE_CODE, TREE_OPERAND, TREE_SET_BLOCK, TREE_SIDE_EFFECTS, TREE_THIS_NOTRAP, TREE_THIS_VOLATILE, TREE_TYPE, TYPE_P, useless_type_conversion_p(), walk_tree, and wide_int_to_tree().
Referenced by copy_debug_stmt(), remap_gimple_op_r(), remap_gimple_stmt(), and tree_function_versioning().
|
static |
Create a new gimple_seq by remapping all the statements in BODY using the inlining information in ID.
References gimple_seq_add_seq(), gsi_end_p(), gsi_next(), gsi_start(), gsi_stmt(), NULL, remap_gimple_stmt(), and si.
Referenced by copy_gimple_bind(), and remap_gimple_stmt().
|
static |
Helper for copy_bb. Remap statement STMT using the inlining information in ID. Return the new statement copy.
References as_a(), auto_var_in_fn_p(), bitmap_bit_p, boolean_false_node, boolean_type_node, BUILT_IN_NORMAL, cfun, copy_gimple_bind(), DECL_FUNCTION_CODE(), DECL_P, DECL_STRUCT_FUNCTION, dyn_cast(), fndecl_built_in_p(), gcc_assert, gcc_checking_assert, gcc_unreachable, gimple_assign_lhs(), gimple_assign_rhs1(), gimple_assign_single_p(), gimple_assume_body(), gimple_assume_guard(), gimple_bb(), gimple_block(), gimple_build_assign(), gimple_build_assume(), gimple_build_catch(), gimple_build_debug_bind(), gimple_build_debug_source_bind(), gimple_build_eh_filter(), gimple_build_omp_critical(), gimple_build_omp_dispatch(), gimple_build_omp_for(), gimple_build_omp_masked(), gimple_build_omp_master(), gimple_build_omp_ordered(), gimple_build_omp_parallel(), gimple_build_omp_scan(), gimple_build_omp_scope(), gimple_build_omp_section(), gimple_build_omp_sections(), gimple_build_omp_single(), gimple_build_omp_structured_block(), gimple_build_omp_target(), gimple_build_omp_task(), gimple_build_omp_taskgroup(), gimple_build_omp_teams(), gimple_build_transaction(), gimple_build_try(), gimple_build_wce(), gimple_call_arg(), gimple_call_fndecl(), gimple_call_from_thunk_p(), gimple_call_internal_fn(), gimple_call_internal_p(), gimple_call_lhs(), gimple_call_reset_alias_info(), gimple_call_set_arg(), gimple_call_set_from_thunk(), gimple_call_set_tail(), gimple_call_tail_p(), gimple_catch_handler(), gimple_catch_types(), gimple_clobber_p(), gimple_cond_code(), gimple_cond_lhs(), gimple_cond_rhs(), gimple_cond_set_code(), gimple_cond_set_lhs(), gimple_cond_set_rhs(), gimple_copy(), gimple_could_trap_p(), gimple_debug_bind_get_value(), gimple_debug_bind_get_var(), gimple_debug_bind_p(), gimple_debug_nonbind_marker_p(), gimple_debug_source_bind_get_value(), gimple_debug_source_bind_get_var(), gimple_debug_source_bind_p(), gimple_eh_dispatch_region(), gimple_eh_dispatch_set_region(), gimple_eh_filter_failure(), gimple_eh_filter_types(), gimple_has_mem_ops(), gimple_has_substatements(), gimple_omp_body(), gimple_omp_critical_clauses(), gimple_omp_critical_name(), gimple_omp_dispatch_clauses(), gimple_omp_for_clauses(), gimple_omp_for_collapse(), gimple_omp_for_cond(), gimple_omp_for_final(), gimple_omp_for_incr(), gimple_omp_for_index(), gimple_omp_for_initial(), gimple_omp_for_kind(), gimple_omp_for_pre_body(), gimple_omp_for_set_cond(), gimple_omp_for_set_final(), gimple_omp_for_set_incr(), gimple_omp_for_set_index(), gimple_omp_for_set_initial(), gimple_omp_masked_clauses(), gimple_omp_ordered_clauses(), gimple_omp_parallel_child_fn(), gimple_omp_parallel_clauses(), gimple_omp_parallel_data_arg(), gimple_omp_scan_clauses(), gimple_omp_scope_clauses(), gimple_omp_sections_clauses(), gimple_omp_single_clauses(), gimple_omp_target_clauses(), gimple_omp_target_kind(), gimple_omp_task_arg_align(), gimple_omp_task_arg_size(), gimple_omp_task_child_fn(), gimple_omp_task_clauses(), gimple_omp_task_copy_fn(), gimple_omp_task_data_arg(), gimple_omp_taskgroup_clauses(), gimple_omp_teams_clauses(), gimple_op_ptr(), gimple_resx_region(), gimple_resx_set_region(), gimple_return_retval(), gimple_seq_add_seq_without_update(), gimple_seq_add_stmt_without_update(), gimple_seq_empty_p(), gimple_set_block(), gimple_set_location(), gimple_set_vdef(), gimple_set_vuse(), gimple_transaction_body(), gimple_transaction_label_norm(), gimple_transaction_label_over(), gimple_transaction_label_uninst(), gimple_transaction_set_label_norm(), gimple_transaction_set_label_over(), gimple_transaction_set_label_uninst(), gimple_transaction_set_subcode(), gimple_transaction_subcode(), gimple_try_cleanup(), gimple_try_eval(), gimple_try_kind(), gimple_wce_cleanup(), gsi_end_p(), gsi_next(), gsi_start(), gsi_stmt(), i, input_location, is_gimple_assign(), is_gimple_debug(), make_ssa_name(), NULL, NULL_TREE, opt_for_fn, r, remap_decl(), remap_eh_region_nr(), remap_eh_region_tree_nr(), remap_gimple_op_r(), remap_gimple_seq(), SSA_NAME_DEF_STMT, SSA_NAME_VAR, walk_stmt_info::stmt, STRIP_TYPE_NOPS, TREE_CODE, TREE_CONSTANT, TREE_OPERAND, TREE_READONLY, unshare_expr(), unshare_expr_without_location(), walk_gimple_op(), and walk_tree.
Referenced by copy_bb(), and remap_gimple_seq().
|
static |
Remap the location info pointed to by LOCUS.
References gcc_assert, LOCATION_BLOCK, LOCATION_LOCUS, set_block(), and UNKNOWN_LOCATION.
Referenced by copy_edges_for_bb(), and copy_phis_for_bb().
The SAVE_EXPR pointed to by TP is being copied. If ST contains information indicating to what new SAVE_EXPR this one should be mapped, use that one. Otherwise, create a new node and enter it in ST. FN is the function into which the copy will be placed.
References copy_node(), hash_map< KeyId, Value, Traits >::get(), and hash_map< KeyId, Value, Traits >::put().
Referenced by copy_tree_body_r().
|
static |
Construct new SSA name for old NAME. ID is the inline context.
References pt_solution::anything, build_debug_expr_decl(), build_zero_cst(), cfun, DECL_ABSTRACT_ORIGIN, DECL_ARTIFICIAL, DECL_IGNORED_P, DECL_MODE, DECL_NAME, duplicate_ssa_name_range_info(), EDGE_COUNT, EDGE_SUCC, ENTRY_BLOCK_PTR_FOR_FN, gcc_assert, get_ptr_info(), gimple_build_assign(), gimple_build_debug_source_bind(), gimple_build_nop(), gsi_after_labels(), gsi_insert_after(), gsi_insert_before(), gsi_last_bb(), GSI_NEW_STMT, GSI_SAME_STMT, insert_decl_map(), make_ssa_name(), NULL, POINTER_TYPE_P, processing_debug_stmt, ptr_info_def::pt, remap_decl(), remap_type(), SET_DECL_MODE, set_ssa_default_def(), SET_SSA_NAME_VAR_OR_IDENTIFIER, single_succ(), single_succ_p(), SSA_NAME_DEF_STMT, SSA_NAME_IDENTIFIER, SSA_NAME_IS_DEFAULT_DEF, SSA_NAME_OCCURS_IN_ABNORMAL_PHI, SSA_NAME_PTR_INFO, SSA_NAME_RANGE_INFO, SSA_NAME_VAR, TREE_CODE, TREE_TYPE, unshare_expr(), VAR_DECL_IS_VIRTUAL_OPERAND, and VAR_P.
Referenced by copy_tree_body_r(), remap_gimple_op_r(), replace_locals_op(), and setup_one_parameter().
tree remap_type | ( | tree | type, |
copy_body_data * | id ) |
References insert_decl_map(), NULL, remap_type_1(), remap_type_2(), type(), and variably_modified_type_p().
Referenced by copy_tree_body_r(), finalize_nesting_tree_1(), fixup_child_record_type(), fixup_remapped_decl(), initialize_inlined_parameters(), lower_assumption(), lower_omp_task_reductions(), nesting_copy_decl(), remap_decl(), remap_gimple_op_r(), remap_ssa_name(), remap_type_1(), remap_vla_decls(), scan_omp_1_op(), scan_sharing_clauses(), and task_copyfn_remap_type().
|
static |
References build_pointer_type_for_mode(), build_reference_type_for_mode(), build_type_attribute_qual_variant(), copy_node(), copy_tree_body_r(), create_tmp_var, DECL_ATTRIBUTES, DECL_CHAIN, DECL_CONTEXT, error_mark_node, gcc_checking_assert, gcc_unreachable, get_identifier(), insert_decl_map(), nreverse(), NULL, NULL_TREE, remap_decl(), remap_type(), TREE_CODE, tree_cons(), TREE_TYPE, TYPE_ARG_TYPES, TYPE_ATTRIBUTES, TYPE_DOMAIN, TYPE_FIELDS, TYPE_MAIN_VARIANT, TYPE_MAX_VALUE, TYPE_MIN_VALUE, TYPE_MODE, TYPE_NEXT_VARIANT, TYPE_POINTER_TO, TYPE_QUALS, TYPE_REF_CAN_ALIAS_ALL, TYPE_REFERENCE_TO, TYPE_SIZE, TYPE_SIZE_UNIT, TYPE_STUB_DECL, and walk_tree.
Referenced by build_duplicate_type(), and remap_type().
|
static |
Return true if TYPE needs to be remapped because remap_decl on any needed embedded decl returns something other than that decl.
References DECL_CHAIN, DECL_FIELD_OFFSET, DECL_QUALIFIER, DECL_SIZE, DECL_SIZE_UNIT, remap_type_2(), RETURN_TRUE_IF_VAR, TREE_CODE, TREE_TYPE, TYPE_DOMAIN, TYPE_FIELDS, TYPE_MAX_VALUE, TYPE_MIN_VALUE, TYPE_SIZE, and TYPE_SIZE_UNIT.
Referenced by remap_type(), and remap_type_2().
Helper function for remap_type_2, called through walk_tree.
References DECL_P, NULL_TREE, remap_decl(), and TYPE_P.
Called via walk_gimple_seq by copy_gimple_seq_and_replace_local. Using the splay_tree pointed to by ST (which is really a `splay_tree'), remaps all local declarations to appropriate replacements in gimple operands.
References duplicate_remap_omp_clause_seq(), gcc_unreachable, hash_map< KeyId, Value, Traits >::get(), gsi_stmt(), walk_stmt_info::is_lhs, NULL_TREE, OMP_CLAUSE_CODE, OMP_CLAUSE_LASTPRIVATE, OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ, OMP_CLAUSE_LINEAR, OMP_CLAUSE_LINEAR_GIMPLE_SEQ, OMP_CLAUSE_REDUCTION, OMP_CLAUSE_REDUCTION_GIMPLE_INIT, OMP_CLAUSE_REDUCTION_GIMPLE_MERGE, remap_ssa_name(), SSA_NAME_DEF_STMT, TREE_CODE, TREE_OPERAND, TREE_STATIC, and VAR_P.
Referenced by copy_gimple_seq_and_replace_locals(), and duplicate_remap_omp_clause_seq().
|
static |
Called via walk_gimple_seq by copy_gimple_seq_and_replace_local. Using the splay_tree pointed to by ST (which is really a `splay_tree'), remaps all local declarations to appropriate replacements in gimple statements.
References can_be_nonlocal(), DECL_CHAIN, decls, dyn_cast(), gcc_checking_assert, gimple_bind_block(), gimple_bind_set_block(), gimple_bind_set_vars(), gimple_bind_vars(), gsi_stmt(), NULL, NULL_TREE, remap_block(), remap_decl(), remap_decls(), walk_stmt_info::stmt, TREE_TYPE, and variably_modified_type_p().
Referenced by copy_gimple_seq_and_replace_locals(), and duplicate_remap_omp_clause_seq().
|
inlinestatic |
Add to BINDINGS a debug stmt resetting SRCVAR if inlining might have brought in or introduced any debug stmts for SRCVAR.
References gimple_build_debug_bind(), gimple_seq_add_stmt(), NULL_TREE, target_for_debug_bind(), and VAR_P.
Referenced by reset_debug_bindings().
|
inlinestatic |
For each inlined variable for which we may have debug bind stmts, add before GSI a final debug stmt resetting it, marking the end of its life, so that var-tracking knows it doesn't have to compute further locations for it.
References DECL_ARGUMENTS, DECL_CHAIN, FOR_EACH_LOCAL_DECL, gimple_in_ssa_p(), gsi_insert_seq_before_without_update(), GSI_SAME_STMT, NULL, opt_for_fn, and reset_debug_binding().
Referenced by expand_call_inline().
Return true if VALUE is an ADDR_EXPR of an automatic variable defined in function FN, or of a data member thereof.
References auto_var_in_fn_p(), get_base_address(), TREE_CODE, and TREE_OPERAND.
Referenced by setup_one_parameter().
|
static |
Initialize parameter P with VALUE. If needed, produce init statement at the end of BB. When BB is NULL, we return init statement to be output later.
References auto_var_in_fn_p(), cfun, copy_decl_to_var(), DECL_CHAIN, DECL_NOT_GIMPLE_REG_P, DECL_P, DECL_SEEN_IN_BIND_EXPR_P, error_mark_node, force_value_to_type(), gimple_build_assign(), gimple_in_ssa_p(), insert_decl_map(), insert_init_debug_bind(), insert_init_stmt(), is_empty_type(), is_gimple_min_invariant(), is_gimple_reg(), is_gimple_reg_type(), NULL, hash_map< KeyId, Value, Traits >::put(), remap_ssa_name(), self_inlining_addr_expr(), set_ssa_default_def(), ssa_default_def(), SSA_NAME_IS_DEFAULT_DEF, SSA_NAME_OCCURS_IN_ABNORMAL_PHI, STRIP_USELESS_TYPE_CONVERSION, TREE_ADDRESSABLE, TREE_CODE, TREE_READONLY, TREE_SIDE_EFFECTS, TREE_TYPE, and useless_type_conversion_p().
Referenced by initialize_inlined_parameters(), and tree_function_versioning().
void tree_function_versioning | ( | tree | old_decl, |
tree | new_decl, | ||
vec< ipa_replace_map *, va_gc > * | tree_map, | ||
ipa_param_adjustments * | param_adjustments, | ||
bool | update_clones, | ||
bitmap | blocks_to_copy, | ||
basic_block | new_entry ) |
Create a copy of a function's tree. OLD_DECL and NEW_DECL are FUNCTION_DECL tree nodes of the original function and the new copied function respectively. In case we want to replace a DECL tree with another tree while duplicating the function's body, TREE_MAP represents the mapping between these trees. If UPDATE_CLONES is set, the call_stmt fields of edges of clones of the function will be updated. If non-NULL PARAM_ADJUSTMENTS determines how function prototype (i.e. the function parameters and return value) should be modified). If non-NULL BLOCKS_TO_COPY determine what basic blocks to copy. If non_NULL NEW_ENTRY determine new entry BB of the clone.
References add_local_variables(), ipa_param_body_adjustments::append_init_stmts(), AVOID_CFG_MODIFICATIONS, BLOCK_SUPERCONTEXT, build_debug_expr_decl(), build_decl(), build_fold_addr_expr, calculate_dominance_info(), cgraph_edge::call_stmt, cgraph_node::callees, cgraph_node::calls_declare_variant_alt, CB_CGE_MOVE, CB_CGE_MOVE_CLONES, CDI_DOMINATORS, CDI_POST_DOMINATORS, cfun, copy_arguments_nochange(), copy_body(), copy_decl_no_change(), copy_result_decl_to_var(), copy_static_chain(), basic_block_def::count, cgraph_edge::count, cgraph_node::count, debug_hooks, DECL_ABSTRACT_ORIGIN, DECL_ARGUMENTS, DECL_ARTIFICIAL, DECL_BY_REFERENCE, DECL_CHAIN, DECL_CONTEXT, decl_debug_args_insert(), decl_debug_args_lookup(), DECL_FUNCTION_PERSONALITY, DECL_HAS_DEBUG_ARGS_P, DECL_INITIAL, DECL_IS_MALLOC, DECL_MODE, DECL_ORIGIN, DECL_POSSIBLY_INLINED, DECL_RESULT, DECL_SOURCE_LOCATION, DECL_STRUCT_FUNCTION, declare_inline_vars(), delete_unreachable_blocks_update_callgraph(), lang_hooks::dup_lang_specific_decl, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, fix_loop_structure(), fold_marked_statements(), free_dominance_info(), gcc_assert, gcc_checking_assert, cgraph_node::get(), clone_info::get(), hash_map< KeyId, Value, Traits >::get(), ipa_param_body_adjustments::get_new_param_chain(), ipa_param_adjustments::get_updated_indices(), gimple_bb(), gimple_build_debug_bind(), gimple_build_debug_source_bind(), gimple_build_nop(), gimple_in_ssa_p(), gsi_after_labels(), gsi_insert_before(), GSI_NEW_STMT, i, cgraph_node::indirect_calls, initialize_cfun(), input_location, insert_decl_map(), insert_init_stmt(), is_gimple_reg(), loop_optimizer_init(), loops_for_fn(), LOOPS_NEED_FIXUP, loops_state_satisfies_p(), ipa_param_body_adjustments::m_dead_ssa_debug_equiv, ipa_param_body_adjustments::m_reset_debug_decls, ipa_param_adjustments::m_skip_return, make_ssa_name(), MAY_HAVE_DEBUG_BIND_STMTS, ipa_replace_map::new_tree, cgraph_edge::next_callee, NULL, NULL_TREE, number_blocks(), gcc_debug_hooks::outlining_inline_function, clone_info::param_adjustments, ipa_replace_map::parm_num, pop_cfun(), PROP_loops, rebuild_frequencies(), cgraph_edge::rebuild_references(), remap_blocks(), remap_decl(), remap_gimple_op_r(), SET_DECL_MODE, set_ssa_default_def(), setup_one_parameter(), single_succ(), single_succ_edge(), split_edge(), ssa_default_def(), SSA_NAME_DEF_STMT, TODO_update_ssa, TREE_CHAIN, TREE_CODE, TREE_TYPE, UNKNOWN_LOCATION, update_clone_info(), update_max_bb_count(), update_ssa(), cgraph_node::used_as_abstract_origin, vec_safe_copy(), vec_safe_is_empty(), vec_safe_length(), vec_safe_push(), void_type_node, VOID_TYPE_P, and walk_tree.
Referenced by cgraph_node::create_version_clone_with_body(), ipa_tm_create_version(), cgraph_node::materialize_clone(), and save_inline_function_body().
Returns nonzero if FN is a function that does not have any fundamental inline blocking properties.
References DECL_ATTRIBUTES, DECL_DECLARED_INLINE_P, DECL_IN_SYSTEM_HEADER, DECL_NO_INLINE_WARNING_P, DECL_UNINLINABLE, error(), function_attribute_inlinable_p(), inline_forbidden_p(), inline_forbidden_reason, lookup_attribute(), NULL, opt_for_fn, and warning().
Referenced by compute_fn_summary().
Return true if the function is allowed to be versioned. This is a guard for the versioning functionality.
References copy_forbidden(), DECL_ATTRIBUTES, DECL_STRUCT_FUNCTION, lookup_attribute(), and NULL.
Referenced by can_strub_internally_p(), cgraph_node::create_version_clone_with_body(), execute_split_functions(), expand_target_clones(), ipa_fn_summary_generate(), and ipa_tm_execute().
|
static |
Update clone info after duplication.
References cgraph_node::clones, copy_tree_body_r(), clone_info::get(), i, ipa_replace_map::new_tree, NULL, clone_info::tree_map, vec_safe_length(), and walk_tree.
Referenced by tree_function_versioning().
|
static |
Inserting Single Entry Multiple Exit region in SSA form into code in SSA form is quite easy, since dominator relationship for old basic blocks does not change. There is however exception where inlining might change dominator relation across EH edges from basic block within inlined functions destinating to landing pads in function we inline into. The function fills in PHI_RESULTs of such PHI nodes if they refer to gimple regs. Otherwise, the function mark PHI_RESULT of such PHI nodes for renaming. For non-gimple regs, renaming is safe: the EH edges are abnormal and SSA_NAME_OCCURS_IN_ABNORMAL_PHI must be set, and this means that there will be no overlapping live ranges for the underlying symbol. This might change in future if we allow redirecting of EH edges and we might want to change way build CFG pre-inlining to include all the possible edges then.
References ENTRY_BLOCK, find_edge(), FOR_EACH_EDGE, gcc_assert, gcc_checking_assert, gsi_end_p(), gsi_next(), gsi_start_phis(), PHI_ARG_DEF_PTR_FROM_EDGE, PHI_RESULT, SET_USE, si, SSA_NAME_OCCURS_IN_ABNORMAL_PHI, basic_block_def::succs, and USE_FROM_PTR.
Referenced by copy_edges_for_bb().
eni_weights eni_size_weights |
Tree inlining. Copyright (C) 2001-2024 Free Software Foundation, Inc. Contributed by Alexandre Oliva <aoliva@redhat.com> This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
I'm not real happy about this, but we need to handle gimple and non-gimple trees.
Inlining, Cloning, Versioning, Parallelization Inlining: a function body is duplicated, but the PARM_DECLs are remapped into VAR_DECLs, and non-void RETURN_EXPRs become MODIFY_EXPRs that store to a dedicated returned-value variable. The duplicated eh_region info of the copy will later be appended to the info for the caller; the eh_region info in copied throwing statements and RESX statements are adjusted accordingly. Cloning: (only in C++) We have one body for a con/de/structor, and multiple function decls, each with a unique parameter list. Duplicate the body, using the given splay tree; some parameters will become constants (like 0 or 1). Versioning: a function body is duplicated and the result is a new function rather than into blocks of an existing function as with inlining. Some parameters will become constants. Parallelization: a region of a function is duplicated resulting in a new function. Variables may be replaced with complex expressions to enable shared variable semantics. All of these will simultaneously lookup any callgraph edges. If we're going to inline the duplicated function body, and the given function has some cloned callgraph nodes (one for each place this function will be inlined) those callgraph edges will be duplicated. If we're cloning the body, those callgraph edges will be updated to point into the new body. (Note that the original callgraph node and edge list will not be altered.) See the CALL_EXPR handling case in copy_tree_body_r ().
To Do: o In order to make inlining-on-trees work, we pessimized function-local static constants. In particular, they are now always output, even when not addressed. Fix this by treating function-local static constants just like global static constants; the back-end already knows not to output them if they are not needed. o Provide heuristics to clamp inlining of recursive template calls?
Weights that estimate_num_insns uses to estimate the size of the produced code.
Referenced by analyze_bb(), analyze_function_body(), back_threader_profitability::back_threader_profitability(), can_unroll_loop_p(), compute_added_num_insns(), compute_fn_summary(), consider_split(), decide_copy_try_finally(), ipa_call_summary_t::duplicate(), early_inliner(), estimate_edge_devirt_benefit(), execute_split_functions(), gimple_account_profile_record(), init_inline_once(), init_loop_unswitch_info(), ipa_make_edge_direct_to_target(), ipa_profile_generate_summary(), loop_prefetch_arrays(), back_threader_profitability::possibly_profitable_path_p(), record_temporary_equivalences(), reorder_operands(), should_duplicate_loop_header_p(), and tree_estimate_loop_size().
eni_weights eni_time_weights |
Weights that estimate_num_insns uses to estimate the time necessary to execute the produced code.
Referenced by analyze_function_body(), compute_fn_summary(), ipa_call_summary_t::duplicate(), early_inliner(), estimate_edge_devirt_benefit(), execute_split_functions(), gimple_account_profile_record(), init_inline_once(), ipa_make_edge_direct_to_target(), ipa_profile_generate_summary(), loop_prefetch_arrays(), and value_replacement().
|
static |
Referenced by inline_forbidden_p(), inline_forbidden_p_stmt(), and tree_inlinable_function_p().
|
static |
If nonzero, we're remapping the contents of inlined debug statements. If negative, an error has occurred, such as a reference to a variable that isn't available in the inlined context.
Referenced by copy_debug_stmt(), remap_decl(), remap_dependence_clique(), and remap_ssa_name().