1 /* Miscellaneous SSA utility functions.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005 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)
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. */
23 #include "coretypes.h"
30 #include "langhooks.h"
31 #include "hard-reg-set.h"
32 #include "basic-block.h"
37 #include "diagnostic.h"
39 #include "pointer-set.h"
40 #include "tree-flow.h"
41 #include "tree-gimple.h"
42 #include "tree-inline.h"
46 #include "tree-dump.h"
47 #include "tree-pass.h"
49 /* Remove the corresponding arguments from the PHI nodes in E's
50 destination block and redirect it to DEST. Return redirected edge.
51 The list of removed arguments is stored in PENDING_STMT (e). */
54 ssa_redirect_edge (edge e, basic_block dest)
57 tree list = NULL, *last = &list;
61 /* Remove the appropriate PHI arguments in E's destination block. */
62 for (phi = phi_nodes (e->dest); phi; phi = next)
64 next = PHI_CHAIN (phi);
66 i = phi_arg_from_edge (phi, e);
67 if (PHI_ARG_DEF (phi, i) == NULL_TREE)
70 src = PHI_ARG_DEF (phi, i);
71 dst = PHI_RESULT (phi);
72 node = build_tree_list (dst, src);
74 last = &TREE_CHAIN (node);
77 e = redirect_edge_succ_nodup (e, dest);
78 PENDING_STMT (e) = list;
83 /* Add PHI arguments queued in PENDINT_STMT list on edge E to edge
87 flush_pending_stmts (edge e)
91 if (!PENDING_STMT (e))
94 for (phi = phi_nodes (e->dest), arg = PENDING_STMT (e);
96 phi = PHI_CHAIN (phi), arg = TREE_CHAIN (arg))
98 tree def = TREE_VALUE (arg);
99 add_phi_arg (phi, def, e);
102 PENDING_STMT (e) = NULL;
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
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");
121 if (TREE_TYPE (ssa_name) != TREE_TYPE (SSA_NAME_VAR (ssa_name)))
123 error ("Type mismatch between an SSA_NAME and its symbol.");
127 if (SSA_NAME_IN_FREE_LIST (ssa_name))
129 error ("Found an SSA_NAME that had been released into the free pool");
133 if (is_virtual && is_gimple_reg (ssa_name))
135 error ("Found a virtual definition for a GIMPLE register");
139 if (!is_virtual && !is_gimple_reg (ssa_name))
141 error ("Found a real definition for a non-register");
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
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))
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);
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 print_generic_stmt (stderr, SSA_NAME_DEF_STMT (ssa_name), TDF_VOPS);
182 fprintf (stderr, "\nActual definition statement:\n");
183 print_generic_stmt (stderr, stmt, TDF_VOPS);
190 fprintf (stderr, "while verifying SSA_NAME ");
191 print_generic_expr (stderr, ssa_name, 0);
192 fprintf (stderr, " in statement\n");
193 print_generic_stmt (stderr, stmt, TDF_VOPS);
199 /* Return true if the use of SSA_NAME at statement STMT in block BB is
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
210 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
213 If NAMES_DEFINED_IN_BB is not NULL, it contains a bitmap of ssa names
214 that are defined before STMT in basic block BB. */
217 verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
218 tree stmt, bool check_abnormal, bool is_virtual,
219 bitmap names_defined_in_bb)
223 err = verify_ssa_name (ssa_name, is_virtual);
225 if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (ssa_name))
226 && var_ann (SSA_NAME_VAR (ssa_name))->default_def == ssa_name)
227 ; /* Default definitions have empty statements. Nothing to do. */
230 error ("Missing definition");
233 else if (bb != def_bb
234 && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
236 error ("Definition in block %i does not dominate use in block %i",
237 def_bb->index, bb->index);
240 else if (bb == def_bb
241 && names_defined_in_bb != NULL
242 && !bitmap_bit_p (names_defined_in_bb, SSA_NAME_VERSION (ssa_name)))
244 error ("Definition in block %i follows the use", def_bb->index);
249 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
251 error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
257 fprintf (stderr, "for SSA_NAME: ");
258 print_generic_expr (stderr, ssa_name, TDF_VOPS);
259 fprintf (stderr, "in statement:\n");
260 print_generic_stmt (stderr, stmt, TDF_VOPS);
267 /* Return true if any of the arguments for PHI node PHI at block BB is
270 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
271 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
272 block in that array slot contains the definition of SSA_NAME. */
275 verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
279 unsigned i, phi_num_args = PHI_NUM_ARGS (phi);
281 if (EDGE_COUNT (bb->preds) != phi_num_args)
283 error ("Incoming edge count does not match number of PHI arguments\n");
288 for (i = 0; i < phi_num_args; i++)
290 tree op = PHI_ARG_DEF (phi, i);
292 e = EDGE_PRED (bb, i);
296 error ("PHI argument is missing for edge %d->%d\n",
303 if (TREE_CODE (op) != SSA_NAME && !is_gimple_min_invariant (op))
305 error ("PHI argument is not SSA_NAME, or invariant");
309 if (TREE_CODE (op) == SSA_NAME)
310 err = verify_use (e->src, definition_block[SSA_NAME_VERSION (op)], op,
311 phi, e->flags & EDGE_ABNORMAL,
312 !is_gimple_reg (PHI_RESULT (phi)),
317 error ("Wrong edge %d->%d for PHI argument\n",
318 e->src->index, e->dest->index, bb->index);
324 fprintf (stderr, "PHI argument\n");
325 print_generic_stmt (stderr, op, TDF_VOPS);
333 fprintf (stderr, "for PHI node\n");
334 print_generic_stmt (stderr, phi, TDF_VOPS);
343 verify_flow_insensitive_alias_info (void)
347 bitmap visited = BITMAP_XMALLOC ();
349 for (i = 0; i < num_referenced_vars; i++)
353 varray_type may_aliases;
355 var = referenced_var (i);
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);
374 for (i = 0; i < num_referenced_vars; i++)
378 var = referenced_var (i);
381 if (ann->mem_tag_kind == NOT_A_TAG
383 && !bitmap_bit_p (visited, ann->uid))
385 error ("Addressable variable that is an alias tag but is not in any alias set.");
390 BITMAP_XFREE (visited);
394 debug_variable (var);
395 internal_error ("verify_flow_insensitive_alias_info failed.");
400 verify_flow_sensitive_alias_info (void)
405 for (i = 1; i < num_ssa_names; i++)
409 struct ptr_info_def *pi;
416 /* We only care for pointers that are actually referenced in the
418 if (!POINTER_TYPE_P (TREE_TYPE (ptr)) || !TREE_VISITED (ptr))
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 var = SSA_NAME_VAR (ptr);
426 if (TREE_CODE (var) == RESULT_DECL
427 && is_gimple_reg (ptr))
430 pi = SSA_NAME_PTR_INFO (ptr);
435 if (pi->is_dereferenced && !pi->name_mem_tag && !ann->type_mem_tag)
437 error ("Dereferenced pointers should have a name or a type tag");
443 && (pi->pt_vars == NULL || bitmap_empty_p (pi->pt_vars)))
445 error ("Pointers with a memory tag, should have points-to sets or point to malloc");
449 if (pi->value_escapes_p
451 && !is_call_clobbered (pi->name_mem_tag))
453 error ("Pointer escapes but its name tag is not call-clobbered.");
461 debug_variable (ptr);
462 internal_error ("verify_flow_sensitive_alias_info failed.");
465 DEF_VEC_MALLOC_P (bitmap);
467 /* Verify that all name tags have different points to sets.
468 This algorithm takes advantage of the fact that every variable with the
469 same name tag must have the same points-to set.
470 So we check a single variable for each name tag, and verify that its
471 points-to set is different from every other points-to set for other name
474 Additionally, given a pointer P_i with name tag NMT and type tag
475 TMT, this function verified the alias set of TMT is a superset of
476 the alias set of NMT. */
479 verify_name_tags (void)
483 bitmap first, second;
484 VEC (tree) *name_tag_reps = NULL;
485 VEC (bitmap) *pt_vars_for_reps = NULL;
486 bitmap type_aliases = BITMAP_XMALLOC ();
488 /* First we compute the name tag representatives and their points-to sets. */
489 for (i = 0; i < num_ssa_names; i++)
491 struct ptr_info_def *pi;
492 tree tmt, ptr = ssa_name (i);
494 if (ptr == NULL_TREE)
497 pi = SSA_NAME_PTR_INFO (ptr);
499 if (!TREE_VISITED (ptr)
500 || !POINTER_TYPE_P (TREE_TYPE (ptr))
503 || TREE_VISITED (pi->name_mem_tag))
506 TREE_VISITED (pi->name_mem_tag) = 1;
508 if (pi->pt_vars == NULL)
511 VEC_safe_push (tree, name_tag_reps, ptr);
512 VEC_safe_push (bitmap, pt_vars_for_reps, pi->pt_vars);
514 /* Verify that alias set of PTR's type tag is a superset of the
515 alias set of PTR's name tag. */
516 tmt = var_ann (SSA_NAME_VAR (ptr))->type_mem_tag;
520 varray_type aliases = var_ann (tmt)->may_aliases;
521 bitmap_clear (type_aliases);
522 for (i = 0; aliases && i < VARRAY_ACTIVE_SIZE (aliases); i++)
524 tree alias = VARRAY_TREE (aliases, i);
525 bitmap_set_bit (type_aliases, var_ann (alias)->uid);
528 /* When grouping, we may have added PTR's type tag into the
529 alias set of PTR's name tag. To prevent a false
530 positive, pretend that TMT is in its own alias set. */
531 bitmap_set_bit (type_aliases, var_ann (tmt)->uid);
533 if (bitmap_equal_p (type_aliases, pi->pt_vars))
536 if (!bitmap_intersect_compl_p (type_aliases, pi->pt_vars))
538 error ("Alias set of a pointer's type tag should be a superset of the corresponding name tag");
539 debug_variable (tmt);
540 debug_variable (pi->name_mem_tag);
546 /* Now compare all the representative bitmaps with all other representative
547 bitmaps, to verify that they are all different. */
548 for (i = 0; VEC_iterate (bitmap, pt_vars_for_reps, i, first); i++)
550 for (j = i + 1; VEC_iterate (bitmap, pt_vars_for_reps, j, second); j++)
552 if (bitmap_equal_p (first, second))
554 error ("Two different pointers with identical points-to sets but different name tags");
555 debug_variable (VEC_index (tree, name_tag_reps, j));
561 /* Lastly, clear out the visited flags. */
562 for (i = 0; i < num_ssa_names; i++)
566 tree ptr = ssa_name (i);
567 struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr);
568 if (!TREE_VISITED (ptr)
569 || !POINTER_TYPE_P (TREE_TYPE (ptr))
571 || !pi->name_mem_tag)
573 TREE_VISITED (pi->name_mem_tag) = 0;
577 VEC_free (bitmap, pt_vars_for_reps);
578 BITMAP_FREE (type_aliases);
582 debug_variable (VEC_index (tree, name_tag_reps, i));
583 internal_error ("verify_name_tags failed");
587 /* Verify the consistency of aliasing information. */
590 verify_alias_info (void)
592 verify_flow_sensitive_alias_info ();
594 verify_flow_insensitive_alias_info ();
598 /* Verify common invariants in the SSA web.
599 TODO: verify the variable annotations. */
606 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
609 enum dom_state orig_dom_state = dom_computed[CDI_DOMINATORS];
610 bitmap names_defined_in_bb = BITMAP_XMALLOC ();
612 timevar_push (TV_TREE_SSA_VERIFY);
614 /* Keep track of SSA names present in the IL. */
615 for (i = 1; i < num_ssa_names; i++)
617 tree name = ssa_name (i);
621 TREE_VISITED (name) = 0;
623 stmt = SSA_NAME_DEF_STMT (name);
624 if (!IS_EMPTY_STMT (stmt))
626 basic_block bb = bb_for_stmt (stmt);
627 verify_def (bb, definition_block,
628 name, stmt, !is_gimple_reg (name));
634 calculate_dominance_info (CDI_DOMINATORS);
636 /* Now verify all the uses and make sure they agree with the definitions
637 found in the previous pass. */
643 block_stmt_iterator bsi;
645 /* Make sure that all edges have a clear 'aux' field. */
646 FOR_EACH_EDGE (e, ei, bb->preds)
650 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
656 /* Verify the arguments for every PHI node in the block. */
657 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
659 if (verify_phi_args (phi, bb, definition_block))
661 bitmap_set_bit (names_defined_in_bb,
662 SSA_NAME_VERSION (PHI_RESULT (phi)));
665 /* Now verify all the uses and vuses in every statement of the block. */
666 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
668 tree stmt = bsi_stmt (bsi);
670 get_stmt_operands (stmt);
672 if (stmt_ann (stmt)->makes_aliased_stores
673 && NUM_V_MAY_DEFS (STMT_V_MAY_DEF_OPS (stmt)) == 0)
675 error ("Statement makes aliased stores, but has no V_MAY_DEFS");
676 print_generic_stmt (stderr, stmt, TDF_VOPS);
680 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_ALL_USES | SSA_OP_ALL_KILLS)
682 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
683 op, stmt, false, !is_gimple_reg (op),
684 names_defined_in_bb))
688 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_ALL_DEFS)
690 bitmap_set_bit (names_defined_in_bb, SSA_NAME_VERSION (op));
694 bitmap_clear (names_defined_in_bb);
697 /* Finally, verify alias information. */
698 verify_alias_info ();
700 free (definition_block);
701 /* Restore the dominance information to its prior known state, so
702 that we do not perturb the compiler's subsequent behavior. */
703 if (orig_dom_state == DOM_NONE)
704 free_dominance_info (CDI_DOMINATORS);
706 dom_computed[CDI_DOMINATORS] = orig_dom_state;
708 BITMAP_XFREE (names_defined_in_bb);
709 timevar_pop (TV_TREE_SSA_VERIFY);
713 internal_error ("verify_ssa failed.");
717 /* Initialize global DFA and SSA structures. */
722 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
723 call_clobbered_vars = BITMAP_XMALLOC ();
724 addressable_vars = BITMAP_XMALLOC ();
725 init_ssa_operands ();
728 global_var = NULL_TREE;
732 /* Deallocate memory associated with SSA data structures for FNDECL. */
735 delete_tree_ssa (void)
739 block_stmt_iterator bsi;
741 /* Remove annotations from every tree in the function. */
743 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
745 tree stmt = bsi_stmt (bsi);
747 ggc_free (stmt->common.ann);
748 stmt->common.ann = NULL;
751 /* Remove annotations from every referenced variable. */
754 for (i = 0; i < num_referenced_vars; i++)
756 tree var = referenced_var (i);
757 ggc_free (var->common.ann);
758 var->common.ann = NULL;
760 referenced_vars = NULL;
765 fini_ssa_operands ();
767 global_var = NULL_TREE;
768 BITMAP_XFREE (call_clobbered_vars);
769 call_clobbered_vars = NULL;
770 BITMAP_XFREE (addressable_vars);
771 addressable_vars = NULL;
775 /* Return true if EXPR is a useless type conversion, otherwise return
779 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
781 /* If the inner and outer types are effectively the same, then
782 strip the type conversion and enter the equivalence into
784 if (inner_type == outer_type
785 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
788 /* If both types are pointers and the outer type is a (void *), then
789 the conversion is not necessary. The opposite is not true since
790 that conversion would result in a loss of information if the
791 equivalence was used. Consider an indirect function call where
792 we need to know the exact type of the function to correctly
793 implement the ABI. */
794 else if (POINTER_TYPE_P (inner_type)
795 && POINTER_TYPE_P (outer_type)
796 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
797 && TYPE_REF_CAN_ALIAS_ALL (inner_type)
798 == TYPE_REF_CAN_ALIAS_ALL (outer_type)
799 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
802 /* Pointers and references are equivalent once we get to GENERIC,
803 so strip conversions that just switch between them. */
804 else if (POINTER_TYPE_P (inner_type)
805 && POINTER_TYPE_P (outer_type)
806 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
807 && TYPE_REF_CAN_ALIAS_ALL (inner_type)
808 == TYPE_REF_CAN_ALIAS_ALL (outer_type)
809 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
810 TREE_TYPE (outer_type)))
813 /* If both the inner and outer types are integral types, then the
814 conversion is not necessary if they have the same mode and
815 signedness and precision, and both or neither are boolean. Some
816 code assumes an invariant that boolean types stay boolean and do
817 not become 1-bit bit-field types. Note that types with precision
818 not using all bits of the mode (such as bit-field types in C)
819 mean that testing of precision is necessary. */
820 else if (INTEGRAL_TYPE_P (inner_type)
821 && INTEGRAL_TYPE_P (outer_type)
822 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
823 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
824 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
826 bool first_boolean = (TREE_CODE (inner_type) == BOOLEAN_TYPE);
827 bool second_boolean = (TREE_CODE (outer_type) == BOOLEAN_TYPE);
828 if (first_boolean == second_boolean)
832 /* Recurse for complex types. */
833 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
834 && TREE_CODE (outer_type) == COMPLEX_TYPE
835 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
836 TREE_TYPE (inner_type)))
842 /* Return true if EXPR is a useless type conversion, otherwise return
846 tree_ssa_useless_type_conversion (tree expr)
848 /* If we have an assignment that merely uses a NOP_EXPR to change
849 the top of the RHS to the type of the LHS and the type conversion
850 is "safe", then strip away the type conversion so that we can
851 enter LHS = RHS into the const_and_copies table. */
852 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR
853 || TREE_CODE (expr) == VIEW_CONVERT_EXPR
854 || TREE_CODE (expr) == NON_LVALUE_EXPR)
855 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
856 TREE_TYPE (TREE_OPERAND (expr,
863 /* Returns true if statement STMT may read memory. */
866 stmt_references_memory_p (tree stmt)
870 get_stmt_operands (stmt);
871 ann = stmt_ann (stmt);
873 if (ann->has_volatile_ops)
876 return (NUM_VUSES (VUSE_OPS (ann)) > 0
877 || NUM_V_MAY_DEFS (V_MAY_DEF_OPS (ann)) > 0
878 || NUM_V_MUST_DEFS (V_MUST_DEF_OPS (ann)) > 0);
881 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
882 described in walk_use_def_chains.
884 VISITED is a pointer set used to mark visited SSA_NAMEs to avoid
885 infinite loops. We used to have a bitmap for this to just mark
886 SSA versions we had visited. But non-sparse bitmaps are way too
887 expensive, while sparse bitmaps may cause quadratic behavior.
889 IS_DFS is true if the caller wants to perform a depth-first search
890 when visiting PHI nodes. A DFS will visit each PHI argument and
891 call FN after each one. Otherwise, all the arguments are
892 visited first and then FN is called with each of the visited
893 arguments in a separate pass. */
896 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
897 struct pointer_set_t *visited, bool is_dfs)
901 if (pointer_set_insert (visited, var))
904 def_stmt = SSA_NAME_DEF_STMT (var);
906 if (TREE_CODE (def_stmt) != PHI_NODE)
908 /* If we reached the end of the use-def chain, call FN. */
909 return fn (var, def_stmt, data);
915 /* When doing a breadth-first search, call FN before following the
916 use-def links for each argument. */
918 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
919 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
922 /* Follow use-def links out of each PHI argument. */
923 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
925 tree arg = PHI_ARG_DEF (def_stmt, i);
926 if (TREE_CODE (arg) == SSA_NAME
927 && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
931 /* When doing a depth-first search, call FN after following the
932 use-def links for each argument. */
934 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
935 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
944 /* Walk use-def chains starting at the SSA variable VAR. Call
945 function FN at each reaching definition found. FN takes three
946 arguments: VAR, its defining statement (DEF_STMT) and a generic
947 pointer to whatever state information that FN may want to maintain
948 (DATA). FN is able to stop the walk by returning true, otherwise
949 in order to continue the walk, FN should return false.
951 Note, that if DEF_STMT is a PHI node, the semantics are slightly
952 different. The first argument to FN is no longer the original
953 variable VAR, but the PHI argument currently being examined. If FN
954 wants to get at VAR, it should call PHI_RESULT (PHI).
956 If IS_DFS is true, this function will:
958 1- walk the use-def chains for all the PHI arguments, and,
959 2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
961 If IS_DFS is false, the two steps above are done in reverse order
962 (i.e., a breadth-first search). */
966 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
971 gcc_assert (TREE_CODE (var) == SSA_NAME);
973 def_stmt = SSA_NAME_DEF_STMT (var);
975 /* We only need to recurse if the reaching definition comes from a PHI
977 if (TREE_CODE (def_stmt) != PHI_NODE)
978 (*fn) (var, def_stmt, data);
981 struct pointer_set_t *visited = pointer_set_create ();
982 walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
983 pointer_set_destroy (visited);
988 /* Replaces VAR with REPL in memory reference expression *X in
992 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
994 tree new_var, ass_stmt, addr_var;
996 block_stmt_iterator bsi;
998 /* There is nothing special to handle in the other cases. */
999 if (TREE_CODE (repl) != ADDR_EXPR)
1001 addr_var = TREE_OPERAND (repl, 0);
1003 while (handled_component_p (*x)
1004 || TREE_CODE (*x) == REALPART_EXPR
1005 || TREE_CODE (*x) == IMAGPART_EXPR)
1006 x = &TREE_OPERAND (*x, 0);
1008 if (TREE_CODE (*x) != INDIRECT_REF
1009 || TREE_OPERAND (*x, 0) != var)
1012 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
1015 mark_new_vars_to_rename (stmt, vars_to_rename);
1020 /* Frontends sometimes produce expressions like *&a instead of a[0].
1021 Create a temporary variable to handle this case. */
1022 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
1023 new_var = duplicate_ssa_name (var, ass_stmt);
1024 TREE_OPERAND (*x, 0) = new_var;
1025 TREE_OPERAND (ass_stmt, 0) = new_var;
1027 bb = bb_for_stmt (stmt);
1028 tree_block_label (bb);
1029 bsi = bsi_after_labels (bb);
1030 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
1032 mark_new_vars_to_rename (stmt, vars_to_rename);
1035 /* Replaces immediate uses of VAR by REPL. */
1038 replace_immediate_uses (tree var, tree repl)
1045 use_operand_p use_p;
1047 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
1048 n = num_immediate_uses (df);
1050 for (i = 0; i < n; i++)
1052 stmt = immediate_use (df, i);
1054 if (TREE_CODE (stmt) == PHI_NODE)
1056 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
1057 if (PHI_ARG_DEF (stmt, j) == var)
1059 SET_PHI_ARG_DEF (stmt, j, repl);
1060 if (TREE_CODE (repl) == SSA_NAME
1061 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
1062 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
1068 get_stmt_operands (stmt);
1069 mark_new_vars = false;
1070 if (is_gimple_reg (SSA_NAME_VAR (var)))
1072 if (TREE_CODE (stmt) == MODIFY_EXPR)
1074 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
1075 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
1078 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
1079 if (USE_FROM_PTR (use_p) == var)
1081 propagate_value (use_p, repl);
1082 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
1087 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter,
1088 SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_KILLS)
1089 if (USE_FROM_PTR (use_p) == var)
1090 propagate_value (use_p, repl);
1093 /* FIXME. If REPL is a constant, we need to fold STMT.
1094 However, fold_stmt wants a pointer to the statement, because
1095 it may happen that it needs to replace the whole statement
1096 with a new expression. Since the current def-use machinery
1097 does not return pointers to statements, we call fold_stmt
1098 with the address of a local temporary, if that call changes
1099 the temporary then we fallback on looking for a proper
1100 pointer to STMT by scanning STMT's basic block.
1102 Note that all this will become unnecessary soon. This
1103 pass is being replaced with a proper copy propagation pass
1104 for 4.1 (dnovillo, 2004-09-17). */
1105 if (TREE_CODE (repl) != SSA_NAME)
1109 mark_new_vars = true;
1112 block_stmt_iterator si = bsi_for_stmt (stmt);
1113 bsi_replace (&si, tmp, true);
1114 stmt = bsi_stmt (si);
1118 /* If REPL is a pointer, it may have different memory tags associated
1119 with it. For instance, VAR may have had a name tag while REPL
1120 only had a type tag. In these cases, the virtual operands (if
1121 any) in the statement will refer to different symbols which need
1124 mark_new_vars_to_rename (stmt, vars_to_rename);
1130 /* Gets the value VAR is equivalent to according to EQ_TO. */
1133 get_eq_name (tree *eq_to, tree var)
1138 while (TREE_CODE (val) == SSA_NAME)
1140 ver = SSA_NAME_VERSION (val);
1147 while (TREE_CODE (var) == SSA_NAME)
1149 ver = SSA_NAME_VERSION (var);
1160 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
1161 its result is redundant to to EQ_TO array. */
1164 check_phi_redundancy (tree phi, tree *eq_to)
1166 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
1167 unsigned i, ver = SSA_NAME_VERSION (res), n;
1170 /* It is unlikely that such large phi node would be redundant. */
1171 if (PHI_NUM_ARGS (phi) > 16)
1174 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
1176 def = PHI_ARG_DEF (phi, i);
1178 if (TREE_CODE (def) == SSA_NAME)
1180 def = get_eq_name (eq_to, def);
1186 && !operand_equal_for_phi_arg_p (val, def))
1192 /* At least one of the arguments should not be equal to the result, or
1193 something strange is happening. */
1196 if (get_eq_name (eq_to, res) == val)
1199 if (!may_propagate_copy (res, val))
1204 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
1205 n = num_immediate_uses (df);
1207 for (i = 0; i < n; i++)
1209 stmt = immediate_use (df, i);
1211 if (TREE_CODE (stmt) == PHI_NODE)
1212 check_phi_redundancy (stmt, eq_to);
1216 /* Removes redundant phi nodes.
1218 A redundant PHI node is a PHI node where all of its PHI arguments
1219 are the same value, excluding any PHI arguments which are the same
1222 A redundant PHI node is effectively a copy, so we forward copy propagate
1223 which removes all uses of the destination of the PHI node then
1224 finally we delete the redundant PHI node.
1226 Note that if we can not copy propagate the PHI node, then the PHI
1227 will not be removed. Thus we do not have to worry about dependencies
1228 between PHIs and the problems serializing PHIs into copies creates.
1230 The most important effect of this pass is to remove degenerate PHI
1231 nodes created by removing unreachable code. */
1234 kill_redundant_phi_nodes (void)
1237 unsigned i, old_num_ssa_names;
1239 tree phi, var, repl, stmt;
1241 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
1242 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
1243 other value, it may be necessary to follow the chain till the final value.
1244 We perform path shortening (replacing the entries of the EQ_TO array with
1245 heads of these chains) whenever we access the field to prevent quadratic
1246 complexity (probably would not occur in practice anyway, but let us play
1248 eq_to = xcalloc (num_ssa_names, sizeof (tree));
1250 /* We have had cases where computing immediate uses takes a
1251 significant amount of compile time. If we run into such
1252 problems here, we may want to only compute immediate uses for
1253 a subset of all the SSA_NAMEs instead of computing it for
1254 all of the SSA_NAMEs. */
1255 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
1256 old_num_ssa_names = num_ssa_names;
1260 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1262 var = PHI_RESULT (phi);
1263 check_phi_redundancy (phi, eq_to);
1267 /* Now propagate the values. */
1268 for (i = 0; i < old_num_ssa_names; i++)
1273 repl = get_eq_name (eq_to, ssa_name (i));
1274 if (repl != ssa_name (i))
1275 replace_immediate_uses (ssa_name (i), repl);
1278 /* And remove the dead phis. */
1279 for (i = 0; i < old_num_ssa_names; i++)
1284 repl = get_eq_name (eq_to, ssa_name (i));
1285 if (repl != ssa_name (i))
1287 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
1288 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
1296 struct tree_opt_pass pass_redundant_phi =
1298 "redphi", /* name */
1300 kill_redundant_phi_nodes, /* execute */
1303 0, /* static_pass_number */
1304 TV_TREE_REDPHI, /* tv_id */
1305 PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
1306 0, /* properties_provided */
1307 0, /* properties_destroyed */
1308 0, /* todo_flags_start */
1309 TODO_dump_func | TODO_rename_vars
1310 | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
1314 /* Emit warnings for uninitialized variables. This is done in two passes.
1316 The first pass notices real uses of SSA names with default definitions.
1317 Such uses are unconditionally uninitialized, and we can be certain that
1318 such a use is a mistake. This pass is run before most optimizations,
1319 so that we catch as many as we can.
1321 The second pass follows PHI nodes to find uses that are potentially
1322 uninitialized. In this case we can't necessarily prove that the use
1323 is really uninitialized. This pass is run after most optimizations,
1324 so that we thread as many jumps and possible, and delete as much dead
1325 code as possible, in order to reduce false positives. We also look
1326 again for plain uninitialized variables, since optimization may have
1327 changed conditionally uninitialized to unconditionally uninitialized. */
1329 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1330 warning text is in MSGID and LOCUS may contain a location or be null. */
1333 warn_uninit (tree t, const char *msgid, location_t *locus)
1335 tree var = SSA_NAME_VAR (t);
1336 tree def = SSA_NAME_DEF_STMT (t);
1338 /* Default uses (indicated by an empty definition statement),
1339 are uninitialized. */
1340 if (!IS_EMPTY_STMT (def))
1343 /* Except for PARMs of course, which are always initialized. */
1344 if (TREE_CODE (var) == PARM_DECL)
1347 /* Hard register variables get their initial value from the ether. */
1348 if (TREE_CODE (var) == VAR_DECL && DECL_HARD_REGISTER (var))
1351 /* TREE_NO_WARNING either means we already warned, or the front end
1352 wishes to suppress the warning. */
1353 if (TREE_NO_WARNING (var))
1357 locus = &DECL_SOURCE_LOCATION (var);
1358 warning (msgid, locus, var);
1359 TREE_NO_WARNING (var) = 1;
1362 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1363 and warn about them. */
1366 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1368 location_t *locus = data;
1371 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1372 if (TREE_CODE (t) == SSA_NAME)
1374 warn_uninit (t, "%H%qD is used uninitialized in this function", locus);
1377 else if (IS_TYPE_OR_DECL_P (t))
1383 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1384 and warn about them. */
1387 warn_uninitialized_phi (tree phi)
1389 int i, n = PHI_NUM_ARGS (phi);
1391 /* Don't look at memory tags. */
1392 if (!is_gimple_reg (PHI_RESULT (phi)))
1395 for (i = 0; i < n; ++i)
1397 tree op = PHI_ARG_DEF (phi, i);
1398 if (TREE_CODE (op) == SSA_NAME)
1399 warn_uninit (op, "%H%qD may be used uninitialized in this function",
1405 execute_early_warn_uninitialized (void)
1407 block_stmt_iterator bsi;
1411 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1412 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1413 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1417 execute_late_warn_uninitialized (void)
1422 /* Re-do the plain uninitialized variable check, as optimization may have
1423 straightened control flow. Do this first so that we don't accidentally
1424 get a "may be" warning when we'd have seen an "is" warning later. */
1425 execute_early_warn_uninitialized ();
1428 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1429 warn_uninitialized_phi (phi);
1433 gate_warn_uninitialized (void)
1435 return warn_uninitialized != 0;
1438 struct tree_opt_pass pass_early_warn_uninitialized =
1441 gate_warn_uninitialized, /* gate */
1442 execute_early_warn_uninitialized, /* execute */
1445 0, /* static_pass_number */
1447 PROP_ssa, /* properties_required */
1448 0, /* properties_provided */
1449 0, /* properties_destroyed */
1450 0, /* todo_flags_start */
1451 0, /* todo_flags_finish */
1455 struct tree_opt_pass pass_late_warn_uninitialized =
1458 gate_warn_uninitialized, /* gate */
1459 execute_late_warn_uninitialized, /* execute */
1462 0, /* static_pass_number */
1464 PROP_ssa, /* properties_required */
1465 0, /* properties_provided */
1466 0, /* properties_destroyed */
1467 0, /* todo_flags_start */
1468 0, /* todo_flags_finish */