summaryrefslogtreecommitdiff
path: root/gcc/tree-phinodes.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-phinodes.c')
-rw-r--r--gcc/tree-phinodes.c67
1 files changed, 18 insertions, 49 deletions
diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c
index 963ef0a9578..929480f80c0 100644
--- a/gcc/tree-phinodes.c
+++ b/gcc/tree-phinodes.c
@@ -197,10 +197,8 @@ ideal_phi_node_len (int len)
return new_len;
}
-/* Return a PHI node for variable VAR defined in statement STMT.
- STMT may be an empty statement for artificial references (e.g., default
- definitions created when a variable is used without a preceding
- definition). */
+
+/* Return a PHI node with LEN argument slots for variable VAR. */
static tree
make_phi_node (tree var, int len)
@@ -468,58 +466,30 @@ remove_phi_node (tree phi, tree prev)
}
-/* Remove all the PHI nodes for variables in the VARS bitmap. */
+/* Find the first PHI node P in basic block BB for symbol SYM. If
+ PREV_P is given, the PHI node preceding P is stored in *PREV_P. */
-void
-remove_all_phi_nodes_for (bitmap vars)
+tree
+find_phi_node_for (basic_block bb, tree sym, tree *prev_p)
{
- basic_block bb;
-
- FOR_EACH_BB (bb)
- {
- /* Build a new PHI list for BB without variables in VARS. */
- tree phi, new_phi_list, next;
- tree *lastp = &new_phi_list;
+ tree phi;
- for (phi = phi_nodes (bb); phi; phi = next)
- {
- tree var = SSA_NAME_VAR (PHI_RESULT (phi));
-
- next = PHI_CHAIN (phi);
- /* Only add PHI nodes for variables not in VARS. */
- if (!bitmap_bit_p (vars, var_ann (var)->uid))
- {
- /* If we're not removing this PHI node, then it must have
- been rewritten by a previous call into the SSA rewriter.
- Note that fact in PHI_REWRITTEN. */
- PHI_REWRITTEN (phi) = 1;
-
- *lastp = phi;
- lastp = &PHI_CHAIN (phi);
- }
- else
- {
- /* If we are deleting the PHI node, then we should release the
- SSA_NAME node so that it can be reused. */
- release_phi_node (phi);
- release_ssa_name (PHI_RESULT (phi));
- }
- }
+ if (prev_p)
+ *prev_p = NULL_TREE;
- /* Make sure the last node in the new list has no successors. */
- *lastp = NULL;
- bb_ann (bb)->phi_nodes = new_phi_list;
+ for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
+ {
+ if (SSA_NAME_VAR (PHI_RESULT (phi)) == sym)
+ return phi;
-#if defined ENABLE_CHECKING
- for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
- {
- tree var = SSA_NAME_VAR (PHI_RESULT (phi));
- gcc_assert (!bitmap_bit_p (vars, var_ann (var)->uid));
- }
-#endif
+ if (prev_p)
+ *prev_p = phi;
}
+
+ return NULL_TREE;
}
+
/* Reverse the order of PHI nodes in the chain PHI.
Return the new head of the chain (old last PHI node). */
@@ -537,4 +507,3 @@ phi_reverse (tree phi)
}
#include "gt-tree-phinodes.h"
-