* configure.ac: Don't test for [build] __cxa_atexit when building a
[official-gcc.git] / gcc / tree-ssa.c
blob7f73bcf6e73e831968168edcccc5d28fdf07686b
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;
468 return;
470 err:
471 debug_variable (ptr);
472 internal_error ("verify_flow_sensitive_alias_info failed.");
475 DEF_VEC_MALLOC_P (bitmap);
477 /* Verify that all name tags have different points to sets.
478 This algorithm takes advantage of the fact that every variable with the
479 same name tag must have the same points-to set.
480 So we check a single variable for each name tag, and verify that its
481 points-to set is different from every other points-to set for other name
482 tags. */
484 static void
485 verify_name_tags (void)
487 size_t i;
488 size_t j;
489 bitmap first, second;
490 VEC (tree) *name_tag_reps = NULL;
491 VEC (bitmap) *pt_vars_for_reps = NULL;
493 /* First we compute the name tag representatives and their points-to sets. */
494 for (i = 0; i < num_ssa_names; i++)
496 if (ssa_name (i))
498 tree ptr = ssa_name (i);
499 struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr);
500 if (!TREE_VISITED (ptr)
501 || !POINTER_TYPE_P (TREE_TYPE (ptr))
502 || !pi
503 || !pi->name_mem_tag
504 || TREE_VISITED (pi->name_mem_tag))
505 continue;
506 TREE_VISITED (pi->name_mem_tag) = 1;
507 if (pi->pt_vars != NULL)
509 VEC_safe_push (tree, name_tag_reps, ptr);
510 VEC_safe_push (bitmap, pt_vars_for_reps, pi->pt_vars);
515 /* Now compare all the representative bitmaps with all other representative
516 bitmaps, to verify that they are all different. */
517 for (i = 0; VEC_iterate (bitmap, pt_vars_for_reps, i, first); i++)
519 for (j = i + 1; VEC_iterate (bitmap, pt_vars_for_reps, j, second); j++)
521 if (bitmap_equal_p (first, second))
523 error ("Two different pointers with identical points-to sets but different name tags");
524 debug_variable (VEC_index (tree, name_tag_reps, j));
525 goto err;
530 /* Lastly, clear out the visited flags. */
531 for (i = 0; i < num_ssa_names; i++)
533 if (ssa_name (i))
535 tree ptr = ssa_name (i);
536 struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr);
537 if (!TREE_VISITED (ptr)
538 || !POINTER_TYPE_P (TREE_TYPE (ptr))
539 || !pi
540 || !pi->name_mem_tag)
541 continue;
542 TREE_VISITED (pi->name_mem_tag) = 0;
545 VEC_free (bitmap, pt_vars_for_reps);
546 return;
548 err:
549 debug_variable (VEC_index (tree, name_tag_reps, i));
550 internal_error ("verify_name_tags failed");
552 /* Verify the consistency of aliasing information. */
554 static void
555 verify_alias_info (void)
557 verify_flow_sensitive_alias_info ();
558 verify_name_tags ();
559 verify_flow_insensitive_alias_info ();
563 /* Verify common invariants in the SSA web.
564 TODO: verify the variable annotations. */
566 void
567 verify_ssa (void)
569 size_t i;
570 basic_block bb;
571 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
572 ssa_op_iter iter;
573 tree op;
574 enum dom_state orig_dom_state = dom_computed[CDI_DOMINATORS];
575 bitmap names_defined_in_bb = BITMAP_XMALLOC ();
577 timevar_push (TV_TREE_SSA_VERIFY);
579 /* Keep track of SSA names present in the IL. */
580 for (i = 1; i < num_ssa_names; i++)
581 if (ssa_name (i))
582 TREE_VISITED (ssa_name (i)) = 0;
584 calculate_dominance_info (CDI_DOMINATORS);
586 /* Verify and register all the SSA_NAME definitions found in the
587 function. */
588 FOR_EACH_BB (bb)
590 tree phi;
591 block_stmt_iterator bsi;
593 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
595 int i;
596 if (verify_def (bb, definition_block, PHI_RESULT (phi), phi,
597 !is_gimple_reg (PHI_RESULT (phi))))
598 goto err;
599 for (i = 0; i < PHI_NUM_ARGS (phi); i++)
601 tree def = PHI_ARG_DEF (phi, i);
602 if (TREE_CODE (def) != SSA_NAME && !is_gimple_min_invariant (def))
604 error ("PHI argument is not SSA_NAME, or invariant");
605 print_generic_stmt (stderr, phi, TDF_VOPS);
606 goto err;
611 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
613 tree stmt;
615 stmt = bsi_stmt (bsi);
616 get_stmt_operands (stmt);
618 if (stmt_ann (stmt)->makes_aliased_stores
619 && NUM_V_MAY_DEFS (STMT_V_MAY_DEF_OPS (stmt)) == 0)
621 error ("Statement makes aliased stores, but has no V_MAY_DEFS");
622 print_generic_stmt (stderr, stmt, TDF_VOPS);
623 goto err;
626 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_VIRTUAL_DEFS)
628 if (verify_def (bb, definition_block, op, stmt, true))
629 goto err;
632 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
634 if (verify_def (bb, definition_block, op, stmt, false))
635 goto err;
641 /* Now verify all the uses and make sure they agree with the definitions
642 found in the previous pass. */
643 FOR_EACH_BB (bb)
645 edge e;
646 tree phi;
647 edge_iterator ei;
648 block_stmt_iterator bsi;
650 /* Make sure that all edges have a clear 'aux' field. */
651 FOR_EACH_EDGE (e, ei, bb->preds)
653 if (e->aux)
655 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
656 e->dest->index);
657 goto err;
661 /* Verify the arguments for every PHI node in the block. */
662 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
664 if (verify_phi_args (phi, bb, definition_block))
665 goto err;
666 bitmap_set_bit (names_defined_in_bb,
667 SSA_NAME_VERSION (PHI_RESULT (phi)));
670 /* Now verify all the uses and vuses in every statement of the block. */
671 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
673 tree stmt = bsi_stmt (bsi);
675 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_VIRTUAL_USES)
677 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
678 op, stmt, false, true,
679 names_defined_in_bb))
680 goto err;
683 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE)
685 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
686 op, stmt, false, false,
687 names_defined_in_bb))
688 goto err;
691 FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_ALL_DEFS)
693 bitmap_set_bit (names_defined_in_bb, SSA_NAME_VERSION (op));
697 /* Verify the uses in arguments of PHI nodes at the exits from the
698 block. */
699 FOR_EACH_EDGE (e, ei, bb->succs)
701 for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
703 bool virtual = !is_gimple_reg (PHI_RESULT (phi));
704 op = PHI_ARG_DEF_FROM_EDGE (phi, e);
705 if (TREE_CODE (op) != SSA_NAME)
706 continue;
708 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
709 op, phi, false, virtual,
710 names_defined_in_bb))
711 goto err;
715 bitmap_clear (names_defined_in_bb);
718 /* Finally, verify alias information. */
719 verify_alias_info ();
721 free (definition_block);
722 /* Restore the dominance information to its prior known state, so
723 that we do not perturb the compiler's subsequent behavior. */
724 if (orig_dom_state == DOM_NONE)
725 free_dominance_info (CDI_DOMINATORS);
726 else
727 dom_computed[CDI_DOMINATORS] = orig_dom_state;
729 BITMAP_XFREE (names_defined_in_bb);
730 timevar_pop (TV_TREE_SSA_VERIFY);
731 return;
733 err:
734 internal_error ("verify_ssa failed.");
738 /* Initialize global DFA and SSA structures. */
740 void
741 init_tree_ssa (void)
743 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
744 call_clobbered_vars = BITMAP_XMALLOC ();
745 addressable_vars = BITMAP_XMALLOC ();
746 init_ssa_operands ();
747 init_ssanames ();
748 init_phinodes ();
749 global_var = NULL_TREE;
753 /* Deallocate memory associated with SSA data structures for FNDECL. */
755 void
756 delete_tree_ssa (void)
758 size_t i;
759 basic_block bb;
760 block_stmt_iterator bsi;
762 /* Remove annotations from every tree in the function. */
763 FOR_EACH_BB (bb)
764 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
766 tree stmt = bsi_stmt (bsi);
767 release_defs (stmt);
768 ggc_free (stmt->common.ann);
769 stmt->common.ann = NULL;
772 /* Remove annotations from every referenced variable. */
773 if (referenced_vars)
775 for (i = 0; i < num_referenced_vars; i++)
777 tree var = referenced_var (i);
778 ggc_free (var->common.ann);
779 var->common.ann = NULL;
781 referenced_vars = NULL;
784 fini_ssanames ();
785 fini_phinodes ();
786 fini_ssa_operands ();
788 global_var = NULL_TREE;
789 BITMAP_XFREE (call_clobbered_vars);
790 call_clobbered_vars = NULL;
791 BITMAP_XFREE (addressable_vars);
792 addressable_vars = NULL;
796 /* Return true if EXPR is a useless type conversion, otherwise return
797 false. */
799 bool
800 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
802 /* If the inner and outer types are effectively the same, then
803 strip the type conversion and enter the equivalence into
804 the table. */
805 if (inner_type == outer_type
806 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
807 return true;
809 /* If both types are pointers and the outer type is a (void *), then
810 the conversion is not necessary. The opposite is not true since
811 that conversion would result in a loss of information if the
812 equivalence was used. Consider an indirect function call where
813 we need to know the exact type of the function to correctly
814 implement the ABI. */
815 else if (POINTER_TYPE_P (inner_type)
816 && POINTER_TYPE_P (outer_type)
817 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
818 return true;
820 /* Pointers and references are equivalent once we get to GENERIC,
821 so strip conversions that just switch between them. */
822 else if (POINTER_TYPE_P (inner_type)
823 && POINTER_TYPE_P (outer_type)
824 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
825 TREE_TYPE (outer_type)))
826 return true;
828 /* If both the inner and outer types are integral types, then the
829 conversion is not necessary if they have the same mode and
830 signedness and precision, and both or neither are boolean. Some
831 code assumes an invariant that boolean types stay boolean and do
832 not become 1-bit bit-field types. Note that types with precision
833 not using all bits of the mode (such as bit-field types in C)
834 mean that testing of precision is necessary. */
835 else if (INTEGRAL_TYPE_P (inner_type)
836 && INTEGRAL_TYPE_P (outer_type)
837 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
838 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
839 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
841 bool first_boolean = (TREE_CODE (inner_type) == BOOLEAN_TYPE);
842 bool second_boolean = (TREE_CODE (outer_type) == BOOLEAN_TYPE);
843 if (first_boolean == second_boolean)
844 return true;
847 /* Recurse for complex types. */
848 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
849 && TREE_CODE (outer_type) == COMPLEX_TYPE
850 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
851 TREE_TYPE (inner_type)))
852 return true;
854 return false;
857 /* Return true if EXPR is a useless type conversion, otherwise return
858 false. */
860 bool
861 tree_ssa_useless_type_conversion (tree expr)
863 /* If we have an assignment that merely uses a NOP_EXPR to change
864 the top of the RHS to the type of the LHS and the type conversion
865 is "safe", then strip away the type conversion so that we can
866 enter LHS = RHS into the const_and_copies table. */
867 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR
868 || TREE_CODE (expr) == VIEW_CONVERT_EXPR
869 || TREE_CODE (expr) == NON_LVALUE_EXPR)
870 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
871 TREE_TYPE (TREE_OPERAND (expr,
872 0)));
875 return false;
879 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
880 described in walk_use_def_chains.
882 VISITED is a bitmap used to mark visited SSA_NAMEs to avoid
883 infinite loops.
885 IS_DFS is true if the caller wants to perform a depth-first search
886 when visiting PHI nodes. A DFS will visit each PHI argument and
887 call FN after each one. Otherwise, all the arguments are
888 visited first and then FN is called with each of the visited
889 arguments in a separate pass. */
891 static bool
892 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
893 bitmap visited, bool is_dfs)
895 tree def_stmt;
897 if (bitmap_bit_p (visited, SSA_NAME_VERSION (var)))
898 return false;
900 bitmap_set_bit (visited, SSA_NAME_VERSION (var));
902 def_stmt = SSA_NAME_DEF_STMT (var);
904 if (TREE_CODE (def_stmt) != PHI_NODE)
906 /* If we reached the end of the use-def chain, call FN. */
907 return fn (var, def_stmt, data);
909 else
911 int i;
913 /* When doing a breadth-first search, call FN before following the
914 use-def links for each argument. */
915 if (!is_dfs)
916 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
917 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
918 return true;
920 /* Follow use-def links out of each PHI argument. */
921 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
923 tree arg = PHI_ARG_DEF (def_stmt, i);
924 if (TREE_CODE (arg) == SSA_NAME
925 && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
926 return true;
929 /* When doing a depth-first search, call FN after following the
930 use-def links for each argument. */
931 if (is_dfs)
932 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
933 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
934 return true;
937 return false;
942 /* Walk use-def chains starting at the SSA variable VAR. Call
943 function FN at each reaching definition found. FN takes three
944 arguments: VAR, its defining statement (DEF_STMT) and a generic
945 pointer to whatever state information that FN may want to maintain
946 (DATA). FN is able to stop the walk by returning true, otherwise
947 in order to continue the walk, FN should return false.
949 Note, that if DEF_STMT is a PHI node, the semantics are slightly
950 different. The first argument to FN is no longer the original
951 variable VAR, but the PHI argument currently being examined. If FN
952 wants to get at VAR, it should call PHI_RESULT (PHI).
954 If IS_DFS is true, this function will:
956 1- walk the use-def chains for all the PHI arguments, and,
957 2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
959 If IS_DFS is false, the two steps above are done in reverse order
960 (i.e., a breadth-first search). */
963 void
964 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
965 bool is_dfs)
967 tree def_stmt;
969 gcc_assert (TREE_CODE (var) == SSA_NAME);
971 def_stmt = SSA_NAME_DEF_STMT (var);
973 /* We only need to recurse if the reaching definition comes from a PHI
974 node. */
975 if (TREE_CODE (def_stmt) != PHI_NODE)
976 (*fn) (var, def_stmt, data);
977 else
979 bitmap visited = BITMAP_XMALLOC ();
980 walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
981 BITMAP_XFREE (visited);
986 /* Replaces VAR with REPL in memory reference expression *X in
987 statement STMT. */
989 static void
990 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
992 tree new_var, ass_stmt, addr_var;
993 basic_block bb;
994 block_stmt_iterator bsi;
996 /* There is nothing special to handle in the other cases. */
997 if (TREE_CODE (repl) != ADDR_EXPR)
998 return;
999 addr_var = TREE_OPERAND (repl, 0);
1001 while (handled_component_p (*x)
1002 || TREE_CODE (*x) == REALPART_EXPR
1003 || TREE_CODE (*x) == IMAGPART_EXPR)
1004 x = &TREE_OPERAND (*x, 0);
1006 if (TREE_CODE (*x) != INDIRECT_REF
1007 || TREE_OPERAND (*x, 0) != var)
1008 return;
1010 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
1012 *x = addr_var;
1013 mark_new_vars_to_rename (stmt, vars_to_rename);
1014 return;
1018 /* Frontends sometimes produce expressions like *&a instead of a[0].
1019 Create a temporary variable to handle this case. */
1020 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
1021 new_var = duplicate_ssa_name (var, ass_stmt);
1022 TREE_OPERAND (*x, 0) = new_var;
1023 TREE_OPERAND (ass_stmt, 0) = new_var;
1025 bb = bb_for_stmt (stmt);
1026 tree_block_label (bb);
1027 bsi = bsi_after_labels (bb);
1028 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
1030 mark_new_vars_to_rename (stmt, vars_to_rename);
1033 /* Replaces immediate uses of VAR by REPL. */
1035 static void
1036 replace_immediate_uses (tree var, tree repl)
1038 int i, j, n;
1039 dataflow_t df;
1040 tree stmt;
1041 bool mark_new_vars;
1042 ssa_op_iter iter;
1043 use_operand_p use_p;
1045 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
1046 n = num_immediate_uses (df);
1048 for (i = 0; i < n; i++)
1050 stmt = immediate_use (df, i);
1052 if (TREE_CODE (stmt) == PHI_NODE)
1054 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
1055 if (PHI_ARG_DEF (stmt, j) == var)
1057 SET_PHI_ARG_DEF (stmt, j, repl);
1058 if (TREE_CODE (repl) == SSA_NAME
1059 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
1060 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
1063 continue;
1066 get_stmt_operands (stmt);
1067 mark_new_vars = false;
1068 if (is_gimple_reg (SSA_NAME_VAR (var)))
1070 if (TREE_CODE (stmt) == MODIFY_EXPR)
1072 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
1073 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
1076 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
1077 if (USE_FROM_PTR (use_p) == var)
1079 propagate_value (use_p, repl);
1080 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
1083 else
1085 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_VIRTUAL_USES)
1086 if (USE_FROM_PTR (use_p) == var)
1087 propagate_value (use_p, repl);
1090 /* FIXME. If REPL is a constant, we need to fold STMT.
1091 However, fold_stmt wants a pointer to the statement, because
1092 it may happen that it needs to replace the whole statement
1093 with a new expression. Since the current def-use machinery
1094 does not return pointers to statements, we call fold_stmt
1095 with the address of a local temporary, if that call changes
1096 the temporary then we fallback on looking for a proper
1097 pointer to STMT by scanning STMT's basic block.
1099 Note that all this will become unnecessary soon. This
1100 pass is being replaced with a proper copy propagation pass
1101 for 4.1 (dnovillo, 2004-09-17). */
1102 if (TREE_CODE (repl) != SSA_NAME)
1104 tree tmp = stmt;
1105 fold_stmt (&tmp);
1106 if (tmp != stmt)
1108 block_stmt_iterator si = bsi_for_stmt (stmt);
1109 bsi_replace (&si, tmp, true);
1110 stmt = bsi_stmt (si);
1114 /* If REPL is a pointer, it may have different memory tags associated
1115 with it. For instance, VAR may have had a name tag while REPL
1116 only had a type tag. In these cases, the virtual operands (if
1117 any) in the statement will refer to different symbols which need
1118 to be renamed. */
1119 if (mark_new_vars)
1120 mark_new_vars_to_rename (stmt, vars_to_rename);
1121 else
1122 modify_stmt (stmt);
1126 /* Gets the value VAR is equivalent to according to EQ_TO. */
1128 static tree
1129 get_eq_name (tree *eq_to, tree var)
1131 unsigned ver;
1132 tree val = var;
1134 while (TREE_CODE (val) == SSA_NAME)
1136 ver = SSA_NAME_VERSION (val);
1137 if (!eq_to[ver])
1138 break;
1140 val = eq_to[ver];
1143 while (TREE_CODE (var) == SSA_NAME)
1145 ver = SSA_NAME_VERSION (var);
1146 if (!eq_to[ver])
1147 break;
1149 var = eq_to[ver];
1150 eq_to[ver] = val;
1153 return val;
1156 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
1157 its result is redundant to to EQ_TO array. */
1159 static void
1160 check_phi_redundancy (tree phi, tree *eq_to)
1162 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
1163 unsigned i, ver = SSA_NAME_VERSION (res), n;
1164 dataflow_t df;
1166 /* It is unlikely that such large phi node would be redundant. */
1167 if (PHI_NUM_ARGS (phi) > 16)
1168 return;
1170 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
1172 def = PHI_ARG_DEF (phi, i);
1174 if (TREE_CODE (def) == SSA_NAME)
1176 def = get_eq_name (eq_to, def);
1177 if (def == res)
1178 continue;
1181 if (val
1182 && !operand_equal_p (val, def, 0))
1183 return;
1185 val = def;
1188 /* At least one of the arguments should not be equal to the result, or
1189 something strange is happening. */
1190 gcc_assert (val);
1192 if (get_eq_name (eq_to, res) == val)
1193 return;
1195 if (!may_propagate_copy (res, val))
1196 return;
1198 eq_to[ver] = val;
1200 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
1201 n = num_immediate_uses (df);
1203 for (i = 0; i < n; i++)
1205 stmt = immediate_use (df, i);
1207 if (TREE_CODE (stmt) == PHI_NODE)
1208 check_phi_redundancy (stmt, eq_to);
1212 /* Removes redundant phi nodes.
1214 A redundant PHI node is a PHI node where all of its PHI arguments
1215 are the same value, excluding any PHI arguments which are the same
1216 as the PHI result.
1218 A redundant PHI node is effectively a copy, so we forward copy propagate
1219 which removes all uses of the destination of the PHI node then
1220 finally we delete the redundant PHI node.
1222 Note that if we can not copy propagate the PHI node, then the PHI
1223 will not be removed. Thus we do not have to worry about dependencies
1224 between PHIs and the problems serializing PHIs into copies creates.
1226 The most important effect of this pass is to remove degenerate PHI
1227 nodes created by removing unreachable code. */
1229 void
1230 kill_redundant_phi_nodes (void)
1232 tree *eq_to;
1233 unsigned i, old_num_ssa_names;
1234 basic_block bb;
1235 tree phi, var, repl, stmt;
1237 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
1238 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
1239 other value, it may be necessary to follow the chain till the final value.
1240 We perform path shortening (replacing the entries of the EQ_TO array with
1241 heads of these chains) whenever we access the field to prevent quadratic
1242 complexity (probably would not occur in practice anyway, but let us play
1243 it safe). */
1244 eq_to = xcalloc (num_ssa_names, sizeof (tree));
1246 /* We have had cases where computing immediate uses takes a
1247 significant amount of compile time. If we run into such
1248 problems here, we may want to only compute immediate uses for
1249 a subset of all the SSA_NAMEs instead of computing it for
1250 all of the SSA_NAMEs. */
1251 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
1252 old_num_ssa_names = num_ssa_names;
1254 FOR_EACH_BB (bb)
1256 for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
1258 var = PHI_RESULT (phi);
1259 check_phi_redundancy (phi, eq_to);
1263 /* Now propagate the values. */
1264 for (i = 0; i < old_num_ssa_names; i++)
1266 if (!ssa_name (i))
1267 continue;
1269 repl = get_eq_name (eq_to, ssa_name (i));
1270 if (repl != ssa_name (i))
1271 replace_immediate_uses (ssa_name (i), repl);
1274 /* And remove the dead phis. */
1275 for (i = 0; i < old_num_ssa_names; i++)
1277 if (!ssa_name (i))
1278 continue;
1280 repl = get_eq_name (eq_to, ssa_name (i));
1281 if (repl != ssa_name (i))
1283 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
1284 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
1288 free_df ();
1289 free (eq_to);
1292 struct tree_opt_pass pass_redundant_phi =
1294 "redphi", /* name */
1295 NULL, /* gate */
1296 kill_redundant_phi_nodes, /* execute */
1297 NULL, /* sub */
1298 NULL, /* next */
1299 0, /* static_pass_number */
1300 0, /* tv_id */
1301 PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
1302 0, /* properties_provided */
1303 0, /* properties_destroyed */
1304 0, /* todo_flags_start */
1305 TODO_dump_func | TODO_rename_vars
1306 | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
1307 0 /* letter */
1310 /* Emit warnings for uninitialized variables. This is done in two passes.
1312 The first pass notices real uses of SSA names with default definitions.
1313 Such uses are unconditionally uninitialized, and we can be certain that
1314 such a use is a mistake. This pass is run before most optimizations,
1315 so that we catch as many as we can.
1317 The second pass follows PHI nodes to find uses that are potentially
1318 uninitialized. In this case we can't necessarily prove that the use
1319 is really uninitialized. This pass is run after most optimizations,
1320 so that we thread as many jumps and possible, and delete as much dead
1321 code as possible, in order to reduce false positives. We also look
1322 again for plain uninitialized variables, since optimization may have
1323 changed conditionally uninitialized to unconditionally uninitialized. */
1325 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1326 warning text is in MSGID and LOCUS may contain a location or be null. */
1328 static void
1329 warn_uninit (tree t, const char *msgid, location_t *locus)
1331 tree var = SSA_NAME_VAR (t);
1332 tree def = SSA_NAME_DEF_STMT (t);
1334 /* Default uses (indicated by an empty definition statement),
1335 are uninitialized. */
1336 if (!IS_EMPTY_STMT (def))
1337 return;
1339 /* Except for PARMs of course, which are always initialized. */
1340 if (TREE_CODE (var) == PARM_DECL)
1341 return;
1343 /* Hard register variables get their initial value from the ether. */
1344 if (TREE_CODE (var) == VAR_DECL && DECL_HARD_REGISTER (var))
1345 return;
1347 /* TREE_NO_WARNING either means we already warned, or the front end
1348 wishes to suppress the warning. */
1349 if (TREE_NO_WARNING (var))
1350 return;
1352 if (!locus)
1353 locus = &DECL_SOURCE_LOCATION (var);
1354 warning (msgid, locus, var);
1355 TREE_NO_WARNING (var) = 1;
1358 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1359 and warn about them. */
1361 static tree
1362 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1364 location_t *locus = data;
1365 tree t = *tp;
1367 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1368 if (TREE_CODE (t) == SSA_NAME)
1370 warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
1371 *walk_subtrees = 0;
1373 else if (IS_TYPE_OR_DECL_P (t))
1374 *walk_subtrees = 0;
1376 return NULL_TREE;
1379 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1380 and warn about them. */
1382 static void
1383 warn_uninitialized_phi (tree phi)
1385 int i, n = PHI_NUM_ARGS (phi);
1387 /* Don't look at memory tags. */
1388 if (!is_gimple_reg (PHI_RESULT (phi)))
1389 return;
1391 for (i = 0; i < n; ++i)
1393 tree op = PHI_ARG_DEF (phi, i);
1394 if (TREE_CODE (op) == SSA_NAME)
1395 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
1396 NULL);
1400 static void
1401 execute_early_warn_uninitialized (void)
1403 block_stmt_iterator bsi;
1404 basic_block bb;
1406 FOR_EACH_BB (bb)
1407 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1408 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1409 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1412 static void
1413 execute_late_warn_uninitialized (void)
1415 basic_block bb;
1416 tree phi;
1418 /* Re-do the plain uninitialized variable check, as optimization may have
1419 straightened control flow. Do this first so that we don't accidentally
1420 get a "may be" warning when we'd have seen an "is" warning later. */
1421 execute_early_warn_uninitialized ();
1423 FOR_EACH_BB (bb)
1424 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1425 warn_uninitialized_phi (phi);
1428 static bool
1429 gate_warn_uninitialized (void)
1431 return warn_uninitialized != 0;
1434 struct tree_opt_pass pass_early_warn_uninitialized =
1436 NULL, /* name */
1437 gate_warn_uninitialized, /* gate */
1438 execute_early_warn_uninitialized, /* execute */
1439 NULL, /* sub */
1440 NULL, /* next */
1441 0, /* static_pass_number */
1442 0, /* tv_id */
1443 PROP_ssa, /* properties_required */
1444 0, /* properties_provided */
1445 0, /* properties_destroyed */
1446 0, /* todo_flags_start */
1447 0, /* todo_flags_finish */
1448 0 /* letter */
1451 struct tree_opt_pass pass_late_warn_uninitialized =
1453 NULL, /* name */
1454 gate_warn_uninitialized, /* gate */
1455 execute_late_warn_uninitialized, /* execute */
1456 NULL, /* sub */
1457 NULL, /* next */
1458 0, /* static_pass_number */
1459 0, /* tv_id */
1460 PROP_ssa, /* properties_required */
1461 0, /* properties_provided */
1462 0, /* properties_destroyed */
1463 0, /* todo_flags_start */
1464 0, /* todo_flags_finish */
1465 0 /* letter */