GCC Middle and Back End API Reference
gimple-expr.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool useless_type_conversion_p (tree, tree)
 
void gimple_set_body (tree, gimple_seq)
 
gimple_seq gimple_body (tree)
 
bool gimple_has_body_p (tree)
 
const chargimple_decl_printable_name (tree, int)
 
tree copy_var_decl (tree, tree, tree)
 
tree create_tmp_var_name (const char *)
 
tree create_tmp_var_raw (tree, const char *=NULL)
 
tree create_tmp_var (tree, const char *=NULL)
 
tree create_tmp_reg (tree, const char *=NULL)
 
tree create_tmp_reg_fn (struct function *, tree, const char *)
 
void extract_ops_from_tree (tree, enum tree_code *, tree *, tree *, tree *)
 
void gimple_cond_get_ops_from_tree (tree, enum tree_code *, tree *, tree *)
 
bool is_gimple_lvalue (tree)
 
bool is_gimple_condexpr_for_cond (tree)
 
bool is_gimple_address (const_tree)
 
bool is_gimple_invariant_address (const_tree)
 
bool is_gimple_ip_invariant_address (const_tree)
 
bool is_gimple_min_invariant (const_tree)
 
bool is_gimple_ip_invariant (const_tree)
 
bool is_gimple_reg (tree)
 
bool is_gimple_val (tree)
 
bool is_gimple_asm_val (tree)
 
bool is_gimple_min_lval (tree)
 
bool is_gimple_call_addr (tree)
 
bool is_gimple_mem_ref_addr (tree)
 
void flush_mark_addressable_queue (void)
 
void mark_addressable (tree)
 
bool is_gimple_reg_rhs (tree)
 
tree canonicalize_cond_expr_cond (tree)
 
bool types_compatible_p (tree type1, tree type2)
 
bool is_gimple_reg_type (tree type)
 
bool is_gimple_variable (tree t)
 
bool is_gimple_id (tree t)
 
bool virtual_operand_p (tree op)
 
bool is_gimple_addressable (tree t)
 
bool is_gimple_constant (const_tree t)
 
void extract_ops_from_tree (tree expr, enum tree_code *code, tree *op0, tree *op1)
 
tree gimple_call_addr_fndecl (const_tree fn)
 

Function Documentation

◆ canonicalize_cond_expr_cond()

tree canonicalize_cond_expr_cond ( tree t)
extern
Canonicalize a tree T for use in a COND_EXPR as conditional.  Returns
a canonicalized tree that is valid for a COND_EXPR or NULL_TREE, if
we failed to create one.   

References build2(), build_int_cst(), COMPARISON_CLASS_P, CONVERT_EXPR_P, ggc_alloc(), integer_onep(), integer_zerop(), is_gimple_condexpr_1(), NULL_TREE, TREE_CODE, TREE_OPERAND, TREE_TYPE, and truth_value_p().

Referenced by combine_cond_expr_cond(), and ifcombine_ifandif().

◆ copy_var_decl()

◆ create_tmp_reg()

◆ create_tmp_reg_fn()

tree create_tmp_reg_fn ( struct function * fn,
tree type,
const char * prefix )
extern
Create a new temporary variable declaration of type TYPE by calling
create_tmp_var and if TYPE is a vector or a complex number, mark the new
temporary as gimple register.   

References create_tmp_var_raw(), ggc_alloc(), and gimple_add_tmp_var_fn().

Referenced by expand_call_inline(), and cgraph_edge::redirect_call_stmt_to_callee().

◆ create_tmp_var()

tree create_tmp_var ( tree type,
const char * prefix )
extern
Create a new temporary variable declaration of type TYPE.  DO push the
variable into the current binding.  Further, assume that this is called
only from gimplification or optimization, at which point the creation of
certain types are bugs.   

References COMPLETE_TYPE_P, create_tmp_var_raw(), gcc_assert, gimple_add_tmp_var(), and TREE_ADDRESSABLE.

◆ create_tmp_var_name()

◆ create_tmp_var_raw()

◆ extract_ops_from_tree() [1/2]

void extract_ops_from_tree ( tree expr,
enum tree_code * code,
tree * op0,
tree * op1 )
inline
A wrapper around extract_ops_from_tree with 3 ops, for callers which
expect to see only a maximum of two operands.   

References extract_ops_from_tree(), gcc_assert, and NULL_TREE.

◆ extract_ops_from_tree() [2/2]

void extract_ops_from_tree ( tree expr,
enum tree_code * subcode_p,
tree * op1_p,
tree * op2_p,
tree * op3_p )
extern

◆ flush_mark_addressable_queue()

void flush_mark_addressable_queue ( void )
extern
Mark all queued trees as addressable, and empty the queue.  To be
called right after clearing CURRENTLY_EXPANDING_TO_RTL.   

References currently_expanding_to_rtl, gcc_assert, mark_addressable_2(), mark_addressable_queue, NULL, and hash_set< KeyId, Lazy, Traits >::traverse().

◆ gimple_body()

gimple_seq gimple_body ( tree fndecl)
extern

◆ gimple_call_addr_fndecl()

tree gimple_call_addr_fndecl ( const_tree fn)
inline
Given a valid GIMPLE_CALL function address return the FUNCTION_DECL
associated with the callee if known.  Otherwise return NULL_TREE.   

References ggc_alloc(), integer_zerop(), NULL_TREE, TREE_CODE, and TREE_OPERAND.

Referenced by expand_ifn_atomic_bit_test_and(), expand_ifn_atomic_op_fetch_cmp_0(), get_fi_for_callee(), get_references_in_stmt(), gimple_call_fndecl(), and gimple_fold_call().

◆ gimple_cond_get_ops_from_tree()

◆ gimple_decl_printable_name()

const char * gimple_decl_printable_name ( tree decl,
int verbosity )
extern

◆ gimple_has_body_p()

◆ gimple_set_body()

◆ is_gimple_address()

bool is_gimple_address ( const_tree t)
extern
Return true if T is a gimple address.   

References CONSTANT_CLASS_P, ggc_alloc(), handled_component_p(), is_gimple_val(), TREE_CODE, and TREE_OPERAND.

◆ is_gimple_addressable()

bool is_gimple_addressable ( tree t)
inline

◆ is_gimple_asm_val()

bool is_gimple_asm_val ( tree t)
extern
Similarly, but accept hard registers as inputs to asm statements.   

References DECL_HARD_REGISTER, is_gimple_val(), and VAR_P.

Referenced by gimple_regimplify_operands(), gimplify_asm_expr(), and gimplify_expr().

◆ is_gimple_call_addr()

bool is_gimple_call_addr ( tree t)
extern
Return true if T is a valid function operand of a CALL_EXPR.   

References ggc_alloc(), is_gimple_val(), and TREE_CODE.

Referenced by gimple_build_call(), gimple_build_call_valist(), gimple_regimplify_operands(), gimplify_call_expr(), gimplify_expr(), and verify_gimple_call().

◆ is_gimple_condexpr_for_cond()

◆ is_gimple_constant()

◆ is_gimple_id()

bool is_gimple_id ( tree t)
inline
Return true if T is a GIMPLE identifier (something with an address).   

References ggc_alloc(), is_gimple_variable(), and TREE_CODE.

Referenced by is_gimple_addressable(), is_gimple_min_lval(), valid_gimple_rhs_p(), and verify_types_in_gimple_reference().

◆ is_gimple_invariant_address()

bool is_gimple_invariant_address ( const_tree t)
extern
Return true if T is a gimple invariant address.   

References CONSTANT_CLASS_P, decl_address_invariant_p(), ggc_alloc(), strip_invariant_refs(), TREE_CODE, and TREE_OPERAND.

Referenced by is_gimple_min_invariant().

◆ is_gimple_ip_invariant()

◆ is_gimple_ip_invariant_address()

bool is_gimple_ip_invariant_address ( const_tree t)
extern
Return true if T is a gimple invariant address at IPA level
(so addresses of variables on stack are not allowed).   

References CONSTANT_CLASS_P, decl_address_ip_invariant_p(), ggc_alloc(), strip_invariant_refs(), TREE_CODE, and TREE_OPERAND.

Referenced by ipa_get_jf_ancestor_result(), and is_gimple_ip_invariant().

◆ is_gimple_lvalue()

◆ is_gimple_mem_ref_addr()

◆ is_gimple_min_invariant()

bool is_gimple_min_invariant ( const_tree t)
extern
Return true if T is a GIMPLE minimal invariant.  It's a restricted
form of function invariant.   

References ggc_alloc(), is_gimple_constant(), is_gimple_invariant_address(), and TREE_CODE.

Referenced by aff_combination_expand(), analyze_function_body(), associate_equivalences_with_edges(), back_propagate_equivalences(), build_simple_mem_ref_loc(), bump_vector_ptr(), can_propagate_from(), canonicalize_constructor_val(), chain_of_csts_start(), chrec_contains_symbols_defined_in_loop(), combine_cond_expr_cond(), compare_values_warnv(), consider_split(), copy_prop_visit_assignment(), copy_reference_ops_from_ref(), copy_tree_body_r(), create_component_ref_by_pieces_1(), create_expression_by_pieces(), cse_and_gimplify_to_preheader(), destroy_loop(), detach_value(), discover_nonconstant_array_refs_r(), eliminate_dom_walker::eliminate_avail(), rpo_elim::eliminate_push_avail(), eliminate_redundant_computations(), eliminate_dom_walker::eliminate_stmt(), eliminated_by_inlining_prob(), pointer_equiv_analyzer::enter(), evaluate_properties_for_edge(), evaluate_stmt(), evolution_function_is_constant_p(), expand_gimple_stmt_1(), expand_simple_operations(), expr_invariant_in_loop_p(), expr_invariant_in_region_p(), extract_single_var_from_expr(), find_deriving_biv_for_expr(), find_func_clobbers(), find_or_generate_expression(), find_return_bb(), fold_gimple_assign(), for_each_index(), force_expr_to_var_cost(), force_move_till_op(), forward_propagate_addr_expr_1(), forward_propagate_into_gimple_cond(), fully_constant_expression(), fully_constant_vn_reference_p(), get_base_for(), get_constant_value(), ipa_polymorphic_call_context::get_dynamic_type(), pointer_equiv_analyzer::get_equiv_expr(), get_references_in_stmt(), get_scev_info(), get_single_symbol(), get_symbol_constant_value(), get_val_for(), get_value_for_expr(), get_value_locus_in_path(), gimple_cond_get_ops_from_tree(), gimple_fold_builtin_memory_op(), gimple_fold_stmt_to_constant(), gimple_fold_stmt_to_constant_1(), gimplify_compound_lval(), gimplify_scan_omp_clauses(), ifcvt_available_on_edge_p(), independent_of_stmt_p(), insert_into_preds_of_block(), instantiate_scev_r(), interpret_rhs_expr(), is_gimple_val(), likely_value(), avail_exprs_stack::lookup_avail_expr(), loop_combined_static_and_iv_p(), loop_invariant_op_p(), loop_niter_by_eval(), loop_static_op_p(), lower_emutls_1(), lower_omp_for(), maybe_fold_reference(), maybe_instrument_call(), maybe_optimize_range_tests(), maybe_trim_constructor_store(), move_stmt_op(), predicate::normalize(), optimize_ops_list(), outermost_invariant_loop(), outermost_invariant_loop_for_expr(), param_change_prob(), phi_translate_1(), phiprop_insert_phi(), predicate_for_phi_result(), process_bb(), substitute_and_fold_engine::propagate_into_phi_args(), propagate_necessity(), queue_phi_copy_p(), record_edge_info(), record_equality(), record_equivalences_from_stmt(), ref_maybe_used_by_call_p_1(), ref_maybe_used_by_stmt_p(), jt_state::register_equivs_stmt(), remap_gimple_op_r(), replace_uses_by(), run_rpo_vn(), same_value_p(), set_component_ssa_name(), set_ssa_val_to(), set_value_id_for_result(), setup_one_parameter(), simple_mem_ref_in_stmt(), simplify_using_ranges::simplify_compare_using_ranges_1(), jump_threader::simplify_control_stmt_condition(), jump_threader::simplify_control_stmt_condition_1(), simplify_using_outer_evolutions(), stmt_may_generate_copy(), stmt_may_generate_copy(), test_for_singularity(), jump_threader::thread_around_empty_blocks(), jump_threader::thread_through_normal_block(), tree_estimate_loop_size(), tree_lower_complex(), tree_node_can_be_shared(), try_to_simplify(), uncprop_into_successor_phis(), valid_gimple_rhs_p(), valid_lattice_transition(), value_available_p(), vect_is_simple_use(), vect_simd_lane_linear(), verify_phi_args(), verify_types_in_gimple_reference(), visit_phi(), visit_reference_op_call(), visit_reference_op_store(), visit_stmt(), vn_get_stmt_kind(), vn_reference_lookup_3(), will_be_nonconstant_expr_predicate(), and workshare_safe_to_combine_p().

◆ is_gimple_min_lval()

◆ is_gimple_reg()

bool is_gimple_reg ( tree t)
extern
Return true if T is a non-aggregate register variable.   

References DECL_HARD_REGISTER, DECL_NOT_GIMPLE_REG_P, is_gimple_reg_type(), is_gimple_variable(), needs_to_live_in_memory(), TREE_CODE, TREE_THIS_VOLATILE, TREE_TYPE, VAR_P, and virtual_operand_p().

Referenced by add_clobbers_to_eh_landing_pad(), operands_scanner::add_stmt_operand(), rewrite_dom_walker::after_dom_children(), assign_parm_setup_block(), build_simple_mem_ref_loc(), ipa_param_body_adjustments::common_initialization(), consider_split(), copy_decl_for_dup_finish(), create_coalesce_list_for_region(), create_default_def(), cse_and_gimplify_to_preheader(), declare_return_variable(), dump_defs_stack(), dump_immediate_uses_for(), eliminate_dom_walker::eliminate_stmt(), eliminated_by_inlining_prob(), expand_assign_tm(), expand_call_inline(), expand_function_start(), expand_used_vars(), finalize_nesting_tree_1(), find_tail_calls(), force_gimple_operand_1(), ipa_param_body_adjustments::get_ddef_if_exists_and_is_used(), gimple_regimplify_operands(), gimple_store_p(), gimplify_asm_expr(), gimplify_bind_expr(), gimplify_compound_lval(), gimplify_decl_expr(), gimplify_expr(), gimplify_init_constructor(), gimplify_modify_expr(), gimplify_modify_expr_rhs(), gimplify_omp_for(), gimplify_parameters(), gimplify_scan_omp_clauses(), gsi_replace_with_seq_vops(), initialize_inlined_parameters(), insert_debug_temp_for_var_def(), insert_init_stmt(), ipa_analyze_controlled_uses(), ipcp_update_vr(), is_asan_mark_p(), is_complex_reg(), is_gimple_mem_ref_addr(), is_gimple_val(), link_use_stmts_after(), lower_omp_target(), lower_rec_simd_input_clauses(), ipa_param_body_adjustments::mark_clobbers_dead(), mark_nonssa_use(), may_be_nonaddressable_p(), maybe_instrument_call(), maybe_optimize_var(), maybe_register_def(), ipa_param_adjustments::modify_call(), ipa_param_body_adjustments::modify_expression(), nonoverlapping_memrefs_p(), op_iter_init_phidef(), op_iter_init_phiuse(), op_iter_next_def(), op_iter_next_tree(), prepare_gimple_addressable(), record_equivalences_from_stmt(), ref_maybe_used_by_stmt_p(), register_new_def(), ipa_param_body_adjustments::reset_debug_stmts(), rewrite_stmt(), rhs_predicate_for(), set_parm_default_def_partition(), set_rtl(), setup_one_parameter(), simd_clone_linear_addend(), single_phi_def(), split_function(), test_nonssa_use(), tree_function_versioning(), update_parameter_components(), use_pointer_for_field(), uses_consumed_by_stmt(), vect_finish_stmt_generation(), verify_gimple_assign(), verify_gimple_assign_binary(), verify_gimple_assign_single(), verify_gimple_assign_ternary(), verify_gimple_assign_unary(), verify_gimple_call(), verify_types_in_gimple_reference(), visit_reference_op_store(), and walk_gimple_op().

◆ is_gimple_reg_rhs()

bool is_gimple_reg_rhs ( tree t)
extern
Returns true iff T is a valid RHS for an assignment to a renamed
user -- or front-end generated artificial -- variable.   

References get_gimple_rhs_class(), GIMPLE_INVALID_RHS, and TREE_CODE.

Referenced by force_gimple_operand(), force_gimple_operand_gsi(), and gimplify_expr().

◆ is_gimple_reg_type()

bool is_gimple_reg_type ( tree type)
inline
Return true if TYPE is a suitable type for a scalar register variable.   

References AGGREGATE_TYPE_P.

Referenced by analyze_access_subtree(), analyze_all_variable_accesses(), ipcp_modif_dom_walker::before_dom_children(), build_accesses_from_assign(), can_sm_ref_p(), can_totally_scalarize_forest_p(), compare_access_positions(), cond_if_else_store_replacement_1(), cond_store_replacement(), create_access(), create_access_replacement(), declare_return_variable(), expand_DEFERRED_INIT(), expand_thunk(), factor_out_conditional_operation(), fill_vector_of_new_param_types(), finalize_nesting_tree_1(), find_constructor_constant_at_offset(), find_tail_calls(), fold_gimple_assign(), force_value_to_type(), fully_constant_vn_reference_p(), get_bitfield_rep(), get_symbol_constant_value(), gimple_fold_builtin_memory_op(), gimple_regimplify_operands(), gimplify_arg(), gimplify_asm_expr(), gimplify_compound_lval(), gimplify_conversion(), gimplify_expr(), gimplify_modify_expr_rhs(), if_convertible_gimple_assign_stmt_p(), initial_rhs_predicate_for(), insert_init_stmt(), internal_get_tmp_var(), ipa_compute_jump_functions_for_edge(), is_gimple_mem_rhs(), is_gimple_mem_rhs_or_call(), is_gimple_reg(), is_gimple_val(), lower_assumption(), lower_eh_constructs_2(), lower_omp_target(), make_blocks_1(), make_ssa_name_fn(), maybe_optimize_var(), maybe_rewrite_mem_ref_base(), ipa_param_body_adjustments::modify_assignment(), ipa_param_adjustments::modify_call(), ipa_param_body_adjustments::modify_expression(), non_rewritable_mem_ref_base(), omp_shared_to_firstprivate_optimizable_decl_p(), optimize_atomic_compare_exchange_p(), optimize_va_list_gpr_fpr_size(), propagate_subaccesses_from_lhs(), propagate_subaccesses_from_rhs(), propagate_with_phi(), remove_dead_stmt(), same_access_path_p(), setup_one_parameter(), simd_clone_adjust(), simd_clone_linear_addend(), sink_common_stores_to_bb(), sort_and_splice_var_accesses(), split_function(), sra_modify_assign(), suitable_reference_p(), target_for_debug_bind(), tm_log_emit_saves(), total_should_skip_creating_access(), totally_scalarizable_type_p(), totally_scalarize_subtree(), valid_gimple_call_p(), verify_gimple_assign_single(), verify_gimple_call(), verify_sra_access_forest(), verify_types_in_gimple_reference(), vn_reference_lookup_3(), and walk_gimple_op().

◆ is_gimple_val()

bool is_gimple_val ( tree t)
extern
Return true if T is a GIMPLE rvalue, i.e. an identifier or a constant.   

References is_gimple_min_invariant(), is_gimple_reg(), is_gimple_reg_type(), is_gimple_variable(), and TREE_TYPE.

Referenced by add_to_predicate_list(), copy_phis_for_bb(), create_mem_ref(), declare_return_variable(), eliminate_local_variables_1(), eliminate_redundant_comparison(), expand_thunk(), expression_expensive_p(), find_interesting_uses_stmt(), fold_strstr_to_strncmp(), force_gimple_operand(), force_gimple_operand_1(), force_gimple_operand_gsi(), generic_expr_could_trap_p(), get_shiftadd_cost(), gimple_assign_copy_p(), gimple_build_vector_from_val(), gimple_regimplify_operands(), gimple_simplified_result_is_gimple_val(), gimplify_adjust_omp_clauses(), gimplify_adjust_omp_clauses_1(), gimplify_arg(), gimplify_asm_expr(), gimplify_compound_lval(), gimplify_expr(), gimplify_init_constructor(), gimplify_init_ctor_eval_range(), gimplify_omp_affinity(), gimplify_omp_atomic(), gimplify_omp_depend(), gimplify_omp_for(), gimplify_one_sizepos(), gimplify_pure_cond_expr(), gimplify_scan_omp_clauses(), gimplify_self_mod_expr(), gimplify_switch_expr(), goa_stabilize_expr(), gsi_gimplify_val(), ifcvt_can_use_mask_load_store(), instrument_builtin(), instrument_nonnull_arg(), instrument_nonnull_return(), is_gimple_address(), is_gimple_asm_val(), is_gimple_call_addr(), is_gimple_condexpr_1(), is_gimple_mem_rhs(), is_gimple_mem_rhs_or_call(), lower_assumption(), lower_depend_clauses(), lower_lastprivate_clauses(), lower_omp_target(), lower_omp_teams(), lower_rec_input_clauses(), lower_reduction_clauses(), optimize_range_tests_to_bit_test(), optimize_target_teams(), remove_dead_stmt(), set_bb_predicate(), simplify_builtin_call(), split_function(), std_gimplify_va_arg_expr(), stmt_is_replaceable_p(), valid_gimple_call_p(), valid_gimple_rhs_p(), vect_gen_vector_loop_niters(), vect_gen_vector_loop_niters_mult_vf(), vect_loop_versioning(), vectorizable_condition(), verify_gimple_assign_binary(), verify_gimple_assign_single(), verify_gimple_assign_ternary(), verify_gimple_assign_unary(), verify_gimple_call(), verify_gimple_comparison(), verify_gimple_goto(), verify_gimple_phi(), verify_gimple_return(), verify_gimple_switch(), verify_types_in_gimple_reference(), version_loop_by_alias_check(), walk_regimplify_addr_expr(), and walk_regimplify_phi().

◆ is_gimple_variable()

bool is_gimple_variable ( tree t)
inline
Return true if T is a variable.   

References ggc_alloc(), TREE_CODE, and VAR_P.

Referenced by gimplify_modify_expr_rhs(), is_gimple_id(), is_gimple_reg(), is_gimple_val(), and valid_gimple_rhs_p().

◆ mark_addressable()

◆ types_compatible_p()

bool types_compatible_p ( tree type1,
tree type2 )
inline
Return true if a conversion from either type of TYPE1 and TYPE2
to the other is not required.  Otherwise return false.   

References ggc_alloc(), and useless_type_conversion_p().

Referenced by access_fn_components_comparable_p(), ipa_predicate::add_clause(), add_condition(), adjust_return_value_with_ops(), alloca_call_type(), build_polynomial_chrec(), build_reconstructed_reference(), build_user_friendly_ref_for_offset(), build_vector_from_val(), bundle_sizes(), coalesce_bitint(), ao_compare::compare_ao_refs(), ipa_icf_gimple::func_checker::compare_gimple_call(), compatible_calls_p(), ipa_icf_gimple::func_checker::compatible_types_p(), create_add_on_incoming_edge(), create_intersect_range_checks_index(), eq_evolutions_p(), mem_ref_hasher::equal(), expr_elt_hasher::equal(), equal_mem_array_ref_p(), ipa_vr::equal_p(), ipa_vr::equal_p(), ipa_icf::sem_function::equals_private(), ipa_icf::sem_function::equals_wpa(), execute_cse_conv_1(), execute_cse_sincos_1(), execute_update_addresses_taken(), expand_call_mem_ref(), expr_eval_ops_equal_p(), factor_out_conditional_operation(), find_basis_for_base_expr(), find_case_label_range(), operator_bitwise_not::fold_range(), fold_ternary_loc(), forward_propagate_addr_expr_1(), gimple_can_coalesce_p(), gimple_expand_vec_cond_expr(), gimplify_addr_expr(), goa_lhs_expr_p(), ifcvt_can_predicate(), initialize_data_dependence_relation(), insert_initializers(), ipa_agg_jump_functions_equivalent_p(), is_gimple_logical_p(), match_uaddc_usubc(), maybe_canonicalize_mem_ref_addr(), maybe_diag_incompatible_alias(), non_rewritable_lvalue_p(), operator_cast::op1_range(), operator_bitwise_not::op1_range(), operator_bitwise_xor::op1_range(), operator_bitwise_and::op1_range(), operator_bitwise_or::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operand_compare::operand_equal_p(), frange::operator==(), prange::operator==(), optimize_omp_library_calls(), parloops_is_simple_reduction(), propagate_subaccesses_from_lhs(), propagate_subaccesses_from_rhs(), propagate_with_phi(), replace_one_candidate(), simplify_rotate(), size_for_offset(), size_t_cst_p(), type_mismatch_p(), types_match(), undistribute_bitref_for_vector(), update_accumulator_with_ops(), valid_lattice_transition(), vect_add_slp_permutation(), vect_analyze_data_ref_accesses(), vect_build_one_gather_load_call(), vect_build_slp_tree_1(), vect_build_slp_tree_2(), vect_convert_input(), vect_convert_output(), vect_create_constant_vectors(), vect_get_and_check_slp_defs(), vect_init_vector(), vect_joust_widened_type(), vect_maybe_update_slp_op_vectype(), vect_recog_mixed_size_cond_pattern(), vect_update_inits_of_drs(), vectorizable_call(), vectorizable_recurr(), vectorizable_reduction(), vectorizable_simd_clone_call(), vectorizable_slp_permutation_1(), verify_gimple_assign_binary(), verify_gimple_assign_single(), verify_gimple_assign_ternary(), verify_types_in_gimple_reference(), vn_constant_eq_with_type(), vn_nary_op_eq(), vn_phi_eq(), vn_reference_eq(), vn_reference_lookup_3(), and vn_reference_op_eq().

◆ useless_type_conversion_p()

bool useless_type_conversion_p ( tree outer_type,
tree inner_type )
extern
Header file for gimple decl, type and expressions.
   Copyright (C) 2013-2024 Free Software Foundation, Inc.

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/>.   
Gimple decl, type, and expression support functions.

   Copyright (C) 2007-2024 Free Software Foundation, Inc.
   Contributed by Aldy Hernandez <aldyh@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/>.   
----- Type related -----   
Return true if the conversion from INNER_TYPE to OUTER_TYPE is a
useless type conversion, otherwise return false.

This function implicitly defines the middle-end type system.  With
the notion of 'a < b' meaning that useless_type_conversion_p (a, b)
holds and 'a > b' meaning that useless_type_conversion_p (b, a) holds,
the following invariants shall be fulfilled:

  1) useless_type_conversion_p is transitive.
     If a < b and b < c then a < c.

  2) useless_type_conversion_p is not symmetric.
     From a < b does not follow a > b.

  3) Types define the available set of operations applicable to values.
     A type conversion is useless if the operations for the target type
     is a subset of the operations for the source type.  For example
     casts to void* are useless, casts from void* are not (void* can't
     be dereferenced or offsetted, but copied, hence its set of operations
     is a strict subset of that of all other data pointer types).  Casts
     to const T* are useless (can't be written to), casts from const T*
     to T* are not.   

References AGGREGATE_TYPE_P, comp_type_attributes(), FIXED_POINT_TYPE_P, FUNC_OR_METHOD_TYPE_P, ggc_alloc(), INTEGRAL_TYPE_P, known_eq, NULL_TREE, POINTER_TYPE_P, prototype_p(), SCALAR_FLOAT_TYPE_P, targetm, TREE_CHAIN, TREE_CODE, tree_int_cst_equal(), TREE_TYPE, TREE_VALUE, TYPE_ADDR_SPACE, TYPE_ARG_TYPES, TYPE_ATTRIBUTES, TYPE_CANONICAL, TYPE_DOMAIN, TYPE_MAIN_VARIANT, TYPE_MAX_VALUE, TYPE_METHOD_BASETYPE, TYPE_MIN_VALUE, TYPE_MODE, TYPE_OFFSET_BASETYPE, TYPE_PRECISION, TYPE_REVERSE_STORAGE_ORDER, TYPE_SATURATING, TYPE_SIZE, TYPE_STRING_FLAG, TYPE_UNSIGNED, TYPE_VECTOR_SUBPARTS(), useless_type_conversion_p(), and VECTOR_TYPE_P.

Referenced by adjust_bool_pattern(), aff_combination_expand(), analyze_agg_content_value(), ipcp_modif_dom_walker::before_dom_children(), eliminate_dom_walker::before_dom_children(), build_accesses_from_assign(), build_tm_load(), build_tm_store(), canonicalize_addr_expr(), canonicalize_component_ref(), canonicalize_constructor_val(), chrec_convert_1(), chrec_convert_aggressive(), chrec_fold_multiply_poly_poly(), chrec_fold_plus_poly_poly(), compare_values_warnv(), component_ref_size(), compute_complex_assign_jump_func(), connect_loop_phis(), convert_mult_to_widen(), convert_plusminus_to_widen(), create_expression_by_pieces(), create_mem_ref(), declare_return_variable(), pcom_worker::determine_offset(), eliminate_redundant_comparison(), eliminate_redundant_computations(), eliminate_dom_walker::eliminate_stmt(), evaluate_conditions_for_known_args(), execute_update_addresses_taken(), expand_ifn_va_arg_1(), expand_omp_atomic_cas(), expand_omp_atomic_load(), expand_omp_atomic_store(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_taskloop_for_inner(), expand_thunk(), expand_vector_condition(), expand_vector_operations_1(), expand_vector_scalar_condition(), find_tail_calls(), fold_builtin_atomic_compare_exchange(), fold_ctor_reference(), fold_gimple_assign(), ccp_folder::fold_stmt(), fold_stmt_1(), forward_propagate_addr_expr_1(), forward_propagate_into_comparison(), generate_memset_builtin(), get_initial_defs_for_reduction(), get_symbol_constant_value(), get_val_across_arith_op(), gimple_builtin_call_types_compatible_p(), gimple_convert(), gimple_fold_builtin_fprintf(), gimple_fold_builtin_printf(), gimple_fold_builtin_snprintf(), gimple_fold_builtin_sprintf(), gimple_fold_indirect_ref(), gimple_fold_stmt_to_constant_1(), gimplify_addr_expr(), gimplify_expr(), gimplify_init_constructor(), gimplify_modify_expr(), strlen_pass::handle_builtin_strchr(), strlen_pass::handle_builtin_strlen(), strlen_pass::handle_pointer_plus(), initialize_inlined_parameters(), insert_into_preds_of_block(), instrument_builtin_call(), ipa_agg_value_from_jfunc(), ipa_return_value_range(), ipa_simd_modify_stmt_ops(), ipa_tm_insert_gettmclone_call(), ipacp_value_safe_for_type(), is_truth_type_for(), load_assign_lhs_subreplacements(), lower_omp_task_reductions(), lower_rec_input_clauses(), lower_reduction_clauses(), match_arith_overflow(), may_propagate_copy(), may_propagate_copy_into_stmt(), maybe_rewrite_mem_ref_base(), minmax_replacement(), ipa_param_body_adjustments::modify_assignment(), ipa_param_adjustments::modify_call(), ipa_param_body_adjustments::modify_expression(), non_rewritable_mem_ref_base(), one_pointer_to_useless_type_conversion_p(), optimize_atomic_op_fetch_cmp_0(), optimize_ops_list(), optimize_range_tests_cmp_bitwise(), optimize_range_tests_var_bound(), phi_translate_1(), prepare_vec_mask(), fold_using_range::range_of_call(), refine_bounds_using_guard(), refine_value_range_using_guard(), remap_gimple_op_r(), replace_call_with_value(), replace_mult_candidate(), self_recursive_agg_pass_through_p(), setup_one_parameter(), simd_clone_adjust(), simd_clone_linear_addend(), simple_iv_with_niters(), simplify_builtin_call(), simplify_using_ranges::simplify_internal_call_using_ranges(), simplify_rotate(), simplify_using_ranges::simplify_truth_ops_using_ranges(), simplify_vector_constructor(), size_for_offset(), split_function(), sra_modify_assign(), sra_modify_expr(), strub_call_fntype_override_p(), take_address_of(), task_reduction_read(), tree_builtin_call_types_compatible_p(), tree_ssa_useless_type_conversion(), tree_transform_and_unroll_loop(), types_compatible_p(), ubsan_expand_vptr_ifn(), undistribute_bitref_for_vector(), useless_type_conversion_p(), valueized_wider_op(), vect_add_conversion_to_pattern(), vect_build_one_gather_load_call(), vect_build_one_scatter_store_call(), vect_check_store_rhs(), vect_init_vector(), vect_recog_bit_insert_pattern(), vect_recog_bitfield_ref_pattern(), vect_recog_bool_pattern(), vect_recog_rotate_pattern(), vect_slp_analyze_operations(), vect_slp_check_for_roots(), vect_slp_is_lane_insert(), vect_transform_cycle_phi(), vectorizable_bb_reduc_epilogue(), vectorizable_condition(), vectorizable_induction(), vectorizable_phi(), vectorizable_recurr(), vectorizable_simd_clone_call(), vectorizable_store(), vectorize_fold_left_reduction(), vectorize_slp_instance_root_stmt(), verify_gimple_assign_binary(), verify_gimple_assign_single(), verify_gimple_assign_ternary(), verify_gimple_assign_unary(), verify_gimple_call(), verify_gimple_comparison(), verify_gimple_phi(), verify_gimple_return(), verify_type(), verify_types_in_gimple_reference(), visit_nary_op(), and visit_reference_op_load().

◆ virtual_operand_p()

bool virtual_operand_p ( tree op)
inline
Return true if OP, an SSA name or a DECL is a virtual operand.   

References SSA_NAME_IS_VIRTUAL_OPERAND, TREE_CODE, VAR_DECL_IS_VIRTUAL_OPERAND, and VAR_P.

Referenced by adjust_debug_stmts(), loop_cand::analyze_carried_vars(), loop_cand::analyze_lcssa_phis(), bb_has_non_vop_phi(), substitute_and_fold_dom_walker::before_dom_children(), eliminate_dom_walker::before_dom_children(), strlen_pass::before_dom_children(), tree_switch_conversion::switch_conversion::build_arrays(), tree_switch_conversion::switch_conversion::build_constructors(), build_ssa_conflict_graph(), calculate_live_on_exit(), loop_cand::can_interchange_p(), canonicalize_loop_ivs(), ccp_initialize(), check_all_va_list_escapes(), check_exit_phi(), tree_switch_conversion::switch_conversion::check_final_bb(), clean_up_loop_closed_phi(), coalesce_partitions(), compute_avail(), compute_optimized_partition_bases(), compute_points_to_sets(), cond_if_else_store_replacement(), consider_split(), copy_loop_before(), copy_phi_args(), copy_phis_for_bb(), count_stmts_and_phis_in_block(), create_coalesce_list_for_region(), destroy_loop(), determine_reduction_stmt_1(), determine_set_costs(), dump_part_var_map(), dump_phi_nodes(), dump_var_map(), eliminate_unnecessary_stmts(), eliminate_useless_phis(), empty_bb_without_guard_p(), estimate_threading_killed_stmts(), execute_sm_if_changed(), expand_omp_for_generic(), expand_used_vars(), final_value_replacement_loop(), find_bivs(), find_deriving_biv_for_expr(), find_interesting_uses_outside(), pcom_worker::find_looparound_phi(), find_seed_stmts_for_distribution(), find_uses_to_rename_bb(), tree_switch_conversion::switch_conversion::fix_phi_nodes(), fuse_loops(), tree_switch_conversion::switch_conversion::gather_default_values(), gather_scalar_reductions(), generate_loops_for_partition(), get_default_value(), get_undefined_value_partitions(), get_virtual_phi(), get_vop_from_header(), gimple_dump_bb_for_graph(), gimple_merge_blocks(), gsi_next_nonvirtual_phi(), gsi_start_nonvirtual_phis(), hoist_adjacent_loads(), hoist_guard(), ifcvt_local_dce(), init_copy_prop(), insert_backedge_copies(), ipa_pta_execute(), is_feasible_trace(), is_gimple_reg(), iv_phi_p(), lto_prepare_function_for_streaming(), make_forwarders_with_degenerate_phis(), may_propagate_copy(), move_block_to_fn(), move_computations_worker(), movement_possibility_1(), num_phis(), optimize_va_list_gpr_fpr_size(), output_bb(), output_ssa_names(), partition_view_init(), phi_rank(), populate_coalesce_list_for_outofssa(), predicate_all_scalar_phis(), predicate_scalar_phi(), prepare_block_for_update_1(), prepare_def_site_for(), prepare_use_sites_for(), process_bb(), substitute_and_fold_engine::propagate_into_phi_args(), propagate_necessity(), record_equivalences_from_phis(), record_invariant(), jump_threader::record_temporary_equivalences_from_phis(), release_last_vdef(), remove_dead_phis(), remove_unused_locals(), substitute_and_fold_engine::replace_phi_args_in(), replace_ssa_name(), replace_uses_by(), rewrite_add_phi_arguments(), rewrite_phi_with_iv(), rewrite_update_phi_arguments(), same_phi_alternatives_1(), same_succ_hash(), sese_insert_phis_for_liveouts(), set_ssa_val_to(), should_duplicate_loop_header_p(), single_non_singleton_phi_for_edges(), sink_clobbers(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_function(), ssa_undefined_value_p(), statement_sink_location(), loop_distribution::stmts_from_loop(), transform_to_exit_first_loop(), transform_to_exit_first_loop_alt(), try_create_reduction_list(), unroll_jam_possible_p(), update_ssa(), value_replacement(), vect_analyze_loop_operations(), vect_analyze_scalar_cycles_1(), vect_do_peeling(), verify_gimple_in_cfg(), verify_gimple_phi(), verify_live_on_entry(), verify_non_ssa_vars(), verify_phi_args(), verify_ssa(), verify_ssa_name(), verify_vssa(), visit_bb(), visit_phi(), vn_phi_insert(), vn_phi_lookup(), vop_phi(), and warn_uninit_phi_uses().