2004-06-22 Eric Christopher <echristo@redhat.com>
[official-gcc.git] / gcc / tree-ssa.c
bloba931d9f7fef6c769919e568aff7f4adb37dedfba
1 /* Miscellaneous SSA utility functions.
2 Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING. If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "flags.h"
27 #include "rtl.h"
28 #include "tm_p.h"
29 #include "ggc.h"
30 #include "langhooks.h"
31 #include "hard-reg-set.h"
32 #include "basic-block.h"
33 #include "output.h"
34 #include "errors.h"
35 #include "expr.h"
36 #include "function.h"
37 #include "diagnostic.h"
38 #include "bitmap.h"
39 #include "tree-flow.h"
40 #include "tree-gimple.h"
41 #include "tree-inline.h"
42 #include "varray.h"
43 #include "timevar.h"
44 #include "tree-alias-common.h"
45 #include "hashtab.h"
46 #include "tree-dump.h"
47 #include "tree-pass.h"
50 /* Remove edge E and remove the corresponding arguments from the PHI nodes
51 in E's destination block. */
53 void
54 ssa_remove_edge (edge e)
56 tree phi, next;
58 /* Remove the appropriate PHI arguments in E's destination block. */
59 for (phi = phi_nodes (e->dest); phi; phi = next)
61 next = PHI_CHAIN (phi);
62 remove_phi_arg (phi, e->src);
65 remove_edge (e);
68 /* Remove the corresponding arguments from the PHI nodes in E's
69 destination block and redirect it to DEST. Return redirected edge.
70 The list of removed arguments is stored in PENDING_STMT (e). */
72 edge
73 ssa_redirect_edge (edge e, basic_block dest)
75 tree phi, next;
76 tree list = NULL, *last = &list;
77 tree src, dst, node;
78 int i;
80 /* Remove the appropriate PHI arguments in E's destination block. */
81 for (phi = phi_nodes (e->dest); phi; phi = next)
83 next = PHI_CHAIN (phi);
85 i = phi_arg_from_edge (phi, e);
86 if (i < 0)
87 continue;
89 src = PHI_ARG_DEF (phi, i);
90 dst = PHI_RESULT (phi);
91 node = build_tree_list (dst, src);
92 *last = node;
93 last = &TREE_CHAIN (node);
95 remove_phi_arg_num (phi, i);
98 e = redirect_edge_succ_nodup (e, dest);
99 PENDING_STMT (e) = list;
101 return e;
105 /* Return true if the definition of SSA_NAME at block BB is malformed.
107 STMT is the statement where SSA_NAME is created.
109 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
110 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
111 block in that array slot contains the definition of SSA_NAME. */
113 static bool
114 verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
115 tree stmt)
117 bool err = false;
119 if (TREE_CODE (ssa_name) != SSA_NAME)
121 error ("Expected an SSA_NAME object");
122 debug_generic_stmt (ssa_name);
123 debug_generic_stmt (stmt);
126 if (definition_block[SSA_NAME_VERSION (ssa_name)])
128 error ("SSA_NAME created in two different blocks %i and %i",
129 definition_block[SSA_NAME_VERSION (ssa_name)]->index, bb->index);
130 fprintf (stderr, "SSA_NAME: ");
131 debug_generic_stmt (ssa_name);
132 debug_generic_stmt (stmt);
133 err = true;
136 definition_block[SSA_NAME_VERSION (ssa_name)] = bb;
138 if (SSA_NAME_DEF_STMT (ssa_name) != stmt)
140 error ("SSA_NAME_DEF_STMT is wrong");
141 fprintf (stderr, "SSA_NAME: ");
142 debug_generic_stmt (ssa_name);
143 fprintf (stderr, "Expected definition statement:\n");
144 debug_generic_stmt (SSA_NAME_DEF_STMT (ssa_name));
145 fprintf (stderr, "\nActual definition statement:\n");
146 debug_generic_stmt (stmt);
147 err = true;
150 return err;
154 /* Return true if the use of SSA_NAME at statement STMT in block BB is
155 malformed.
157 DEF_BB is the block where SSA_NAME was found to be created.
159 IDOM contains immediate dominator information for the flowgraph.
161 CHECK_ABNORMAL is true if the caller wants to check whether this use
162 is flowing through an abnormal edge (only used when checking PHI
163 arguments). */
165 static bool
166 verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
167 tree stmt, bool check_abnormal)
169 bool err = false;
171 if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (ssa_name)))
172 ; /* Nothing to do. */
173 else if (!def_bb)
175 error ("Missing definition");
176 err = true;
178 else if (bb != def_bb
179 && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
181 error ("Definition in block %i does not dominate use in block %i",
182 def_bb->index, bb->index);
183 err = true;
186 if (check_abnormal
187 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
189 error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
190 err = true;
193 if (err)
195 fprintf (stderr, "for SSA_NAME: ");
196 debug_generic_stmt (ssa_name);
197 fprintf (stderr, "in statement:\n");
198 debug_generic_stmt (stmt);
201 return err;
205 /* Return true if any of the arguments for PHI node PHI at block BB is
206 malformed.
208 IDOM contains immediate dominator information for the flowgraph.
210 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
211 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
212 block in that array slot contains the definition of SSA_NAME. */
214 static bool
215 verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
217 edge e;
218 bool err = false;
219 int i, phi_num_args = PHI_NUM_ARGS (phi);
221 /* Mark all the incoming edges. */
222 for (e = bb->pred; e; e = e->pred_next)
223 e->aux = (void *) 1;
225 for (i = 0; i < phi_num_args; i++)
227 tree op = PHI_ARG_DEF (phi, i);
229 e = PHI_ARG_EDGE (phi, i);
231 if (TREE_CODE (op) == SSA_NAME)
232 err |= verify_use (e->src, definition_block[SSA_NAME_VERSION (op)], op,
233 phi, e->flags & EDGE_ABNORMAL);
235 if (e->dest != bb)
237 error ("Wrong edge %d->%d for PHI argument\n",
238 e->src->index, e->dest->index, bb->index);
239 err = true;
242 if (e->aux == (void *) 0)
244 error ("PHI argument flowing through dead edge %d->%d\n",
245 e->src->index, e->dest->index);
246 err = true;
249 if (e->aux == (void *) 2)
251 error ("PHI argument duplicated for edge %d->%d\n", e->src->index,
252 e->dest->index);
253 err = true;
256 if (err)
258 fprintf (stderr, "PHI argument\n");
259 debug_generic_stmt (op);
262 e->aux = (void *) 2;
265 for (e = bb->pred; e; e = e->pred_next)
267 if (e->aux != (void *) 2)
269 error ("No argument flowing through edge %d->%d\n", e->src->index,
270 e->dest->index);
271 err = true;
273 e->aux = (void *) 0;
276 if (err)
278 fprintf (stderr, "for PHI node\n");
279 debug_generic_stmt (phi);
283 return err;
287 /* Verify common invariants in the SSA web.
288 TODO: verify the variable annotations. */
290 void
291 verify_ssa (void)
293 bool err = false;
294 basic_block bb;
295 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
297 timevar_push (TV_TREE_SSA_VERIFY);
299 calculate_dominance_info (CDI_DOMINATORS);
301 /* Verify and register all the SSA_NAME definitions found in the
302 function. */
303 FOR_EACH_BB (bb)
305 tree phi;
306 block_stmt_iterator bsi;
308 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
309 err |= verify_def (bb, definition_block, PHI_RESULT (phi), phi);
311 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
313 tree stmt;
314 stmt_ann_t ann;
315 unsigned int j;
316 v_may_def_optype v_may_defs;
317 v_must_def_optype v_must_defs;
318 def_optype defs;
320 stmt = bsi_stmt (bsi);
321 ann = stmt_ann (stmt);
322 get_stmt_operands (stmt);
324 v_may_defs = V_MAY_DEF_OPS (ann);
325 if (ann->makes_aliased_stores && NUM_V_MAY_DEFS (v_may_defs) == 0)
326 error ("Makes aliased stores, but no V_MAY_DEFS");
328 for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
330 tree op = V_MAY_DEF_RESULT (v_may_defs, j);
331 if (is_gimple_reg (op))
333 error ("Found a virtual definition for a GIMPLE register");
334 debug_generic_stmt (op);
335 debug_generic_stmt (stmt);
336 err = true;
338 err |= verify_def (bb, definition_block, op, stmt);
341 v_must_defs = STMT_V_MUST_DEF_OPS (stmt);
342 for (j = 0; j < NUM_V_MUST_DEFS (v_must_defs); j++)
344 tree op = V_MUST_DEF_OP (v_must_defs, j);
345 if (is_gimple_reg (op))
347 error ("Found a virtual must-def for a GIMPLE register");
348 debug_generic_stmt (op);
349 debug_generic_stmt (stmt);
350 err = true;
352 err |= verify_def (bb, definition_block, op, stmt);
355 defs = DEF_OPS (ann);
356 for (j = 0; j < NUM_DEFS (defs); j++)
358 tree op = DEF_OP (defs, j);
359 if (TREE_CODE (op) == SSA_NAME && !is_gimple_reg (op))
361 error ("Found a real definition for a non-GIMPLE register");
362 debug_generic_stmt (op);
363 debug_generic_stmt (stmt);
364 err = true;
366 err |= verify_def (bb, definition_block, op, stmt);
372 /* Now verify all the uses and make sure they agree with the definitions
373 found in the previous pass. */
374 FOR_EACH_BB (bb)
376 edge e;
377 tree phi;
378 block_stmt_iterator bsi;
380 /* Make sure that all edges have a clear 'aux' field. */
381 for (e = bb->pred; e; e = e->pred_next)
383 if (e->aux)
385 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
386 e->dest->index);
387 err = true;
391 /* Verify the arguments for every PHI node in the block. */
392 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
393 err |= verify_phi_args (phi, bb, definition_block);
395 /* Now verify all the uses and vuses in every statement of the block.
397 Remember, the RHS of a V_MAY_DEF is a use as well. */
398 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
400 tree stmt = bsi_stmt (bsi);
401 stmt_ann_t ann = stmt_ann (stmt);
402 unsigned int j;
403 vuse_optype vuses;
404 v_may_def_optype v_may_defs;
405 use_optype uses;
407 vuses = VUSE_OPS (ann);
408 for (j = 0; j < NUM_VUSES (vuses); j++)
410 tree op = VUSE_OP (vuses, j);
412 if (is_gimple_reg (op))
414 error ("Found a virtual use for a GIMPLE register");
415 debug_generic_stmt (op);
416 debug_generic_stmt (stmt);
417 err = true;
419 err |= verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
420 op, stmt, false);
423 v_may_defs = V_MAY_DEF_OPS (ann);
424 for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
426 tree op = V_MAY_DEF_OP (v_may_defs, j);
428 if (is_gimple_reg (op))
430 error ("Found a virtual use for a GIMPLE register");
431 debug_generic_stmt (op);
432 debug_generic_stmt (stmt);
433 err = true;
435 err |= verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
436 op, stmt, false);
439 uses = USE_OPS (ann);
440 for (j = 0; j < NUM_USES (uses); j++)
442 tree op = USE_OP (uses, j);
444 if (TREE_CODE (op) == SSA_NAME && !is_gimple_reg (op))
446 error ("Found a real use of a non-GIMPLE register");
447 debug_generic_stmt (op);
448 debug_generic_stmt (stmt);
449 err = true;
451 err |= verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
452 op, stmt, false);
457 free (definition_block);
459 timevar_pop (TV_TREE_SSA_VERIFY);
461 if (err)
462 internal_error ("verify_ssa failed.");
466 /* Set the USED bit in the annotation for T. */
468 void
469 set_is_used (tree t)
471 while (1)
473 if (SSA_VAR_P (t))
474 break;
476 if (TREE_CODE (t) == REALPART_EXPR || TREE_CODE (t) == IMAGPART_EXPR)
477 t = TREE_OPERAND (t, 0);
478 else
479 while (handled_component_p (t))
480 t = TREE_OPERAND (t, 0);
483 if (TREE_CODE (t) == SSA_NAME)
484 t = SSA_NAME_VAR (t);
486 var_ann (t)->used = 1;
490 /* Initialize global DFA and SSA structures. */
492 void
493 init_tree_ssa (void)
495 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
496 call_clobbered_vars = BITMAP_XMALLOC ();
497 init_ssa_operands ();
498 init_ssanames ();
499 init_phinodes ();
500 global_var = NULL_TREE;
501 aliases_computed_p = false;
505 /* Deallocate memory associated with SSA data structures for FNDECL. */
507 void
508 delete_tree_ssa (void)
510 size_t i;
511 basic_block bb;
512 block_stmt_iterator bsi;
514 /* Remove annotations from every tree in the function. */
515 FOR_EACH_BB (bb)
516 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
517 bsi_stmt (bsi)->common.ann = NULL;
519 /* Remove annotations from every referenced variable. */
520 if (referenced_vars)
522 for (i = 0; i < num_referenced_vars; i++)
523 referenced_var (i)->common.ann = NULL;
524 referenced_vars = NULL;
527 fini_ssanames ();
528 fini_phinodes ();
529 fini_ssa_operands ();
531 global_var = NULL_TREE;
532 BITMAP_XFREE (call_clobbered_vars);
533 call_clobbered_vars = NULL;
534 aliases_computed_p = false;
538 /* Return true if EXPR is a useless type conversion, otherwise return
539 false. */
541 bool
542 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
544 /* If the inner and outer types are effectively the same, then
545 strip the type conversion and enter the equivalence into
546 the table. */
547 if (inner_type == outer_type
548 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
549 return true;
551 /* If both types are pointers and the outer type is a (void *), then
552 the conversion is not necessary. The opposite is not true since
553 that conversion would result in a loss of information if the
554 equivalence was used. Consider an indirect function call where
555 we need to know the exact type of the function to correctly
556 implement the ABI. */
557 else if (POINTER_TYPE_P (inner_type)
558 && POINTER_TYPE_P (outer_type)
559 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
560 return true;
562 /* Pointers and references are equivalent once we get to GENERIC,
563 so strip conversions that just switch between them. */
564 else if (POINTER_TYPE_P (inner_type)
565 && POINTER_TYPE_P (outer_type)
566 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
567 TREE_TYPE (outer_type)))
568 return true;
570 /* If both the inner and outer types are integral types, then the
571 conversion is not necessary if they have the same mode and
572 signedness and precision. Note that type _Bool can have size of
573 4 (only happens on powerpc-darwin right now but can happen on any
574 target that defines BOOL_TYPE_SIZE to be INT_TYPE_SIZE) and a
575 precision of 1 while unsigned int is the same expect for a
576 precision of 4 so testing of precision is necessary. */
577 else if (INTEGRAL_TYPE_P (inner_type)
578 && INTEGRAL_TYPE_P (outer_type)
579 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
580 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
581 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
582 return true;
584 /* Recurse for complex types. */
585 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
586 && TREE_CODE (outer_type) == COMPLEX_TYPE
587 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
588 TREE_TYPE (inner_type)))
589 return true;
591 return false;
594 /* Return true if EXPR is a useless type conversion, otherwise return
595 false. */
597 bool
598 tree_ssa_useless_type_conversion (tree expr)
600 /* If we have an assignment that merely uses a NOP_EXPR to change
601 the top of the RHS to the type of the LHS and the type conversion
602 is "safe", then strip away the type conversion so that we can
603 enter LHS = RHS into the const_and_copies table. */
604 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR)
605 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
606 TREE_TYPE (TREE_OPERAND (expr,
607 0)));
610 return false;
614 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
615 described in walk_use_def_chains. VISITED is a bitmap used to mark
616 visited SSA_NAMEs to avoid infinite loops. */
618 static bool
619 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
620 bitmap visited)
622 tree def_stmt;
624 if (bitmap_bit_p (visited, SSA_NAME_VERSION (var)))
625 return false;
627 bitmap_set_bit (visited, SSA_NAME_VERSION (var));
629 def_stmt = SSA_NAME_DEF_STMT (var);
631 if (TREE_CODE (def_stmt) != PHI_NODE)
633 /* If we reached the end of the use-def chain, call FN. */
634 return (*fn) (var, def_stmt, data);
636 else
638 int i;
640 /* Otherwise, follow use-def links out of each PHI argument and call
641 FN after visiting each one. */
642 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
644 tree arg = PHI_ARG_DEF (def_stmt, i);
645 if (TREE_CODE (arg) == SSA_NAME
646 && walk_use_def_chains_1 (arg, fn, data, visited))
647 return true;
649 if ((*fn) (arg, def_stmt, data))
650 return true;
653 return false;
658 /* Walk use-def chains starting at the SSA variable VAR. Call function FN
659 at each reaching definition found. FN takes three arguments: VAR, its
660 defining statement (DEF_STMT) and a generic pointer to whatever state
661 information that FN may want to maintain (DATA). FN is able to stop the
662 walk by returning true, otherwise in order to continue the walk, FN
663 should return false.
665 Note, that if DEF_STMT is a PHI node, the semantics are slightly
666 different. For each argument ARG of the PHI node, this function will:
668 1- Walk the use-def chains for ARG.
669 2- Call (*FN) (ARG, PHI, DATA).
671 Note how the first argument to FN is no longer the original variable
672 VAR, but the PHI argument currently being examined. If FN wants to get
673 at VAR, it should call PHI_RESULT (PHI). */
675 void
676 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data)
678 tree def_stmt;
680 #if defined ENABLE_CHECKING
681 if (TREE_CODE (var) != SSA_NAME)
682 abort ();
683 #endif
685 def_stmt = SSA_NAME_DEF_STMT (var);
687 /* We only need to recurse if the reaching definition comes from a PHI
688 node. */
689 if (TREE_CODE (def_stmt) != PHI_NODE)
690 (*fn) (var, def_stmt, data);
691 else
693 bitmap visited = BITMAP_XMALLOC ();
694 walk_use_def_chains_1 (var, fn, data, visited);
695 BITMAP_XFREE (visited);
699 /* Replaces VAR with REPL in memory reference expression *X in
700 statement STMT. */
702 static void
703 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
705 tree new_var, ass_stmt, addr_var;
706 basic_block bb;
707 block_stmt_iterator bsi;
709 /* There is nothing special to handle in the other cases. */
710 if (TREE_CODE (repl) != ADDR_EXPR)
711 return;
712 addr_var = TREE_OPERAND (repl, 0);
714 while (TREE_CODE (*x) == ARRAY_REF
715 || TREE_CODE (*x) == COMPONENT_REF
716 || TREE_CODE (*x) == BIT_FIELD_REF)
717 x = &TREE_OPERAND (*x, 0);
719 if (TREE_CODE (*x) != INDIRECT_REF
720 || TREE_OPERAND (*x, 0) != var)
721 return;
723 modify_stmt (stmt);
724 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
726 *x = addr_var;
727 mark_new_vars_to_rename (stmt, vars_to_rename);
728 return;
731 /* Frontends sometimes produce expressions like *&a instead of a[0].
732 Create a temporary variable to handle this case. */
733 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
734 new_var = duplicate_ssa_name (var, ass_stmt);
735 TREE_OPERAND (*x, 0) = new_var;
736 TREE_OPERAND (ass_stmt, 0) = new_var;
738 bb = bb_for_stmt (stmt);
739 tree_block_label (bb);
740 bsi = bsi_after_labels (bb);
741 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
743 mark_new_vars_to_rename (stmt, vars_to_rename);
746 /* Replaces immediate uses of VAR by REPL. */
748 static void
749 replace_immediate_uses (tree var, tree repl)
751 use_optype uses;
752 vuse_optype vuses;
753 v_may_def_optype v_may_defs;
754 int i, j, n;
755 dataflow_t df;
756 tree stmt;
757 stmt_ann_t ann;
758 bool mark_new_vars;
760 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
761 n = num_immediate_uses (df);
763 for (i = 0; i < n; i++)
765 stmt = immediate_use (df, i);
766 ann = stmt_ann (stmt);
768 if (TREE_CODE (stmt) == PHI_NODE)
770 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
771 if (PHI_ARG_DEF (stmt, j) == var)
773 SET_PHI_ARG_DEF (stmt, j, repl);
774 if (TREE_CODE (repl) == SSA_NAME
775 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
776 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
779 continue;
782 get_stmt_operands (stmt);
783 mark_new_vars = false;
784 if (is_gimple_reg (SSA_NAME_VAR (var)))
786 if (TREE_CODE (stmt) == MODIFY_EXPR)
788 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
789 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
792 uses = USE_OPS (ann);
793 for (j = 0; j < (int) NUM_USES (uses); j++)
794 if (USE_OP (uses, j) == var)
796 propagate_value (USE_OP_PTR (uses, j), repl);
797 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
800 else
802 vuses = VUSE_OPS (ann);
803 for (j = 0; j < (int) NUM_VUSES (vuses); j++)
804 if (VUSE_OP (vuses, j) == var)
805 propagate_value (VUSE_OP_PTR (vuses, j), repl);
807 v_may_defs = V_MAY_DEF_OPS (ann);
808 for (j = 0; j < (int) NUM_V_MAY_DEFS (v_may_defs); j++)
809 if (V_MAY_DEF_OP (v_may_defs, j) == var)
810 propagate_value (V_MAY_DEF_OP_PTR (v_may_defs, j), repl);
813 /* If REPL is a pointer, it may have different memory tags associated
814 with it. For instance, VAR may have had a name tag while REPL
815 only had a type tag. In these cases, the virtual operands (if
816 any) in the statement will refer to different symbols which need
817 to be renamed. */
818 if (mark_new_vars)
819 mark_new_vars_to_rename (stmt, vars_to_rename);
820 else
821 modify_stmt (stmt);
825 /* Gets the value VAR is equivalent to according to EQ_TO. */
827 static tree
828 get_eq_name (tree *eq_to, tree var)
830 unsigned ver;
831 tree val = var;
833 while (TREE_CODE (val) == SSA_NAME)
835 ver = SSA_NAME_VERSION (val);
836 if (!eq_to[ver])
837 break;
839 val = eq_to[ver];
842 while (TREE_CODE (var) == SSA_NAME)
844 ver = SSA_NAME_VERSION (var);
845 if (!eq_to[ver])
846 break;
848 var = eq_to[ver];
849 eq_to[ver] = val;
852 return val;
855 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
856 its result is redundant to to EQ_TO array. */
858 static void
859 check_phi_redundancy (tree phi, tree *eq_to)
861 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
862 unsigned i, ver = SSA_NAME_VERSION (res), n;
863 dataflow_t df;
865 /* It is unlikely that such large phi node would be redundant. */
866 if (PHI_NUM_ARGS (phi) > 16)
867 return;
869 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
871 def = PHI_ARG_DEF (phi, i);
873 if (TREE_CODE (def) == SSA_NAME)
875 def = get_eq_name (eq_to, def);
876 if (def == res)
877 continue;
880 if (val
881 && !operand_equal_p (val, def, 0))
882 return;
884 val = def;
887 /* At least one of the arguments should not be equal to the result, or
888 something strange is happening. */
889 if (!val)
890 abort ();
892 if (get_eq_name (eq_to, res) == val)
893 return;
895 if (!may_propagate_copy (res, val))
896 return;
898 eq_to[ver] = val;
900 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
901 n = num_immediate_uses (df);
903 for (i = 0; i < n; i++)
905 stmt = immediate_use (df, i);
907 if (TREE_CODE (stmt) == PHI_NODE)
908 check_phi_redundancy (stmt, eq_to);
912 /* Removes redundant phi nodes.
914 A redundant PHI node is a PHI node where all of its PHI arguments
915 are the same value, excluding any PHI arguments which are the same
916 as the PHI result.
918 A redundant PHI node is effectively a copy, so we forward copy propagate
919 which removes all uses of the destination of the PHI node then
920 finally we delete the redundant PHI node.
922 Note that if we can not copy propagate the PHI node, then the PHI
923 will not be removed. Thus we do not have to worry about dependencies
924 between PHIs and the problems serializing PHIs into copies creates.
926 The most important effect of this pass is to remove degenerate PHI
927 nodes created by removing unreachable code. */
929 static void
930 kill_redundant_phi_nodes (void)
932 tree *eq_to;
933 unsigned i, old_num_ssa_names;
934 basic_block bb;
935 tree phi, var, repl, stmt;
937 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
938 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
939 other value, it may be necessary to follow the chain till the final value.
940 We perform path shortening (replacing the entries of the EQ_TO array with
941 heads of these chains) whenever we access the field to prevent quadratic
942 complexity (probably would not occur in practice anyway, but let us play
943 it safe). */
944 eq_to = xcalloc (num_ssa_names, sizeof (tree));
946 /* We have had cases where computing immediate uses takes a
947 significant amount of compile time. If we run into such
948 problems here, we may want to only compute immediate uses for
949 a subset of all the SSA_NAMEs instead of computing it for
950 all of the SSA_NAMEs. */
951 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
952 old_num_ssa_names = num_ssa_names;
954 FOR_EACH_BB (bb)
956 for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
958 var = PHI_RESULT (phi);
959 check_phi_redundancy (phi, eq_to);
963 /* Now propagate the values. */
964 for (i = 0; i < old_num_ssa_names; i++)
966 if (!ssa_name (i))
967 continue;
969 repl = get_eq_name (eq_to, ssa_name (i));
970 if (repl != ssa_name (i))
971 replace_immediate_uses (ssa_name (i), repl);
974 /* And remove the dead phis. */
975 for (i = 0; i < old_num_ssa_names; i++)
977 if (!ssa_name (i))
978 continue;
980 repl = get_eq_name (eq_to, ssa_name (i));
981 if (repl != ssa_name (i))
983 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
984 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
988 free_df ();
989 free (eq_to);
992 struct tree_opt_pass pass_redundant_phi =
994 "redphi", /* name */
995 NULL, /* gate */
996 kill_redundant_phi_nodes, /* execute */
997 NULL, /* sub */
998 NULL, /* next */
999 0, /* static_pass_number */
1000 0, /* tv_id */
1001 PROP_cfg | PROP_ssa, /* properties_required */
1002 0, /* properties_provided */
1003 0, /* properties_destroyed */
1004 0, /* todo_flags_start */
1005 TODO_dump_func | TODO_rename_vars
1006 | TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
1009 /* Emit warnings for uninitialized variables. This is done in two passes.
1011 The first pass notices real uses of SSA names with default definitions.
1012 Such uses are unconditionally uninitialized, and we can be certain that
1013 such a use is a mistake. This pass is run before most optimizations,
1014 so that we catch as many as we can.
1016 The second pass follows PHI nodes to find uses that are potentially
1017 uninitialized. In this case we can't necessarily prove that the use
1018 is really uninitialized. This pass is run after most optimizations,
1019 so that we thread as many jumps and possible, and delete as much dead
1020 code as possible, in order to reduce false positives. We also look
1021 again for plain uninitialized variables, since optimization may have
1022 changed conditionally uninitialized to unconditionally uninitialized. */
1024 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1025 warning text is in MSGID and LOCUS may contain a location or be null. */
1027 static void
1028 warn_uninit (tree t, const char *msgid, location_t *locus)
1030 tree var = SSA_NAME_VAR (t);
1031 tree def = SSA_NAME_DEF_STMT (t);
1033 /* Default uses (indicated by an empty definition statement),
1034 are uninitialized. */
1035 if (!IS_EMPTY_STMT (def))
1036 return;
1038 /* Except for PARMs of course, which are always initialized. */
1039 if (TREE_CODE (var) == PARM_DECL)
1040 return;
1042 /* Hard register variables get their initial value from the ether. */
1043 if (DECL_HARD_REGISTER (var))
1044 return;
1046 /* TREE_NO_WARNING either means we already warned, or the front end
1047 wishes to suppress the warning. */
1048 if (TREE_NO_WARNING (var))
1049 return;
1051 if (!locus)
1052 locus = &DECL_SOURCE_LOCATION (var);
1053 warning (msgid, locus, var);
1054 TREE_NO_WARNING (var) = 1;
1057 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1058 and warn about them. */
1060 static tree
1061 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1063 location_t *locus = data;
1064 tree t = *tp;
1066 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1067 if (TREE_CODE (t) == SSA_NAME)
1069 warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
1070 *walk_subtrees = 0;
1072 else if (DECL_P (t) || TYPE_P (t))
1073 *walk_subtrees = 0;
1075 return NULL_TREE;
1078 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1079 and warn about them. */
1081 static void
1082 warn_uninitialized_phi (tree phi)
1084 int i, n = PHI_NUM_ARGS (phi);
1086 /* Don't look at memory tags. */
1087 if (!is_gimple_reg (PHI_RESULT (phi)))
1088 return;
1090 for (i = 0; i < n; ++i)
1092 tree op = PHI_ARG_DEF (phi, i);
1093 if (TREE_CODE (op) == SSA_NAME)
1094 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
1095 NULL);
1099 static void
1100 execute_early_warn_uninitialized (void)
1102 block_stmt_iterator bsi;
1103 basic_block bb;
1105 FOR_EACH_BB (bb)
1106 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1107 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1108 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1111 static void
1112 execute_late_warn_uninitialized (void)
1114 basic_block bb;
1115 tree phi;
1117 /* Re-do the plain uninitialized variable check, as optimization may have
1118 straightened control flow. Do this first so that we don't accidentally
1119 get a "may be" warning when we'd have seen an "is" warning later. */
1120 execute_early_warn_uninitialized ();
1122 FOR_EACH_BB (bb)
1123 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1124 warn_uninitialized_phi (phi);
1127 static bool
1128 gate_warn_uninitialized (void)
1130 return warn_uninitialized != 0;
1133 struct tree_opt_pass pass_early_warn_uninitialized =
1135 NULL, /* name */
1136 gate_warn_uninitialized, /* gate */
1137 execute_early_warn_uninitialized, /* execute */
1138 NULL, /* sub */
1139 NULL, /* next */
1140 0, /* static_pass_number */
1141 0, /* tv_id */
1142 PROP_ssa, /* properties_required */
1143 0, /* properties_provided */
1144 0, /* properties_destroyed */
1145 0, /* todo_flags_start */
1146 0 /* todo_flags_finish */
1149 struct tree_opt_pass pass_late_warn_uninitialized =
1151 NULL, /* name */
1152 gate_warn_uninitialized, /* gate */
1153 execute_late_warn_uninitialized, /* execute */
1154 NULL, /* sub */
1155 NULL, /* next */
1156 0, /* static_pass_number */
1157 0, /* tv_id */
1158 PROP_ssa, /* properties_required */
1159 0, /* properties_provided */
1160 0, /* properties_destroyed */
1161 0, /* todo_flags_start */
1162 0 /* todo_flags_finish */