(root)/
gcc-13.2.0/
gcc/
tree-phinodes.h
       1  /* Header file for PHI node routines
       2     Copyright (C) 2013-2023 Free Software Foundation, Inc.
       3  
       4  This file is part of GCC.
       5  
       6  GCC is free software; you can redistribute it and/or modify it under
       7  the terms of the GNU General Public License as published by the Free
       8  Software Foundation; either version 3, or (at your option) any later
       9  version.
      10  
      11  GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      12  WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14   for more details.
      15  
      16  You should have received a copy of the GNU General Public License
      17  along with GCC; see the file COPYING3.  If not see
      18  <http://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef GCC_TREE_PHINODES_H
      21  #define GCC_TREE_PHINODES_H
      22  
      23  extern void phinodes_print_statistics (void);
      24  extern void reserve_phi_args_for_new_edge (basic_block);
      25  extern void add_phi_node_to_bb (gphi *phi, basic_block bb);
      26  extern gphi *create_phi_node (tree, basic_block);
      27  extern void add_phi_arg (gphi *, tree, edge, location_t);
      28  extern void remove_phi_args (edge);
      29  extern void remove_phi_node (gimple_stmt_iterator *, bool);
      30  extern void remove_phi_nodes (basic_block);
      31  extern tree degenerate_phi_result (gphi *);
      32  extern void set_phi_nodes (basic_block, gimple_seq);
      33  
      34  inline use_operand_p
      35  gimple_phi_arg_imm_use_ptr (gimple *gs, int i)
      36  {
      37    return &gimple_phi_arg (gs, i)->imm_use;
      38  }
      39  
      40  /* Return the phi argument which contains the specified use.  */
      41  
      42  inline int
      43  phi_arg_index_from_use (use_operand_p use)
      44  {
      45    struct phi_arg_d *element, *root;
      46    size_t index;
      47    gimple *phi;
      48  
      49    /* Since the use is the first thing in a PHI argument element, we can
      50       calculate its index based on casting it to an argument, and performing
      51       pointer arithmetic.  */
      52  
      53    phi = USE_STMT (use);
      54  
      55    element = (struct phi_arg_d *)use;
      56    root = gimple_phi_arg (phi, 0);
      57    index = element - root;
      58  
      59    /* Make sure the calculation doesn't have any leftover bytes.  If it does,
      60       then imm_use is likely not the first element in phi_arg_d.  */
      61    gcc_checking_assert ((((char *)element - (char *)root)
      62  			% sizeof (struct phi_arg_d)) == 0
      63  		       && index < gimple_phi_capacity (phi));
      64  
      65   return index;
      66  }
      67  
      68  #endif /* GCC_TREE_PHINODES_H */