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

Go to the source code of this file.

Functions

void phinodes_print_statistics (void)
 
void reserve_phi_args_for_new_edge (basic_block)
 
gphicreate_phi_node (tree, basic_block)
 
void add_phi_arg (gphi *, tree, edge, location_t)
 
void remove_phi_args (edge)
 
void remove_phi_node (gimple_stmt_iterator *, bool)
 
void remove_phi_nodes (basic_block)
 
tree degenerate_phi_result (gphi *)
 
void set_phi_nodes (basic_block, gimple_seq)
 
use_operand_p gimple_phi_arg_imm_use_ptr (gimple *gs, int i)
 
use_operand_p gimple_phi_arg_imm_use_ptr_from_edge (gimple *gs, const_edge e)
 
int phi_arg_index_from_use (use_operand_p use)
 

Function Documentation

◆ add_phi_arg()

void add_phi_arg ( gphi * phi,
tree def,
edge e,
location_t locus )
extern
Add a new argument to PHI node PHI.  DEF is the incoming reaching
definition and E is the edge through which DEF reaches PHI.  The new
argument is added at the end of the argument list.
If PHI has reached its maximum capacity, add a few slots.  In this case,
PHI points to the reallocated phi node when we return.   

References gcc_assert, ggc_alloc(), gimple_bb(), gimple_phi_arg_set_location(), gimple_phi_capacity(), gimple_phi_num_args(), PHI_RESULT, SET_PHI_ARG_DEF, and SSA_NAME_OCCURS_IN_ABNORMAL_PHI.

Referenced by add_exit_phi(), add_phi_args_after_copy_edge(), add_successor_phi_arg(), branch_fixup(), cond_if_else_store_replacement_1(), cond_store_replacement(), connect_loop_phis(), convert_if_conditions_to_switch(), copy_phi_args(), copy_phis_for_bb(), create_iv(), create_parallel_loop(), create_phi_basis_1(), create_phi_for_local_result(), create_tailcall_accumulator(), edge_before_returns_twice_call(), eliminate_tail_call(), emit_phi_nodes(), execute_sm_if_changed(), expand_complex_multiplication(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_parallel_call(), factor_out_conditional_operation(), tree_switch_conversion::switch_conversion::fix_phi_nodes(), tree_switch_conversion::switch_decision_tree::fix_phi_operands_for_edges(), flush_pending_stmts(), fuse_loops(), tree_switch_conversion::switch_conversion::gen_inbound_check(), gimple_ic(), gimple_lower_bitint(), gimple_lv_adjust_loop_header_phi(), gimple_make_forwarder_block(), gimple_stringop_fixed_value(), hoist_guard(), initialize_root_vars(), initialize_root_vars_lm(), initialize_root_vars_store_elim_2(), input_phi(), rt_bb_visited::insert_exit_check_on_edge(), insert_into_preds_of_block(), insert_phi_nodes_for(), make_forwarders_with_degenerate_phis(), maybe_set_vectorized_backedge_value(), oacc_entry_exit_single_gang(), optimize_mask_stores(), phiprop_insert_phi(), remove_forwarder_block_with_phi(), replace_block_by(), rewrite_add_phi_arguments(), sese_add_exit_phis_edge(), shrink_wrap_one_built_in_call_with_conds(), simd_clone_adjust(), sink_common_stores_to_bb(), slpeel_tree_duplicate_loop_to_edge_cfg(), slpeel_update_phi_nodes_for_guard1(), split_function(), split_loop_exit_edge(), transform_to_exit_first_loop(), transform_to_exit_first_loop_alt(), tree_optimize_tail_calls_1(), tree_transform_and_unroll_loop(), vect_create_epilog_for_reduction(), vect_do_peeling(), vect_get_main_loop_result(), vect_loop_versioning(), vect_schedule_scc(), vect_set_loop_condition_normal(), vect_set_loop_control(), vect_setup_realignment(), vect_transform_cycle_phi(), vectorizable_induction(), vectorizable_lc_phi(), vectorizable_load(), vectorizable_nonlinear_induction(), vectorizable_phi(), vectorizable_recurr(), vectorizable_simd_clone_call(), worker_single_copy(), and worker_single_simple().

◆ create_phi_node()

gphi * create_phi_node ( tree var,
basic_block bb )
extern
Create a new PHI node for variable VAR at basic block BB.   

References add_phi_node_to_bb(), EDGE_COUNT, make_phi_node(), and basic_block_def::preds.

Referenced by add_exit_phi(), branch_fixup(), cond_if_else_store_replacement_1(), cond_store_replacement(), connect_loop_phis(), copy_phis_for_bb(), create_iv(), create_phi_basis_1(), create_phi_for_local_result(), create_tailcall_accumulator(), edge_before_returns_twice_call(), emit_phi_nodes(), expand_complex_multiplication(), expand_omp_atomic_pipeline(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_parallel_call(), factor_out_conditional_operation(), gimple_duplicate_bb(), gimple_ic(), gimple_lower_bitint(), gimple_make_forwarder_block(), gimple_stringop_fixed_value(), initialize_root_vars(), initialize_root_vars_lm(), initialize_root_vars_store_elim_2(), input_phi(), rt_bb_visited::insert_exit_check_on_edge(), insert_into_preds_of_block(), insert_phi_nodes_for(), make_forwarders_with_degenerate_phis(), oacc_entry_exit_single_gang(), optimize_mask_stores(), phiprop_insert_phi(), sese_add_exit_phis_edge(), shrink_wrap_one_built_in_call_with_conds(), simd_clone_adjust(), sink_common_stores_to_bb(), slpeel_tree_duplicate_loop_to_edge_cfg(), slpeel_update_phi_nodes_for_guard1(), split_loop_exit_edge(), transform_to_exit_first_loop(), transform_to_exit_first_loop_alt(), tree_optimize_tail_calls_1(), tree_transform_and_unroll_loop(), update_phi_components(), vect_create_epilog_for_reduction(), vect_do_peeling(), vect_get_main_loop_result(), vect_loop_versioning(), vect_set_loop_condition_normal(), vect_set_loop_control(), vect_setup_realignment(), vect_transform_cycle_phi(), vectorizable_induction(), vectorizable_lc_phi(), vectorizable_live_operation_1(), vectorizable_nonlinear_induction(), vectorizable_phi(), vectorizable_recurr(), vectorizable_simd_clone_call(), worker_single_copy(), and worker_single_simple().

◆ degenerate_phi_result()

tree degenerate_phi_result ( gphi * phi)
extern

◆ gimple_phi_arg_imm_use_ptr()

◆ gimple_phi_arg_imm_use_ptr_from_edge()

use_operand_p gimple_phi_arg_imm_use_ptr_from_edge ( gimple * gs,
const_edge e )
inline

◆ phi_arg_index_from_use()

int phi_arg_index_from_use ( use_operand_p use)
inline
Return the phi argument which contains the specified use.   

References gcc_checking_assert, ggc_alloc(), gimple_phi_arg(), gimple_phi_capacity(), and USE_STMT.

Referenced by get_reassociation_width(), mark_ssa_maybe_undefs(), and vectorizable_live_operation().

◆ phinodes_print_statistics()

void phinodes_print_statistics ( void )
extern
Header file for PHI node routines
   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/>.   
Dump some simple statistics regarding the re-use of PHI nodes.   

References ggc_alloc(), phi_nodes_created, phi_nodes_reused, PRsa, and SIZE_AMOUNT.

Referenced by dump_tree_statistics().

◆ remove_phi_args()

void remove_phi_args ( edge e)
extern
Remove all PHI arguments associated with edge E.   

References gsi_end_p(), gsi_next(), gsi_start_phis(), gphi_iterator::phi(), and remove_phi_arg_num().

Referenced by gimple_execute_on_shrinking_pred().

◆ remove_phi_node()

◆ remove_phi_nodes()

void remove_phi_nodes ( basic_block bb)
extern
Remove all the phi nodes from BB.   

References gsi_end_p(), gsi_start_phis(), NULL, remove_phi_node(), and set_phi_nodes().

Referenced by remove_phi_nodes_and_edges_for_unreachable_block().

◆ reserve_phi_args_for_new_edge()

◆ set_phi_nodes()