tree.h (PHI_CHAIN): New.
authorSteven Bosscher <steven@gcc.gnu.org>
Wed, 16 Jun 2004 23:03:34 +0000 (23:03 +0000)
committerSteven Bosscher <steven@gcc.gnu.org>
Wed, 16 Jun 2004 23:03:34 +0000 (23:03 +0000)
* tree.h (PHI_CHAIN): New.
* (tree-cfg.c, tree-dfa.c, tree-flow-inline.h, tree-into-ssa.c,
tree-outof-ssa.c, tree-phinodes.c, tree-pretty-print.c,
tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-dom.c, tree-ssa-dse.c,
tree-ssa-live.c, tree-ssa-loop.c, tree-ssa-phiopt.c, tree-ssa-pre.c,
tree-ssa.c, tree-tailcall.c): Use PHI_CHAIN instead of TREE_CHAIN
when traversing a list of PHI_NODEs.

From-SVN: r83273

22 files changed:
gcc/ChangeLog
gcc/tree-cfg.c
gcc/tree-dfa.c
gcc/tree-flow-inline.h
gcc/tree-into-ssa.c
gcc/tree-outof-ssa.c
gcc/tree-phinodes.c
gcc/tree-pretty-print.c
gcc/tree-ssa-alias.c
gcc/tree-ssa-ccp.c
gcc/tree-ssa-copy.c
gcc/tree-ssa-copyrename.c
gcc/tree-ssa-dce.c
gcc/tree-ssa-dom.c
gcc/tree-ssa-dse.c
gcc/tree-ssa-live.c
gcc/tree-ssa-loop.c
gcc/tree-ssa-phiopt.c
gcc/tree-ssa-pre.c
gcc/tree-ssa.c
gcc/tree-tailcall.c
gcc/tree.h

index e013ceb39bf5cb669f1e51535dc99a0343b1f02d..7745ee927eb44a90a6fdc8accacc34de85cd1121 100644 (file)
@@ -1,3 +1,13 @@
+2004-06-16  Steven Bosscher  <stevenb@suse.de>
+
+       * tree.h (PHI_CHAIN): New.
+       * (tree-cfg.c, tree-dfa.c, tree-flow-inline.h, tree-into-ssa.c,
+       tree-outof-ssa.c, tree-phinodes.c, tree-pretty-print.c,
+       tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-dom.c, tree-ssa-dse.c,
+       tree-ssa-live.c, tree-ssa-loop.c, tree-ssa-phiopt.c, tree-ssa-pre.c,
+       tree-ssa.c, tree-tailcall.c): Use PHI_CHAIN instead of TREE_CHAIN
+       when traversing a list of PHI_NODEs.
+
 2004-06-16  Bernardo Innocenti  <bernie@develer.com>
 
        PR target/13292
@@ -72,8 +82,8 @@
        
 2004-06-16  Dale Johannesen  <dalej@apple.com>
 
-        * loop.c (loop_givs_reduce): Avoid miscompilation of
-        loops entered at bottom.
+       * loop.c (loop_givs_reduce): Avoid miscompilation of
+       loops entered at bottom.
 
 2004-06-16  J"orn Rennecke <joern.rennecke@superh.com>
 
        automake 1.8.5.
 
 2004-06-15  Eric Botcazou  <ebotcazou@act-europe.fr>
-            Olivier Hainque  <hainque@act-europe.fr>
+           Olivier Hainque  <hainque@act-europe.fr>
 
        * function.c (fixup_var_refs): Also adjust the start of sequence
        after fixing up the insns.
index efe41ffcb2da1841b8d3d0ed5afd597889d002e9..0624ade3db3175a6164e4bfb2115c9c427487b83 100644 (file)
@@ -1768,7 +1768,7 @@ remove_phi_nodes_and_edges_for_unreachable_block (basic_block bb)
   phi = phi_nodes (bb);
   while (phi)
     {
-      tree next = TREE_CHAIN (phi);
+      tree next = PHI_CHAIN (phi);
       remove_phi_node (phi, NULL_TREE, bb);
       phi = next;
     }
@@ -2113,7 +2113,7 @@ phi_alternatives_equal (basic_block dest, edge e1, edge e2)
   tree phi, val1, val2;
   int n1, n2;
 
-  for (phi = phi_nodes (dest); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (dest); phi; phi = PHI_CHAIN (phi))
     {
       n1 = phi_arg_from_edge (phi, e1);
       n2 = phi_arg_from_edge (phi, e2);
@@ -3100,7 +3100,7 @@ tree_split_edge (edge edge_in)
   /* Find all the PHI arguments on the original edge, and change them to
      the new edge.  Do it before redirection, so that the argument does not
      get removed.  */
-  for (phi = phi_nodes (dest); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (dest); phi; phi = PHI_CHAIN (phi))
     {
       num_elem = PHI_NUM_ARGS (phi);
       for (i = 0; i < num_elem; i++)
@@ -3386,7 +3386,7 @@ verify_stmts (void)
       tree phi;
       int i;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          int phi_num_args = PHI_NUM_ARGS (phi);
 
@@ -3733,7 +3733,7 @@ tree_make_forwarder_block (edge fallthru)
 {
   edge e;
   basic_block dummy, bb;
-  tree phi, new_phi, var;
+  tree phi, new_phi, var, prev, next;
 
   dummy = fallthru->src;
   bb = fallthru->dest;
@@ -3743,7 +3743,7 @@ tree_make_forwarder_block (edge fallthru)
 
   /* If we redirected a branch we must create new phi nodes at the
      start of BB.  */
-  for (phi = phi_nodes (dummy); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (dummy); phi; phi = PHI_CHAIN (phi))
     {
       var = PHI_RESULT (phi);
       new_phi = create_phi_node (var, bb);
@@ -3752,8 +3752,15 @@ tree_make_forwarder_block (edge fallthru)
       add_phi_arg (&new_phi, PHI_RESULT (phi), fallthru);
     }
 
-  /* Ensure that the PHI node chains are in the same order.  */
-  set_phi_nodes (bb, nreverse (phi_nodes (bb)));
+  /* Ensure that the PHI node chain is in the same order.  */
+  prev = NULL;
+  for (phi = phi_nodes (bb); phi; phi = next)
+    {
+      next = PHI_CHAIN (phi);
+      PHI_CHAIN (phi) = prev;
+      prev = phi;
+    }
+  set_phi_nodes (bb, prev);
 
   /* Add the arguments we have stored on edges.  */
   for (e = bb->pred; e; e = e->pred_next)
@@ -3763,7 +3770,7 @@ tree_make_forwarder_block (edge fallthru)
 
       for (phi = phi_nodes (bb), var = PENDING_STMT (e);
           phi;
-          phi = TREE_CHAIN (phi), var = TREE_CHAIN (var))
+          phi = PHI_CHAIN (phi), var = TREE_CHAIN (var))
        add_phi_arg (&phi, TREE_VALUE (var), e);
 
       PENDING_STMT (e) = NULL;
@@ -3944,7 +3951,7 @@ thread_jumps (void)
              /* Update PHI nodes.   We know that the new argument should
                 have the same value as the argument associated with LAST.
                 Otherwise we would have changed our target block above.  */
-             for (phi = phi_nodes (dest); phi; phi = TREE_CHAIN (phi))
+             for (phi = phi_nodes (dest); phi; phi = PHI_CHAIN (phi))
                {
                  arg = phi_arg_from_edge (phi, last);
                  if (arg < 0)
index a2b8a698af24926bc0d82e4c0f940a0ef7ffb601..ca8004387ee1a4dee1201d4a4f454e87dabe0d45 100644 (file)
@@ -181,7 +181,7 @@ compute_immediate_uses (int flags, bool (*calc_for)(tree))
     {
       tree phi;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        compute_immediate_uses_for_phi (phi, calc_for);
 
       for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
@@ -227,7 +227,7 @@ free_df (void)
     {
       tree phi;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        free_df_for_stmt (phi);
 
       for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
@@ -636,7 +636,7 @@ dump_immediate_uses (FILE *file)
     {
       tree phi;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        dump_immediate_uses_for (file, phi);
 
       for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
@@ -818,7 +818,7 @@ collect_dfa_stats (struct dfa_stats_d *dfa_stats_p)
   FOR_EACH_BB (bb)
     {
       tree phi;
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          dfa_stats_p->num_phis++;
          dfa_stats_p->num_phi_args += PHI_NUM_ARGS (phi);
index 17eb6db7365e01b0f0b4eab736627a1036cf00eb..4fe44ef112e4055bfc620d1a4298aa4635f63db7 100644 (file)
@@ -427,7 +427,7 @@ set_phi_nodes (basic_block bb, tree l)
   tree phi;
 
   bb_ann (bb)->phi_nodes = l;
-  for (phi = l; phi; phi = TREE_CHAIN (phi))
+  for (phi = l; phi; phi = PHI_CHAIN (phi))
     set_bb_for_stmt (phi, bb);
 }
 
index e07258a28941bb3cc33fc3933dc14e3c1a02aa6a..0f9268604270e6a0d0a6e61fba01834a11d64edb 100644 (file)
@@ -514,7 +514,7 @@ rewrite_initialize_block (struct dom_walk_data *walk_data, basic_block bb)
   /* Step 1.  Register new definitions for every PHI node in the block.
      Conceptually, all the PHI nodes are executed in parallel and each PHI
      node introduces a new version for the associated variable.  */
-  for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
     {
       tree result = PHI_RESULT (phi);
 
@@ -538,7 +538,7 @@ rewrite_add_phi_arguments (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
     {
       tree phi;
 
-      for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
        {
          tree currdef;
 
index 3d0ec5267c155ca0aa9751c66bac082d0c2a9a04..ec52f6939fb9008ebfd86eb51ee4d516efb5ea24 100644 (file)
@@ -343,7 +343,7 @@ eliminate_build (elim_graph g, basic_block B, int i)
 
   clear_elim_graph (g);
   
-  for (phi = phi_nodes (B); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (B); phi; phi = PHI_CHAIN (phi))
     {
       T0 = var_to_partition_to_var (g->map, PHI_RESULT (phi));
       
@@ -588,7 +588,7 @@ coalesce_abnormal_edges (var_map map, conflict_graph graph, root_var_p rv)
   FOR_EACH_BB (bb)
     for (e = bb->succ; e; e = e->succ_next)
       if (e->dest != EXIT_BLOCK_PTR && e->flags & EDGE_ABNORMAL)
-       for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi))
+       for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
          {
            /* Visit each PHI on the destination side of this abnormal
               edge, and attempt to coalesce the argument with the result.  */
@@ -698,7 +698,7 @@ coalesce_ssa_name (var_map map, int flags)
       /* Add all potential copies via PHI arguments to the list.  */
       FOR_EACH_BB (bb)
        {
-         for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+         for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
            {
              tree res = PHI_RESULT (phi);
              int p = var_to_partition (map, res);
@@ -970,7 +970,7 @@ eliminate_virtual_phis (void)
     {
       for (phi = phi_nodes (bb); phi; phi = next)
         {
-         next = TREE_CHAIN (phi);
+         next = PHI_CHAIN (phi);
          if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi))))
            {
 #ifdef ENABLE_CHECKING
@@ -1031,7 +1031,7 @@ coalesce_vars (var_map map, tree_live_info_p liveinfo)
     {
       tree phi, arg;
       int p;
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          p = var_to_partition (map, PHI_RESULT (phi));
 
@@ -1794,7 +1794,7 @@ rewrite_trees (var_map map, tree *values)
     {
       tree phi;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          tree T0 = var_to_partition_to_var (map, PHI_RESULT (phi));
       
@@ -1987,7 +1987,7 @@ remove_ssa_form (FILE *dump, var_map map, int flags)
     {
       for (phi = phi_nodes (bb); phi; phi = next)
        {
-         next = TREE_CHAIN (phi);
+         next = PHI_CHAIN (phi);
          if ((flags & SSANORM_REMOVE_ALL_PHIS) 
              || var_to_partition (map, PHI_RESULT (phi)) != NO_PARTITION)
            remove_phi_node (phi, NULL_TREE, bb);
@@ -2029,7 +2029,7 @@ rewrite_vars_out_of_ssa (bitmap vars)
         to manually take variables out of SSA form here.  */
       FOR_EACH_BB (bb)
        {
-         for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+         for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
            {
              tree result = SSA_NAME_VAR (PHI_RESULT (phi));
 
index 4e2d0c1fb34ae0e83f7e6caa4c0aa2a6b2e9aa2e..1b98fcd05bcf4b6c163692f5bc3e67e34d60fed7 100644 (file)
@@ -183,7 +183,7 @@ make_phi_node (tree var, int len)
     {
       free_phinode_count--;
       phi = free_phinodes[bucket];
-      free_phinodes[bucket] = TREE_CHAIN (free_phinodes[bucket]);
+      free_phinodes[bucket] = PHI_CHAIN (free_phinodes[bucket]);
 #ifdef GATHER_STATISTICS
       phi_nodes_reused++;
 #endif
@@ -220,7 +220,7 @@ release_phi_node (tree phi)
 
   bucket = len > NUM_BUCKETS - 1 ? NUM_BUCKETS - 1 : len;
   bucket -= 2;
-  TREE_CHAIN (phi) = free_phinodes[bucket];
+  PHI_CHAIN (phi) = free_phinodes[bucket];
   free_phinodes[bucket] = phi;
   free_phinode_count++;
 }
@@ -256,7 +256,7 @@ resize_phi_node (tree *phi, int len)
     {
       free_phinode_count--;
       new_phi = free_phinodes[bucket];
-      free_phinodes[bucket] = TREE_CHAIN (free_phinodes[bucket]);
+      free_phinodes[bucket] = PHI_CHAIN (free_phinodes[bucket]);
 #ifdef GATHER_STATISTICS
       phi_nodes_reused++;
 #endif
@@ -300,7 +300,7 @@ create_phi_node (tree var, basic_block bb)
   PHI_REWRITTEN (phi) = 0;
 
   /* Add the new PHI node to the list of PHI nodes for block BB.  */
-  TREE_CHAIN (phi) = phi_nodes (bb);
+  PHI_CHAIN (phi) = phi_nodes (bb);
   bb_ann (bb)->phi_nodes = phi;
 
   /* Associate BB to the PHI node.  */
@@ -345,14 +345,14 @@ add_phi_arg (tree *phi, tree def, edge e)
              tree p;
 
              for (p = phi_nodes (e->dest);
-                  p && TREE_CHAIN (p) != old_phi;
-                  p = TREE_CHAIN (p))
+                  p && PHI_CHAIN (p) != old_phi;
+                  p = PHI_CHAIN (p))
                ;
 
              if (!p)
                abort ();
 
-             TREE_CHAIN (p) = *phi;
+             PHI_CHAIN (p) = *phi;
            }
        }
     }
@@ -434,7 +434,7 @@ remove_phi_node (tree phi, tree prev, basic_block bb)
   if (prev)
     {
       /* Rewire the list if we are given a PREV pointer.  */
-      TREE_CHAIN (prev) = TREE_CHAIN (phi);
+      PHI_CHAIN (prev) = PHI_CHAIN (phi);
 
       /* If we are deleting the PHI node, then we should release the
         SSA_NAME node so that it can be reused.  */
@@ -444,7 +444,7 @@ remove_phi_node (tree phi, tree prev, basic_block bb)
   else if (phi == phi_nodes (bb))
     {
       /* Update the list head if removing the first element.  */
-      bb_ann (bb)->phi_nodes = TREE_CHAIN (phi);
+      bb_ann (bb)->phi_nodes = PHI_CHAIN (phi);
 
       /* If we are deleting the PHI node, then we should release the
         SSA_NAME node so that it can be reused.  */
@@ -456,7 +456,7 @@ remove_phi_node (tree phi, tree prev, basic_block bb)
       /* Traverse the list looking for the node to remove.  */
       tree prev, t;
       prev = NULL_TREE;
-      for (t = phi_nodes (bb); t && t != phi; t = TREE_CHAIN (t))
+      for (t = phi_nodes (bb); t && t != phi; t = PHI_CHAIN (t))
        prev = t;
       if (t)
        remove_phi_node (t, prev, bb);
@@ -481,7 +481,7 @@ remove_all_phi_nodes_for (bitmap vars)
        {
          tree var = SSA_NAME_VAR (PHI_RESULT (phi));
 
-         next = TREE_CHAIN (phi);
+         next = PHI_CHAIN (phi);
          /* Only add PHI nodes for variables not in VARS.  */
          if (!bitmap_bit_p (vars, var_ann (var)->uid))
            {
@@ -494,7 +494,7 @@ remove_all_phi_nodes_for (bitmap vars)
                new_phi_list = last_phi = phi;
              else
                {
-                 TREE_CHAIN (last_phi) = phi;
+                 PHI_CHAIN (last_phi) = phi;
                  last_phi = phi;
                }
            }
@@ -509,11 +509,11 @@ remove_all_phi_nodes_for (bitmap vars)
 
       /* Make sure the last node in the new list has no successors.  */
       if (last_phi)
-       TREE_CHAIN (last_phi) = NULL_TREE;
+       PHI_CHAIN (last_phi) = NULL_TREE;
       bb_ann (bb)->phi_nodes = new_phi_list;
 
 #if defined ENABLE_CHECKING
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          tree var = SSA_NAME_VAR (PHI_RESULT (phi));
          if (bitmap_bit_p (vars, var_ann (var)->uid))
index c38131d39d5a3d5fb29db3c9b2f6a93faa483d6c..4b8d2d400805a3e9076ae013c63cb0a596122912 100644 (file)
@@ -2123,7 +2123,7 @@ dump_phi_nodes (pretty_printer *buffer, basic_block bb, int indent, int flags)
   if (!phi)
     return;
 
-  for (; phi; phi = TREE_CHAIN (phi))
+  for (; phi; phi = PHI_CHAIN (phi))
     {
       if (is_gimple_reg (PHI_RESULT (phi)) || (flags & TDF_VOPS))
         {
index e980aa2d3a712c24c8c64f38abb38e2e343b5a60..75c98e12d3d7a7f500187c81b8ebb7c013aa2348 100644 (file)
@@ -2094,7 +2094,7 @@ dump_points_to_info (FILE *file)
     {
       tree phi;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          tree ptr = PHI_RESULT (phi);
          if (POINTER_TYPE_P (TREE_TYPE (ptr)))
index 98c04970d85356f4385ac908a2853440695aa34a..405591fd4aa36af18a9e75419b6ba5a3f2c2dfde 100644 (file)
@@ -289,7 +289,7 @@ simulate_block (basic_block block)
 
   /* Always simulate PHI nodes, even if we have simulated this block
      before.  */
-  for (phi = phi_nodes (block); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (block); phi; phi = PHI_CHAIN (phi))
     visit_phi_node (phi);
 
   /* If this is the first time we've simulated this block, then we
@@ -382,7 +382,7 @@ substitute_and_fold (void)
       tree phi;
 
       /* Propagate our known constants into PHI nodes.  */
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          int i;
 
@@ -1184,7 +1184,7 @@ initialize (void)
     {
       tree phi, var;
       int x;
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
         {
          value *val;
          val = get_value (PHI_RESULT (phi));
index 79015163fc4a1f6bbbc5d41fc460dd8e3a035726..71574d4df001469aac24295da76fe5e13fa05a29 100644 (file)
@@ -313,7 +313,7 @@ cprop_into_successor_phis (basic_block bb,
         the entries.  */
       phi_num_args = PHI_NUM_ARGS (phi);
       hint = phi_num_args;
-      for ( ; phi; phi = TREE_CHAIN (phi))
+      for ( ; phi; phi = PHI_CHAIN (phi))
        {
          int i;
          tree new;
index f74b2e402e5631b9a8bf257090d089de4404b423..a355b2d5b7d732779a5eda23d14870ac23c184d9 100644 (file)
@@ -320,7 +320,7 @@ rename_ssa_copies (void)
   FOR_EACH_BB (bb)
     {
       /* Treat PHI nodes as copies between the result and each argument.  */
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
         {
           int i;
          tree res = PHI_RESULT (phi);
index 36007a43c84cd2116135142f5345996db14d4883..344f2249ada2d17126b608e65262a2900561bbf9 100644 (file)
@@ -432,7 +432,7 @@ find_obviously_necessary_stmts (struct edge_list *el)
       tree phi;
 
       /* Check any PHI nodes in the block.  */
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          NECESSARY (phi) = 0;
 
@@ -664,7 +664,7 @@ remove_dead_phis (basic_block bb)
 
       if (! NECESSARY (phi))
        {
-         tree next = TREE_CHAIN (phi);
+         tree next = PHI_CHAIN (phi);
 
          if (dump_file && (dump_flags & TDF_DETAILS))
            {
@@ -680,7 +680,7 @@ remove_dead_phis (basic_block bb)
       else
        {
          prev = phi;
-         phi = TREE_CHAIN (phi);
+         phi = PHI_CHAIN (phi);
        }
     }
 }
index 3a0c1aab6a037e98522e34c88f7949a52b7b4696..636af8e583481d2456870a9b485f0e00cb6c6177 100644 (file)
@@ -331,7 +331,7 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges)
 
       /* All variables referenced in PHI nodes we bypass must be
         renamed.  */
-      for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
        {
          tree result = SSA_NAME_VAR (PHI_RESULT (phi));
 
@@ -381,7 +381,7 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges)
 
       /* Finally, any variables in PHI nodes at our final destination
          must also be taken our of SSA form.  */
-      for (phi = phi_nodes (tgt); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (tgt); phi; phi = PHI_CHAIN (phi))
        {
          tree result = SSA_NAME_VAR (PHI_RESULT (phi));
 
@@ -515,7 +515,7 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges)
        {
          tree result = PHI_RESULT (phi);
 
-         next = TREE_CHAIN (phi);
+         next = PHI_CHAIN (phi);
 
          if (bitmap_bit_p (virtuals_to_rename,
                            var_ann (SSA_NAME_VAR (result))->uid))
@@ -698,7 +698,7 @@ thread_across_edge (struct dom_walk_data *walk_data, edge e)
   tree phi;
 
   /* Each PHI creates a temporary equivalence, record them.  */
-  for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
     {
       tree src = PHI_ARG_DEF (phi, phi_arg_from_edge (phi, e));
       tree dst = PHI_RESULT (phi);
@@ -1334,7 +1334,7 @@ record_equivalences_from_phis (struct dom_walk_data *walk_data, basic_block bb)
     = VARRAY_TOP_GENERIC_PTR (walk_data->block_data_stack);
   tree phi;
 
-  for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
     {
       tree lhs = PHI_RESULT (phi);
       tree rhs = NULL;
index 88ca1363c875f009f305851001460d231f29657c..e5ba66f56aa986725d3bf077afbdcd3b9393f0b1 100644 (file)
@@ -333,7 +333,7 @@ dse_record_phis (struct dom_walk_data *walk_data, basic_block bb)
   struct dse_global_data *dse_gd = walk_data->global_data;
   tree phi;
 
-  for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
     if (need_imm_uses_for (PHI_RESULT (phi)))
       record_voperand_set (dse_gd->stores,
                           &bd->stores,
@@ -373,7 +373,7 @@ tree_ssa_dse (void)
       for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
        stmt_ann (bsi_stmt (bsi))->uid = uid++;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        stmt_ann (phi)->uid = uid++;
     }
 
index 549211d2979e9c42321009cba6341d9892e6cb8d..2f9288b7114c62669d0772a01d02daa2bfc792d0 100644 (file)
@@ -329,7 +329,7 @@ create_ssa_var_map (int flags)
   FOR_EACH_BB (bb)
     {
       tree phi, arg;
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          int i;
          register_ssa_partition (map, PHI_RESULT (phi), false);
@@ -578,7 +578,7 @@ calculate_live_on_entry (var_map map)
     {
       bitmap_clear (saw_def);
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          for (i = 0; i < PHI_NUM_ARGS (phi); i++)
            {
@@ -603,7 +603,7 @@ calculate_live_on_entry (var_map map)
         The a_3 referred to in b_3's PHI node is the one incoming on the
         edge, *not* the PHI node just seen.  */
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
         {
          var = PHI_RESULT (phi);
          set_if_valid (map, saw_def, var);
@@ -701,7 +701,7 @@ calculate_live_on_entry (var_map map)
                int z, ok = 0;
                for (phi = phi_nodes (e->dest); 
                     phi && !ok; 
-                    phi = TREE_CHAIN (phi))
+                    phi = PHI_CHAIN (phi))
                  {
                    for (z = 0; z < PHI_NUM_ARGS (phi); z++)
                      if (var == PHI_ARG_DEF (phi, z))
@@ -751,7 +751,7 @@ calculate_live_on_exit (tree_live_info_p liveinfo)
   /* Set all the live-on-exit bits for uses in PHIs.  */
   FOR_EACH_BB (bb)
     {
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        for (i = 0; i < PHI_NUM_ARGS (phi); i++)
          { 
            t = PHI_ARG_DEF (phi, i);
@@ -1418,7 +1418,7 @@ build_tree_conflict_graph (tree_live_info_p liveinfo, tpa_p tpa,
         going to be translated out of SSA form we must record a conflict
         between the result of the PHI and any variables with are live. 
         Otherwise the out-of-ssa translation may create incorrect code.  */
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          tree result = PHI_RESULT (phi);
          int p = var_to_partition (map, result);
@@ -1837,7 +1837,7 @@ register_ssa_partitions_for_vars (bitmap vars, var_map map)
            {
              tree result = SSA_NAME_VAR (PHI_RESULT (phi));
 
-             next = TREE_CHAIN (phi);
+             next = PHI_CHAIN (phi);
              if (bitmap_bit_p (vars, var_ann (result)->uid))
                {
                  if (! is_gimple_reg (result))
index bbcba9c98db4907d859c2653d71a0556009ef76f..89692a277059bc4a5e35b9bc46ba03b8861953e8 100644 (file)
@@ -109,7 +109,7 @@ mark_defs_for_rewrite (basic_block bb)
   v_must_def_optype v_must_defs;
   unsigned i;
 
-  for (stmt = phi_nodes (bb); stmt; stmt = TREE_CHAIN (stmt))
+  for (stmt = phi_nodes (bb); stmt; stmt = PHI_CHAIN (stmt))
     {
       var = SSA_NAME_VAR (PHI_RESULT (stmt));
       bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
@@ -223,7 +223,7 @@ duplicate_blocks (varray_type bbs_to_duplicate)
          for (e1 = new_header->succ; e1->dest != e->dest; e1 = e1->succ_next)
            continue;
 
-         for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi))
+         for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
            {
              tree def = phi_element_for_edge (phi, e)->def;
              add_phi_arg (&phi, def, e1);
index fa342700d65fec44118a4246d9d8a842c0a3b443..bc14dc48d808cfa7c965ccb9199ee4e57e201899 100644 (file)
@@ -121,7 +121,7 @@ tree_ssa_phiopt (void)
       /* We're searching for blocks with one PHI node which has two
         arguments.  */
       phi = phi_nodes (bb);
-      if (phi && TREE_CHAIN (phi) == NULL
+      if (phi && PHI_CHAIN (phi) == NULL
          && PHI_NUM_ARGS (phi) == 2)
        {
          arg0 = PHI_ARG_DEF (phi, 0);
index c2853296cf5ad38de630155ea5173d2270b4a6ba..3d4371e413fea9af1827603ddf26867dfe19c254 100644 (file)
@@ -1606,7 +1606,7 @@ compute_avail (basic_block block)
       dom = get_immediate_dominator (CDI_DOMINATORS, block);
       if (dom)
        set_copy (AVAIL_OUT (block), AVAIL_OUT (dom));
-      for (phi = phi_nodes (block); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (block); phi; phi = PHI_CHAIN (phi))
        {
          /* Ignore virtual PHIs until we can do PRE on expressions
             with virtual operands.  */
index 9cec5d5087f2f4257fd85ea62a1c3b03fe633c65..175ce4878a78e0bd415e978fba93470178ba6bf6 100644 (file)
@@ -58,7 +58,7 @@ ssa_remove_edge (edge e)
   /* Remove the appropriate PHI arguments in E's destination block.  */
   for (phi = phi_nodes (e->dest); phi; phi = next)
     {
-      next = TREE_CHAIN (phi);
+      next = PHI_CHAIN (phi);
       remove_phi_arg (phi, e->src);
     }
 
@@ -80,7 +80,7 @@ ssa_redirect_edge (edge e, basic_block dest)
   /* Remove the appropriate PHI arguments in E's destination block.  */
   for (phi = phi_nodes (e->dest); phi; phi = next)
     {
-      next = TREE_CHAIN (phi);
+      next = PHI_CHAIN (phi);
 
       i = phi_arg_from_edge (phi, e);
       if (i < 0)
@@ -305,7 +305,7 @@ verify_ssa (void)
       tree phi;
       block_stmt_iterator bsi;
 
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        err |= verify_def (bb, definition_block, PHI_RESULT (phi), phi);
 
       for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
@@ -389,7 +389,7 @@ verify_ssa (void)
        }
 
       /* Verify the arguments for every PHI node in the block.  */
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        err |= verify_phi_args (phi, bb, definition_block);
 
       /* Now verify all the uses and vuses in every statement of the block. 
@@ -881,7 +881,7 @@ kill_redundant_phi_nodes (void)
 
   FOR_EACH_BB (bb)
     {
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          var = PHI_RESULT (phi);
 
@@ -1077,7 +1077,7 @@ execute_late_warn_uninitialized (void)
   execute_early_warn_uninitialized ();
 
   FOR_EACH_BB (bb)
-    for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+    for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
       warn_uninitialized_phi (phi);
 }
 
index 92626860f23b1426703f4dda0a0408a3cd89323c..379594e9321df51108783dd99bd3ff322c9bb88c 100644 (file)
@@ -339,7 +339,7 @@ propagate_through_phis (tree var, edge e)
   basic_block dest = e->dest;
   tree phi;
 
-  for (phi = phi_nodes (dest); phi; phi = TREE_CHAIN (phi))
+  for (phi = phi_nodes (dest); phi; phi = PHI_CHAIN (phi))
     if (phi_element_for_edge (phi, e)->def == var)
       return PHI_RESULT (phi);
 
@@ -558,7 +558,7 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
 
   if (a_acc)
     {
-      for (phi = phi_nodes (back->dest); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (back->dest); phi; phi = PHI_CHAIN (phi))
        if (PHI_RESULT (phi) == a_acc)
          break;
 
@@ -567,7 +567,7 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
 
   if (m_acc)
     {
-      for (phi = phi_nodes (back->dest); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (back->dest); phi; phi = PHI_CHAIN (phi))
        if (PHI_RESULT (phi) == m_acc)
          break;
 
@@ -684,7 +684,7 @@ eliminate_tail_call (struct tailcall *t)
        args = TREE_CHAIN (args))
     {
       
-      for (phi = phi_nodes (first); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (first); phi; phi = PHI_CHAIN (phi))
        if (param == SSA_NAME_VAR (PHI_RESULT (phi)))
          break;
 
@@ -701,7 +701,7 @@ eliminate_tail_call (struct tailcall *t)
   for (i = 0; i < NUM_V_MAY_DEFS (v_may_defs); i++)
     {
       param = SSA_NAME_VAR (V_MAY_DEF_RESULT (v_may_defs, i));
-      for (phi = phi_nodes (first); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (first); phi; phi = PHI_CHAIN (phi))
        if (param == SSA_NAME_VAR (PHI_RESULT (phi)))
          break;
 
index b43899717f0bdfe913a63451e9c4d8d5c7b5203f..5a87055ff3120ea444481d65b76f95a8bd545494 100644 (file)
@@ -1208,6 +1208,11 @@ struct tree_ssa_name GTY(())
 /* In a PHI_NODE node.  */
 #define PHI_RESULT(NODE)       PHI_NODE_CHECK (NODE)->phi.result
 
+/* PHI_NODEs for each basic block are chained together in a single linked
+   list.  The head of the list is linked from the block annotation, and
+   the link to the next PHI is in PHI_CHAIN.  */
+#define PHI_CHAIN(NODE)                TREE_CHAIN (PHI_NODE_CHECK (NODE))
+
 /* Nonzero if the PHI node was rewritten by a previous pass through the
    SSA renamer.  */
 #define PHI_REWRITTEN(NODE)    PHI_NODE_CHECK (NODE)->phi.rewritten