GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "memmodel.h"
#include "backend.h"
#include "target.h"
#include "tree.h"
#include "gimple.h"
#include "cfghooks.h"
#include "tree-pass.h"
#include "ssa.h"
#include "cgraph.h"
#include "coverage.h"
#include "diagnostic-core.h"
#include "fold-const.h"
#include "varasm.h"
#include "tree-nested.h"
#include "gimplify.h"
#include "gimple-iterator.h"
#include "gimplify-me.h"
#include "tree-cfg.h"
#include "tree-into-ssa.h"
#include "value-prof.h"
#include "profile.h"
#include "tree-cfgcleanup.h"
#include "stringpool.h"
#include "attribs.h"
#include "tree-pretty-print.h"
#include "langhooks.h"
#include "stor-layout.h"
#include "xregex.h"
#include "alloc-pool.h"
#include "symbol-summary.h"
#include "symtab-thunks.h"
#include "cfganal.h"
#include "gt-tree-profile.h"
Data Structures | |
struct | condcov |
Macros | |
#define | CONDITIONS_MAX_TERMS (TYPE_PRECISION (gcov_type_node)) |
#define | EDGE_CONDITION (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE) |
#define | HAVE_sync_compare_and_swapsi 0 |
#define | HAVE_atomic_compare_and_swapsi 0 |
#define | HAVE_sync_compare_and_swapdi 0 |
#define | HAVE_atomic_compare_and_swapdi 0 |
Enumerations | |
enum | counter_update_method { COUNTER_UPDATE_SINGLE_THREAD , COUNTER_UPDATE_ATOMIC_BUILTIN , COUNTER_UPDATE_ATOMIC_SPLIT , COUNTER_UPDATE_ATOMIC_PARTIAL } |
Variables | |
static tree | gcov_type_node |
static tree | tree_interval_profiler_fn |
static tree | tree_pow2_profiler_fn |
static tree | tree_topn_values_profiler_fn |
static tree | tree_indirect_call_profiler_fn |
static tree | tree_average_profiler_fn |
static tree | tree_ior_profiler_fn |
static tree | tree_time_profiler_counter |
static tree | ic_tuple_var |
static tree | ic_tuple_counters_field |
static tree | ic_tuple_callee_field |
static counter_update_method | counter_update = COUNTER_UPDATE_SINGLE_THREAD |
static vec< regex_t > | profile_filter_files |
static vec< regex_t > | profile_exclude_files |
#define CONDITIONS_MAX_TERMS (TYPE_PRECISION (gcov_type_node)) |
Only instrument terms with fewer than number of bits in a (wide) gcov integer, which is probably 64. The algorithm itself does not impose this limitation, but it makes for a simpler implementation. * Allocating the output data structure (coverage_counter_alloc ()) can assume pairs of gcov_type_unsigned and not use a separate length field. * A pair gcov_type_unsigned can be used as accumulators. * Updating accumulators is can use the bitwise operations |=, &= and not custom operators that work for arbitrary-sized bit-sets. Most real-world code should be unaffected by this, but it is possible (especially for generated code) to exceed this limit.
Referenced by find_conditions().
#define EDGE_CONDITION (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE) |
Referenced by instrument_decisions().
#define HAVE_atomic_compare_and_swapdi 0 |
Referenced by tree_profiling().
#define HAVE_atomic_compare_and_swapsi 0 |
Referenced by tree_profiling().
#define HAVE_sync_compare_and_swapdi 0 |
Referenced by tree_profiling().
#define HAVE_sync_compare_and_swapsi 0 |
Referenced by tree_profiling().
Types of counter update methods. By default, the counter updates are done for a single threaded system (COUNTER_UPDATE_SINGLE_THREAD). If the user selected atomic profile counter updates (-fprofile-update=atomic), then the counter updates will be done atomically on a best-effort basis. One of three methods to do the counter updates is selected according to the target capabilities. Ideally, the counter updates are done through atomic operations in hardware (COUNTER_UPDATE_ATOMIC_BUILTIN). If the target supports only 32-bit atomic increments and gcov_type_node is a 64-bit integer type, then for the profile edge counters the increment is performed through two separate 32-bit atomic increments (COUNTER_UPDATE_ATOMIC_SPLIT or COUNTER_UPDATE_ATOMIC_PARTIAL). If the target supports libatomic (targetm.have_libatomic), then other counter updates are carried out by libatomic calls (COUNTER_UPDATE_ATOMIC_SPLIT). If the target does not support libatomic, then the other counter updates are not done atomically (COUNTER_UPDATE_ATOMIC_PARTIAL) and a warning is issued. If the target does not support atomic operations in hardware, however, it supports libatomic, then all updates are carried out by libatomic calls (COUNTER_UPDATE_ATOMIC_BUILTIN).
Enumerator | |
---|---|
COUNTER_UPDATE_SINGLE_THREAD | |
COUNTER_UPDATE_ATOMIC_BUILTIN | |
COUNTER_UPDATE_ATOMIC_SPLIT | |
COUNTER_UPDATE_ATOMIC_PARTIAL |
array_slice< basic_block > cov_blocks | ( | struct condcov * | cov, |
size_t | n ) |
The subgraph, exluding intermediates, for the nth Boolean expression.
References begin(), end(), array_slice< T >::invalid(), condcov::m_blocks, and condcov::m_index.
Referenced by branch_prob(), and find_conditions().
void cov_free | ( | struct condcov * | cov | ) |
Deleter for condcov.
References condcov::m_maps, and sbitmap_vector_free().
Referenced by branch_prob().
size_t cov_length | ( | const struct condcov * | cov | ) |
Get the length, that is the number of Boolean expression found. cov_length is the one-past index for cov_{blocks,masks,maps}.
References condcov::m_index.
Referenced by branch_prob(), and find_conditions().
array_slice< sbitmap > cov_maps | ( | struct condcov * | cov, |
size_t | n ) |
The maps for the nth Boolean expression.
References begin(), end(), array_slice< T >::invalid(), condcov::m_index, and condcov::m_maps.
Referenced by branch_prob(), and find_conditions().
array_slice< uint64_t > cov_masks | ( | struct condcov * | cov, |
size_t | n ) |
The masks for the nth Boolean expression.
References begin(), end(), array_slice< T >::invalid(), condcov::m_index, and condcov::m_masks.
Referenced by branch_prob(), and find_conditions().
Condition coverage (MC/DC) Whalen, Heimdahl, De Silva in "Efficient Test Coverage Measurement for MC/DC" describe an algorithm for modified condition/decision coverage based on AST analysis. This algorithm does analyzes the control flow graph (interpreted as a binary decision diagram) to determine the masking vectors. The individual phases are described in more detail closer to the implementation. The coverage only considers the positions, not the symbols, in a conditional, e.g. !A || (!B && A) is a 3-term conditional even though A appears twice. Subexpressions have no effect on term ordering: (a && (b || (c && d)) || e) comes out as [a b c d e]. Functions whose arguments are Boolean expressions are treated as separate expressions, that is, a && fn (b || c) && d is treated as [a _fn d] and [b c], not [a b c d]. The output for gcov is a vector of pairs of unsigned integers, interpreted as bit-sets, where the bit index corresponds to the index of the condition in the expression. The returned condcov should be released by the caller with cov_free.
References b, basic_block_info_for_fn, bitmap_set_bit, calculate_dominance_info(), CDI_DOMINATORS, CDI_POST_DOMINATORS, condcov::condcov(), CONDITIONS_MAX_TERMS, cov_blocks(), cov_length(), cov_maps(), cov_masks(), condcov::ctx, dom_info_available_p(), exprs, free_dominance_info(), gimple_location(), gsi_last_bb(), gsi_stmt(), i, condcov::m_blocks, condcov::m_index, condcov::m_maps, condcov::m_masks, mark_dfs_back_edges(), n_basic_blocks_for_fn, and warning_at().
Referenced by branch_prob().
|
inlinestatic |
If RESULT is not null, then output instructions as GIMPLE trees to assign the updated counter from CALL of FUNC to RESULT. Insert the CALL and the optional assignment instructions to GSI. Use NAME for temporary values.
References gimple_build_assign(), gimple_set_lhs(), gsi_insert_after(), GSI_NEW_STMT, make_temp_ssa_name(), NULL, and TREE_TYPE.
Referenced by gen_counter_update().
|
inlinestatic |
Output instructions as GIMPLE trees to increment the COUNTER. If RESULT is not null, then assign the updated counter value to RESULT. Insert the instructions to GSI. Use NAME for temporary values.
References boolean_type_node, build_fold_addr_expr, build_int_cst(), build_one_cst(), build_zero_cst(), builtin_decl_explicit(), counter_update, COUNTER_UPDATE_ATOMIC_BUILTIN, COUNTER_UPDATE_ATOMIC_PARTIAL, COUNTER_UPDATE_ATOMIC_SPLIT, gcov_type_node, gen_assign_counter_update(), gimple_build_assign(), gimple_build_call(), gimple_call_set_lhs(), gsi_insert_after(), GSI_NEW_STMT, integer_type_node, make_temp_ssa_name(), MEMMODEL_RELAXED, NULL, size_type_node, TREE_TYPE, TYPE_PRECISION, uint32_type_node, and unshare_expr().
Referenced by gimple_gen_edge_profiler(), and gimple_gen_time_profiler().
void gimple_gen_average_profiler | ( | histogram_value | value, |
unsigned | tag ) |
Output instructions as GIMPLE trees to increment the average histogram counter. VALUE is the expression whose value is profiled. TAG is the tag of the section for counters, BASE is offset of the counter position.
References force_gimple_operand_gsi(), gimple_build_call(), gsi_for_stmt(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, histogram_value_t::hvalue, NULL_TREE, prepare_instrumented_value(), histogram_value_t::stmt, tree_average_profiler_fn, and tree_coverage_counter_addr().
Referenced by instrument_values().
void gimple_gen_edge_profiler | ( | int | edgeno, |
edge | e ) |
Output instructions as GIMPLE trees to increment the edge execution count, and insert them on E.
References gen_counter_update(), gsi_last(), NULL_TREE, PENDING_STMT, and tree_coverage_counter_ref().
Referenced by instrument_edges().
void gimple_gen_ic_func_profiler | ( | void | ) |
Output instructions as GIMPLE trees for code to find the most common called function in indirect call. Insert instructions at the beginning of every possible called function.
References build3(), build_addr(), build_int_cst(), cgraph_node::called_by_ifunc_resolver, cfun, current_function_decl, DECL_VIRTUAL_P, ENTRY_BLOCK_PTR_FOR_FN, force_gimple_operand_gsi(), gcov_type_node, cgraph_node::get(), gimple_build_call(), gimple_build_cond(), gimple_init_gcov_profiler(), gsi_after_labels(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, gsi_start_bb(), ic_tuple_callee_field, ic_tuple_var, make_edge(), NULL, NULL_TREE, cgraph_node::only_called_directly_p(), cgraph_node::profile_id, ptr_type_node, single_succ_edge(), split_edge(), tree_indirect_call_profiler_fn, profile_probability::unlikely(), and profile_probability::very_likely().
Referenced by tree_profiling().
void gimple_gen_ic_profiler | ( | histogram_value | value, |
unsigned | tag ) |
Output instructions as GIMPLE trees for code to find the most common called function in indirect call. VALUE is the call expression whose indirect callee is profiled. TAG is the tag of the section for counters.
References build3(), build_pointer_type(), force_gimple_operand_gsi(), get_gcov_type(), gimple_build_assign(), gsi_for_stmt(), gsi_insert_before(), GSI_SAME_STMT, histogram_value_t::hvalue, ic_tuple_callee_field, ic_tuple_counters_field, ic_tuple_var, make_temp_ssa_name(), NULL, NULL_TREE, ptr_type_node, histogram_value_t::stmt, tree_coverage_counter_addr(), unshare_expr(), and histogram_value_t::value.
Referenced by instrument_values().
void gimple_gen_interval_profiler | ( | histogram_value | value, |
unsigned | tag ) |
Output instructions as GIMPLE trees to increment the interval histogram counter. VALUE is the expression whose value is profiled. TAG is the tag of the section for counters, BASE is offset of the counter position.
References build_addr(), build_int_cst_type(), force_gimple_operand_gsi(), gimple_build_call(), gsi_for_stmt(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, histogram_value_t::hdata, histogram_value_t::hvalue, histogram_value_t::int_start, integer_type_node, histogram_value_t::intvl, NULL_TREE, prepare_instrumented_value(), histogram_value_t::steps, histogram_value_t::stmt, tree_coverage_counter_ref(), tree_interval_profiler_fn, and unsigned_type_node.
Referenced by instrument_values().
void gimple_gen_ior_profiler | ( | histogram_value | value, |
unsigned | tag ) |
Output instructions as GIMPLE trees to increment the ior histogram counter. VALUE is the expression whose value is profiled. TAG is the tag of the section for counters, BASE is offset of the counter position.
References force_gimple_operand_gsi(), gimple_build_call(), gsi_for_stmt(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, histogram_value_t::hvalue, NULL_TREE, prepare_instrumented_value(), histogram_value_t::stmt, tree_coverage_counter_addr(), and tree_ior_profiler_fn.
Referenced by instrument_values().
void gimple_gen_pow2_profiler | ( | histogram_value | value, |
unsigned | tag ) |
Output instructions as GIMPLE trees to increment the power of two histogram counter. VALUE is the expression whose value is profiled. TAG is the tag of the section for counters.
References force_gimple_operand_gsi(), gimple_build_call(), gsi_for_stmt(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, histogram_value_t::hvalue, NULL_TREE, prepare_instrumented_value(), histogram_value_t::stmt, tree_coverage_counter_addr(), and tree_pow2_profiler_fn.
Referenced by instrument_values().
void gimple_gen_time_profiler | ( | unsigned | tag | ) |
Output instructions as GIMPLE tree at the beginning for each function. TAG is the tag of the section for counters, BASE is offset of the counter position and GSI is the iterator we place the counter.
References build_int_cst(), cfun, ENTRY_BLOCK_PTR_FOR_FN, force_gimple_operand_gsi(), gen_counter_update(), get_gcov_type(), gimple_build_cond(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, gsi_start_bb(), make_edge(), NULL, NULL_TREE, single_succ_edge(), split_edge(), tree_coverage_counter_ref(), tree_time_profiler_counter, and profile_probability::unlikely().
Referenced by instrument_values().
void gimple_gen_topn_values_profiler | ( | histogram_value | value, |
unsigned | tag ) |
Output instructions as GIMPLE trees for code to find the most N common values. VALUE is the expression whose value is profiled. TAG is the tag of the section for counters.
References force_gimple_operand_gsi(), gimple_build_call(), gsi_for_stmt(), gsi_insert_before(), GSI_NEW_STMT, GSI_SAME_STMT, histogram_value_t::hvalue, NULL_TREE, prepare_instrumented_value(), histogram_value_t::stmt, tree_coverage_counter_addr(), and tree_topn_values_profiler_fn.
Referenced by instrument_values().
void gimple_init_gcov_profiler | ( | void | ) |
Create the type and function decls for the interface with gcov.
References build_decl(), build_fn_decl(), build_function_type_list(), build_pointer_type(), CONST_CAST, DECL_ARTIFICIAL, DECL_ASSEMBLER_NAME, DECL_ATTRIBUTES, DECL_EXTERNAL, DECL_INITIAL, free(), gcov_type_node, get_gcov_type(), get_identifier(), init_ic_make_global_vars(), integer_type_node, NULL, NULL_TREE, PROFILE_UPDATE_ATOMIC, ptr_type_node, tree_average_profiler_fn, tree_cons(), tree_indirect_call_profiler_fn, tree_interval_profiler_fn, tree_ior_profiler_fn, TREE_NOTHROW, tree_pow2_profiler_fn, TREE_PUBLIC, TREE_STATIC, tree_time_profiler_counter, tree_topn_values_profiler_fn, UNKNOWN_LOCATION, unsigned_type_node, and void_type_node.
Referenced by branch_prob(), and gimple_gen_ic_func_profiler().
|
static |
Return true when FILENAME should be instrumented based on -fprofile-filter-files and -fprofile-exclude-files options.
References i, NULL, profile_exclude_files, and profile_filter_files.
Referenced by tree_profiling().
|
static |
Do initialization work for the edge profiler.
Add code: __thread gcov* __gcov_indirect_call.counters; // pointer to actual counter __thread void* __gcov_indirect_call.callee; // actual callee address __thread int __gcov_function_counter; // time profiler function counter
References build_decl(), build_pointer_type(), BUILTINS_LOCATION, DECL_ARTIFICIAL, DECL_CHAIN, decl_default_tls_model(), DECL_EXTERNAL, DECL_INITIAL, finish_builtin_struct(), get_gcov_type(), get_identifier(), ic_tuple_callee_field, ic_tuple_counters_field, ic_tuple_var, lang_hooks_for_types::make_type, NULL, NULL_TREE, ptr_type_node, set_decl_tls_model(), targetm, TREE_PUBLIC, lang_hooks::types, and UNKNOWN_LOCATION.
Referenced by gimple_init_gcov_profiler().
size_t instrument_decisions | ( | array_slice< basic_block > | expr, |
size_t | condno, | ||
array_slice< sbitmap > | maps, | ||
array_slice< uint64_t > | masks ) |
Add instrumentation to a decision subgraph. EXPR should be the (topologically sorted) block of nodes returned by cov_blocks, MAPS the bitmaps returned by cov_maps, and MASKS the block of bitsets returned by cov_masks. CONDNO should be the index of this condition in the function, i.e. the same argument given to cov_{masks,graphs}. EXPR may contain nodes in-between the conditions, e.g. when an operand contains a function call, or there is a setjmp and the cfg is filled with complex edges. Every node is annotated with three counters; the true, false, and mask value. First, walk the graph and determine what if there are multiple possible values for either accumulator depending on the path taken, in which case a phi node is created and registered as the accumulator. Then, those values are pushed as accumulators to the immediate successors. For some very particular programs there may be multiple paths into the expression (e.g. when prior terms are determined by a surrounding conditional) in which case the default zero-counter is pushed, otherwise all predecessors will have been considered before the successor because of topologically ordered traversal. Finally, expr is traversed again to look for edges to the outcomes, that is, edges with a destination outside of expr, and the local accumulators are flushed to the global gcov counters on these edges. In some cases there are edge splits that cause 3+ edges to the two outcome nodes. If a complex edge is taken (e.g. on a longjmp) the accumulators are attempted poisoned so that there would be no change to the global counters, but this has proven unreliable in the presence of undefined behavior, see the setjmp003 test. It is important that the flushes happen on the basic condition outgoing edge, otherwise flushes could be lost to exception handling or other abnormal control flow.
References b, bitmap_bit_p, bitmap_count_bits(), build_addr(), build_int_cst(), builtin_decl_explicit(), candidates, EDGE_COMPLEX, EDGE_CONDITION, gcc_assert, gcc_checking_assert, gcov_type_node, gimple_build_call(), gsi_insert_on_edge(), integer_type_node, MEMMODEL_RELAXED, NULL, PROFILE_UPDATE_ATOMIC, table, tree_coverage_counter_ref(), TYPE_PRECISION, and unshare_expr().
Referenced by branch_prob().
simple_ipa_opt_pass * make_pass_ipa_tree_profile | ( | gcc::context * | ctxt | ) |
|
static |
Parse values of -fprofile-filter-files and -fprofile-exclude-files options.
References parse_profile_filter(), profile_exclude_files, and profile_filter_files.
Referenced by tree_profiling().
|
static |
Parse list of provided REGEX (separated with semi-collon) and create expressions (of type regex_t) and save them into V vector. If there is a regular expression parsing error, error message is printed for FLAG_NAME.
References error(), NULL, and r.
Referenced by parse_profile_file_filtering().
|
static |
Emits code to get VALUE to instrument at GSI, and returns the variable containing the value.
References build_nonstandard_integer_type(), fold_convert, force_gimple_operand_gsi(), gcov_type_node, GSI_SAME_STMT, histogram_value_t::hvalue, NULL_TREE, POINTER_TYPE_P, TREE_TYPE, TYPE_PRECISION, and histogram_value_t::value.
Referenced by gimple_gen_average_profiler(), gimple_gen_interval_profiler(), gimple_gen_ior_profiler(), gimple_gen_pow2_profiler(), and gimple_gen_topn_values_profiler().
|
static |
Parse vectors of regular expressions.
References profile_exclude_files, and profile_filter_files.
Referenced by tree_profiling().
|
static |
Profile all functions in the callgraph.
References AVAIL_NOT_AVAILABLE, branch_prob(), build_qualified_type(), BUILTINS_LOCATION, CDI_DOMINATORS, CDI_POST_DOMINATORS, cfun, cleanup_tree_cfg(), cgraph_node::clone_of, counter_update, COUNTER_UPDATE_ATOMIC_BUILTIN, COUNTER_UPDATE_ATOMIC_PARTIAL, COUNTER_UPDATE_ATOMIC_SPLIT, symtab_node::decl, DECL_ATTRIBUTES, DECL_EXTERNAL, DECL_SOURCE_LOCATION, DECL_STRUCT_FUNCTION, del_node_map(), dump_file, dump_flags, dump_function_header(), dyn_cast(), execute_fixup_cfg(), expand_thunk(), FOR_EACH_BB_FN, FOR_EACH_DEFINED_FUNCTION, free_dominance_info(), gcc_assert, cgraph_node::get(), cgraph_node::get_availability(), get_gcov_type(), gimple_call_fndecl(), gimple_call_fntype(), gimple_call_internal_p(), gimple_call_set_fntype(), gimple_gen_ic_func_profiler(), gimple_has_body_p(), gimple_value_profile_transformations(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), handle_missing_profiles(), HAVE_atomic_compare_and_swapdi, HAVE_atomic_compare_and_swapsi, HAVE_sync_compare_and_swapdi, HAVE_sync_compare_and_swapsi, include_source_file_for_profile(), init_node_map(), IPA_SSA, LOCATION_FILE, lookup_attribute(), parse_profile_file_filtering(), pop_cfun(), PROFILE_READ, profile_status_for_fn, PROFILE_UPDATE_ATOMIC, PROFILE_UPDATE_PREFER_ATOMIC, PROFILE_UPDATE_SINGLE, push_cfun(), read_thunk_profile(), cgraph_edge::rebuild_edges(), release_profile_file_filtering(), cgraph_node::set_const_flag(), cgraph_node::set_pure_flag(), symbol_table::state, stdarg_p(), symtab, targetm, cgraph_node::thunk, TODO_cleanup_cfg, TODO_update_ssa, tree_to_uhwi(), TREE_TYPE, TYPE_QUALS, TYPE_READONLY, TYPE_SIZE_UNIT, update_ssa(), update_stmt(), and warning().
|
static |
Referenced by gen_counter_update(), and tree_profiling().
|
static |
Calculate branch probabilities, and basic block execution counts. Copyright (C) 1990-2024 Free Software Foundation, Inc. Contributed by James E. Wilson, UC Berkeley/Cygnus Support; based on some ideas from Dain Samples of UC Berkeley. Further mangling by Bob Manson, Cygnus Support. Converted to use trees by Dale Johannesen, Apple Computer. 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/>.
Generate basic block profile instrumentation and auxiliary files. Tree-based version. See profile.cc for overview.
Referenced by gen_counter_update(), gimple_gen_ic_func_profiler(), gimple_init_gcov_profiler(), instrument_decisions(), prepare_instrumented_value(), tree_coverage_counter_addr(), and tree_coverage_counter_ref().
|
static |
Referenced by gimple_gen_ic_func_profiler(), gimple_gen_ic_profiler(), and init_ic_make_global_vars().
|
static |
Referenced by gimple_gen_ic_profiler(), and init_ic_make_global_vars().
|
static |
Referenced by gimple_gen_ic_func_profiler(), gimple_gen_ic_profiler(), and init_ic_make_global_vars().
|
static |
|
static |
|
static |
Referenced by gimple_gen_average_profiler(), and gimple_init_gcov_profiler().
|
static |
Referenced by gimple_gen_ic_func_profiler(), and gimple_init_gcov_profiler().
|
static |
Referenced by gimple_gen_interval_profiler(), and gimple_init_gcov_profiler().
|
static |
Referenced by gimple_gen_ior_profiler(), and gimple_init_gcov_profiler().
|
static |
Referenced by gimple_gen_pow2_profiler(), and gimple_init_gcov_profiler().
|
static |
Referenced by gimple_gen_time_profiler(), and gimple_init_gcov_profiler().
|
static |
Referenced by gimple_gen_topn_values_profiler(), and gimple_init_gcov_profiler().