tree-into-ssa.c (set_livein_block): Fix typo in comment.
[gcc.git] / gcc / tree-ssa.c
1 /* Miscellaneous SSA utility functions.
2 Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
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.
10
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.
15
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. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "flags.h"
27 #include "rtl.h"
28 #include "tm_p.h"
29 #include "ggc.h"
30 #include "langhooks.h"
31 #include "hard-reg-set.h"
32 #include "basic-block.h"
33 #include "output.h"
34 #include "errors.h"
35 #include "expr.h"
36 #include "function.h"
37 #include "diagnostic.h"
38 #include "bitmap.h"
39 #include "tree-flow.h"
40 #include "tree-gimple.h"
41 #include "tree-inline.h"
42 #include "varray.h"
43 #include "timevar.h"
44 #include "tree-alias-common.h"
45 #include "hashtab.h"
46 #include "tree-dump.h"
47 #include "tree-pass.h"
48
49
50 /* Remove edge E and remove the corresponding arguments from the PHI nodes
51 in E's destination block. */
52
53 void
54 ssa_remove_edge (edge e)
55 {
56 tree phi, next;
57
58 /* Remove the appropriate PHI arguments in E's destination block. */
59 for (phi = phi_nodes (e->dest); phi; phi = next)
60 {
61 next = PHI_CHAIN (phi);
62 remove_phi_arg (phi, e->src);
63 }
64
65 remove_edge (e);
66 }
67
68 /* Remove the corresponding arguments from the PHI nodes in E's
69 destination block and redirect it to DEST. Return redirected edge.
70 The list of removed arguments is stored in PENDING_STMT (e). */
71
72 edge
73 ssa_redirect_edge (edge e, basic_block dest)
74 {
75 tree phi, next;
76 tree list = NULL, *last = &list;
77 tree src, dst, node;
78 int i;
79
80 /* Remove the appropriate PHI arguments in E's destination block. */
81 for (phi = phi_nodes (e->dest); phi; phi = next)
82 {
83 next = PHI_CHAIN (phi);
84
85 i = phi_arg_from_edge (phi, e);
86 if (i < 0)
87 continue;
88
89 src = PHI_ARG_DEF (phi, i);
90 dst = PHI_RESULT (phi);
91 node = build_tree_list (dst, src);
92 *last = node;
93 last = &TREE_CHAIN (node);
94
95 remove_phi_arg_num (phi, i);
96 }
97
98 e = redirect_edge_succ_nodup (e, dest);
99 PENDING_STMT (e) = list;
100
101 return e;
102 }
103
104
105 /* Return true if SSA_NAME is malformed and mark it visited.
106
107 IS_VIRTUAL is true if this SSA_NAME was found inside a virtual
108 operand. */
109
110 static bool
111 verify_ssa_name (tree ssa_name, bool is_virtual)
112 {
113 TREE_VISITED (ssa_name) = 1;
114
115 if (TREE_CODE (ssa_name) != SSA_NAME)
116 {
117 error ("Expected an SSA_NAME object");
118 return true;
119 }
120
121 if (SSA_NAME_IN_FREE_LIST (ssa_name))
122 {
123 error ("Found an SSA_NAME that had been released into the free pool");
124 return true;
125 }
126
127 if (is_virtual && is_gimple_reg (ssa_name))
128 {
129 error ("Found a virtual definition for a GIMPLE register");
130 return true;
131 }
132
133 if (!is_virtual && !is_gimple_reg (ssa_name))
134 {
135 error ("Found a real definition for a non-register");
136 return true;
137 }
138
139 return false;
140 }
141
142
143 /* Return true if the definition of SSA_NAME at block BB is malformed.
144
145 STMT is the statement where SSA_NAME is created.
146
147 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME
148 version numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set,
149 it means that the block in that array slot contains the
150 definition of SSA_NAME.
151
152 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
153 V_MUST_DEF. */
154
155 static bool
156 verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
157 tree stmt, bool is_virtual)
158 {
159 if (verify_ssa_name (ssa_name, is_virtual))
160 goto err;
161
162 if (definition_block[SSA_NAME_VERSION (ssa_name)])
163 {
164 error ("SSA_NAME created in two different blocks %i and %i",
165 definition_block[SSA_NAME_VERSION (ssa_name)]->index, bb->index);
166 goto err;
167 }
168
169 definition_block[SSA_NAME_VERSION (ssa_name)] = bb;
170
171 if (SSA_NAME_DEF_STMT (ssa_name) != stmt)
172 {
173 error ("SSA_NAME_DEF_STMT is wrong");
174 fprintf (stderr, "Expected definition statement:\n");
175 debug_generic_stmt (SSA_NAME_DEF_STMT (ssa_name));
176 fprintf (stderr, "\nActual definition statement:\n");
177 debug_generic_stmt (stmt);
178 goto err;
179 }
180
181 return false;
182
183 err:
184 fprintf (stderr, "while verifying SSA_NAME ");
185 print_generic_expr (stderr, ssa_name, 0);
186 fprintf (stderr, " in statement\n");
187 debug_generic_stmt (stmt);
188
189 return true;
190 }
191
192
193 /* Return true if the use of SSA_NAME at statement STMT in block BB is
194 malformed.
195
196 DEF_BB is the block where SSA_NAME was found to be created.
197
198 IDOM contains immediate dominator information for the flowgraph.
199
200 CHECK_ABNORMAL is true if the caller wants to check whether this use
201 is flowing through an abnormal edge (only used when checking PHI
202 arguments).
203
204 IS_VIRTUAL is true if SSA_NAME is created by a V_MAY_DEF or a
205 V_MUST_DEF. */
206
207 static bool
208 verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
209 tree stmt, bool check_abnormal, bool is_virtual)
210 {
211 bool err = false;
212
213 err = verify_ssa_name (ssa_name, is_virtual);
214
215 if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (ssa_name))
216 && var_ann (SSA_NAME_VAR (ssa_name))->default_def == ssa_name)
217 ; /* Default definitions have empty statements. Nothing to do. */
218 else if (!def_bb)
219 {
220 error ("Missing definition");
221 err = true;
222 }
223 else if (bb != def_bb
224 && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
225 {
226 error ("Definition in block %i does not dominate use in block %i",
227 def_bb->index, bb->index);
228 err = true;
229 }
230
231 if (check_abnormal
232 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
233 {
234 error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
235 err = true;
236 }
237
238 if (err)
239 {
240 fprintf (stderr, "for SSA_NAME: ");
241 debug_generic_expr (ssa_name);
242 fprintf (stderr, "in statement:\n");
243 debug_generic_stmt (stmt);
244 }
245
246 return err;
247 }
248
249
250 /* Return true if any of the arguments for PHI node PHI at block BB is
251 malformed.
252
253 IDOM contains immediate dominator information for the flowgraph.
254
255 DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME version
256 numbers. If DEFINITION_BLOCK[SSA_NAME_VERSION] is set, it means that the
257 block in that array slot contains the definition of SSA_NAME. */
258
259 static bool
260 verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
261 {
262 edge e;
263 bool err = false;
264 int i, phi_num_args = PHI_NUM_ARGS (phi);
265
266 /* Mark all the incoming edges. */
267 for (e = bb->pred; e; e = e->pred_next)
268 e->aux = (void *) 1;
269
270 for (i = 0; i < phi_num_args; i++)
271 {
272 tree op = PHI_ARG_DEF (phi, i);
273
274 e = PHI_ARG_EDGE (phi, i);
275
276 if (TREE_CODE (op) == SSA_NAME)
277 err = verify_use (e->src, definition_block[SSA_NAME_VERSION (op)], op,
278 phi, e->flags & EDGE_ABNORMAL,
279 !is_gimple_reg (PHI_RESULT (phi)));
280
281 if (e->dest != bb)
282 {
283 error ("Wrong edge %d->%d for PHI argument\n",
284 e->src->index, e->dest->index, bb->index);
285 err = true;
286 }
287
288 if (e->aux == (void *) 0)
289 {
290 error ("PHI argument flowing through dead edge %d->%d\n",
291 e->src->index, e->dest->index);
292 err = true;
293 }
294
295 if (e->aux == (void *) 2)
296 {
297 error ("PHI argument duplicated for edge %d->%d\n", e->src->index,
298 e->dest->index);
299 err = true;
300 }
301
302 if (err)
303 {
304 fprintf (stderr, "PHI argument\n");
305 debug_generic_stmt (op);
306 goto error;
307 }
308
309 e->aux = (void *) 2;
310 }
311
312 for (e = bb->pred; e; e = e->pred_next)
313 {
314 if (e->aux != (void *) 2)
315 {
316 error ("No argument flowing through edge %d->%d\n", e->src->index,
317 e->dest->index);
318 err = true;
319 goto error;
320 }
321 e->aux = (void *) 0;
322 }
323
324 error:
325 if (err)
326 {
327 fprintf (stderr, "for PHI node\n");
328 debug_generic_stmt (phi);
329 }
330
331
332 return err;
333 }
334
335
336 static void
337 verify_flow_insensitive_alias_info (void)
338 {
339 size_t i;
340 tree var;
341 bitmap visited = BITMAP_XMALLOC ();
342
343 for (i = 0; i < num_referenced_vars; i++)
344 {
345 var_ann_t ann;
346
347 var = referenced_var (i);
348 ann = var_ann (var);
349
350 if (ann->mem_tag_kind == TYPE_TAG || ann->mem_tag_kind == NAME_TAG)
351 {
352 size_t j;
353 varray_type may_aliases = ann->may_aliases;
354
355 for (j = 0; may_aliases && j < VARRAY_ACTIVE_SIZE (may_aliases); j++)
356 {
357 tree alias = VARRAY_TREE (may_aliases, j);
358
359 bitmap_set_bit (visited, var_ann (alias)->uid);
360
361 if (!may_be_aliased (alias))
362 {
363 error ("Non-addressable variable inside an alias set.");
364 debug_variable (alias);
365 goto err;
366 }
367 }
368 }
369 }
370
371 for (i = 0; i < num_referenced_vars; i++)
372 {
373 var_ann_t ann;
374
375 var = referenced_var (i);
376 ann = var_ann (var);
377
378 if (ann->mem_tag_kind == NOT_A_TAG
379 && ann->is_alias_tag
380 && !bitmap_bit_p (visited, ann->uid))
381 {
382 error ("Addressable variable that is an alias tag but is not in any alias set.");
383 goto err;
384 }
385 }
386
387 BITMAP_XFREE (visited);
388 return;
389
390 err:
391 debug_variable (var);
392 internal_error ("verify_flow_insensitive_alias_info failed.");
393 }
394
395
396 static void
397 verify_flow_sensitive_alias_info (void)
398 {
399 size_t i;
400 tree ptr;
401
402 for (i = 1; i < num_ssa_names; i++)
403 {
404 var_ann_t ann;
405 struct ptr_info_def *pi;
406
407 ptr = ssa_name (i);
408 ann = var_ann (SSA_NAME_VAR (ptr));
409 pi = SSA_NAME_PTR_INFO (ptr);
410
411 /* We only care for pointers that are actually referenced in the
412 program. */
413 if (!TREE_VISITED (ptr) || !POINTER_TYPE_P (TREE_TYPE (ptr)))
414 continue;
415
416 /* RESULT_DECL is special. If it's a GIMPLE register, then it
417 is only written-to only once in the return statement.
418 Otherwise, aggregate RESULT_DECLs may be written-to more than
419 once in virtual operands. */
420 if (TREE_CODE (SSA_NAME_VAR (ptr)) == RESULT_DECL
421 && is_gimple_reg (ptr))
422 continue;
423
424 if (pi == NULL)
425 continue;
426
427 if (pi->is_dereferenced && !pi->name_mem_tag && !ann->type_mem_tag)
428 {
429 error ("Dereferenced pointers should have a name or a type tag");
430 goto err;
431 }
432
433 if (pi->pt_anything && (pi->pt_malloc || pi->pt_vars))
434 {
435 error ("Pointers that point to anything should not point to malloc or other vars");
436 goto err;
437 }
438
439 if (pi->pt_malloc && pi->pt_vars)
440 {
441 error ("Pointers pointing to malloc get a unique tag and cannot point to other vars");
442 goto err;
443 }
444
445 if (pi->name_mem_tag
446 && !pi->pt_malloc
447 && (pi->pt_vars == NULL
448 || bitmap_first_set_bit (pi->pt_vars) < 0))
449 {
450 error ("Pointers with a memory tag, should have points-to sets or point to malloc");
451 goto err;
452 }
453
454 if (pi->value_escapes_p
455 && pi->name_mem_tag
456 && !is_call_clobbered (pi->name_mem_tag))
457 {
458 error ("Pointer escapes but its name tag is not call-clobbered.");
459 goto err;
460 }
461
462 if (pi->name_mem_tag && pi->pt_vars)
463 {
464 size_t j;
465
466 for (j = i + 1; j < num_ssa_names; j++)
467 {
468 tree ptr2 = ssa_name (j);
469 struct ptr_info_def *pi2 = SSA_NAME_PTR_INFO (ptr2);
470
471 if (!POINTER_TYPE_P (TREE_TYPE (ptr2)))
472 continue;
473
474 if (pi2
475 && pi2->name_mem_tag
476 && pi2->pt_vars
477 && bitmap_first_set_bit (pi2->pt_vars) >= 0
478 && pi->name_mem_tag != pi2->name_mem_tag
479 && bitmap_equal_p (pi->pt_vars, pi2->pt_vars))
480 {
481 error ("Two pointers with different name tags and identical points-to sets");
482 debug_variable (ptr2);
483 goto err;
484 }
485 }
486 }
487 }
488
489 return;
490
491 err:
492 debug_variable (ptr);
493 internal_error ("verify_flow_sensitive_alias_info failed.");
494 }
495
496
497 /* Verify the consistency of aliasing information. */
498
499 static void
500 verify_alias_info (void)
501 {
502 if (aliases_computed_p)
503 {
504 verify_flow_sensitive_alias_info ();
505 verify_flow_insensitive_alias_info ();
506 }
507 }
508
509
510 /* Verify common invariants in the SSA web.
511 TODO: verify the variable annotations. */
512
513 void
514 verify_ssa (void)
515 {
516 size_t i;
517 basic_block bb;
518 basic_block *definition_block = xcalloc (num_ssa_names, sizeof (basic_block));
519
520 timevar_push (TV_TREE_SSA_VERIFY);
521
522 /* Keep track of SSA names present in the IL. */
523 for (i = 1; i < num_ssa_names; i++)
524 TREE_VISITED (ssa_name (i)) = 0;
525
526 calculate_dominance_info (CDI_DOMINATORS);
527
528 /* Verify and register all the SSA_NAME definitions found in the
529 function. */
530 FOR_EACH_BB (bb)
531 {
532 tree phi;
533 block_stmt_iterator bsi;
534
535 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
536 if (verify_def (bb, definition_block, PHI_RESULT (phi), phi,
537 !is_gimple_reg (PHI_RESULT (phi))))
538 goto err;
539
540 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
541 {
542 tree stmt;
543 stmt_ann_t ann;
544 unsigned int j;
545 v_may_def_optype v_may_defs;
546 v_must_def_optype v_must_defs;
547 def_optype defs;
548
549 stmt = bsi_stmt (bsi);
550 ann = stmt_ann (stmt);
551 get_stmt_operands (stmt);
552
553 v_may_defs = V_MAY_DEF_OPS (ann);
554 if (ann->makes_aliased_stores && NUM_V_MAY_DEFS (v_may_defs) == 0)
555 {
556 error ("Statement makes aliased stores, but has no V_MAY_DEFS");
557 debug_generic_stmt (stmt);
558 goto err;
559 }
560
561 for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
562 {
563 tree op = V_MAY_DEF_RESULT (v_may_defs, j);
564 if (verify_def (bb, definition_block, op, stmt, true))
565 goto err;
566 }
567
568 v_must_defs = STMT_V_MUST_DEF_OPS (stmt);
569 for (j = 0; j < NUM_V_MUST_DEFS (v_must_defs); j++)
570 {
571 tree op = V_MUST_DEF_OP (v_must_defs, j);
572 if (verify_def (bb, definition_block, op, stmt, true))
573 goto err;
574 }
575
576 defs = DEF_OPS (ann);
577 for (j = 0; j < NUM_DEFS (defs); j++)
578 {
579 tree op = DEF_OP (defs, j);
580 if (verify_def (bb, definition_block, op, stmt, false))
581 goto err;
582 }
583 }
584 }
585
586
587 /* Now verify all the uses and make sure they agree with the definitions
588 found in the previous pass. */
589 FOR_EACH_BB (bb)
590 {
591 edge e;
592 tree phi;
593 block_stmt_iterator bsi;
594
595 /* Make sure that all edges have a clear 'aux' field. */
596 for (e = bb->pred; e; e = e->pred_next)
597 {
598 if (e->aux)
599 {
600 error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
601 e->dest->index);
602 goto err;
603 }
604 }
605
606 /* Verify the arguments for every PHI node in the block. */
607 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
608 if (verify_phi_args (phi, bb, definition_block))
609 goto err;
610
611 /* Now verify all the uses and vuses in every statement of the block. */
612 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
613 {
614 tree stmt = bsi_stmt (bsi);
615 stmt_ann_t ann = stmt_ann (stmt);
616 unsigned int j;
617 vuse_optype vuses;
618 v_may_def_optype v_may_defs;
619 use_optype uses;
620
621 vuses = VUSE_OPS (ann);
622 for (j = 0; j < NUM_VUSES (vuses); j++)
623 {
624 tree op = VUSE_OP (vuses, j);
625 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
626 op, stmt, false, true))
627 goto err;
628 }
629
630 v_may_defs = V_MAY_DEF_OPS (ann);
631 for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
632 {
633 tree op = V_MAY_DEF_OP (v_may_defs, j);
634 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
635 op, stmt, false, true))
636 goto err;
637 }
638
639 uses = USE_OPS (ann);
640 for (j = 0; j < NUM_USES (uses); j++)
641 {
642 tree op = USE_OP (uses, j);
643 if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
644 op, stmt, false, false))
645 goto err;
646 }
647 }
648 }
649
650 /* Finally, verify alias information. */
651 verify_alias_info ();
652
653 free (definition_block);
654 timevar_pop (TV_TREE_SSA_VERIFY);
655 return;
656
657 err:
658 internal_error ("verify_ssa failed.");
659 }
660
661
662 /* Initialize global DFA and SSA structures. */
663
664 void
665 init_tree_ssa (void)
666 {
667 VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
668 call_clobbered_vars = BITMAP_XMALLOC ();
669 addressable_vars = BITMAP_XMALLOC ();
670 init_ssa_operands ();
671 init_ssanames ();
672 init_phinodes ();
673 global_var = NULL_TREE;
674 aliases_computed_p = false;
675 }
676
677
678 /* Deallocate memory associated with SSA data structures for FNDECL. */
679
680 void
681 delete_tree_ssa (void)
682 {
683 size_t i;
684 basic_block bb;
685 block_stmt_iterator bsi;
686
687 /* Remove annotations from every tree in the function. */
688 FOR_EACH_BB (bb)
689 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
690 bsi_stmt (bsi)->common.ann = NULL;
691
692 /* Remove annotations from every referenced variable. */
693 if (referenced_vars)
694 {
695 for (i = 0; i < num_referenced_vars; i++)
696 referenced_var (i)->common.ann = NULL;
697 referenced_vars = NULL;
698 }
699
700 fini_ssanames ();
701 fini_phinodes ();
702 fini_ssa_operands ();
703
704 global_var = NULL_TREE;
705 BITMAP_XFREE (call_clobbered_vars);
706 call_clobbered_vars = NULL;
707 aliases_computed_p = false;
708 BITMAP_XFREE (addressable_vars);
709 addressable_vars = NULL;
710 }
711
712
713 /* Return true if EXPR is a useless type conversion, otherwise return
714 false. */
715
716 bool
717 tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
718 {
719 /* If the inner and outer types are effectively the same, then
720 strip the type conversion and enter the equivalence into
721 the table. */
722 if (inner_type == outer_type
723 || (lang_hooks.types_compatible_p (inner_type, outer_type)))
724 return true;
725
726 /* If both types are pointers and the outer type is a (void *), then
727 the conversion is not necessary. The opposite is not true since
728 that conversion would result in a loss of information if the
729 equivalence was used. Consider an indirect function call where
730 we need to know the exact type of the function to correctly
731 implement the ABI. */
732 else if (POINTER_TYPE_P (inner_type)
733 && POINTER_TYPE_P (outer_type)
734 && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
735 return true;
736
737 /* Pointers and references are equivalent once we get to GENERIC,
738 so strip conversions that just switch between them. */
739 else if (POINTER_TYPE_P (inner_type)
740 && POINTER_TYPE_P (outer_type)
741 && lang_hooks.types_compatible_p (TREE_TYPE (inner_type),
742 TREE_TYPE (outer_type)))
743 return true;
744
745 /* If both the inner and outer types are integral types, then the
746 conversion is not necessary if they have the same mode and
747 signedness and precision, and both or neither are boolean. Some
748 code assumes an invariant that boolean types stay boolean and do
749 not become 1-bit bit-field types. Note that types with precision
750 not using all bits of the mode (such as bit-field types in C)
751 mean that testing of precision is necessary. */
752 else if (INTEGRAL_TYPE_P (inner_type)
753 && INTEGRAL_TYPE_P (outer_type)
754 && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
755 && TYPE_UNSIGNED (inner_type) == TYPE_UNSIGNED (outer_type)
756 && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
757 {
758 bool first_boolean = (TREE_CODE (inner_type) == BOOLEAN_TYPE);
759 bool second_boolean = (TREE_CODE (outer_type) == BOOLEAN_TYPE);
760 if (first_boolean == second_boolean)
761 return true;
762 }
763
764 /* Recurse for complex types. */
765 else if (TREE_CODE (inner_type) == COMPLEX_TYPE
766 && TREE_CODE (outer_type) == COMPLEX_TYPE
767 && tree_ssa_useless_type_conversion_1 (TREE_TYPE (outer_type),
768 TREE_TYPE (inner_type)))
769 return true;
770
771 return false;
772 }
773
774 /* Return true if EXPR is a useless type conversion, otherwise return
775 false. */
776
777 bool
778 tree_ssa_useless_type_conversion (tree expr)
779 {
780 /* If we have an assignment that merely uses a NOP_EXPR to change
781 the top of the RHS to the type of the LHS and the type conversion
782 is "safe", then strip away the type conversion so that we can
783 enter LHS = RHS into the const_and_copies table. */
784 if (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR
785 || TREE_CODE (expr) == VIEW_CONVERT_EXPR
786 || TREE_CODE (expr) == NON_LVALUE_EXPR)
787 return tree_ssa_useless_type_conversion_1 (TREE_TYPE (expr),
788 TREE_TYPE (TREE_OPERAND (expr,
789 0)));
790
791
792 return false;
793 }
794
795
796 /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
797 described in walk_use_def_chains.
798
799 VISITED is a bitmap used to mark visited SSA_NAMEs to avoid
800 infinite loops.
801
802 IS_DFS is true if the caller wants to perform a depth-first search
803 when visiting PHI nodes. A DFS will visit each PHI argument and
804 call FN after each one. Otherwise, all the arguments are
805 visited first and then FN is called with each of the visited
806 arguments in a separate pass. */
807
808 static bool
809 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
810 bitmap visited, bool is_dfs)
811 {
812 tree def_stmt;
813
814 if (bitmap_bit_p (visited, SSA_NAME_VERSION (var)))
815 return false;
816
817 bitmap_set_bit (visited, SSA_NAME_VERSION (var));
818
819 def_stmt = SSA_NAME_DEF_STMT (var);
820
821 if (TREE_CODE (def_stmt) != PHI_NODE)
822 {
823 /* If we reached the end of the use-def chain, call FN. */
824 return fn (var, def_stmt, data);
825 }
826 else
827 {
828 int i;
829
830 /* When doing a breadth-first search, call FN before following the
831 use-def links for each argument. */
832 if (!is_dfs)
833 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
834 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
835 return true;
836
837 /* Follow use-def links out of each PHI argument. */
838 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
839 {
840 tree arg = PHI_ARG_DEF (def_stmt, i);
841 if (TREE_CODE (arg) == SSA_NAME
842 && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
843 return true;
844 }
845
846 /* When doing a depth-first search, call FN after following the
847 use-def links for each argument. */
848 if (is_dfs)
849 for (i = 0; i < PHI_NUM_ARGS (def_stmt); i++)
850 if (fn (PHI_ARG_DEF (def_stmt, i), def_stmt, data))
851 return true;
852 }
853
854 return false;
855 }
856
857
858
859 /* Walk use-def chains starting at the SSA variable VAR. Call
860 function FN at each reaching definition found. FN takes three
861 arguments: VAR, its defining statement (DEF_STMT) and a generic
862 pointer to whatever state information that FN may want to maintain
863 (DATA). FN is able to stop the walk by returning true, otherwise
864 in order to continue the walk, FN should return false.
865
866 Note, that if DEF_STMT is a PHI node, the semantics are slightly
867 different. The first argument to FN is no longer the original
868 variable VAR, but the PHI argument currently being examined. If FN
869 wants to get at VAR, it should call PHI_RESULT (PHI).
870
871 If IS_DFS is true, this function will:
872
873 1- walk the use-def chains for all the PHI arguments, and,
874 2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
875
876 If IS_DFS is false, the two steps above are done in reverse order
877 (i.e., a breadth-first search). */
878
879
880 void
881 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
882 bool is_dfs)
883 {
884 tree def_stmt;
885
886 #if defined ENABLE_CHECKING
887 if (TREE_CODE (var) != SSA_NAME)
888 abort ();
889 #endif
890
891 def_stmt = SSA_NAME_DEF_STMT (var);
892
893 /* We only need to recurse if the reaching definition comes from a PHI
894 node. */
895 if (TREE_CODE (def_stmt) != PHI_NODE)
896 (*fn) (var, def_stmt, data);
897 else
898 {
899 bitmap visited = BITMAP_XMALLOC ();
900 walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
901 BITMAP_XFREE (visited);
902 }
903 }
904
905
906 /* Replaces VAR with REPL in memory reference expression *X in
907 statement STMT. */
908
909 static void
910 propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
911 {
912 tree new_var, ass_stmt, addr_var;
913 basic_block bb;
914 block_stmt_iterator bsi;
915
916 /* There is nothing special to handle in the other cases. */
917 if (TREE_CODE (repl) != ADDR_EXPR)
918 return;
919 addr_var = TREE_OPERAND (repl, 0);
920
921 while (TREE_CODE (*x) == ARRAY_REF
922 || TREE_CODE (*x) == COMPONENT_REF
923 || TREE_CODE (*x) == BIT_FIELD_REF)
924 x = &TREE_OPERAND (*x, 0);
925
926 if (TREE_CODE (*x) != INDIRECT_REF
927 || TREE_OPERAND (*x, 0) != var)
928 return;
929
930 modify_stmt (stmt);
931 if (TREE_TYPE (*x) == TREE_TYPE (addr_var))
932 {
933 *x = addr_var;
934 mark_new_vars_to_rename (stmt, vars_to_rename);
935 return;
936 }
937
938 /* Frontends sometimes produce expressions like *&a instead of a[0].
939 Create a temporary variable to handle this case. */
940 ass_stmt = build2 (MODIFY_EXPR, void_type_node, NULL_TREE, repl);
941 new_var = duplicate_ssa_name (var, ass_stmt);
942 TREE_OPERAND (*x, 0) = new_var;
943 TREE_OPERAND (ass_stmt, 0) = new_var;
944
945 bb = bb_for_stmt (stmt);
946 tree_block_label (bb);
947 bsi = bsi_after_labels (bb);
948 bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
949
950 mark_new_vars_to_rename (stmt, vars_to_rename);
951 }
952
953 /* Replaces immediate uses of VAR by REPL. */
954
955 static void
956 replace_immediate_uses (tree var, tree repl)
957 {
958 use_optype uses;
959 vuse_optype vuses;
960 v_may_def_optype v_may_defs;
961 int i, j, n;
962 dataflow_t df;
963 tree stmt;
964 stmt_ann_t ann;
965 bool mark_new_vars;
966
967 df = get_immediate_uses (SSA_NAME_DEF_STMT (var));
968 n = num_immediate_uses (df);
969
970 for (i = 0; i < n; i++)
971 {
972 stmt = immediate_use (df, i);
973 ann = stmt_ann (stmt);
974
975 if (TREE_CODE (stmt) == PHI_NODE)
976 {
977 for (j = 0; j < PHI_NUM_ARGS (stmt); j++)
978 if (PHI_ARG_DEF (stmt, j) == var)
979 {
980 SET_PHI_ARG_DEF (stmt, j, repl);
981 if (TREE_CODE (repl) == SSA_NAME
982 && PHI_ARG_EDGE (stmt, j)->flags & EDGE_ABNORMAL)
983 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (repl) = 1;
984 }
985
986 continue;
987 }
988
989 get_stmt_operands (stmt);
990 mark_new_vars = false;
991 if (is_gimple_reg (SSA_NAME_VAR (var)))
992 {
993 if (TREE_CODE (stmt) == MODIFY_EXPR)
994 {
995 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 0), repl);
996 propagate_into_addr (stmt, var, &TREE_OPERAND (stmt, 1), repl);
997 }
998
999 uses = USE_OPS (ann);
1000 for (j = 0; j < (int) NUM_USES (uses); j++)
1001 if (USE_OP (uses, j) == var)
1002 {
1003 propagate_value (USE_OP_PTR (uses, j), repl);
1004 mark_new_vars = POINTER_TYPE_P (TREE_TYPE (repl));
1005 }
1006 }
1007 else
1008 {
1009 vuses = VUSE_OPS (ann);
1010 for (j = 0; j < (int) NUM_VUSES (vuses); j++)
1011 if (VUSE_OP (vuses, j) == var)
1012 propagate_value (VUSE_OP_PTR (vuses, j), repl);
1013
1014 v_may_defs = V_MAY_DEF_OPS (ann);
1015 for (j = 0; j < (int) NUM_V_MAY_DEFS (v_may_defs); j++)
1016 if (V_MAY_DEF_OP (v_may_defs, j) == var)
1017 propagate_value (V_MAY_DEF_OP_PTR (v_may_defs, j), repl);
1018 }
1019
1020 /* If REPL is a pointer, it may have different memory tags associated
1021 with it. For instance, VAR may have had a name tag while REPL
1022 only had a type tag. In these cases, the virtual operands (if
1023 any) in the statement will refer to different symbols which need
1024 to be renamed. */
1025 if (mark_new_vars)
1026 mark_new_vars_to_rename (stmt, vars_to_rename);
1027 else
1028 modify_stmt (stmt);
1029 }
1030 }
1031
1032 /* Gets the value VAR is equivalent to according to EQ_TO. */
1033
1034 static tree
1035 get_eq_name (tree *eq_to, tree var)
1036 {
1037 unsigned ver;
1038 tree val = var;
1039
1040 while (TREE_CODE (val) == SSA_NAME)
1041 {
1042 ver = SSA_NAME_VERSION (val);
1043 if (!eq_to[ver])
1044 break;
1045
1046 val = eq_to[ver];
1047 }
1048
1049 while (TREE_CODE (var) == SSA_NAME)
1050 {
1051 ver = SSA_NAME_VERSION (var);
1052 if (!eq_to[ver])
1053 break;
1054
1055 var = eq_to[ver];
1056 eq_to[ver] = val;
1057 }
1058
1059 return val;
1060 }
1061
1062 /* Checks whether phi node PHI is redundant and if it is, records the ssa name
1063 its result is redundant to to EQ_TO array. */
1064
1065 static void
1066 check_phi_redundancy (tree phi, tree *eq_to)
1067 {
1068 tree val = NULL_TREE, def, res = PHI_RESULT (phi), stmt;
1069 unsigned i, ver = SSA_NAME_VERSION (res), n;
1070 dataflow_t df;
1071
1072 /* It is unlikely that such large phi node would be redundant. */
1073 if (PHI_NUM_ARGS (phi) > 16)
1074 return;
1075
1076 for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
1077 {
1078 def = PHI_ARG_DEF (phi, i);
1079
1080 if (TREE_CODE (def) == SSA_NAME)
1081 {
1082 def = get_eq_name (eq_to, def);
1083 if (def == res)
1084 continue;
1085 }
1086
1087 if (val
1088 && !operand_equal_p (val, def, 0))
1089 return;
1090
1091 val = def;
1092 }
1093
1094 /* At least one of the arguments should not be equal to the result, or
1095 something strange is happening. */
1096 if (!val)
1097 abort ();
1098
1099 if (get_eq_name (eq_to, res) == val)
1100 return;
1101
1102 if (!may_propagate_copy (res, val))
1103 return;
1104
1105 eq_to[ver] = val;
1106
1107 df = get_immediate_uses (SSA_NAME_DEF_STMT (res));
1108 n = num_immediate_uses (df);
1109
1110 for (i = 0; i < n; i++)
1111 {
1112 stmt = immediate_use (df, i);
1113
1114 if (TREE_CODE (stmt) == PHI_NODE)
1115 check_phi_redundancy (stmt, eq_to);
1116 }
1117 }
1118
1119 /* Removes redundant phi nodes.
1120
1121 A redundant PHI node is a PHI node where all of its PHI arguments
1122 are the same value, excluding any PHI arguments which are the same
1123 as the PHI result.
1124
1125 A redundant PHI node is effectively a copy, so we forward copy propagate
1126 which removes all uses of the destination of the PHI node then
1127 finally we delete the redundant PHI node.
1128
1129 Note that if we can not copy propagate the PHI node, then the PHI
1130 will not be removed. Thus we do not have to worry about dependencies
1131 between PHIs and the problems serializing PHIs into copies creates.
1132
1133 The most important effect of this pass is to remove degenerate PHI
1134 nodes created by removing unreachable code. */
1135
1136 void
1137 kill_redundant_phi_nodes (void)
1138 {
1139 tree *eq_to;
1140 unsigned i, old_num_ssa_names;
1141 basic_block bb;
1142 tree phi, var, repl, stmt;
1143
1144 /* The EQ_TO[VER] holds the value by that the ssa name VER should be
1145 replaced. If EQ_TO[VER] is ssa name and it is decided to replace it by
1146 other value, it may be necessary to follow the chain till the final value.
1147 We perform path shortening (replacing the entries of the EQ_TO array with
1148 heads of these chains) whenever we access the field to prevent quadratic
1149 complexity (probably would not occur in practice anyway, but let us play
1150 it safe). */
1151 eq_to = xcalloc (num_ssa_names, sizeof (tree));
1152
1153 /* We have had cases where computing immediate uses takes a
1154 significant amount of compile time. If we run into such
1155 problems here, we may want to only compute immediate uses for
1156 a subset of all the SSA_NAMEs instead of computing it for
1157 all of the SSA_NAMEs. */
1158 compute_immediate_uses (TDFA_USE_OPS | TDFA_USE_VOPS, NULL);
1159 old_num_ssa_names = num_ssa_names;
1160
1161 FOR_EACH_BB (bb)
1162 {
1163 for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
1164 {
1165 var = PHI_RESULT (phi);
1166 check_phi_redundancy (phi, eq_to);
1167 }
1168 }
1169
1170 /* Now propagate the values. */
1171 for (i = 0; i < old_num_ssa_names; i++)
1172 {
1173 if (!ssa_name (i))
1174 continue;
1175
1176 repl = get_eq_name (eq_to, ssa_name (i));
1177 if (repl != ssa_name (i))
1178 replace_immediate_uses (ssa_name (i), repl);
1179 }
1180
1181 /* And remove the dead phis. */
1182 for (i = 0; i < old_num_ssa_names; i++)
1183 {
1184 if (!ssa_name (i))
1185 continue;
1186
1187 repl = get_eq_name (eq_to, ssa_name (i));
1188 if (repl != ssa_name (i))
1189 {
1190 stmt = SSA_NAME_DEF_STMT (ssa_name (i));
1191 remove_phi_node (stmt, NULL_TREE, bb_for_stmt (stmt));
1192 }
1193 }
1194
1195 free_df ();
1196 free (eq_to);
1197 }
1198
1199 struct tree_opt_pass pass_redundant_phi =
1200 {
1201 "redphi", /* name */
1202 NULL, /* gate */
1203 kill_redundant_phi_nodes, /* execute */
1204 NULL, /* sub */
1205 NULL, /* next */
1206 0, /* static_pass_number */
1207 0, /* tv_id */
1208 PROP_cfg | PROP_ssa, /* properties_required */
1209 0, /* properties_provided */
1210 0, /* properties_destroyed */
1211 0, /* todo_flags_start */
1212 TODO_dump_func | TODO_rename_vars
1213 | TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
1214 };
1215 \f
1216 /* Emit warnings for uninitialized variables. This is done in two passes.
1217
1218 The first pass notices real uses of SSA names with default definitions.
1219 Such uses are unconditionally uninitialized, and we can be certain that
1220 such a use is a mistake. This pass is run before most optimizations,
1221 so that we catch as many as we can.
1222
1223 The second pass follows PHI nodes to find uses that are potentially
1224 uninitialized. In this case we can't necessarily prove that the use
1225 is really uninitialized. This pass is run after most optimizations,
1226 so that we thread as many jumps and possible, and delete as much dead
1227 code as possible, in order to reduce false positives. We also look
1228 again for plain uninitialized variables, since optimization may have
1229 changed conditionally uninitialized to unconditionally uninitialized. */
1230
1231 /* Emit a warning for T, an SSA_NAME, being uninitialized. The exact
1232 warning text is in MSGID and LOCUS may contain a location or be null. */
1233
1234 static void
1235 warn_uninit (tree t, const char *msgid, location_t *locus)
1236 {
1237 tree var = SSA_NAME_VAR (t);
1238 tree def = SSA_NAME_DEF_STMT (t);
1239
1240 /* Default uses (indicated by an empty definition statement),
1241 are uninitialized. */
1242 if (!IS_EMPTY_STMT (def))
1243 return;
1244
1245 /* Except for PARMs of course, which are always initialized. */
1246 if (TREE_CODE (var) == PARM_DECL)
1247 return;
1248
1249 /* Hard register variables get their initial value from the ether. */
1250 if (DECL_HARD_REGISTER (var))
1251 return;
1252
1253 /* TREE_NO_WARNING either means we already warned, or the front end
1254 wishes to suppress the warning. */
1255 if (TREE_NO_WARNING (var))
1256 return;
1257
1258 if (!locus)
1259 locus = &DECL_SOURCE_LOCATION (var);
1260 warning (msgid, locus, var);
1261 TREE_NO_WARNING (var) = 1;
1262 }
1263
1264 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1265 and warn about them. */
1266
1267 static tree
1268 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
1269 {
1270 location_t *locus = data;
1271 tree t = *tp;
1272
1273 /* We only do data flow with SSA_NAMEs, so that's all we can warn about. */
1274 if (TREE_CODE (t) == SSA_NAME)
1275 {
1276 warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
1277 *walk_subtrees = 0;
1278 }
1279 else if (DECL_P (t) || TYPE_P (t))
1280 *walk_subtrees = 0;
1281
1282 return NULL_TREE;
1283 }
1284
1285 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1286 and warn about them. */
1287
1288 static void
1289 warn_uninitialized_phi (tree phi)
1290 {
1291 int i, n = PHI_NUM_ARGS (phi);
1292
1293 /* Don't look at memory tags. */
1294 if (!is_gimple_reg (PHI_RESULT (phi)))
1295 return;
1296
1297 for (i = 0; i < n; ++i)
1298 {
1299 tree op = PHI_ARG_DEF (phi, i);
1300 if (TREE_CODE (op) == SSA_NAME)
1301 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
1302 NULL);
1303 }
1304 }
1305
1306 static void
1307 execute_early_warn_uninitialized (void)
1308 {
1309 block_stmt_iterator bsi;
1310 basic_block bb;
1311
1312 FOR_EACH_BB (bb)
1313 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1314 walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
1315 EXPR_LOCUS (bsi_stmt (bsi)), NULL);
1316 }
1317
1318 static void
1319 execute_late_warn_uninitialized (void)
1320 {
1321 basic_block bb;
1322 tree phi;
1323
1324 /* Re-do the plain uninitialized variable check, as optimization may have
1325 straightened control flow. Do this first so that we don't accidentally
1326 get a "may be" warning when we'd have seen an "is" warning later. */
1327 execute_early_warn_uninitialized ();
1328
1329 FOR_EACH_BB (bb)
1330 for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1331 warn_uninitialized_phi (phi);
1332 }
1333
1334 static bool
1335 gate_warn_uninitialized (void)
1336 {
1337 return warn_uninitialized != 0;
1338 }
1339
1340 struct tree_opt_pass pass_early_warn_uninitialized =
1341 {
1342 NULL, /* name */
1343 gate_warn_uninitialized, /* gate */
1344 execute_early_warn_uninitialized, /* execute */
1345 NULL, /* sub */
1346 NULL, /* next */
1347 0, /* static_pass_number */
1348 0, /* tv_id */
1349 PROP_ssa, /* properties_required */
1350 0, /* properties_provided */
1351 0, /* properties_destroyed */
1352 0, /* todo_flags_start */
1353 0 /* todo_flags_finish */
1354 };
1355
1356 struct tree_opt_pass pass_late_warn_uninitialized =
1357 {
1358 NULL, /* name */
1359 gate_warn_uninitialized, /* gate */
1360 execute_late_warn_uninitialized, /* execute */
1361 NULL, /* sub */
1362 NULL, /* next */
1363 0, /* static_pass_number */
1364 0, /* tv_id */
1365 PROP_ssa, /* properties_required */
1366 0, /* properties_provided */
1367 0, /* properties_destroyed */
1368 0, /* todo_flags_start */
1369 0 /* todo_flags_finish */
1370 };