2004-08-14 Casey Marshall <csm@gnu.org>
[official-gcc.git] / gcc / tree-ssa.c
blobeb6f9676617370d7ae1222f0c426b94d93dbda7b
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 SSA_NAME is malformed and mark it visited.
107 IS_VIRTUAL is true if this SSA_NAME was found inside a virtual
108 operand. */
110 static bool
111 verify_ssa_name (tree ssa_name, bool is_virtual)
113 TREE_VISITED (ssa_name) = 1;
115 if (TREE_CODE (ssa_name) != SSA_NAME)
117 error ("Expected an SSA_NAME object");
118 return true;
121 if (TREE_TYPE (ssa_name) != TREE_TYPE (SSA_NAME_VAR (ssa_name)))
123 error ("Type mismatch between an SSA_NAME and its symbol.");
124 return true;
127 if (SSA_NAME_IN_FREE_LIST (ssa_name))
129 error ("Found an SSA_NAME that had been released into the free pool");
130 return true;
133 if (is_virtual && is_gimple_reg (ssa_name))
135 error ("Found a virtual definition for a GIMPLE register");
136 return true;
139 if (!is_virtual && !is_gimple_reg (ssa_name))
141 error ("Found a real definition for a non-register");
142 return true;
145 return false;
149 /* Return true if the definition of SSA_NAME at block BB is malformed.
151 STMT is the statement where SSA_NAME is created.
153 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME
154 version numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set,
155 it means that the block in that array slot contains the
156 definition of SSA_NAME.
158 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
159 V_MUST_DEF. */
161 static bool
162 verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
163 tree stmt, bool is_virtual)
165 if (verify_ssa_name (ssa_name, is_virtual))
166 goto err;
168 if (definition_block[SSA_NAME_VERSION (ssa_name)])
170 error ("SSA_NAME created in two different blocks %i and %i",
171 definition_block[SSA_NAME_VERSION (ssa_name)]->index, bb->index);
172 goto err;
175 definition_block[SSA_NAME_VERSION (ssa_name)] = bb;
177 if (SSA_NAME_DEF_STMT (ssa_name) != stmt)
179 error ("SSA_NAME_DEF_STMT is wrong");
180 fprintf (stderr, "Expected definition statement:\n");
181 debug_generic_stmt (SSA_NAME_DEF_STMT (ssa_name));
182 fprintf (stderr, "\nActual definition statement:\n");
183 debug_generic_stmt (stmt);
184 goto err;
187 return false;
189 err:
190 fprintf (stderr, "while verifying SSA_NAME ");
191 print_generic_expr (stderr, ssa_name, 0);
192 fprintf (stderr, " in statement\n");
193 debug_generic_stmt (stmt);
195 return true;
199 /* Return true if the use of SSA_NAME at statement STMT in block BB is
200 malformed.
202 DEF_BB is the block where SSA_NAME was found to be created.
204 IDOM contains immediate dominator information for the flowgraph.
206 CHECK_ABNORMAL is true if the caller wants to check whether this use
207 is flowing through an abnormal edge (only used when checking PHI
208 arguments).
210 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
211 V_MUST_DEF. */
213 static bool
214 verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
215 tree stmt, bool check_abnormal, bool is_virtual)
217 bool err = false;
219 err = verify_ssa_name (ssa_name, is_virtual);
221 if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (ssa_name))
222 && var_ann (SSA_NAME_VAR (ssa_name))->default_def == ssa_name)
223 ; /* Default definitions have empty statements. Nothing to do. */
224 else if (!def_bb)
226 error ("Missing definition");
227 err = true;
229 else if (bb != def_bb
230 && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
232 error ("Definition in block %i does not dominate use in block %i",
233 def_bb->index, bb->index);
234 err = true;
237 if (check_abnormal
238 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
240 error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
241 err = true;
244 if (err)
246 fprintf (stderr, "for SSA_NAME: ");
247 debug_generic_expr (ssa_name);
248 fprintf (stderr, "in statement:\n");
249 debug_generic_stmt (stmt);
252 return err;
256 /* Return true if any of the arguments for PHI node PHI at block BB is
257 malformed.
259 IDOM contains immediate dominator information for the flowgraph.
261 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
262 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
263 block in that array slot contains the definition of SSA_NAME. */
265 static bool
266 verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
268 edge e;
269 bool err = false;
270 int i, phi_num_args = PHI_NUM_ARGS (phi);
272 /* Mark all the incoming edges. */
273 for (e = bb->pred; e; e = e->pred_next)
274 e->aux = (void *) 1;
276 for (i = 0; i < phi_num_args; i++)
278 tree op = PHI_ARG_DEF (phi, i);
280 e = PHI_ARG_EDGE (phi, i);
282 if (TREE_CODE (op) == SSA_NAME)
283 err = verify_use (e->src, definition_block[SSA_NAME_VERSION (op)], op,
284 phi, e->flags & EDGE_ABNORMAL,
285 !is_gimple_reg (PHI_RESULT (phi)));
287 if (e->dest != bb)
289 error ("Wrong edge %d->%d for PHI argument\n",
290 e->src->index, e->dest->index, bb->index);
291 err = true;
294 if (e->aux == (void *) 0)
296 error ("PHI argument flowing through dead edge %d->%d\n",
297 e->src->index, e->dest->index);
298 err = true;
301 if (e->aux == (void *) 2)
303 error ("PHI argument duplicated for edge %d->%d\n", e->src->index,
304 e->dest->index);
305 err = true;
308 if (err)
310 fprintf (stderr, "PHI argument\n");
311 debug_generic_stmt (op);
312 goto error;
315 e->aux = (void *) 2;
318 for (e = bb->pred; e; e = e->pred_next)
320 if (e->aux != (void *) 2)
322 error ("No argument flowing through edge %d->%d\n", e->src->index,
323 e->dest->index);
324 err = true;
325 goto error;
327 e->aux = (void *) 0;
330 error:
331 if (err)
333 fprintf (stderr, "for PHI node\n");
334 debug_generic_stmt (phi);
338 return err;
342 static void
343 verify_flow_insensitive_alias_info (void)
345 size_t i;
346 tree var;
347 bitmap visited = BITMAP_XMALLOC ();
349 for (i = 0; i < num_referenced_vars; i++)
351 size_t j;
352 var_ann_t ann;
353 varray_type may_aliases;
355 var = referenced_var (i);
356 ann = var_ann (var);
357 may_aliases = ann->may_aliases;
359 for (j = 0; may_aliases && j < VARRAY_ACTIVE_SIZE (may_aliases); j++)
361 tree alias = VARRAY_TREE (may_aliases, j);
363 bitmap_set_bit (visited, var_ann (alias)->uid);
365 if (!may_be_aliased (alias))
367 error ("Non-addressable variable inside an alias set.");
368 debug_variable (alias);
369 goto err;
374 for (i = 0; i < num_referenced_vars; i++)
376 var_ann_t ann;
378 var = referenced_var (i);
379 ann = var_ann (var);
381 if (ann->mem_tag_kind == NOT_A_TAG
382 && ann->is_alias_tag
383 && !bitmap_bit_p (visited, ann->uid))
385 error ("Addressable variable that is an alias tag but is not in any alias set.");
386 goto err;
390 BITMAP_XFREE (visited);
391 return;
393 err:
394 debug_variable (var);
395 internal_error ("verify_flow_insensitive_alias_info failed.");
399 static void
400 verify_flow_sensitive_alias_info (void)
402 size_t i;
403 tree ptr;
405 for (i = 1; i < num_ssa_names; i++)
407 var_ann_t ann;
408 struct ptr_info_def *pi;
410 ptr = ssa_name (i);
411 ann = var_ann (SSA_NAME_VAR (ptr));
412 pi = SSA_NAME_PTR_INFO (ptr);
414 /* We only care for pointers that are actually referenced in the
415 program. */
416 if (!TREE_VISITED (ptr) || !POINTER_TYPE_P (TREE_TYPE (ptr)))
417 continue;
419 /* RESULT_DECL is special. If it's a GIMPLE register, then it
420 is only written-to only once in the return statement.
421 Otherwise, aggregate RESULT_DECLs may be written-to more than
422 once in virtual operands. */
423 if (TREE_CODE (SSA_NAME_VAR (ptr)) == RESULT_DECL
424 && is_gimple_reg (ptr))
425 continue;
427 if (pi == NULL)
428 continue;
430 if (pi->is_dereferenced && !pi->name_mem_tag && !ann->type_mem_tag)
432 error ("Dereferenced pointers should have a name or a type tag");
433 goto err;
436 if (pi->pt_anything && (pi->pt_malloc || pi->pt_vars))
438 error ("Pointers that point to anything should not point to malloc or other vars");
439 goto err;
442 if (pi->pt_malloc && pi->pt_vars)
444 error ("Pointers pointing to malloc get a unique tag and cannot point to other vars");
445 goto err;
448 if (pi->name_mem_tag
449 && !pi->pt_malloc
450 && (pi->pt_vars == NULL
451 || bitmap_first_set_bit (pi->pt_vars) < 0))
453 error ("Pointers with a memory tag, should have points-to sets or point to malloc");
454 goto err;
457 if (pi->value_escapes_p
458 && pi->name_mem_tag
459 && !is_call_clobbered (pi->name_mem_tag))
461 error ("Pointer escapes but its name tag is not call-clobbered.");
462 goto err;
465 if (pi->name_mem_tag && pi->pt_vars)
467 size_t j;
469 for (j = i + 1; j < num_ssa_names; j++)
471 tree ptr2 = ssa_name (j);
472 struct ptr_info_def *pi2 = SSA_NAME_PTR_INFO (ptr2);
474 if (!TREE_VISITED (ptr2) || !POINTER_TYPE_P (TREE_TYPE (ptr2)))
475 continue;
477 if (pi2
478 && pi2->name_mem_tag
479 && pi2->pt_vars
480 && bitmap_first_set_bit (pi2->pt_vars) >= 0
481 && pi->name_mem_tag != pi2->name_mem_tag
482 && bitmap_equal_p (pi->pt_vars, pi2->pt_vars))
484 error ("Two pointers with different name tags and identical points-to sets");
485 debug_variable (ptr2);
486 goto err;
492 return;
494 err:
495 debug_variable (ptr);
496 internal_error ("verify_flow_sensitive_alias_info failed.");
500 /* Verify the consistency of aliasing information. */
502 static void
503 verify_alias_info (void)
505 verify_flow_sensitive_alias_info ();
506 verify_flow_insensitive_alias_info ();
510 /* Verify common invariants in the SSA web.
511 TODO: verify the variable annotations. */
513 void
514 verify_ssa (void)
516 size_t i;
517 basic_block bb;
518 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
520 timevar_push (TV_TREE_SSA_VERIFY);
522 /* Keep track of SSA names present in the IL. */
523 for (i = 1; i < num_ssa_names; i++)
524 TREE_VISITED (ssa_name (i)) = 0;
526 calculate_dominance_info (CDI_DOMINATORS);
528 /* Verify and register all the SSA_NAME definitions found in the
529 function. */
530 FOR_EACH_BB (bb)
532 tree phi;
533 block_stmt_iterator bsi;
535 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
536 if (verify_def (bb, definition_block, PHI_RESULT (phi), phi,
537 !is_gimple_reg (PHI_RESULT (phi))))
538 goto err;
540 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
542 tree stmt;
543 stmt_ann_t ann;
544 unsigned int j;
545 v_may_def_optype v_may_defs;
546 v_must_def_optype v_must_defs;
547 def_optype defs;
549 stmt = bsi_stmt (bsi);
550 ann = stmt_ann (stmt);
551 get_stmt_operands (stmt);
553 v_may_defs = V_MAY_DEF_OPS (ann);
554 if (ann->makes_aliased_stores && NUM_V_MAY_DEFS (v_may_defs) == 0)
556 error ("Statement makes aliased stores, but has no V_MAY_DEFS");
557 debug_generic_stmt (stmt);
558 goto err;
561 for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
563 tree op = V_MAY_DEF_RESULT (v_may_defs, j);
564 if (verify_def (bb, definition_block, op, stmt, true))
565 goto err;
568 v_must_defs = STMT_V_MUST_DEF_OPS (stmt);
569 for (j = 0; j < NUM_V_MUST_DEFS (v_must_defs); j++)
571 tree op = V_MUST_DEF_OP (v_must_defs, j);
572 if (verify_def (bb, definition_block, op, stmt, true))
573 goto err;
576 defs = DEF_OPS (ann);
577 for (j = 0; j < NUM_DEFS (defs); j++)
579 tree op = DEF_OP (defs, j);
580 if (verify_def (bb, definition_block, op, stmt, false))
581 goto err;
587 /* Now verify all the uses and make sure they agree with the definitions
588 found in the previous pass. */
589 FOR_EACH_BB (bb)
591 edge e;
592 tree phi;
593 block_stmt_iterator bsi;
595 /* Make sure that all edges have a clear 'aux' field. */
596 for (e = bb->pred; e; e = e->pred_next)
598 if (e->aux)
600 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
601 e->dest->index);
602 goto err;
606 /* Verify the arguments for every PHI node in the block. */
607 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
608 if (verify_phi_args (phi, bb, definition_block))
609 goto err;
611 /* Now verify all the uses and vuses in every statement of the block. */
612 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
614 tree stmt = bsi_stmt (bsi);
615 stmt_ann_t ann = stmt_ann (stmt);
616 unsigned int j;
617 vuse_optype vuses;
618 v_may_def_optype v_may_defs;
619 use_optype uses;
621 vuses = VUSE_OPS (ann);
622 for (j = 0; j < NUM_VUSES (vuses); j++)
624 tree op = VUSE_OP (vuses, j);
625 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
626 op, stmt, false, true))
627 goto err;
630 v_may_defs = V_MAY_DEF_OPS (ann);
631 for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
633 tree op = V_MAY_DEF_OP (v_may_defs, j);
634 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
635 op, stmt, false, true))
636 goto err;
639 uses = USE_OPS (ann);
640 for (j = 0; j < NUM_USES (uses); j++)
642 tree op = USE_OP (uses, j);
643 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
644 op, stmt, false, false))
645 goto err;
650 /* Finally, verify alias information. */
651 verify_alias_info ();
653 free (definition_block);
654 timevar_pop (TV_TREE_SSA_VERIFY);
655 return;
657 err:
658 internal_error ("verify_ssa failed.");
662 /* Initialize global DFA and SSA structures. */
664 void
665 init_tree_ssa (void)
667 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
668 call_clobbered_vars = BITMAP_XMALLOC ();
669 addressable_vars = BITMAP_XMALLOC ();
670 init_ssa_operands ();
671 init_ssanames ();
672 init_phinodes ();
673 global_var = NULL_TREE;
677 /* Deallocate memory associated with SSA data structures for FNDECL. */
679 void
680 delete_tree_ssa (void)
682 size_t i;
683 basic_block bb;
684 block_stmt_iterator bsi;
686 /* Remove annotations from every tree in the function. */
687 FOR_EACH_BB (bb)
688 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
689 bsi_stmt (bsi)->common.ann = NULL;
691 /* Remove annotations from every referenced variable. */
692 if (referenced_vars)
694 for (i = 0; i < num_referenced_vars; i++)
695 referenced_var (i)->common.ann = NULL;
696 referenced_vars = NULL;
699 fini_ssanames ();
700 fini_phinodes ();
701 fini_ssa_operands ();
703 global_var = NULL_TREE;
704 BITMAP_XFREE (call_clobbered_vars);
705 call_clobbered_vars = NULL;
706 BITMAP_XFREE (addressable_vars);
707 addressable_vars = NULL;
711 /* Return true if EXPR is a useless type conversion, otherwise return
712 false. */
714 bool
715 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
717 /* If the inner and outer types are effectively the same, then
718 strip the type conversion and enter the equivalence into
719 the table. */
720 if (inner_type == outer_type
721 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
722 return true;
724 /* If both types are pointers and the outer type is a (void *), then
725 the conversion is not necessary. The opposite is not true since
726 that conversion would result in a loss of information if the
727 equivalence was used. Consider an indirect function call where
728 we need to know the exact type of the function to correctly
729 implement the ABI. */
730 else if (POINTER_TYPE_P (inner_type)
731 && POINTER_TYPE_P (outer_type)
732 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
733 return true;
735 /* Pointers and references are equivalent once we get to GENERIC,
736 so strip conversions that just switch between them. */
737 else if (POINTER_TYPE_P (inner_type)
738 && POINTER_TYPE_P (outer_type)
739 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
740 TREE_TYPE (outer_type)))
741 return true;
743 /* If both the inner and outer types are integral types, then the
744 conversion is not necessary if they have the same mode and
745 signedness and precision, and both or neither are boolean. Some
746 code assumes an invariant that boolean types stay boolean and do
747 not become 1-bit bit-field types. Note that types with precision
748 not using all bits of the mode (such as bit-field types in C)
749 mean that testing of precision is necessary. */
750 else if (INTEGRAL_TYPE_P (inner_type)
751 && INTEGRAL_TYPE_P (outer_type)
752 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
753 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
754 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
756 bool first_boolean = (TREE_CODE (inner_type) == BOOLEAN_TYPE);
757 bool second_boolean = (TREE_CODE (outer_type) == BOOLEAN_TYPE);
758 if (first_boolean == second_boolean)
759 return true;
762 /* Recurse for complex types. */
763 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
764 && TREE_CODE (outer_type) == COMPLEX_TYPE
765 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
766 TREE_TYPE (inner_type)))
767 return true;
769 return false;
772 /* Return true if EXPR is a useless type conversion, otherwise return
773 false. */
775 bool
776 tree_ssa_useless_type_conversion (tree expr)
778 /* If we have an assignment that merely uses a NOP_EXPR to change
779 the top of the RHS to the type of the LHS and the type conversion
780 is "safe", then strip away the type conversion so that we can
781 enter LHS = RHS into the const_and_copies table. */
782 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR
783 || TREE_CODE (expr) == VIEW_CONVERT_EXPR
784 || TREE_CODE (expr) == NON_LVALUE_EXPR)
785 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
786 TREE_TYPE (TREE_OPERAND (expr,
787 0)));
790 return false;
794 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
795 described in walk_use_def_chains.
797 VISITED is a bitmap used to mark visited SSA_NAMEs to avoid
798 infinite loops.
800 IS_DFS is true if the caller wants to perform a depth-first search
801 when visiting PHI nodes. A DFS will visit each PHI argument and
802 call FN after each one. Otherwise, all the arguments are
803 visited first and then FN is called with each of the visited
804 arguments in a separate pass. */
806 static bool
807 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
808 bitmap visited, bool is_dfs)
810 tree def_stmt;
812 if (bitmap_bit_p (visited, SSA_NAME_VERSION (var)))
813 return false;
815 bitmap_set_bit (visited, SSA_NAME_VERSION (var));
817 def_stmt = SSA_NAME_DEF_STMT (var);
819 if (TREE_CODE (def_stmt) != PHI_NODE)
821 /* If we reached the end of the use-def chain, call FN. */
822 return fn (var, def_stmt, data);
824 else
826 int i;
828 /* When doing a breadth-first search, call FN before following the
829 use-def links for each argument. */
830 if (!is_dfs)
831 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
832 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
833 return true;
835 /* Follow use-def links out of each PHI argument. */
836 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
838 tree arg = PHI_ARG_DEF (def_stmt, i);
839 if (TREE_CODE (arg) == SSA_NAME
840 && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
841 return true;
844 /* When doing a depth-first search, call FN after following the
845 use-def links for each argument. */
846 if (is_dfs)
847 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
848 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
849 return true;
852 return false;
857 /* Walk use-def chains starting at the SSA variable VAR. Call
858 function FN at each reaching definition found. FN takes three
859 arguments: VAR, its defining statement (DEF_STMT) and a generic
860 pointer to whatever state information that FN may want to maintain
861 (DATA). FN is able to stop the walk by returning true, otherwise
862 in order to continue the walk, FN should return false.
864 Note, that if DEF_STMT is a PHI node, the semantics are slightly
865 different. The first argument to FN is no longer the original
866 variable VAR, but the PHI argument currently being examined. If FN
867 wants to get at VAR, it should call PHI_RESULT (PHI).
869 If IS_DFS is true, this function will:
871 1- walk the use-def chains for all the PHI arguments, and,
872 2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
874 If IS_DFS is false, the two steps above are done in reverse order
875 (i.e., a breadth-first search). */
878 void
879 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
880 bool is_dfs)
882 tree def_stmt;
884 #if defined ENABLE_CHECKING
885 if (TREE_CODE (var) != SSA_NAME)
886 abort ();
887 #endif
889 def_stmt = SSA_NAME_DEF_STMT (var);
891 /* We only need to recurse if the reaching definition comes from a PHI
892 node. */
893 if (TREE_CODE (def_stmt) != PHI_NODE)
894 (*fn) (var, def_stmt, data);
895 else
897 bitmap visited = BITMAP_XMALLOC ();
898 walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
899 BITMAP_XFREE (visited);
904 /* Replaces VAR with REPL in memory reference expression *X in
905 statement STMT. */
907 static void
908 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
910 tree new_var, ass_stmt, addr_var;
911 basic_block bb;
912 block_stmt_iterator bsi;
914 /* There is nothing special to handle in the other cases. */
915 if (TREE_CODE (repl) != ADDR_EXPR)
916 return;
917 addr_var = TREE_OPERAND (repl, 0);
919 while (TREE_CODE (*x) == ARRAY_REF
920 || TREE_CODE (*x) == COMPONENT_REF
921 || TREE_CODE (*x) == BIT_FIELD_REF)
922 x = &TREE_OPERAND (*x, 0);
924 if (TREE_CODE (*x) != INDIRECT_REF
925 || TREE_OPERAND (*x, 0) != var)
926 return;
928 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
930 *x = addr_var;
931 mark_new_vars_to_rename (stmt, vars_to_rename);
932 return;
936 /* Frontends sometimes produce expressions like *&a instead of a[0].
937 Create a temporary variable to handle this case. */
938 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
939 new_var = duplicate_ssa_name (var, ass_stmt);
940 TREE_OPERAND (*x, 0) = new_var;
941 TREE_OPERAND (ass_stmt, 0) = new_var;
943 bb = bb_for_stmt (stmt);
944 tree_block_label (bb);
945 bsi = bsi_after_labels (bb);
946 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
948 mark_new_vars_to_rename (stmt, vars_to_rename);
951 /* Replaces immediate uses of VAR by REPL. */
953 static void
954 replace_immediate_uses (tree var, tree repl)
956 use_optype uses;
957 vuse_optype vuses;
958 v_may_def_optype v_may_defs;
959 int i, j, n;
960 dataflow_t df;
961 tree stmt;
962 stmt_ann_t ann;
963 bool mark_new_vars;
965 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
966 n = num_immediate_uses (df);
968 for (i = 0; i < n; i++)
970 stmt = immediate_use (df, i);
971 ann = stmt_ann (stmt);
973 if (TREE_CODE (stmt) == PHI_NODE)
975 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
976 if (PHI_ARG_DEF (stmt, j) == var)
978 SET_PHI_ARG_DEF (stmt, j, repl);
979 if (TREE_CODE (repl) == SSA_NAME
980 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
981 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
984 continue;
987 get_stmt_operands (stmt);
988 mark_new_vars = false;
989 if (is_gimple_reg (SSA_NAME_VAR (var)))
991 if (TREE_CODE (stmt) == MODIFY_EXPR)
993 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
994 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
997 uses = USE_OPS (ann);
998 for (j = 0; j < (int) NUM_USES (uses); j++)
999 if (USE_OP (uses, j) == var)
1001 propagate_value (USE_OP_PTR (uses, j), repl);
1002 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
1005 else
1007 vuses = VUSE_OPS (ann);
1008 for (j = 0; j < (int) NUM_VUSES (vuses); j++)
1009 if (VUSE_OP (vuses, j) == var)
1010 propagate_value (VUSE_OP_PTR (vuses, j), repl);
1012 v_may_defs = V_MAY_DEF_OPS (ann);
1013 for (j = 0; j < (int) NUM_V_MAY_DEFS (v_may_defs); j++)
1014 if (V_MAY_DEF_OP (v_may_defs, j) == var)
1015 propagate_value (V_MAY_DEF_OP_PTR (v_may_defs, j), repl);
1018 /* If REPL is a pointer, it may have different memory tags associated
1019 with it. For instance, VAR may have had a name tag while REPL
1020 only had a type tag. In these cases, the virtual operands (if
1021 any) in the statement will refer to different symbols which need
1022 to be renamed. */
1023 if (mark_new_vars)
1024 mark_new_vars_to_rename (stmt, vars_to_rename);
1025 else
1026 modify_stmt (stmt);
1030 /* Gets the value VAR is equivalent to according to EQ_TO. */
1032 static tree
1033 get_eq_name (tree *eq_to, tree var)
1035 unsigned ver;
1036 tree val = var;
1038 while (TREE_CODE (val) == SSA_NAME)
1040 ver = SSA_NAME_VERSION (val);
1041 if (!eq_to[ver])
1042 break;
1044 val = eq_to[ver];
1047 while (TREE_CODE (var) == SSA_NAME)
1049 ver = SSA_NAME_VERSION (var);
1050 if (!eq_to[ver])
1051 break;
1053 var = eq_to[ver];
1054 eq_to[ver] = val;
1057 return val;
1060 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
1061 its result is redundant to to EQ_TO array. */
1063 static void
1064 check_phi_redundancy (tree phi, tree *eq_to)
1066 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
1067 unsigned i, ver = SSA_NAME_VERSION (res), n;
1068 dataflow_t df;
1070 /* It is unlikely that such large phi node would be redundant. */
1071 if (PHI_NUM_ARGS (phi) > 16)
1072 return;
1074 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
1076 def = PHI_ARG_DEF (phi, i);
1078 if (TREE_CODE (def) == SSA_NAME)
1080 def = get_eq_name (eq_to, def);
1081 if (def == res)
1082 continue;
1085 if (val
1086 && !operand_equal_p (val, def, 0))
1087 return;
1089 val = def;
1092 /* At least one of the arguments should not be equal to the result, or
1093 something strange is happening. */
1094 if (!val)
1095 abort ();
1097 if (get_eq_name (eq_to, res) == val)
1098 return;
1100 if (!may_propagate_copy (res, val))
1101 return;
1103 eq_to[ver] = val;
1105 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
1106 n = num_immediate_uses (df);
1108 for (i = 0; i < n; i++)
1110 stmt = immediate_use (df, i);
1112 if (TREE_CODE (stmt) == PHI_NODE)
1113 check_phi_redundancy (stmt, eq_to);
1117 /* Removes redundant phi nodes.
1119 A redundant PHI node is a PHI node where all of its PHI arguments
1120 are the same value, excluding any PHI arguments which are the same
1121 as the PHI result.
1123 A redundant PHI node is effectively a copy, so we forward copy propagate
1124 which removes all uses of the destination of the PHI node then
1125 finally we delete the redundant PHI node.
1127 Note that if we can not copy propagate the PHI node, then the PHI
1128 will not be removed. Thus we do not have to worry about dependencies
1129 between PHIs and the problems serializing PHIs into copies creates.
1131 The most important effect of this pass is to remove degenerate PHI
1132 nodes created by removing unreachable code. */
1134 void
1135 kill_redundant_phi_nodes (void)
1137 tree *eq_to;
1138 unsigned i, old_num_ssa_names;
1139 basic_block bb;
1140 tree phi, var, repl, stmt;
1142 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
1143 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
1144 other value, it may be necessary to follow the chain till the final value.
1145 We perform path shortening (replacing the entries of the EQ_TO array with
1146 heads of these chains) whenever we access the field to prevent quadratic
1147 complexity (probably would not occur in practice anyway, but let us play
1148 it safe). */
1149 eq_to = xcalloc (num_ssa_names, sizeof (tree));
1151 /* We have had cases where computing immediate uses takes a
1152 significant amount of compile time. If we run into such
1153 problems here, we may want to only compute immediate uses for
1154 a subset of all the SSA_NAMEs instead of computing it for
1155 all of the SSA_NAMEs. */
1156 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
1157 old_num_ssa_names = num_ssa_names;
1159 FOR_EACH_BB (bb)
1161 for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
1163 var = PHI_RESULT (phi);
1164 check_phi_redundancy (phi, eq_to);
1168 /* Now propagate the values. */
1169 for (i = 0; i < old_num_ssa_names; i++)
1171 if (!ssa_name (i))
1172 continue;
1174 repl = get_eq_name (eq_to, ssa_name (i));
1175 if (repl != ssa_name (i))
1176 replace_immediate_uses (ssa_name (i), repl);
1179 /* And remove the dead phis. */
1180 for (i = 0; i < old_num_ssa_names; i++)
1182 if (!ssa_name (i))
1183 continue;
1185 repl = get_eq_name (eq_to, ssa_name (i));
1186 if (repl != ssa_name (i))
1188 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
1189 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
1193 free_df ();
1194 free (eq_to);
1197 struct tree_opt_pass pass_redundant_phi =
1199 "redphi", /* name */
1200 NULL, /* gate */
1201 kill_redundant_phi_nodes, /* execute */
1202 NULL, /* sub */
1203 NULL, /* next */
1204 0, /* static_pass_number */
1205 0, /* tv_id */
1206 PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
1207 0, /* properties_provided */
1208 0, /* properties_destroyed */
1209 0, /* todo_flags_start */
1210 TODO_dump_func | TODO_rename_vars
1211 | TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
1214 /* Emit warnings for uninitialized variables. This is done in two passes.
1216 The first pass notices real uses of SSA names with default definitions.
1217 Such uses are unconditionally uninitialized, and we can be certain that
1218 such a use is a mistake. This pass is run before most optimizations,
1219 so that we catch as many as we can.
1221 The second pass follows PHI nodes to find uses that are potentially
1222 uninitialized. In this case we can't necessarily prove that the use
1223 is really uninitialized. This pass is run after most optimizations,
1224 so that we thread as many jumps and possible, and delete as much dead
1225 code as possible, in order to reduce false positives. We also look
1226 again for plain uninitialized variables, since optimization may have
1227 changed conditionally uninitialized to unconditionally uninitialized. */
1229 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1230 warning text is in MSGID and LOCUS may contain a location or be null. */
1232 static void
1233 warn_uninit (tree t, const char *msgid, location_t *locus)
1235 tree var = SSA_NAME_VAR (t);
1236 tree def = SSA_NAME_DEF_STMT (t);
1238 /* Default uses (indicated by an empty definition statement),
1239 are uninitialized. */
1240 if (!IS_EMPTY_STMT (def))
1241 return;
1243 /* Except for PARMs of course, which are always initialized. */
1244 if (TREE_CODE (var) == PARM_DECL)
1245 return;
1247 /* Hard register variables get their initial value from the ether. */
1248 if (DECL_HARD_REGISTER (var))
1249 return;
1251 /* TREE_NO_WARNING either means we already warned, or the front end
1252 wishes to suppress the warning. */
1253 if (TREE_NO_WARNING (var))
1254 return;
1256 if (!locus)
1257 locus = &DECL_SOURCE_LOCATION (var);
1258 warning (msgid, locus, var);
1259 TREE_NO_WARNING (var) = 1;
1262 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1263 and warn about them. */
1265 static tree
1266 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1268 location_t *locus = data;
1269 tree t = *tp;
1271 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1272 if (TREE_CODE (t) == SSA_NAME)
1274 warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
1275 *walk_subtrees = 0;
1277 else if (DECL_P (t) || TYPE_P (t))
1278 *walk_subtrees = 0;
1280 return NULL_TREE;
1283 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1284 and warn about them. */
1286 static void
1287 warn_uninitialized_phi (tree phi)
1289 int i, n = PHI_NUM_ARGS (phi);
1291 /* Don't look at memory tags. */
1292 if (!is_gimple_reg (PHI_RESULT (phi)))
1293 return;
1295 for (i = 0; i < n; ++i)
1297 tree op = PHI_ARG_DEF (phi, i);
1298 if (TREE_CODE (op) == SSA_NAME)
1299 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
1300 NULL);
1304 static void
1305 execute_early_warn_uninitialized (void)
1307 block_stmt_iterator bsi;
1308 basic_block bb;
1310 FOR_EACH_BB (bb)
1311 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1312 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1313 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1316 static void
1317 execute_late_warn_uninitialized (void)
1319 basic_block bb;
1320 tree phi;
1322 /* Re-do the plain uninitialized variable check, as optimization may have
1323 straightened control flow. Do this first so that we don't accidentally
1324 get a "may be" warning when we'd have seen an "is" warning later. */
1325 execute_early_warn_uninitialized ();
1327 FOR_EACH_BB (bb)
1328 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1329 warn_uninitialized_phi (phi);
1332 static bool
1333 gate_warn_uninitialized (void)
1335 return warn_uninitialized != 0;
1338 struct tree_opt_pass pass_early_warn_uninitialized =
1340 NULL, /* name */
1341 gate_warn_uninitialized, /* gate */
1342 execute_early_warn_uninitialized, /* execute */
1343 NULL, /* sub */
1344 NULL, /* next */
1345 0, /* static_pass_number */
1346 0, /* tv_id */
1347 PROP_ssa, /* properties_required */
1348 0, /* properties_provided */
1349 0, /* properties_destroyed */
1350 0, /* todo_flags_start */
1351 0 /* todo_flags_finish */
1354 struct tree_opt_pass pass_late_warn_uninitialized =
1356 NULL, /* name */
1357 gate_warn_uninitialized, /* gate */
1358 execute_late_warn_uninitialized, /* execute */
1359 NULL, /* sub */
1360 NULL, /* next */
1361 0, /* static_pass_number */
1362 0, /* tv_id */
1363 PROP_ssa, /* properties_required */
1364 0, /* properties_provided */
1365 0, /* properties_destroyed */
1366 0, /* todo_flags_start */
1367 0 /* todo_flags_finish */