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