gcc/
        * gimple.h (gimple_phi_arg_def_ptr): Require a gimple_phi rather
        than a plain gimple.
        (gimple_phi_arg_has_location): Likewise.

        * gimple-streamer-in.c (input_phi): Return a gimple_phi rather
        than a plain gimple.
        * gimple-streamer-out.c (output_phi): Require a gimple_phi rather
        than a plain gimple.
        (output_bb): Convert iteration to a gimple_phi_iterator, and local
        "phi" to gimple_phi.

        * omp-low.c (expand_omp_for_static_chunk): Convert iterator "psi"
        to a gimple_phi_iterator; convert locals "phi" and "nphi" to be
        gimple_phi.

        * tree-cfg.c (gimple_duplicate_sese_tail): Likewise for "psi" and
        "phi".
        (move_block_to_fn): Introduce new gimple_phi_iterator "psi", using
        it in place of "gsi" where necessary.  Convert "phi" to be a
        gimple_phi.

        * tree-cfgcleanup.c (remove_forwarder_block): Likewise.

        * tree-vect-loop-manip.c (vect_loop_versioning): Convert "gsi" to
        a gimple_phi_iterator, and "orig_phi" and "new_phi" to be
        gimple_phi.

        * tree.c (find_decls_types_in_node): Introduce new
        gimple_phi_iterator "psi", using it in place of "si" where
        necessary.  Convert "phi" to be a gimple_phi.
---
 gcc/gimple-streamer-in.c   |  4 ++--
 gcc/gimple-streamer-out.c  |  8 +++++---
 gcc/gimple.h               | 12 ++++++------
 gcc/omp-low.c              |  8 ++++----
 gcc/tree-cfg.c             | 15 ++++++++-------
 gcc/tree-cfgcleanup.c      |  8 ++++----
 gcc/tree-vect-loop-manip.c |  7 ++++---
 gcc/tree.c                 |  5 +++--
 8 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/gcc/gimple-streamer-in.c b/gcc/gimple-streamer-in.c
index 4fb0b41..69a20a1 100644
--- a/gcc/gimple-streamer-in.c
+++ b/gcc/gimple-streamer-in.c
@@ -44,14 +44,14 @@ along with GCC; see the file COPYING3.  If not see
 /* Read a PHI function for basic block BB in function FN.  DATA_IN is
    the file being read.  IB is the input block to use for reading.  */
 
-static gimple
+static gimple_phi
 input_phi (struct lto_input_block *ib, basic_block bb, struct data_in *data_in,
           struct function *fn)
 {
   unsigned HOST_WIDE_INT ix;
   tree phi_result;
   int i, len;
-  gimple result;
+  gimple_phi result;
 
   ix = streamer_read_uhwi (ib);
   phi_result = (*SSANAMES (fn))[ix];
diff --git a/gcc/gimple-streamer-out.c b/gcc/gimple-streamer-out.c
index 5d3adf8..b27d4de 100644
--- a/gcc/gimple-streamer-out.c
+++ b/gcc/gimple-streamer-out.c
@@ -41,7 +41,7 @@ along with GCC; see the file COPYING3.  If not see
 /* Output PHI function PHI to the main stream in OB.  */
 
 static void
-output_phi (struct output_block *ob, gimple phi)
+output_phi (struct output_block *ob, gimple_phi phi)
 {
   unsigned i, len = gimple_phi_num_args (phi);
 
@@ -238,9 +238,11 @@ output_bb (struct output_block *ob, basic_block bb, struct 
function *fn)
 
       streamer_write_record_start (ob, LTO_null);
 
-      for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi); gsi_next (&bsi))
+      for (gimple_phi_iterator psi = gsi_start_phis (bb);
+          !gsi_end_p (psi);
+          gsi_next (&psi))
        {
-         gimple phi = gsi_stmt (bsi);
+         gimple_phi phi = psi.phi ();
 
          /* Only emit PHIs for gimple registers.  PHI nodes for .MEM
             will be filled in on reading when the SSA form is
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 155fca7..e4d0455 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -4243,12 +4243,12 @@ gimple_phi_arg_def (gimple gs, size_t index)
 }
 
 
-/* Return a pointer to the tree operand for argument I of PHI node GS.  */
+/* Return a pointer to the tree operand for argument I of phi node PHI.  */
 
 static inline tree *
-gimple_phi_arg_def_ptr (gimple gs, size_t index)
+gimple_phi_arg_def_ptr (gimple_phi phi, size_t index)
 {
-  return &gimple_phi_arg (gs, index)->def;
+  return &gimple_phi_arg (phi, index)->def;
 }
 
 /* Return the edge associated with argument I of phi node GS.  */
@@ -4283,12 +4283,12 @@ gimple_phi_arg_set_location (gimple gs, size_t i, 
source_location loc)
   gimple_phi_arg (gs, i)->locus = loc;
 }
 
-/* Return TRUE if argument I of phi node GS has a location record.  */
+/* Return TRUE if argument I of phi node PHI has a location record.  */
 
 static inline bool
-gimple_phi_arg_has_location (gimple gs, size_t i)
+gimple_phi_arg_has_location (gimple_phi phi, size_t i)
 {
-  return gimple_phi_arg_location (gs, i) != UNKNOWN_LOCATION;
+  return gimple_phi_arg_location (phi, i) != UNKNOWN_LOCATION;
 }
 
 
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index d3fcba0..25a1642 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -6465,8 +6465,8 @@ expand_omp_for_static_chunk (struct omp_region *region,
 
   if (gimple_in_ssa_p (cfun))
     {
-      gimple_stmt_iterator psi;
-      gimple phi;
+      gimple_phi_iterator psi;
+      gimple_phi phi;
       edge re, ene;
       edge_var_map_vector *head;
       edge_var_map *vm;
@@ -6486,10 +6486,10 @@ expand_omp_for_static_chunk (struct omp_region *region,
       for (i = 0; !gsi_end_p (psi) && head->iterate (i, &vm);
           gsi_next (&psi), ++i)
        {
-         gimple nphi;
+         gimple_phi nphi;
          source_location locus;
 
-         phi = gsi_stmt (psi);
+         phi = psi.phi ();
          t = gimple_phi_result (phi);
          gcc_assert (t == redirect_edge_var_map_result (vm));
          nphi = create_phi_node (t, iter_part_bb);
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index b2cca43..468c568 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -6061,8 +6061,8 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, 
edge exit ATTRIBUTE_UNU
   gimple cond_stmt;
   edge sorig, snew;
   basic_block exit_bb;
-  gimple_stmt_iterator psi;
-  gimple phi;
+  gimple_phi_iterator psi;
+  gimple_phi phi;
   tree def;
   struct loop *target, *aloop, *cloop;
 
@@ -6182,7 +6182,7 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, 
edge exit ATTRIBUTE_UNU
             !gsi_end_p (psi);
             gsi_next (&psi))
          {
-           phi = gsi_stmt (psi);
+           phi = psi.phi ();
            def = PHI_ARG_DEF (phi, nexits[0]->dest_idx);
            add_phi_arg (phi, def, e, gimple_phi_arg_location_from_edge (phi, 
e));
          }
@@ -6565,9 +6565,10 @@ move_block_to_fn (struct function *dest_cfun, 
basic_block bb,
   (*cfg->x_basic_block_info)[bb->index] = bb;
 
   /* Remap the variables in phi nodes.  */
-  for (si = gsi_start_phis (bb); !gsi_end_p (si); )
+  for (gimple_phi_iterator psi = gsi_start_phis (bb);
+       !gsi_end_p (psi); )
     {
-      gimple phi = gsi_stmt (si);
+      gimple_phi phi = psi.phi ();
       use_operand_p use;
       tree op = PHI_RESULT (phi);
       ssa_op_iter oi;
@@ -6577,7 +6578,7 @@ move_block_to_fn (struct function *dest_cfun, basic_block 
bb,
        {
          /* Remove the phi nodes for virtual operands (alias analysis will be
             run for the new function, anyway).  */
-          remove_phi_node (&si, true);
+          remove_phi_node (&psi, true);
          continue;
        }
 
@@ -6607,7 +6608,7 @@ move_block_to_fn (struct function *dest_cfun, basic_block 
bb,
            }
        }
 
-      gsi_next (&si);
+      gsi_next (&psi);
     }
 
   for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index 64aeb6a..3c879f5 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -448,11 +448,11 @@ remove_forwarder_block (basic_block bb)
        {
          /* Create arguments for the phi nodes, since the edge was not
             here before.  */
-         for (gsi = gsi_start_phis (dest);
-              !gsi_end_p (gsi);
-              gsi_next (&gsi))
+         for (gimple_phi_iterator psi = gsi_start_phis (dest);
+              !gsi_end_p (psi);
+              gsi_next (&psi))
            {
-             gimple phi = gsi_stmt (gsi);
+             gimple_phi phi = psi.phi ();
              source_location l = gimple_phi_arg_location_from_edge (phi, succ);
              tree def = gimple_phi_arg_def (phi, succ->dest_idx);
              add_phi_arg (phi, unshare_expr (def), s, l);
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index b14bf01..566066a 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -2317,11 +2317,12 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
   struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
   struct loop *scalar_loop = LOOP_VINFO_SCALAR_LOOP (loop_vinfo);
   basic_block condition_bb;
-  gimple_stmt_iterator gsi, cond_exp_gsi;
+  gimple_phi_iterator gsi;
+  gimple_stmt_iterator cond_exp_gsi;
   basic_block merge_bb;
   basic_block new_exit_bb;
   edge new_exit_e, e;
-  gimple orig_phi, new_phi;
+  gimple_phi orig_phi, new_phi;
   tree cond_expr = NULL_TREE;
   gimple_seq cond_expr_stmt_list = NULL;
   tree arg;
@@ -2425,7 +2426,7 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
       for (gsi = gsi_start_phis (merge_bb); !gsi_end_p (gsi); gsi_next (&gsi))
        {
          tree new_res;
-         orig_phi = gsi_stmt (gsi);
+         orig_phi = gsi.phi ();
          new_res = copy_ssa_name (PHI_RESULT (orig_phi), NULL);
          new_phi = create_phi_node (new_res, new_exit_bb);
          arg = PHI_ARG_DEF_FROM_EDGE (orig_phi, e);
diff --git a/gcc/tree.c b/gcc/tree.c
index efee5e6..39bf1d0 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5438,12 +5438,13 @@ find_decls_types_in_node (struct cgraph_node *n, struct 
free_lang_data_d *fld)
   /* Traverse every statement in FN.  */
   FOR_EACH_BB_FN (bb, fn)
     {
+      gimple_phi_iterator psi;
       gimple_stmt_iterator si;
       unsigned i;
 
-      for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
+      for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
        {
-         gimple phi = gsi_stmt (si);
+         gimple_phi phi = psi.phi ();
 
          for (i = 0; i < gimple_phi_num_args (phi); i++)
            {
-- 
1.8.5.3

Reply via email to