2004-10-07 J"orn Rennecke <joern.rennecke@st.com>
[official-gcc.git] / gcc / tree-ssa.c
blob4b79989d50201f95960ebab03d1031a59386d2ce
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 print_generic_stmt (stderr, SSA_NAME_DEF_STMT (ssa_name), TDF_VOPS);
181 fprintf (stderr, "\nActual definition statement:\n");
182 print_generic_stmt (stderr, stmt, TDF_VOPS);
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 print_generic_stmt (stderr, stmt, TDF_VOPS);
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 If NAMES_DEFINED_IN_BB is not NULL, it contains a bitmap of ssa names
213 that are defined before STMT in basic block BB. */
215 static bool
216 verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
217 tree stmt, bool check_abnormal, bool is_virtual,
218 bitmap names_defined_in_bb)
220 bool err = false;
222 err = verify_ssa_name (ssa_name, is_virtual);
224 if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (ssa_name))
225 && var_ann (SSA_NAME_VAR (ssa_name))->default_def == ssa_name)
226 ; /* Default definitions have empty statements. Nothing to do. */
227 else if (!def_bb)
229 error ("Missing definition");
230 err = true;
232 else if (bb != def_bb
233 && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
235 error ("Definition in block %i does not dominate use in block %i",
236 def_bb->index, bb->index);
237 err = true;
239 else if (bb == def_bb
240 && names_defined_in_bb != NULL
241 && !bitmap_bit_p (names_defined_in_bb, SSA_NAME_VERSION (ssa_name)))
243 error ("Definition in block %i follows the use", def_bb->index);
244 err = true;
247 if (check_abnormal
248 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
250 error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
251 err = true;
254 if (err)
256 fprintf (stderr, "for SSA_NAME: ");
257 print_generic_expr (stderr, ssa_name, TDF_VOPS);
258 fprintf (stderr, "in statement:\n");
259 print_generic_stmt (stderr, stmt, TDF_VOPS);
262 return err;
266 /* Return true if any of the arguments for PHI node PHI at block BB is
267 malformed.
269 IDOM contains immediate dominator information for the flowgraph.
271 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
272 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
273 block in that array slot contains the definition of SSA_NAME. */
275 static bool
276 verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
278 edge e;
279 bool err = false;
280 int i, phi_num_args = PHI_NUM_ARGS (phi);
281 edge_iterator ei;
283 /* Mark all the incoming edges. */
284 FOR_EACH_EDGE (e, ei, bb->preds)
285 e->aux = (void *) 1;
287 for (i = 0; i < phi_num_args; i++)
289 tree op = PHI_ARG_DEF (phi, i);
291 e = PHI_ARG_EDGE (phi, i);
293 if (TREE_CODE (op) == SSA_NAME)
294 err = verify_use (e->src, definition_block[SSA_NAME_VERSION (op)], op,
295 phi, e->flags & EDGE_ABNORMAL,
296 !is_gimple_reg (PHI_RESULT (phi)),
297 NULL);
299 if (e->dest != bb)
301 error ("Wrong edge %d->%d for PHI argument\n",
302 e->src->index, e->dest->index, bb->index);
303 err = true;
306 if (e->aux == (void *) 0)
308 error ("PHI argument flowing through dead edge %d->%d\n",
309 e->src->index, e->dest->index);
310 err = true;
313 if (e->aux == (void *) 2)
315 error ("PHI argument duplicated for edge %d->%d\n", e->src->index,
316 e->dest->index);
317 err = true;
320 if (err)
322 fprintf (stderr, "PHI argument\n");
323 print_generic_stmt (stderr, op, TDF_VOPS);
324 goto error;
327 e->aux = (void *) 2;
330 FOR_EACH_EDGE (e, ei, bb->preds)
332 if (e->aux != (void *) 2)
334 error ("No argument flowing through edge %d->%d\n", e->src->index,
335 e->dest->index);
336 err = true;
337 goto error;
339 e->aux = (void *) 0;
342 error:
343 if (err)
345 fprintf (stderr, "for PHI node\n");
346 print_generic_stmt (stderr, phi, TDF_VOPS);
350 return err;
354 static void
355 verify_flow_insensitive_alias_info (void)
357 size_t i;
358 tree var;
359 bitmap visited = BITMAP_XMALLOC ();
361 for (i = 0; i < num_referenced_vars; i++)
363 size_t j;
364 var_ann_t ann;
365 varray_type may_aliases;
367 var = referenced_var (i);
368 ann = var_ann (var);
369 may_aliases = ann->may_aliases;
371 for (j = 0; may_aliases && j < VARRAY_ACTIVE_SIZE (may_aliases); j++)
373 tree alias = VARRAY_TREE (may_aliases, j);
375 bitmap_set_bit (visited, var_ann (alias)->uid);
377 if (!may_be_aliased (alias))
379 error ("Non-addressable variable inside an alias set.");
380 debug_variable (alias);
381 goto err;
386 for (i = 0; i < num_referenced_vars; i++)
388 var_ann_t ann;
390 var = referenced_var (i);
391 ann = var_ann (var);
393 if (ann->mem_tag_kind == NOT_A_TAG
394 && ann->is_alias_tag
395 && !bitmap_bit_p (visited, ann->uid))
397 error ("Addressable variable that is an alias tag but is not in any alias set.");
398 goto err;
402 BITMAP_XFREE (visited);
403 return;
405 err:
406 debug_variable (var);
407 internal_error ("verify_flow_insensitive_alias_info failed.");
411 static void
412 verify_flow_sensitive_alias_info (void)
414 size_t i;
415 tree ptr;
417 for (i = 1; i < num_ssa_names; i++)
419 var_ann_t ann;
420 struct ptr_info_def *pi;
422 ptr = ssa_name (i);
423 if (!ptr)
424 continue;
425 ann = var_ann (SSA_NAME_VAR (ptr));
426 pi = SSA_NAME_PTR_INFO (ptr);
428 /* We only care for pointers that are actually referenced in the
429 program. */
430 if (!TREE_VISITED (ptr) || !POINTER_TYPE_P (TREE_TYPE (ptr)))
431 continue;
433 /* RESULT_DECL is special. If it's a GIMPLE register, then it
434 is only written-to only once in the return statement.
435 Otherwise, aggregate RESULT_DECLs may be written-to more than
436 once in virtual operands. */
437 if (TREE_CODE (SSA_NAME_VAR (ptr)) == RESULT_DECL
438 && is_gimple_reg (ptr))
439 continue;
441 if (pi == NULL)
442 continue;
444 if (pi->is_dereferenced && !pi->name_mem_tag && !ann->type_mem_tag)
446 error ("Dereferenced pointers should have a name or a type tag");
447 goto err;
450 if (pi->name_mem_tag
451 && !pi->pt_malloc
452 && (pi->pt_vars == NULL
453 || bitmap_first_set_bit (pi->pt_vars) < 0))
455 error ("Pointers with a memory tag, should have points-to sets or point to malloc");
456 goto err;
459 if (pi->value_escapes_p
460 && pi->name_mem_tag
461 && !is_call_clobbered (pi->name_mem_tag))
463 error ("Pointer escapes but its name tag is not call-clobbered.");
464 goto err;
467 if (pi->name_mem_tag && pi->pt_vars)
469 size_t j;
471 for (j = i + 1; j < num_ssa_names; j++)
472 if (ssa_name (j))
474 tree ptr2 = ssa_name (j);
475 struct ptr_info_def *pi2 = SSA_NAME_PTR_INFO (ptr2);
477 if (!TREE_VISITED (ptr2) || !POINTER_TYPE_P (TREE_TYPE (ptr2)))
478 continue;
480 if (pi2
481 && pi2->name_mem_tag
482 && pi2->pt_vars
483 && bitmap_first_set_bit (pi2->pt_vars) >= 0
484 && pi->name_mem_tag != pi2->name_mem_tag
485 && bitmap_equal_p (pi->pt_vars, pi2->pt_vars))
487 error ("Two pointers with different name tags and identical points-to sets");
488 debug_variable (ptr2);
489 goto err;
495 return;
497 err:
498 debug_variable (ptr);
499 internal_error ("verify_flow_sensitive_alias_info failed.");
503 /* Verify the consistency of aliasing information. */
505 static void
506 verify_alias_info (void)
508 verify_flow_sensitive_alias_info ();
509 verify_flow_insensitive_alias_info ();
513 /* Verify common invariants in the SSA web.
514 TODO: verify the variable annotations. */
516 void
517 verify_ssa (void)
519 size_t i;
520 basic_block bb;
521 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
522 ssa_op_iter iter;
523 tree op;
524 enum dom_state orig_dom_state = dom_computed[CDI_DOMINATORS];
525 bitmap names_defined_in_bb = BITMAP_XMALLOC ();
527 timevar_push (TV_TREE_SSA_VERIFY);
529 /* Keep track of SSA names present in the IL. */
530 for (i = 1; i < num_ssa_names; i++)
531 if (ssa_name (i))
532 TREE_VISITED (ssa_name (i)) = 0;
534 calculate_dominance_info (CDI_DOMINATORS);
536 /* Verify and register all the SSA_NAME definitions found in the
537 function. */
538 FOR_EACH_BB (bb)
540 tree phi;
541 block_stmt_iterator bsi;
543 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
545 int i;
546 if (verify_def (bb, definition_block, PHI_RESULT (phi), phi,
547 !is_gimple_reg (PHI_RESULT (phi))))
548 goto err;
549 for (i = 0; i < PHI_NUM_ARGS (phi); i++)
551 tree def = PHI_ARG_DEF (phi, i);
552 if (TREE_CODE (def) != SSA_NAME && !is_gimple_min_invariant (def))
554 error ("PHI argument is not SSA_NAME, or invariant");
555 print_generic_stmt (stderr, phi, TDF_VOPS);
556 goto err;
561 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
563 tree stmt;
565 stmt = bsi_stmt (bsi);
566 get_stmt_operands (stmt);
568 if (stmt_ann (stmt)->makes_aliased_stores
569 && NUM_V_MAY_DEFS (STMT_V_MAY_DEF_OPS (stmt)) == 0)
571 error ("Statement makes aliased stores, but has no V_MAY_DEFS");
572 print_generic_stmt (stderr, stmt, TDF_VOPS);
573 goto err;
576 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_VIRTUAL_DEFS)
578 if (verify_def (bb, definition_block, op, stmt, true))
579 goto err;
582 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
584 if (verify_def (bb, definition_block, op, stmt, false))
585 goto err;
591 /* Now verify all the uses and make sure they agree with the definitions
592 found in the previous pass. */
593 FOR_EACH_BB (bb)
595 edge e;
596 tree phi;
597 edge_iterator ei;
598 block_stmt_iterator bsi;
600 /* Make sure that all edges have a clear 'aux' field. */
601 FOR_EACH_EDGE (e, ei, bb->preds)
603 if (e->aux)
605 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
606 e->dest->index);
607 goto err;
611 /* Verify the arguments for every PHI node in the block. */
612 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
614 if (verify_phi_args (phi, bb, definition_block))
615 goto err;
616 bitmap_set_bit (names_defined_in_bb,
617 SSA_NAME_VERSION (PHI_RESULT (phi)));
620 /* Now verify all the uses and vuses in every statement of the block. */
621 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
623 tree stmt = bsi_stmt (bsi);
625 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_VIRTUAL_USES)
627 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
628 op, stmt, false, true,
629 names_defined_in_bb))
630 goto err;
633 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE)
635 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
636 op, stmt, false, false,
637 names_defined_in_bb))
638 goto err;
641 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_ALL_DEFS)
643 bitmap_set_bit (names_defined_in_bb, SSA_NAME_VERSION (op));
647 /* Verify the uses in arguments of PHI nodes at the exits from the
648 block. */
649 FOR_EACH_EDGE (e, ei, bb->succs)
651 for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
653 bool virtual = !is_gimple_reg (PHI_RESULT (phi));
654 op = PHI_ARG_DEF_FROM_EDGE (phi, e);
655 if (TREE_CODE (op) != SSA_NAME)
656 continue;
658 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
659 op, phi, false, virtual,
660 names_defined_in_bb))
661 goto err;
665 bitmap_clear (names_defined_in_bb);
668 /* Finally, verify alias information. */
669 verify_alias_info ();
671 free (definition_block);
672 /* Restore the dominance information to its prior known state, so
673 that we do not perturb the compiler's subsequent behavior. */
674 if (orig_dom_state == DOM_NONE)
675 free_dominance_info (CDI_DOMINATORS);
676 else
677 dom_computed[CDI_DOMINATORS] = orig_dom_state;
679 BITMAP_XFREE (names_defined_in_bb);
680 timevar_pop (TV_TREE_SSA_VERIFY);
681 return;
683 err:
684 internal_error ("verify_ssa failed.");
688 /* Initialize global DFA and SSA structures. */
690 void
691 init_tree_ssa (void)
693 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
694 call_clobbered_vars = BITMAP_XMALLOC ();
695 addressable_vars = BITMAP_XMALLOC ();
696 init_ssa_operands ();
697 init_ssanames ();
698 init_phinodes ();
699 global_var = NULL_TREE;
703 /* Deallocate memory associated with SSA data structures for FNDECL. */
705 void
706 delete_tree_ssa (void)
708 size_t i;
709 basic_block bb;
710 block_stmt_iterator bsi;
712 /* Remove annotations from every tree in the function. */
713 FOR_EACH_BB (bb)
714 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
716 tree stmt = bsi_stmt (bsi);
717 release_defs (stmt);
718 ggc_free (stmt->common.ann);
719 stmt->common.ann = NULL;
722 /* Remove annotations from every referenced variable. */
723 if (referenced_vars)
725 for (i = 0; i < num_referenced_vars; i++)
727 tree var = referenced_var (i);
728 ggc_free (var->common.ann);
729 var->common.ann = NULL;
731 referenced_vars = NULL;
734 fini_ssanames ();
735 fini_phinodes ();
736 fini_ssa_operands ();
738 global_var = NULL_TREE;
739 BITMAP_XFREE (call_clobbered_vars);
740 call_clobbered_vars = NULL;
741 BITMAP_XFREE (addressable_vars);
742 addressable_vars = NULL;
746 /* Return true if EXPR is a useless type conversion, otherwise return
747 false. */
749 bool
750 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
752 /* If the inner and outer types are effectively the same, then
753 strip the type conversion and enter the equivalence into
754 the table. */
755 if (inner_type == outer_type
756 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
757 return true;
759 /* If both types are pointers and the outer type is a (void *), then
760 the conversion is not necessary. The opposite is not true since
761 that conversion would result in a loss of information if the
762 equivalence was used. Consider an indirect function call where
763 we need to know the exact type of the function to correctly
764 implement the ABI. */
765 else if (POINTER_TYPE_P (inner_type)
766 && POINTER_TYPE_P (outer_type)
767 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
768 return true;
770 /* Pointers and references are equivalent once we get to GENERIC,
771 so strip conversions that just switch between them. */
772 else if (POINTER_TYPE_P (inner_type)
773 && POINTER_TYPE_P (outer_type)
774 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
775 TREE_TYPE (outer_type)))
776 return true;
778 /* If both the inner and outer types are integral types, then the
779 conversion is not necessary if they have the same mode and
780 signedness and precision, and both or neither are boolean. Some
781 code assumes an invariant that boolean types stay boolean and do
782 not become 1-bit bit-field types. Note that types with precision
783 not using all bits of the mode (such as bit-field types in C)
784 mean that testing of precision is necessary. */
785 else if (INTEGRAL_TYPE_P (inner_type)
786 && INTEGRAL_TYPE_P (outer_type)
787 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
788 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
789 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
791 bool first_boolean = (TREE_CODE (inner_type) == BOOLEAN_TYPE);
792 bool second_boolean = (TREE_CODE (outer_type) == BOOLEAN_TYPE);
793 if (first_boolean == second_boolean)
794 return true;
797 /* Recurse for complex types. */
798 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
799 && TREE_CODE (outer_type) == COMPLEX_TYPE
800 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
801 TREE_TYPE (inner_type)))
802 return true;
804 return false;
807 /* Return true if EXPR is a useless type conversion, otherwise return
808 false. */
810 bool
811 tree_ssa_useless_type_conversion (tree expr)
813 /* If we have an assignment that merely uses a NOP_EXPR to change
814 the top of the RHS to the type of the LHS and the type conversion
815 is "safe", then strip away the type conversion so that we can
816 enter LHS = RHS into the const_and_copies table. */
817 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR
818 || TREE_CODE (expr) == VIEW_CONVERT_EXPR
819 || TREE_CODE (expr) == NON_LVALUE_EXPR)
820 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
821 TREE_TYPE (TREE_OPERAND (expr,
822 0)));
825 return false;
829 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
830 described in walk_use_def_chains.
832 VISITED is a bitmap used to mark visited SSA_NAMEs to avoid
833 infinite loops.
835 IS_DFS is true if the caller wants to perform a depth-first search
836 when visiting PHI nodes. A DFS will visit each PHI argument and
837 call FN after each one. Otherwise, all the arguments are
838 visited first and then FN is called with each of the visited
839 arguments in a separate pass. */
841 static bool
842 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
843 bitmap visited, bool is_dfs)
845 tree def_stmt;
847 if (bitmap_bit_p (visited, SSA_NAME_VERSION (var)))
848 return false;
850 bitmap_set_bit (visited, SSA_NAME_VERSION (var));
852 def_stmt = SSA_NAME_DEF_STMT (var);
854 if (TREE_CODE (def_stmt) != PHI_NODE)
856 /* If we reached the end of the use-def chain, call FN. */
857 return fn (var, def_stmt, data);
859 else
861 int i;
863 /* When doing a breadth-first search, call FN before following the
864 use-def links for each argument. */
865 if (!is_dfs)
866 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
867 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
868 return true;
870 /* Follow use-def links out of each PHI argument. */
871 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
873 tree arg = PHI_ARG_DEF (def_stmt, i);
874 if (TREE_CODE (arg) == SSA_NAME
875 && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
876 return true;
879 /* When doing a depth-first search, call FN after following the
880 use-def links for each argument. */
881 if (is_dfs)
882 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
883 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
884 return true;
887 return false;
892 /* Walk use-def chains starting at the SSA variable VAR. Call
893 function FN at each reaching definition found. FN takes three
894 arguments: VAR, its defining statement (DEF_STMT) and a generic
895 pointer to whatever state information that FN may want to maintain
896 (DATA). FN is able to stop the walk by returning true, otherwise
897 in order to continue the walk, FN should return false.
899 Note, that if DEF_STMT is a PHI node, the semantics are slightly
900 different. The first argument to FN is no longer the original
901 variable VAR, but the PHI argument currently being examined. If FN
902 wants to get at VAR, it should call PHI_RESULT (PHI).
904 If IS_DFS is true, this function will:
906 1- walk the use-def chains for all the PHI arguments, and,
907 2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
909 If IS_DFS is false, the two steps above are done in reverse order
910 (i.e., a breadth-first search). */
913 void
914 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
915 bool is_dfs)
917 tree def_stmt;
919 gcc_assert (TREE_CODE (var) == SSA_NAME);
921 def_stmt = SSA_NAME_DEF_STMT (var);
923 /* We only need to recurse if the reaching definition comes from a PHI
924 node. */
925 if (TREE_CODE (def_stmt) != PHI_NODE)
926 (*fn) (var, def_stmt, data);
927 else
929 bitmap visited = BITMAP_XMALLOC ();
930 walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
931 BITMAP_XFREE (visited);
936 /* Replaces VAR with REPL in memory reference expression *X in
937 statement STMT. */
939 static void
940 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
942 tree new_var, ass_stmt, addr_var;
943 basic_block bb;
944 block_stmt_iterator bsi;
946 /* There is nothing special to handle in the other cases. */
947 if (TREE_CODE (repl) != ADDR_EXPR)
948 return;
949 addr_var = TREE_OPERAND (repl, 0);
951 while (handled_component_p (*x)
952 || TREE_CODE (*x) == REALPART_EXPR
953 || TREE_CODE (*x) == IMAGPART_EXPR)
954 x = &TREE_OPERAND (*x, 0);
956 if (TREE_CODE (*x) != INDIRECT_REF
957 || TREE_OPERAND (*x, 0) != var)
958 return;
960 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
962 *x = addr_var;
963 mark_new_vars_to_rename (stmt, vars_to_rename);
964 return;
968 /* Frontends sometimes produce expressions like *&a instead of a[0].
969 Create a temporary variable to handle this case. */
970 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
971 new_var = duplicate_ssa_name (var, ass_stmt);
972 TREE_OPERAND (*x, 0) = new_var;
973 TREE_OPERAND (ass_stmt, 0) = new_var;
975 bb = bb_for_stmt (stmt);
976 tree_block_label (bb);
977 bsi = bsi_after_labels (bb);
978 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
980 mark_new_vars_to_rename (stmt, vars_to_rename);
983 /* Replaces immediate uses of VAR by REPL. */
985 static void
986 replace_immediate_uses (tree var, tree repl)
988 int i, j, n;
989 dataflow_t df;
990 tree stmt;
991 bool mark_new_vars;
992 ssa_op_iter iter;
993 use_operand_p use_p;
995 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
996 n = num_immediate_uses (df);
998 for (i = 0; i < n; i++)
1000 stmt = immediate_use (df, i);
1002 if (TREE_CODE (stmt) == PHI_NODE)
1004 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
1005 if (PHI_ARG_DEF (stmt, j) == var)
1007 SET_PHI_ARG_DEF (stmt, j, repl);
1008 if (TREE_CODE (repl) == SSA_NAME
1009 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
1010 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
1013 continue;
1016 get_stmt_operands (stmt);
1017 mark_new_vars = false;
1018 if (is_gimple_reg (SSA_NAME_VAR (var)))
1020 if (TREE_CODE (stmt) == MODIFY_EXPR)
1022 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
1023 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
1026 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
1027 if (USE_FROM_PTR (use_p) == var)
1029 propagate_value (use_p, repl);
1030 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
1033 else
1035 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_VIRTUAL_USES)
1036 if (USE_FROM_PTR (use_p) == var)
1037 propagate_value (use_p, repl);
1040 /* FIXME. If REPL is a constant, we need to fold STMT.
1041 However, fold_stmt wants a pointer to the statement, because
1042 it may happen that it needs to replace the whole statement
1043 with a new expression. Since the current def-use machinery
1044 does not return pointers to statements, we call fold_stmt
1045 with the address of a local temporary, if that call changes
1046 the temporary then we fall on our swords.
1048 Note that all this will become unnecessary soon. This
1049 pass is being replaced with a proper copy propagation pass
1050 for 4.1 (dnovillo, 2004-09-17). */
1051 if (TREE_CODE (repl) != SSA_NAME)
1053 tree tmp = stmt;
1054 fold_stmt (&tmp);
1055 if (tmp != stmt)
1056 abort ();
1059 /* If REPL is a pointer, it may have different memory tags associated
1060 with it. For instance, VAR may have had a name tag while REPL
1061 only had a type tag. In these cases, the virtual operands (if
1062 any) in the statement will refer to different symbols which need
1063 to be renamed. */
1064 if (mark_new_vars)
1065 mark_new_vars_to_rename (stmt, vars_to_rename);
1066 else
1067 modify_stmt (stmt);
1071 /* Gets the value VAR is equivalent to according to EQ_TO. */
1073 static tree
1074 get_eq_name (tree *eq_to, tree var)
1076 unsigned ver;
1077 tree val = var;
1079 while (TREE_CODE (val) == SSA_NAME)
1081 ver = SSA_NAME_VERSION (val);
1082 if (!eq_to[ver])
1083 break;
1085 val = eq_to[ver];
1088 while (TREE_CODE (var) == SSA_NAME)
1090 ver = SSA_NAME_VERSION (var);
1091 if (!eq_to[ver])
1092 break;
1094 var = eq_to[ver];
1095 eq_to[ver] = val;
1098 return val;
1101 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
1102 its result is redundant to to EQ_TO array. */
1104 static void
1105 check_phi_redundancy (tree phi, tree *eq_to)
1107 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
1108 unsigned i, ver = SSA_NAME_VERSION (res), n;
1109 dataflow_t df;
1111 /* It is unlikely that such large phi node would be redundant. */
1112 if (PHI_NUM_ARGS (phi) > 16)
1113 return;
1115 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
1117 def = PHI_ARG_DEF (phi, i);
1119 if (TREE_CODE (def) == SSA_NAME)
1121 def = get_eq_name (eq_to, def);
1122 if (def == res)
1123 continue;
1126 if (val
1127 && !operand_equal_p (val, def, 0))
1128 return;
1130 val = def;
1133 /* At least one of the arguments should not be equal to the result, or
1134 something strange is happening. */
1135 gcc_assert (val);
1137 if (get_eq_name (eq_to, res) == val)
1138 return;
1140 if (!may_propagate_copy (res, val))
1141 return;
1143 eq_to[ver] = val;
1145 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
1146 n = num_immediate_uses (df);
1148 for (i = 0; i < n; i++)
1150 stmt = immediate_use (df, i);
1152 if (TREE_CODE (stmt) == PHI_NODE)
1153 check_phi_redundancy (stmt, eq_to);
1157 /* Removes redundant phi nodes.
1159 A redundant PHI node is a PHI node where all of its PHI arguments
1160 are the same value, excluding any PHI arguments which are the same
1161 as the PHI result.
1163 A redundant PHI node is effectively a copy, so we forward copy propagate
1164 which removes all uses of the destination of the PHI node then
1165 finally we delete the redundant PHI node.
1167 Note that if we can not copy propagate the PHI node, then the PHI
1168 will not be removed. Thus we do not have to worry about dependencies
1169 between PHIs and the problems serializing PHIs into copies creates.
1171 The most important effect of this pass is to remove degenerate PHI
1172 nodes created by removing unreachable code. */
1174 void
1175 kill_redundant_phi_nodes (void)
1177 tree *eq_to;
1178 unsigned i, old_num_ssa_names;
1179 basic_block bb;
1180 tree phi, var, repl, stmt;
1182 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
1183 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
1184 other value, it may be necessary to follow the chain till the final value.
1185 We perform path shortening (replacing the entries of the EQ_TO array with
1186 heads of these chains) whenever we access the field to prevent quadratic
1187 complexity (probably would not occur in practice anyway, but let us play
1188 it safe). */
1189 eq_to = xcalloc (num_ssa_names, sizeof (tree));
1191 /* We have had cases where computing immediate uses takes a
1192 significant amount of compile time. If we run into such
1193 problems here, we may want to only compute immediate uses for
1194 a subset of all the SSA_NAMEs instead of computing it for
1195 all of the SSA_NAMEs. */
1196 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
1197 old_num_ssa_names = num_ssa_names;
1199 FOR_EACH_BB (bb)
1201 for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
1203 var = PHI_RESULT (phi);
1204 check_phi_redundancy (phi, eq_to);
1208 /* Now propagate the values. */
1209 for (i = 0; i < old_num_ssa_names; i++)
1211 if (!ssa_name (i))
1212 continue;
1214 repl = get_eq_name (eq_to, ssa_name (i));
1215 if (repl != ssa_name (i))
1216 replace_immediate_uses (ssa_name (i), repl);
1219 /* And remove the dead phis. */
1220 for (i = 0; i < old_num_ssa_names; i++)
1222 if (!ssa_name (i))
1223 continue;
1225 repl = get_eq_name (eq_to, ssa_name (i));
1226 if (repl != ssa_name (i))
1228 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
1229 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
1233 free_df ();
1234 free (eq_to);
1237 struct tree_opt_pass pass_redundant_phi =
1239 "redphi", /* name */
1240 NULL, /* gate */
1241 kill_redundant_phi_nodes, /* execute */
1242 NULL, /* sub */
1243 NULL, /* next */
1244 0, /* static_pass_number */
1245 0, /* tv_id */
1246 PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
1247 0, /* properties_provided */
1248 0, /* properties_destroyed */
1249 0, /* todo_flags_start */
1250 TODO_dump_func | TODO_rename_vars
1251 | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
1252 0 /* letter */
1255 /* Emit warnings for uninitialized variables. This is done in two passes.
1257 The first pass notices real uses of SSA names with default definitions.
1258 Such uses are unconditionally uninitialized, and we can be certain that
1259 such a use is a mistake. This pass is run before most optimizations,
1260 so that we catch as many as we can.
1262 The second pass follows PHI nodes to find uses that are potentially
1263 uninitialized. In this case we can't necessarily prove that the use
1264 is really uninitialized. This pass is run after most optimizations,
1265 so that we thread as many jumps and possible, and delete as much dead
1266 code as possible, in order to reduce false positives. We also look
1267 again for plain uninitialized variables, since optimization may have
1268 changed conditionally uninitialized to unconditionally uninitialized. */
1270 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1271 warning text is in MSGID and LOCUS may contain a location or be null. */
1273 static void
1274 warn_uninit (tree t, const char *msgid, location_t *locus)
1276 tree var = SSA_NAME_VAR (t);
1277 tree def = SSA_NAME_DEF_STMT (t);
1279 /* Default uses (indicated by an empty definition statement),
1280 are uninitialized. */
1281 if (!IS_EMPTY_STMT (def))
1282 return;
1284 /* Except for PARMs of course, which are always initialized. */
1285 if (TREE_CODE (var) == PARM_DECL)
1286 return;
1288 /* Hard register variables get their initial value from the ether. */
1289 if (TREE_CODE (var) == VAR_DECL && DECL_HARD_REGISTER (var))
1290 return;
1292 /* TREE_NO_WARNING either means we already warned, or the front end
1293 wishes to suppress the warning. */
1294 if (TREE_NO_WARNING (var))
1295 return;
1297 if (!locus)
1298 locus = &DECL_SOURCE_LOCATION (var);
1299 warning (msgid, locus, var);
1300 TREE_NO_WARNING (var) = 1;
1303 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1304 and warn about them. */
1306 static tree
1307 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1309 location_t *locus = data;
1310 tree t = *tp;
1312 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1313 if (TREE_CODE (t) == SSA_NAME)
1315 warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
1316 *walk_subtrees = 0;
1318 else if (IS_TYPE_OR_DECL_P (t))
1319 *walk_subtrees = 0;
1321 return NULL_TREE;
1324 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1325 and warn about them. */
1327 static void
1328 warn_uninitialized_phi (tree phi)
1330 int i, n = PHI_NUM_ARGS (phi);
1332 /* Don't look at memory tags. */
1333 if (!is_gimple_reg (PHI_RESULT (phi)))
1334 return;
1336 for (i = 0; i < n; ++i)
1338 tree op = PHI_ARG_DEF (phi, i);
1339 if (TREE_CODE (op) == SSA_NAME)
1340 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
1341 NULL);
1345 static void
1346 execute_early_warn_uninitialized (void)
1348 block_stmt_iterator bsi;
1349 basic_block bb;
1351 FOR_EACH_BB (bb)
1352 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1353 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1354 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1357 static void
1358 execute_late_warn_uninitialized (void)
1360 basic_block bb;
1361 tree phi;
1363 /* Re-do the plain uninitialized variable check, as optimization may have
1364 straightened control flow. Do this first so that we don't accidentally
1365 get a "may be" warning when we'd have seen an "is" warning later. */
1366 execute_early_warn_uninitialized ();
1368 FOR_EACH_BB (bb)
1369 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1370 warn_uninitialized_phi (phi);
1373 static bool
1374 gate_warn_uninitialized (void)
1376 return warn_uninitialized != 0;
1379 struct tree_opt_pass pass_early_warn_uninitialized =
1381 NULL, /* name */
1382 gate_warn_uninitialized, /* gate */
1383 execute_early_warn_uninitialized, /* execute */
1384 NULL, /* sub */
1385 NULL, /* next */
1386 0, /* static_pass_number */
1387 0, /* tv_id */
1388 PROP_ssa, /* properties_required */
1389 0, /* properties_provided */
1390 0, /* properties_destroyed */
1391 0, /* todo_flags_start */
1392 0, /* todo_flags_finish */
1393 0 /* letter */
1396 struct tree_opt_pass pass_late_warn_uninitialized =
1398 NULL, /* name */
1399 gate_warn_uninitialized, /* gate */
1400 execute_late_warn_uninitialized, /* execute */
1401 NULL, /* sub */
1402 NULL, /* next */
1403 0, /* static_pass_number */
1404 0, /* tv_id */
1405 PROP_ssa, /* properties_required */
1406 0, /* properties_provided */
1407 0, /* properties_destroyed */
1408 0, /* todo_flags_start */
1409 0, /* todo_flags_finish */
1410 0 /* letter */