* basic-block.h (ei_safe_edge): New function.
[official-gcc.git] / gcc / tree-ssa.c
blob8ccea165fc7c153f55915f442932837176c33a73
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 "hashtab.h"
45 #include "tree-dump.h"
46 #include "tree-pass.h"
49 /* Remove edge E and remove the corresponding arguments from the PHI nodes
50 in E's destination block. */
52 void
53 ssa_remove_edge (edge e)
55 tree phi, next;
57 /* Remove the appropriate PHI arguments in E's destination block. */
58 for (phi = phi_nodes (e->dest); phi; phi = next)
60 next = PHI_CHAIN (phi);
61 remove_phi_arg (phi, e->src);
64 remove_edge (e);
67 /* Remove the corresponding arguments from the PHI nodes in E's
68 destination block and redirect it to DEST. Return redirected edge.
69 The list of removed arguments is stored in PENDING_STMT (e). */
71 edge
72 ssa_redirect_edge (edge e, basic_block dest)
74 tree phi, next;
75 tree list = NULL, *last = &list;
76 tree src, dst, node;
77 int i;
79 /* Remove the appropriate PHI arguments in E's destination block. */
80 for (phi = phi_nodes (e->dest); phi; phi = next)
82 next = PHI_CHAIN (phi);
84 i = phi_arg_from_edge (phi, e);
85 if (i < 0)
86 continue;
88 src = PHI_ARG_DEF (phi, i);
89 dst = PHI_RESULT (phi);
90 node = build_tree_list (dst, src);
91 *last = node;
92 last = &TREE_CHAIN (node);
94 remove_phi_arg_num (phi, i);
97 e = redirect_edge_succ_nodup (e, dest);
98 PENDING_STMT (e) = list;
100 return e;
104 /* Return true if SSA_NAME is malformed and mark it visited.
106 IS_VIRTUAL is true if this SSA_NAME was found inside a virtual
107 operand. */
109 static bool
110 verify_ssa_name (tree ssa_name, bool is_virtual)
112 TREE_VISITED (ssa_name) = 1;
114 if (TREE_CODE (ssa_name) != SSA_NAME)
116 error ("Expected an SSA_NAME object");
117 return true;
120 if (TREE_TYPE (ssa_name) != TREE_TYPE (SSA_NAME_VAR (ssa_name)))
122 error ("Type mismatch between an SSA_NAME and its symbol.");
123 return true;
126 if (SSA_NAME_IN_FREE_LIST (ssa_name))
128 error ("Found an SSA_NAME that had been released into the free pool");
129 return true;
132 if (is_virtual && is_gimple_reg (ssa_name))
134 error ("Found a virtual definition for a GIMPLE register");
135 return true;
138 if (!is_virtual && !is_gimple_reg (ssa_name))
140 error ("Found a real definition for a non-register");
141 return true;
144 return false;
148 /* Return true if the definition of SSA_NAME at block BB is malformed.
150 STMT is the statement where SSA_NAME is created.
152 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME
153 version numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set,
154 it means that the block in that array slot contains the
155 definition of SSA_NAME.
157 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
158 V_MUST_DEF. */
160 static bool
161 verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
162 tree stmt, bool is_virtual)
164 if (verify_ssa_name (ssa_name, is_virtual))
165 goto err;
167 if (definition_block[SSA_NAME_VERSION (ssa_name)])
169 error ("SSA_NAME created in two different blocks %i and %i",
170 definition_block[SSA_NAME_VERSION (ssa_name)]->index, bb->index);
171 goto err;
174 definition_block[SSA_NAME_VERSION (ssa_name)] = bb;
176 if (SSA_NAME_DEF_STMT (ssa_name) != stmt)
178 error ("SSA_NAME_DEF_STMT is wrong");
179 fprintf (stderr, "Expected definition statement:\n");
180 debug_generic_stmt (SSA_NAME_DEF_STMT (ssa_name));
181 fprintf (stderr, "\nActual definition statement:\n");
182 debug_generic_stmt (stmt);
183 goto err;
186 return false;
188 err:
189 fprintf (stderr, "while verifying SSA_NAME ");
190 print_generic_expr (stderr, ssa_name, 0);
191 fprintf (stderr, " in statement\n");
192 debug_generic_stmt (stmt);
194 return true;
198 /* Return true if the use of SSA_NAME at statement STMT in block BB is
199 malformed.
201 DEF_BB is the block where SSA_NAME was found to be created.
203 IDOM contains immediate dominator information for the flowgraph.
205 CHECK_ABNORMAL is true if the caller wants to check whether this use
206 is flowing through an abnormal edge (only used when checking PHI
207 arguments).
209 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
210 V_MUST_DEF. */
212 static bool
213 verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
214 tree stmt, bool check_abnormal, bool is_virtual)
216 bool err = false;
218 err = verify_ssa_name (ssa_name, is_virtual);
220 if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (ssa_name))
221 && var_ann (SSA_NAME_VAR (ssa_name))->default_def == ssa_name)
222 ; /* Default definitions have empty statements. Nothing to do. */
223 else if (!def_bb)
225 error ("Missing definition");
226 err = true;
228 else if (bb != def_bb
229 && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
231 error ("Definition in block %i does not dominate use in block %i",
232 def_bb->index, bb->index);
233 err = true;
236 if (check_abnormal
237 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
239 error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
240 err = true;
243 if (err)
245 fprintf (stderr, "for SSA_NAME: ");
246 debug_generic_expr (ssa_name);
247 fprintf (stderr, "in statement:\n");
248 debug_generic_stmt (stmt);
251 return err;
255 /* Return true if any of the arguments for PHI node PHI at block BB is
256 malformed.
258 IDOM contains immediate dominator information for the flowgraph.
260 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
261 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
262 block in that array slot contains the definition of SSA_NAME. */
264 static bool
265 verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
267 edge e;
268 bool err = false;
269 int i, phi_num_args = PHI_NUM_ARGS (phi);
270 edge_iterator ei;
272 /* Mark all the incoming edges. */
273 FOR_EACH_EDGE (e, ei, bb->preds)
275 e->aux = (void *) 1;
278 for (i = 0; i < phi_num_args; i++)
280 tree op = PHI_ARG_DEF (phi, i);
282 e = PHI_ARG_EDGE (phi, i);
284 if (TREE_CODE (op) == SSA_NAME)
285 err = verify_use (e->src, definition_block[SSA_NAME_VERSION (op)], op,
286 phi, e->flags & EDGE_ABNORMAL,
287 !is_gimple_reg (PHI_RESULT (phi)));
289 if (e->dest != bb)
291 error ("Wrong edge %d->%d for PHI argument\n",
292 e->src->index, e->dest->index, bb->index);
293 err = true;
296 if (e->aux == (void *) 0)
298 error ("PHI argument flowing through dead edge %d->%d\n",
299 e->src->index, e->dest->index);
300 err = true;
303 if (e->aux == (void *) 2)
305 error ("PHI argument duplicated for edge %d->%d\n", e->src->index,
306 e->dest->index);
307 err = true;
310 if (err)
312 fprintf (stderr, "PHI argument\n");
313 debug_generic_stmt (op);
314 goto error;
317 e->aux = (void *) 2;
320 FOR_EACH_EDGE (e, ei, bb->preds)
322 if (e->aux != (void *) 2)
324 error ("No argument flowing through edge %d->%d\n", e->src->index,
325 e->dest->index);
326 err = true;
327 goto error;
329 e->aux = (void *) 0;
332 error:
333 if (err)
335 fprintf (stderr, "for PHI node\n");
336 debug_generic_stmt (phi);
340 return err;
344 static void
345 verify_flow_insensitive_alias_info (void)
347 size_t i;
348 tree var;
349 bitmap visited = BITMAP_XMALLOC ();
351 for (i = 0; i < num_referenced_vars; i++)
353 size_t j;
354 var_ann_t ann;
355 varray_type may_aliases;
357 var = referenced_var (i);
358 ann = var_ann (var);
359 may_aliases = ann->may_aliases;
361 for (j = 0; may_aliases && j < VARRAY_ACTIVE_SIZE (may_aliases); j++)
363 tree alias = VARRAY_TREE (may_aliases, j);
365 bitmap_set_bit (visited, var_ann (alias)->uid);
367 if (!may_be_aliased (alias))
369 error ("Non-addressable variable inside an alias set.");
370 debug_variable (alias);
371 goto err;
376 for (i = 0; i < num_referenced_vars; i++)
378 var_ann_t ann;
380 var = referenced_var (i);
381 ann = var_ann (var);
383 if (ann->mem_tag_kind == NOT_A_TAG
384 && ann->is_alias_tag
385 && !bitmap_bit_p (visited, ann->uid))
387 error ("Addressable variable that is an alias tag but is not in any alias set.");
388 goto err;
392 BITMAP_XFREE (visited);
393 return;
395 err:
396 debug_variable (var);
397 internal_error ("verify_flow_insensitive_alias_info failed.");
401 static void
402 verify_flow_sensitive_alias_info (void)
404 size_t i;
405 tree ptr;
407 for (i = 1; i < num_ssa_names; i++)
409 var_ann_t ann;
410 struct ptr_info_def *pi;
412 ptr = ssa_name (i);
413 ann = var_ann (SSA_NAME_VAR (ptr));
414 pi = SSA_NAME_PTR_INFO (ptr);
416 /* We only care for pointers that are actually referenced in the
417 program. */
418 if (!TREE_VISITED (ptr) || !POINTER_TYPE_P (TREE_TYPE (ptr)))
419 continue;
421 /* RESULT_DECL is special. If it's a GIMPLE register, then it
422 is only written-to only once in the return statement.
423 Otherwise, aggregate RESULT_DECLs may be written-to more than
424 once in virtual operands. */
425 if (TREE_CODE (SSA_NAME_VAR (ptr)) == RESULT_DECL
426 && is_gimple_reg (ptr))
427 continue;
429 if (pi == NULL)
430 continue;
432 if (pi->is_dereferenced && !pi->name_mem_tag && !ann->type_mem_tag)
434 error ("Dereferenced pointers should have a name or a type tag");
435 goto err;
438 if (pi->name_mem_tag
439 && !pi->pt_malloc
440 && (pi->pt_vars == NULL
441 || bitmap_first_set_bit (pi->pt_vars) < 0))
443 error ("Pointers with a memory tag, should have points-to sets or point to malloc");
444 goto err;
447 if (pi->value_escapes_p
448 && pi->name_mem_tag
449 && !is_call_clobbered (pi->name_mem_tag))
451 error ("Pointer escapes but its name tag is not call-clobbered.");
452 goto err;
455 if (pi->name_mem_tag && pi->pt_vars)
457 size_t j;
459 for (j = i + 1; j < num_ssa_names; j++)
461 tree ptr2 = ssa_name (j);
462 struct ptr_info_def *pi2 = SSA_NAME_PTR_INFO (ptr2);
464 if (!TREE_VISITED (ptr2) || !POINTER_TYPE_P (TREE_TYPE (ptr2)))
465 continue;
467 if (pi2
468 && pi2->name_mem_tag
469 && pi2->pt_vars
470 && bitmap_first_set_bit (pi2->pt_vars) >= 0
471 && pi->name_mem_tag != pi2->name_mem_tag
472 && bitmap_equal_p (pi->pt_vars, pi2->pt_vars))
474 error ("Two pointers with different name tags and identical points-to sets");
475 debug_variable (ptr2);
476 goto err;
482 return;
484 err:
485 debug_variable (ptr);
486 internal_error ("verify_flow_sensitive_alias_info failed.");
490 /* Verify the consistency of aliasing information. */
492 static void
493 verify_alias_info (void)
495 verify_flow_sensitive_alias_info ();
496 verify_flow_insensitive_alias_info ();
500 /* Verify common invariants in the SSA web.
501 TODO: verify the variable annotations. */
503 void
504 verify_ssa (void)
506 size_t i;
507 basic_block bb;
508 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
509 ssa_op_iter iter;
510 tree op;
512 timevar_push (TV_TREE_SSA_VERIFY);
514 /* Keep track of SSA names present in the IL. */
515 for (i = 1; i < num_ssa_names; i++)
516 TREE_VISITED (ssa_name (i)) = 0;
518 calculate_dominance_info (CDI_DOMINATORS);
520 /* Verify and register all the SSA_NAME definitions found in the
521 function. */
522 FOR_EACH_BB (bb)
524 tree phi;
525 block_stmt_iterator bsi;
527 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
528 if (verify_def (bb, definition_block, PHI_RESULT (phi), phi,
529 !is_gimple_reg (PHI_RESULT (phi))))
530 goto err;
532 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
534 tree stmt;
536 stmt = bsi_stmt (bsi);
537 get_stmt_operands (stmt);
539 if (stmt_ann (stmt)->makes_aliased_stores
540 && NUM_V_MAY_DEFS (STMT_V_MAY_DEF_OPS (stmt)) == 0)
542 error ("Statement makes aliased stores, but has no V_MAY_DEFS");
543 debug_generic_stmt (stmt);
544 goto err;
547 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_VIRTUAL_DEFS)
549 if (verify_def (bb, definition_block, op, stmt, true))
550 goto err;
553 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
555 if (verify_def (bb, definition_block, op, stmt, false))
556 goto err;
562 /* Now verify all the uses and make sure they agree with the definitions
563 found in the previous pass. */
564 FOR_EACH_BB (bb)
566 edge e;
567 tree phi;
568 edge_iterator ei;
569 block_stmt_iterator bsi;
571 /* Make sure that all edges have a clear 'aux' field. */
572 FOR_EACH_EDGE (e, ei, bb->preds)
574 if (e->aux)
576 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
577 e->dest->index);
578 goto err;
582 /* Verify the arguments for every PHI node in the block. */
583 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
584 if (verify_phi_args (phi, bb, definition_block))
585 goto err;
587 /* Now verify all the uses and vuses in every statement of the block. */
588 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
590 tree stmt = bsi_stmt (bsi);
592 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_VIRTUAL_USES)
594 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
595 op, stmt, false, true))
596 goto err;
599 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE)
601 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
602 op, stmt, false, false))
603 goto err;
608 /* Finally, verify alias information. */
609 verify_alias_info ();
611 free (definition_block);
612 timevar_pop (TV_TREE_SSA_VERIFY);
613 return;
615 err:
616 internal_error ("verify_ssa failed.");
620 /* Initialize global DFA and SSA structures. */
622 void
623 init_tree_ssa (void)
625 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
626 call_clobbered_vars = BITMAP_XMALLOC ();
627 addressable_vars = BITMAP_XMALLOC ();
628 init_ssa_operands ();
629 init_ssanames ();
630 init_phinodes ();
631 global_var = NULL_TREE;
635 /* Deallocate memory associated with SSA data structures for FNDECL. */
637 void
638 delete_tree_ssa (void)
640 size_t i;
641 basic_block bb;
642 block_stmt_iterator bsi;
644 /* Remove annotations from every tree in the function. */
645 FOR_EACH_BB (bb)
646 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
648 tree stmt = bsi_stmt (bsi);
649 release_defs (stmt);
650 ggc_free (stmt->common.ann);
651 stmt->common.ann = NULL;
654 /* Remove annotations from every referenced variable. */
655 if (referenced_vars)
657 for (i = 0; i < num_referenced_vars; i++)
659 tree var = referenced_var (i);
660 ggc_free (var->common.ann);
661 var->common.ann = NULL;
663 referenced_vars = NULL;
666 fini_ssanames ();
667 fini_phinodes ();
668 fini_ssa_operands ();
670 global_var = NULL_TREE;
671 BITMAP_XFREE (call_clobbered_vars);
672 call_clobbered_vars = NULL;
673 BITMAP_XFREE (addressable_vars);
674 addressable_vars = NULL;
678 /* Return true if EXPR is a useless type conversion, otherwise return
679 false. */
681 bool
682 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
684 /* If the inner and outer types are effectively the same, then
685 strip the type conversion and enter the equivalence into
686 the table. */
687 if (inner_type == outer_type
688 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
689 return true;
691 /* If both types are pointers and the outer type is a (void *), then
692 the conversion is not necessary. The opposite is not true since
693 that conversion would result in a loss of information if the
694 equivalence was used. Consider an indirect function call where
695 we need to know the exact type of the function to correctly
696 implement the ABI. */
697 else if (POINTER_TYPE_P (inner_type)
698 && POINTER_TYPE_P (outer_type)
699 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
700 return true;
702 /* Pointers and references are equivalent once we get to GENERIC,
703 so strip conversions that just switch between them. */
704 else if (POINTER_TYPE_P (inner_type)
705 && POINTER_TYPE_P (outer_type)
706 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
707 TREE_TYPE (outer_type)))
708 return true;
710 /* If both the inner and outer types are integral types, then the
711 conversion is not necessary if they have the same mode and
712 signedness and precision, and both or neither are boolean. Some
713 code assumes an invariant that boolean types stay boolean and do
714 not become 1-bit bit-field types. Note that types with precision
715 not using all bits of the mode (such as bit-field types in C)
716 mean that testing of precision is necessary. */
717 else if (INTEGRAL_TYPE_P (inner_type)
718 && INTEGRAL_TYPE_P (outer_type)
719 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
720 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
721 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
723 bool first_boolean = (TREE_CODE (inner_type) == BOOLEAN_TYPE);
724 bool second_boolean = (TREE_CODE (outer_type) == BOOLEAN_TYPE);
725 if (first_boolean == second_boolean)
726 return true;
729 /* Recurse for complex types. */
730 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
731 && TREE_CODE (outer_type) == COMPLEX_TYPE
732 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
733 TREE_TYPE (inner_type)))
734 return true;
736 return false;
739 /* Return true if EXPR is a useless type conversion, otherwise return
740 false. */
742 bool
743 tree_ssa_useless_type_conversion (tree expr)
745 /* If we have an assignment that merely uses a NOP_EXPR to change
746 the top of the RHS to the type of the LHS and the type conversion
747 is "safe", then strip away the type conversion so that we can
748 enter LHS = RHS into the const_and_copies table. */
749 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR
750 || TREE_CODE (expr) == VIEW_CONVERT_EXPR
751 || TREE_CODE (expr) == NON_LVALUE_EXPR)
752 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
753 TREE_TYPE (TREE_OPERAND (expr,
754 0)));
757 return false;
761 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
762 described in walk_use_def_chains.
764 VISITED is a bitmap used to mark visited SSA_NAMEs to avoid
765 infinite loops.
767 IS_DFS is true if the caller wants to perform a depth-first search
768 when visiting PHI nodes. A DFS will visit each PHI argument and
769 call FN after each one. Otherwise, all the arguments are
770 visited first and then FN is called with each of the visited
771 arguments in a separate pass. */
773 static bool
774 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
775 bitmap visited, bool is_dfs)
777 tree def_stmt;
779 if (bitmap_bit_p (visited, SSA_NAME_VERSION (var)))
780 return false;
782 bitmap_set_bit (visited, SSA_NAME_VERSION (var));
784 def_stmt = SSA_NAME_DEF_STMT (var);
786 if (TREE_CODE (def_stmt) != PHI_NODE)
788 /* If we reached the end of the use-def chain, call FN. */
789 return fn (var, def_stmt, data);
791 else
793 int i;
795 /* When doing a breadth-first search, call FN before following the
796 use-def links for each argument. */
797 if (!is_dfs)
798 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
799 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
800 return true;
802 /* Follow use-def links out of each PHI argument. */
803 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
805 tree arg = PHI_ARG_DEF (def_stmt, i);
806 if (TREE_CODE (arg) == SSA_NAME
807 && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
808 return true;
811 /* When doing a depth-first search, call FN after following the
812 use-def links for each argument. */
813 if (is_dfs)
814 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
815 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
816 return true;
819 return false;
824 /* Walk use-def chains starting at the SSA variable VAR. Call
825 function FN at each reaching definition found. FN takes three
826 arguments: VAR, its defining statement (DEF_STMT) and a generic
827 pointer to whatever state information that FN may want to maintain
828 (DATA). FN is able to stop the walk by returning true, otherwise
829 in order to continue the walk, FN should return false.
831 Note, that if DEF_STMT is a PHI node, the semantics are slightly
832 different. The first argument to FN is no longer the original
833 variable VAR, but the PHI argument currently being examined. If FN
834 wants to get at VAR, it should call PHI_RESULT (PHI).
836 If IS_DFS is true, this function will:
838 1- walk the use-def chains for all the PHI arguments, and,
839 2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
841 If IS_DFS is false, the two steps above are done in reverse order
842 (i.e., a breadth-first search). */
845 void
846 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
847 bool is_dfs)
849 tree def_stmt;
851 gcc_assert (TREE_CODE (var) == SSA_NAME);
853 def_stmt = SSA_NAME_DEF_STMT (var);
855 /* We only need to recurse if the reaching definition comes from a PHI
856 node. */
857 if (TREE_CODE (def_stmt) != PHI_NODE)
858 (*fn) (var, def_stmt, data);
859 else
861 bitmap visited = BITMAP_XMALLOC ();
862 walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
863 BITMAP_XFREE (visited);
868 /* Replaces VAR with REPL in memory reference expression *X in
869 statement STMT. */
871 static void
872 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
874 tree new_var, ass_stmt, addr_var;
875 basic_block bb;
876 block_stmt_iterator bsi;
878 /* There is nothing special to handle in the other cases. */
879 if (TREE_CODE (repl) != ADDR_EXPR)
880 return;
881 addr_var = TREE_OPERAND (repl, 0);
883 while (handled_component_p (*x)
884 || TREE_CODE (*x) == REALPART_EXPR
885 || TREE_CODE (*x) == IMAGPART_EXPR)
886 x = &TREE_OPERAND (*x, 0);
888 if (TREE_CODE (*x) != INDIRECT_REF
889 || TREE_OPERAND (*x, 0) != var)
890 return;
892 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
894 *x = addr_var;
895 mark_new_vars_to_rename (stmt, vars_to_rename);
896 return;
900 /* Frontends sometimes produce expressions like *&a instead of a[0].
901 Create a temporary variable to handle this case. */
902 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
903 new_var = duplicate_ssa_name (var, ass_stmt);
904 TREE_OPERAND (*x, 0) = new_var;
905 TREE_OPERAND (ass_stmt, 0) = new_var;
907 bb = bb_for_stmt (stmt);
908 tree_block_label (bb);
909 bsi = bsi_after_labels (bb);
910 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
912 mark_new_vars_to_rename (stmt, vars_to_rename);
915 /* Replaces immediate uses of VAR by REPL. */
917 static void
918 replace_immediate_uses (tree var, tree repl)
920 int i, j, n;
921 dataflow_t df;
922 tree stmt;
923 stmt_ann_t ann;
924 bool mark_new_vars;
925 ssa_op_iter iter;
926 use_operand_p use_p;
928 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
929 n = num_immediate_uses (df);
931 for (i = 0; i < n; i++)
933 stmt = immediate_use (df, i);
934 ann = stmt_ann (stmt);
936 if (TREE_CODE (stmt) == PHI_NODE)
938 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
939 if (PHI_ARG_DEF (stmt, j) == var)
941 SET_PHI_ARG_DEF (stmt, j, repl);
942 if (TREE_CODE (repl) == SSA_NAME
943 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
944 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
947 continue;
950 get_stmt_operands (stmt);
951 mark_new_vars = false;
952 if (is_gimple_reg (SSA_NAME_VAR (var)))
954 if (TREE_CODE (stmt) == MODIFY_EXPR)
956 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
957 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
960 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
961 if (USE_FROM_PTR (use_p) == var)
963 propagate_value (use_p, repl);
964 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
967 else
969 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_VIRTUAL_USES)
970 if (USE_FROM_PTR (use_p) == var)
971 propagate_value (use_p, repl);
974 /* If REPL is a pointer, it may have different memory tags associated
975 with it. For instance, VAR may have had a name tag while REPL
976 only had a type tag. In these cases, the virtual operands (if
977 any) in the statement will refer to different symbols which need
978 to be renamed. */
979 if (mark_new_vars)
980 mark_new_vars_to_rename (stmt, vars_to_rename);
981 else
982 modify_stmt (stmt);
986 /* Gets the value VAR is equivalent to according to EQ_TO. */
988 static tree
989 get_eq_name (tree *eq_to, tree var)
991 unsigned ver;
992 tree val = var;
994 while (TREE_CODE (val) == SSA_NAME)
996 ver = SSA_NAME_VERSION (val);
997 if (!eq_to[ver])
998 break;
1000 val = eq_to[ver];
1003 while (TREE_CODE (var) == SSA_NAME)
1005 ver = SSA_NAME_VERSION (var);
1006 if (!eq_to[ver])
1007 break;
1009 var = eq_to[ver];
1010 eq_to[ver] = val;
1013 return val;
1016 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
1017 its result is redundant to to EQ_TO array. */
1019 static void
1020 check_phi_redundancy (tree phi, tree *eq_to)
1022 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
1023 unsigned i, ver = SSA_NAME_VERSION (res), n;
1024 dataflow_t df;
1026 /* It is unlikely that such large phi node would be redundant. */
1027 if (PHI_NUM_ARGS (phi) > 16)
1028 return;
1030 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
1032 def = PHI_ARG_DEF (phi, i);
1034 if (TREE_CODE (def) == SSA_NAME)
1036 def = get_eq_name (eq_to, def);
1037 if (def == res)
1038 continue;
1041 if (val
1042 && !operand_equal_p (val, def, 0))
1043 return;
1045 val = def;
1048 /* At least one of the arguments should not be equal to the result, or
1049 something strange is happening. */
1050 gcc_assert (val);
1052 if (get_eq_name (eq_to, res) == val)
1053 return;
1055 if (!may_propagate_copy (res, val))
1056 return;
1058 eq_to[ver] = val;
1060 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
1061 n = num_immediate_uses (df);
1063 for (i = 0; i < n; i++)
1065 stmt = immediate_use (df, i);
1067 if (TREE_CODE (stmt) == PHI_NODE)
1068 check_phi_redundancy (stmt, eq_to);
1072 /* Removes redundant phi nodes.
1074 A redundant PHI node is a PHI node where all of its PHI arguments
1075 are the same value, excluding any PHI arguments which are the same
1076 as the PHI result.
1078 A redundant PHI node is effectively a copy, so we forward copy propagate
1079 which removes all uses of the destination of the PHI node then
1080 finally we delete the redundant PHI node.
1082 Note that if we can not copy propagate the PHI node, then the PHI
1083 will not be removed. Thus we do not have to worry about dependencies
1084 between PHIs and the problems serializing PHIs into copies creates.
1086 The most important effect of this pass is to remove degenerate PHI
1087 nodes created by removing unreachable code. */
1089 void
1090 kill_redundant_phi_nodes (void)
1092 tree *eq_to;
1093 unsigned i, old_num_ssa_names;
1094 basic_block bb;
1095 tree phi, var, repl, stmt;
1097 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
1098 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
1099 other value, it may be necessary to follow the chain till the final value.
1100 We perform path shortening (replacing the entries of the EQ_TO array with
1101 heads of these chains) whenever we access the field to prevent quadratic
1102 complexity (probably would not occur in practice anyway, but let us play
1103 it safe). */
1104 eq_to = xcalloc (num_ssa_names, sizeof (tree));
1106 /* We have had cases where computing immediate uses takes a
1107 significant amount of compile time. If we run into such
1108 problems here, we may want to only compute immediate uses for
1109 a subset of all the SSA_NAMEs instead of computing it for
1110 all of the SSA_NAMEs. */
1111 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
1112 old_num_ssa_names = num_ssa_names;
1114 FOR_EACH_BB (bb)
1116 for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
1118 var = PHI_RESULT (phi);
1119 check_phi_redundancy (phi, eq_to);
1123 /* Now propagate the values. */
1124 for (i = 0; i < old_num_ssa_names; i++)
1126 if (!ssa_name (i))
1127 continue;
1129 repl = get_eq_name (eq_to, ssa_name (i));
1130 if (repl != ssa_name (i))
1131 replace_immediate_uses (ssa_name (i), repl);
1134 /* And remove the dead phis. */
1135 for (i = 0; i < old_num_ssa_names; i++)
1137 if (!ssa_name (i))
1138 continue;
1140 repl = get_eq_name (eq_to, ssa_name (i));
1141 if (repl != ssa_name (i))
1143 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
1144 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
1148 free_df ();
1149 free (eq_to);
1152 struct tree_opt_pass pass_redundant_phi =
1154 "redphi", /* name */
1155 NULL, /* gate */
1156 kill_redundant_phi_nodes, /* execute */
1157 NULL, /* sub */
1158 NULL, /* next */
1159 0, /* static_pass_number */
1160 0, /* tv_id */
1161 PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
1162 0, /* properties_provided */
1163 0, /* properties_destroyed */
1164 0, /* todo_flags_start */
1165 TODO_dump_func | TODO_rename_vars
1166 | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
1167 0 /* letter */
1170 /* Emit warnings for uninitialized variables. This is done in two passes.
1172 The first pass notices real uses of SSA names with default definitions.
1173 Such uses are unconditionally uninitialized, and we can be certain that
1174 such a use is a mistake. This pass is run before most optimizations,
1175 so that we catch as many as we can.
1177 The second pass follows PHI nodes to find uses that are potentially
1178 uninitialized. In this case we can't necessarily prove that the use
1179 is really uninitialized. This pass is run after most optimizations,
1180 so that we thread as many jumps and possible, and delete as much dead
1181 code as possible, in order to reduce false positives. We also look
1182 again for plain uninitialized variables, since optimization may have
1183 changed conditionally uninitialized to unconditionally uninitialized. */
1185 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1186 warning text is in MSGID and LOCUS may contain a location or be null. */
1188 static void
1189 warn_uninit (tree t, const char *msgid, location_t *locus)
1191 tree var = SSA_NAME_VAR (t);
1192 tree def = SSA_NAME_DEF_STMT (t);
1194 /* Default uses (indicated by an empty definition statement),
1195 are uninitialized. */
1196 if (!IS_EMPTY_STMT (def))
1197 return;
1199 /* Except for PARMs of course, which are always initialized. */
1200 if (TREE_CODE (var) == PARM_DECL)
1201 return;
1203 /* Hard register variables get their initial value from the ether. */
1204 if (DECL_HARD_REGISTER (var))
1205 return;
1207 /* TREE_NO_WARNING either means we already warned, or the front end
1208 wishes to suppress the warning. */
1209 if (TREE_NO_WARNING (var))
1210 return;
1212 if (!locus)
1213 locus = &DECL_SOURCE_LOCATION (var);
1214 warning (msgid, locus, var);
1215 TREE_NO_WARNING (var) = 1;
1218 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1219 and warn about them. */
1221 static tree
1222 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1224 location_t *locus = data;
1225 tree t = *tp;
1227 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1228 if (TREE_CODE (t) == SSA_NAME)
1230 warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
1231 *walk_subtrees = 0;
1233 else if (DECL_P (t) || TYPE_P (t))
1234 *walk_subtrees = 0;
1236 return NULL_TREE;
1239 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1240 and warn about them. */
1242 static void
1243 warn_uninitialized_phi (tree phi)
1245 int i, n = PHI_NUM_ARGS (phi);
1247 /* Don't look at memory tags. */
1248 if (!is_gimple_reg (PHI_RESULT (phi)))
1249 return;
1251 for (i = 0; i < n; ++i)
1253 tree op = PHI_ARG_DEF (phi, i);
1254 if (TREE_CODE (op) == SSA_NAME)
1255 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
1256 NULL);
1260 static void
1261 execute_early_warn_uninitialized (void)
1263 block_stmt_iterator bsi;
1264 basic_block bb;
1266 FOR_EACH_BB (bb)
1267 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1268 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1269 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1272 static void
1273 execute_late_warn_uninitialized (void)
1275 basic_block bb;
1276 tree phi;
1278 /* Re-do the plain uninitialized variable check, as optimization may have
1279 straightened control flow. Do this first so that we don't accidentally
1280 get a "may be" warning when we'd have seen an "is" warning later. */
1281 execute_early_warn_uninitialized ();
1283 FOR_EACH_BB (bb)
1284 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1285 warn_uninitialized_phi (phi);
1288 static bool
1289 gate_warn_uninitialized (void)
1291 return warn_uninitialized != 0;
1294 struct tree_opt_pass pass_early_warn_uninitialized =
1296 NULL, /* name */
1297 gate_warn_uninitialized, /* gate */
1298 execute_early_warn_uninitialized, /* execute */
1299 NULL, /* sub */
1300 NULL, /* next */
1301 0, /* static_pass_number */
1302 0, /* tv_id */
1303 PROP_ssa, /* properties_required */
1304 0, /* properties_provided */
1305 0, /* properties_destroyed */
1306 0, /* todo_flags_start */
1307 0, /* todo_flags_finish */
1308 0 /* letter */
1311 struct tree_opt_pass pass_late_warn_uninitialized =
1313 NULL, /* name */
1314 gate_warn_uninitialized, /* gate */
1315 execute_late_warn_uninitialized, /* execute */
1316 NULL, /* sub */
1317 NULL, /* next */
1318 0, /* static_pass_number */
1319 0, /* tv_id */
1320 PROP_ssa, /* properties_required */
1321 0, /* properties_provided */
1322 0, /* properties_destroyed */
1323 0, /* todo_flags_start */
1324 0, /* todo_flags_finish */
1325 0 /* letter */