OSDN Git Service

2009-10-26 Ben Elliston <bje@au.ibm.com>
[pf3gnuchains/gcc-fork.git] / gcc / tree-ssa.c
1 /* Miscellaneous SSA utility functions.
2    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
3    Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
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 "target.h"
30 #include "ggc.h"
31 #include "langhooks.h"
32 #include "hard-reg-set.h"
33 #include "basic-block.h"
34 #include "output.h"
35 #include "expr.h"
36 #include "function.h"
37 #include "diagnostic.h"
38 #include "bitmap.h"
39 #include "pointer-set.h"
40 #include "tree-flow.h"
41 #include "gimple.h"
42 #include "tree-inline.h"
43 #include "varray.h"
44 #include "timevar.h"
45 #include "hashtab.h"
46 #include "tree-dump.h"
47 #include "tree-pass.h"
48 #include "toplev.h"
49
50 /* Pointer map of variable mappings, keyed by edge.  */
51 static struct pointer_map_t *edge_var_maps;
52
53
54 /* Add a mapping with PHI RESULT and PHI DEF associated with edge E.  */
55
56 void
57 redirect_edge_var_map_add (edge e, tree result, tree def, source_location locus)
58 {
59   void **slot;
60   edge_var_map_vector old_head, head;
61   edge_var_map new_node;
62
63   if (edge_var_maps == NULL)
64     edge_var_maps = pointer_map_create ();
65
66   slot = pointer_map_insert (edge_var_maps, e);
67   old_head = head = (edge_var_map_vector) *slot;
68   if (!head)
69     {
70       head = VEC_alloc (edge_var_map, heap, 5);
71       *slot = head;
72     }
73   new_node.def = def;
74   new_node.result = result;
75   new_node.locus = locus;
76
77   VEC_safe_push (edge_var_map, heap, head, &new_node);
78   if (old_head != head)
79     {
80       /* The push did some reallocation.  Update the pointer map.  */
81       *slot = head;
82     }
83 }
84
85
86 /* Clear the var mappings in edge E.  */
87
88 void
89 redirect_edge_var_map_clear (edge e)
90 {
91   void **slot;
92   edge_var_map_vector head;
93
94   if (!edge_var_maps)
95     return;
96
97   slot = pointer_map_contains (edge_var_maps, e);
98
99   if (slot)
100     {
101       head = (edge_var_map_vector) *slot;
102       VEC_free (edge_var_map, heap, head);
103       *slot = NULL;
104     }
105 }
106
107
108 /* Duplicate the redirected var mappings in OLDE in NEWE.
109
110    Since we can't remove a mapping, let's just duplicate it.  This assumes a
111    pointer_map can have multiple edges mapping to the same var_map (many to
112    one mapping), since we don't remove the previous mappings.  */
113
114 void
115 redirect_edge_var_map_dup (edge newe, edge olde)
116 {
117   void **new_slot, **old_slot;
118   edge_var_map_vector head;
119
120   if (!edge_var_maps)
121     return;
122
123   new_slot = pointer_map_insert (edge_var_maps, newe);
124   old_slot = pointer_map_contains (edge_var_maps, olde);
125   if (!old_slot)
126     return;
127   head = (edge_var_map_vector) *old_slot;
128
129   if (head)
130     *new_slot = VEC_copy (edge_var_map, heap, head);
131   else
132     *new_slot = VEC_alloc (edge_var_map, heap, 5);
133 }
134
135
136 /* Return the variable mappings for a given edge.  If there is none, return
137    NULL.  */
138
139 edge_var_map_vector
140 redirect_edge_var_map_vector (edge e)
141 {
142   void **slot;
143
144   /* Hey, what kind of idiot would... you'd be surprised.  */
145   if (!edge_var_maps)
146     return NULL;
147
148   slot = pointer_map_contains (edge_var_maps, e);
149   if (!slot)
150     return NULL;
151
152   return (edge_var_map_vector) *slot;
153 }
154
155 /* Used by redirect_edge_var_map_destroy to free all memory.  */
156
157 static bool
158 free_var_map_entry (const void *key ATTRIBUTE_UNUSED,
159                     void **value,
160                     void *data ATTRIBUTE_UNUSED)
161 {
162   edge_var_map_vector head = (edge_var_map_vector) *value;
163   VEC_free (edge_var_map, heap, head);
164   return true;
165 }
166
167 /* Clear the edge variable mappings.  */
168
169 void
170 redirect_edge_var_map_destroy (void)
171 {
172   if (edge_var_maps)
173     {
174       pointer_map_traverse (edge_var_maps, free_var_map_entry, NULL);
175       pointer_map_destroy (edge_var_maps);
176       edge_var_maps = NULL;
177     }
178 }
179
180
181 /* Remove the corresponding arguments from the PHI nodes in E's
182    destination block and redirect it to DEST.  Return redirected edge.
183    The list of removed arguments is stored in a vector accessed
184    through edge_var_maps.  */
185
186 edge
187 ssa_redirect_edge (edge e, basic_block dest)
188 {
189   gimple_stmt_iterator gsi;
190   gimple phi;
191
192   redirect_edge_var_map_clear (e);
193
194   /* Remove the appropriate PHI arguments in E's destination block.  */
195   for (gsi = gsi_start_phis (e->dest); !gsi_end_p (gsi); gsi_next (&gsi))
196     {
197       tree def;
198       source_location locus ;
199
200       phi = gsi_stmt (gsi);
201       def = gimple_phi_arg_def (phi, e->dest_idx);
202       locus = gimple_phi_arg_location (phi, e->dest_idx);
203
204       if (def == NULL_TREE)
205         continue;
206
207       redirect_edge_var_map_add (e, gimple_phi_result (phi), def, locus);
208     }
209
210   e = redirect_edge_succ_nodup (e, dest);
211
212   return e;
213 }
214
215
216 /* Add PHI arguments queued in PENDING_STMT list on edge E to edge
217    E->dest.  */
218
219 void
220 flush_pending_stmts (edge e)
221 {
222   gimple phi;
223   edge_var_map_vector v;
224   edge_var_map *vm;
225   int i;
226   gimple_stmt_iterator gsi;
227
228   v = redirect_edge_var_map_vector (e);
229   if (!v)
230     return;
231
232   for (gsi = gsi_start_phis (e->dest), i = 0;
233        !gsi_end_p (gsi) && VEC_iterate (edge_var_map, v, i, vm);
234        gsi_next (&gsi), i++)
235     {
236       tree def;
237
238       phi = gsi_stmt (gsi);
239       def = redirect_edge_var_map_def (vm);
240       add_phi_arg (phi, def, e, redirect_edge_var_map_location (vm));
241     }
242
243   redirect_edge_var_map_clear (e);
244 }
245
246 /* Given a tree for an expression for which we might want to emit
247    locations or values in debug information (generally a variable, but
248    we might deal with other kinds of trees in the future), return the
249    tree that should be used as the variable of a DEBUG_BIND STMT or
250    VAR_LOCATION INSN or NOTE.  Return NULL if VAR is not to be tracked.  */
251
252 tree
253 target_for_debug_bind (tree var)
254 {
255   if (!MAY_HAVE_DEBUG_STMTS)
256     return NULL_TREE;
257
258   if (TREE_CODE (var) != VAR_DECL
259       && TREE_CODE (var) != PARM_DECL)
260     return NULL_TREE;
261
262   if (DECL_HAS_VALUE_EXPR_P (var))
263     return target_for_debug_bind (DECL_VALUE_EXPR (var));
264
265   if (DECL_IGNORED_P (var))
266     return NULL_TREE;
267
268   if (!is_gimple_reg (var))
269     return NULL_TREE;
270
271   return var;
272 }
273
274 /* Called via walk_tree, look for SSA_NAMEs that have already been
275    released.  */
276
277 static tree
278 find_released_ssa_name (tree *tp, int *walk_subtrees, void *data_)
279 {
280   struct walk_stmt_info *wi = (struct walk_stmt_info *) data_;
281
282   if (wi->is_lhs)
283     return NULL_TREE;
284
285   if (TREE_CODE (*tp) == SSA_NAME)
286     {
287       if (SSA_NAME_IN_FREE_LIST (*tp))
288         return *tp;
289
290       *walk_subtrees = 0;
291     }
292   else if (IS_TYPE_OR_DECL_P (*tp))
293     *walk_subtrees = 0;
294
295   return NULL_TREE;
296 }
297
298 /* Insert a DEBUG BIND stmt before the DEF of VAR if VAR is referenced
299    by other DEBUG stmts, and replace uses of the DEF with the
300    newly-created debug temp.  */
301
302 void
303 insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var)
304 {
305   imm_use_iterator imm_iter;
306   use_operand_p use_p;
307   gimple stmt;
308   gimple def_stmt = NULL;
309   int usecount = 0;
310   tree value = NULL;
311
312   if (!MAY_HAVE_DEBUG_STMTS)
313     return;
314
315   /* First of all, check whether there are debug stmts that reference
316      this variable and, if there are, decide whether we should use a
317      debug temp.  */
318   FOR_EACH_IMM_USE_FAST (use_p, imm_iter, var)
319     {
320       stmt = USE_STMT (use_p);
321
322       if (!gimple_debug_bind_p (stmt))
323         continue;
324
325       if (usecount++)
326         break;
327
328       if (gimple_debug_bind_get_value (stmt) != var)
329         {
330           /* Count this as an additional use, so as to make sure we
331              use a temp unless VAR's definition has a SINGLE_RHS that
332              can be shared.  */
333           usecount++;
334           break;
335         }
336     }
337
338   if (!usecount)
339     return;
340
341   if (gsi)
342     def_stmt = gsi_stmt (*gsi);
343   else
344     def_stmt = SSA_NAME_DEF_STMT (var);
345
346   /* If we didn't get an insertion point, and the stmt has already
347      been removed, we won't be able to insert the debug bind stmt, so
348      we'll have to drop debug information.  */
349   if (is_gimple_assign (def_stmt))
350     {
351       bool no_value = false;
352
353       if (!dom_info_available_p (CDI_DOMINATORS))
354         {
355           struct walk_stmt_info wi;
356
357           memset (&wi, 0, sizeof (wi));
358
359           /* When removing blocks without following reverse dominance
360              order, we may sometimes encounter SSA_NAMEs that have
361              already been released, referenced in other SSA_DEFs that
362              we're about to release.  Consider:
363
364              <bb X>:
365              v_1 = foo;
366
367              <bb Y>:
368              w_2 = v_1 + bar;
369              # DEBUG w => w_2
370
371              If we deleted BB X first, propagating the value of w_2
372              won't do us any good.  It's too late to recover their
373              original definition of v_1: when it was deleted, it was
374              only referenced in other DEFs, it couldn't possibly know
375              it should have been retained, and propagating every
376              single DEF just in case it might have to be propagated
377              into a DEBUG STMT would probably be too wasteful.
378
379              When dominator information is not readily available, we
380              check for and accept some loss of debug information.  But
381              if it is available, there's no excuse for us to remove
382              blocks in the wrong order, so we don't even check for
383              dead SSA NAMEs.  SSA verification shall catch any
384              errors.  */
385           if ((!gsi && !gimple_bb (def_stmt))
386               || !walk_gimple_op (def_stmt, find_released_ssa_name,
387                                   &wi))
388             no_value = true;
389         }
390
391       if (!no_value)
392         value = gimple_assign_rhs_to_tree (def_stmt);
393     }
394
395   if (value)
396     {
397       /* If there's a single use of VAR, and VAR is the entire debug
398          expression (usecount would have been incremented again
399          otherwise), and the definition involves only constants and
400          SSA names, then we can propagate VALUE into this single use,
401          avoiding the temp.
402
403          We can also avoid using a temp if VALUE can be shared and
404          propagated into all uses, without generating expressions that
405          wouldn't be valid gimple RHSs.
406
407          Other cases that would require unsharing or non-gimple RHSs
408          are deferred to a debug temp, although we could avoid temps
409          at the expense of duplication of expressions.  */
410
411       if (CONSTANT_CLASS_P (value)
412           || (usecount == 1
413               && (!gimple_assign_single_p (def_stmt)
414                   || is_gimple_min_invariant (value)))
415           || is_gimple_reg (value))
416         value = unshare_expr (value);
417       else
418         {
419           gimple def_temp;
420           tree vexpr = make_node (DEBUG_EXPR_DECL);
421
422           def_temp = gimple_build_debug_bind (vexpr,
423                                               unshare_expr (value),
424                                               def_stmt);
425
426           DECL_ARTIFICIAL (vexpr) = 1;
427           TREE_TYPE (vexpr) = TREE_TYPE (value);
428           if (DECL_P (value))
429             DECL_MODE (vexpr) = DECL_MODE (value);
430           else
431             DECL_MODE (vexpr) = TYPE_MODE (TREE_TYPE (value));
432
433           if (gsi)
434             gsi_insert_before (gsi, def_temp, GSI_SAME_STMT);
435           else
436             {
437               gimple_stmt_iterator ngsi = gsi_for_stmt (def_stmt);
438               gsi_insert_before (&ngsi, def_temp, GSI_SAME_STMT);
439             }
440
441           value = vexpr;
442         }
443     }
444
445   FOR_EACH_IMM_USE_STMT (stmt, imm_iter, var)
446     {
447       if (!gimple_debug_bind_p (stmt))
448         continue;
449
450       if (value)
451         FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
452           /* unshare_expr is not needed here.  vexpr is either a
453              SINGLE_RHS, that can be safely shared, some other RHS
454              that was unshared when we found it had a single debug
455              use, or a DEBUG_EXPR_DECL, that can be safely
456              shared.  */
457           SET_USE (use_p, value);
458       else
459         gimple_debug_bind_reset_value (stmt);
460
461       update_stmt (stmt);
462     }
463 }
464
465
466 /* Insert a DEBUG BIND stmt before STMT for each DEF referenced by
467    other DEBUG stmts, and replace uses of the DEF with the
468    newly-created debug temp.  */
469
470 void
471 insert_debug_temps_for_defs (gimple_stmt_iterator *gsi)
472 {
473   gimple stmt;
474   ssa_op_iter op_iter;
475   def_operand_p def_p;
476
477   if (!MAY_HAVE_DEBUG_STMTS)
478     return;
479
480   stmt = gsi_stmt (*gsi);
481
482   FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, op_iter, SSA_OP_DEF)
483     {
484       tree var = DEF_FROM_PTR (def_p);
485
486       if (TREE_CODE (var) != SSA_NAME)
487         continue;
488
489       insert_debug_temp_for_var_def (gsi, var);
490     }
491 }
492
493 /* Delete SSA DEFs for SSA versions in the TOREMOVE bitmap, removing
494    dominated stmts before their dominators, so that release_ssa_defs
495    stands a chance of propagating DEFs into debug bind stmts.  */
496
497 void
498 release_defs_bitset (bitmap toremove)
499 {
500   unsigned j;
501   bitmap_iterator bi;
502
503   /* Performing a topological sort is probably overkill, this will
504      most likely run in slightly superlinear time, rather than the
505      pathological quadratic worst case.  */
506   while (!bitmap_empty_p (toremove))
507     EXECUTE_IF_SET_IN_BITMAP (toremove, 0, j, bi)
508       {
509         bool remove_now = true;
510         tree var = ssa_name (j);
511         gimple stmt;
512         imm_use_iterator uit;
513
514         FOR_EACH_IMM_USE_STMT (stmt, uit, var)
515           {
516             ssa_op_iter dit;
517             def_operand_p def_p;
518
519             /* We can't propagate PHI nodes into debug stmts.  */
520             if (gimple_code (stmt) == GIMPLE_PHI
521                 || is_gimple_debug (stmt))
522               continue;
523
524             /* If we find another definition to remove that uses
525                the one we're looking at, defer the removal of this
526                one, so that it can be propagated into debug stmts
527                after the other is.  */
528             FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, dit, SSA_OP_DEF)
529               {
530                 tree odef = DEF_FROM_PTR (def_p);
531
532                 if (bitmap_bit_p (toremove, SSA_NAME_VERSION (odef)))
533                   {
534                     remove_now = false;
535                     break;
536                   }
537               }
538
539             if (!remove_now)
540               BREAK_FROM_IMM_USE_STMT (uit);
541           }
542
543         if (remove_now)
544           {
545             gimple def = SSA_NAME_DEF_STMT (var);
546             gimple_stmt_iterator gsi = gsi_for_stmt (def);
547
548             if (gimple_code (def) == GIMPLE_PHI)
549               remove_phi_node (&gsi, true);
550             else
551               {
552                 gsi_remove (&gsi, true);
553                 release_defs (def);
554               }
555
556             bitmap_clear_bit (toremove, j);
557           }
558       }
559 }
560
561 /* Return true if SSA_NAME is malformed and mark it visited.
562
563    IS_VIRTUAL is true if this SSA_NAME was found inside a virtual
564       operand.  */
565
566 static bool
567 verify_ssa_name (tree ssa_name, bool is_virtual)
568 {
569   if (TREE_CODE (ssa_name) != SSA_NAME)
570     {
571       error ("expected an SSA_NAME object");
572       return true;
573     }
574
575   if (TREE_TYPE (ssa_name) != TREE_TYPE (SSA_NAME_VAR (ssa_name)))
576     {
577       error ("type mismatch between an SSA_NAME and its symbol");
578       return true;
579     }
580
581   if (SSA_NAME_IN_FREE_LIST (ssa_name))
582     {
583       error ("found an SSA_NAME that had been released into the free pool");
584       return true;
585     }
586
587   if (is_virtual && is_gimple_reg (ssa_name))
588     {
589       error ("found a virtual definition for a GIMPLE register");
590       return true;
591     }
592
593   if (is_virtual && SSA_NAME_VAR (ssa_name) != gimple_vop (cfun))
594     {
595       error ("virtual SSA name for non-VOP decl");
596       return true;
597     }
598
599   if (!is_virtual && !is_gimple_reg (ssa_name))
600     {
601       error ("found a real definition for a non-register");
602       return true;
603     }
604
605   if (SSA_NAME_IS_DEFAULT_DEF (ssa_name)
606       && !gimple_nop_p (SSA_NAME_DEF_STMT (ssa_name)))
607     {
608       error ("found a default name with a non-empty defining statement");
609       return true;
610     }
611
612   return false;
613 }
614
615
616 /* Return true if the definition of SSA_NAME at block BB is malformed.
617
618    STMT is the statement where SSA_NAME is created.
619
620    DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME
621       version numbers.  If DEFINITION_BLOCK[SSA_NAME_VERSION] is set,
622       it means that the block in that array slot contains the
623       definition of SSA_NAME.
624
625    IS_VIRTUAL is true if SSA_NAME is created by a VDEF.  */
626
627 static bool
628 verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
629             gimple stmt, bool is_virtual)
630 {
631   if (verify_ssa_name (ssa_name, is_virtual))
632     goto err;
633
634   if (definition_block[SSA_NAME_VERSION (ssa_name)])
635     {
636       error ("SSA_NAME created in two different blocks %i and %i",
637              definition_block[SSA_NAME_VERSION (ssa_name)]->index, bb->index);
638       goto err;
639     }
640
641   definition_block[SSA_NAME_VERSION (ssa_name)] = bb;
642
643   if (SSA_NAME_DEF_STMT (ssa_name) != stmt)
644     {
645       error ("SSA_NAME_DEF_STMT is wrong");
646       fprintf (stderr, "Expected definition statement:\n");
647       print_gimple_stmt (stderr, SSA_NAME_DEF_STMT (ssa_name), 4, TDF_VOPS);
648       fprintf (stderr, "\nActual definition statement:\n");
649       print_gimple_stmt (stderr, stmt, 4, TDF_VOPS);
650       goto err;
651     }
652
653   return false;
654
655 err:
656   fprintf (stderr, "while verifying SSA_NAME ");
657   print_generic_expr (stderr, ssa_name, 0);
658   fprintf (stderr, " in statement\n");
659   print_gimple_stmt (stderr, stmt, 4, TDF_VOPS);
660
661   return true;
662 }
663
664
665 /* Return true if the use of SSA_NAME at statement STMT in block BB is
666    malformed.
667
668    DEF_BB is the block where SSA_NAME was found to be created.
669
670    IDOM contains immediate dominator information for the flowgraph.
671
672    CHECK_ABNORMAL is true if the caller wants to check whether this use
673       is flowing through an abnormal edge (only used when checking PHI
674       arguments).
675
676    If NAMES_DEFINED_IN_BB is not NULL, it contains a bitmap of ssa names
677      that are defined before STMT in basic block BB.  */
678
679 static bool
680 verify_use (basic_block bb, basic_block def_bb, use_operand_p use_p,
681             gimple stmt, bool check_abnormal, bitmap names_defined_in_bb)
682 {
683   bool err = false;
684   tree ssa_name = USE_FROM_PTR (use_p);
685
686   if (!TREE_VISITED (ssa_name))
687     if (verify_imm_links (stderr, ssa_name))
688       err = true;
689
690   TREE_VISITED (ssa_name) = 1;
691
692   if (gimple_nop_p (SSA_NAME_DEF_STMT (ssa_name))
693       && SSA_NAME_IS_DEFAULT_DEF (ssa_name))
694     ; /* Default definitions have empty statements.  Nothing to do.  */
695   else if (!def_bb)
696     {
697       error ("missing definition");
698       err = true;
699     }
700   else if (bb != def_bb
701            && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
702     {
703       error ("definition in block %i does not dominate use in block %i",
704              def_bb->index, bb->index);
705       err = true;
706     }
707   else if (bb == def_bb
708            && names_defined_in_bb != NULL
709            && !bitmap_bit_p (names_defined_in_bb, SSA_NAME_VERSION (ssa_name)))
710     {
711       error ("definition in block %i follows the use", def_bb->index);
712       err = true;
713     }
714
715   if (check_abnormal
716       && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
717     {
718       error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
719       err = true;
720     }
721
722   /* Make sure the use is in an appropriate list by checking the previous 
723      element to make sure it's the same.  */
724   if (use_p->prev == NULL)
725     {
726       error ("no immediate_use list");
727       err = true;
728     }
729   else
730     {
731       tree listvar;
732       if (use_p->prev->use == NULL)
733         listvar = use_p->prev->loc.ssa_name;
734       else
735         listvar = USE_FROM_PTR (use_p->prev);
736       if (listvar != ssa_name)
737         {
738           error ("wrong immediate use list");
739           err = true;
740         }
741     }
742
743   if (err)
744     {
745       fprintf (stderr, "for SSA_NAME: ");
746       print_generic_expr (stderr, ssa_name, TDF_VOPS);
747       fprintf (stderr, " in statement:\n");
748       print_gimple_stmt (stderr, stmt, 0, TDF_VOPS);
749     }
750
751   return err;
752 }
753
754
755 /* Return true if any of the arguments for PHI node PHI at block BB is
756    malformed.
757
758    DEFINITION_BLOCK is an array of basic blocks indexed by SSA_NAME
759       version numbers.  If DEFINITION_BLOCK[SSA_NAME_VERSION] is set,
760       it means that the block in that array slot contains the
761       definition of SSA_NAME.  */
762
763 static bool
764 verify_phi_args (gimple phi, basic_block bb, basic_block *definition_block)
765 {
766   edge e;
767   bool err = false;
768   size_t i, phi_num_args = gimple_phi_num_args (phi);
769
770   if (EDGE_COUNT (bb->preds) != phi_num_args)
771     {
772       error ("incoming edge count does not match number of PHI arguments");
773       err = true;
774       goto error;
775     }
776
777   for (i = 0; i < phi_num_args; i++)
778     {
779       use_operand_p op_p = gimple_phi_arg_imm_use_ptr (phi, i);
780       tree op = USE_FROM_PTR (op_p);
781
782       e = EDGE_PRED (bb, i);
783
784       if (op == NULL_TREE)
785         {
786           error ("PHI argument is missing for edge %d->%d",
787                  e->src->index,
788                  e->dest->index);
789           err = true;
790           goto error;
791         }
792
793       if (TREE_CODE (op) != SSA_NAME && !is_gimple_min_invariant (op))
794         {
795           error ("PHI argument is not SSA_NAME, or invariant");
796           err = true;
797         }
798
799       if (TREE_CODE (op) == SSA_NAME)
800         {
801           err = verify_ssa_name (op, !is_gimple_reg (gimple_phi_result (phi)));
802           err |= verify_use (e->src, definition_block[SSA_NAME_VERSION (op)],
803                              op_p, phi, e->flags & EDGE_ABNORMAL, NULL);
804         }
805
806       if (TREE_CODE (op) == ADDR_EXPR)
807         {
808           tree base = TREE_OPERAND (op, 0);
809           while (handled_component_p (base))
810             base = TREE_OPERAND (base, 0);
811           if ((TREE_CODE (base) == VAR_DECL
812                || TREE_CODE (base) == PARM_DECL
813                || TREE_CODE (base) == RESULT_DECL)
814               && !TREE_ADDRESSABLE (base))
815             {
816               error ("address taken, but ADDRESSABLE bit not set");
817               err = true;
818             }
819         }
820
821       if (e->dest != bb)
822         {
823           error ("wrong edge %d->%d for PHI argument",
824                  e->src->index, e->dest->index);
825           err = true;
826         }
827
828       if (err)
829         {
830           fprintf (stderr, "PHI argument\n");
831           print_generic_stmt (stderr, op, TDF_VOPS);
832           goto error;
833         }
834     }
835
836 error:
837   if (err)
838     {
839       fprintf (stderr, "for PHI node\n");
840       print_gimple_stmt (stderr, phi, 0, TDF_VOPS|TDF_MEMSYMS);
841     }
842
843
844   return err;
845 }
846
847
848 /* Verify common invariants in the SSA web.
849    TODO: verify the variable annotations.  */
850
851 void
852 verify_ssa (bool check_modified_stmt)
853 {
854   size_t i;
855   basic_block bb;
856   basic_block *definition_block = XCNEWVEC (basic_block, num_ssa_names);
857   ssa_op_iter iter;
858   tree op;
859   enum dom_state orig_dom_state = dom_info_state (CDI_DOMINATORS);
860   bitmap names_defined_in_bb = BITMAP_ALLOC (NULL);
861
862   gcc_assert (!need_ssa_update_p (cfun));
863
864   verify_stmts ();
865
866   timevar_push (TV_TREE_SSA_VERIFY);
867
868   /* Keep track of SSA names present in the IL.  */
869   for (i = 1; i < num_ssa_names; i++)
870     {
871       tree name = ssa_name (i);
872       if (name)
873         {
874           gimple stmt;
875           TREE_VISITED (name) = 0;
876
877           stmt = SSA_NAME_DEF_STMT (name);
878           if (!gimple_nop_p (stmt))
879             {
880               basic_block bb = gimple_bb (stmt);
881               verify_def (bb, definition_block,
882                           name, stmt, !is_gimple_reg (name));
883
884             }
885         }
886     }
887
888   calculate_dominance_info (CDI_DOMINATORS);
889
890   /* Now verify all the uses and make sure they agree with the definitions
891      found in the previous pass.  */
892   FOR_EACH_BB (bb)
893     {
894       edge e;
895       gimple phi;
896       edge_iterator ei;
897       gimple_stmt_iterator gsi;
898
899       /* Make sure that all edges have a clear 'aux' field.  */
900       FOR_EACH_EDGE (e, ei, bb->preds)
901         {
902           if (e->aux)
903             {
904               error ("AUX pointer initialized for edge %d->%d", e->src->index,
905                       e->dest->index);
906               goto err;
907             }
908         }
909
910       /* Verify the arguments for every PHI node in the block.  */
911       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
912         {
913           phi = gsi_stmt (gsi);
914           if (verify_phi_args (phi, bb, definition_block))
915             goto err;
916
917           bitmap_set_bit (names_defined_in_bb,
918                           SSA_NAME_VERSION (gimple_phi_result (phi)));
919         }
920
921       /* Now verify all the uses and vuses in every statement of the block.  */
922       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
923         {
924           gimple stmt = gsi_stmt (gsi);
925           use_operand_p use_p;
926           bool has_err;
927
928           if (check_modified_stmt && gimple_modified_p (stmt))
929             {
930               error ("stmt (%p) marked modified after optimization pass: ",
931                      (void *)stmt);
932               print_gimple_stmt (stderr, stmt, 0, TDF_VOPS);
933               goto err;
934             }
935
936           if (is_gimple_assign (stmt)
937               && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME)
938             {
939               tree lhs, base_address;
940
941               lhs = gimple_assign_lhs (stmt);
942               base_address = get_base_address (lhs);
943
944               if (base_address
945                   && SSA_VAR_P (base_address)
946                   && !gimple_vdef (stmt)
947                   && optimize > 0)
948                 {
949                   error ("statement makes a memory store, but has no VDEFS");
950                   print_gimple_stmt (stderr, stmt, 0, TDF_VOPS);
951                   goto err;
952                 }
953             }
954           else if (gimple_debug_bind_p (stmt)
955                    && !gimple_debug_bind_has_value_p (stmt))
956             continue;
957
958           /* Verify the single virtual operand and its constraints.  */
959           has_err = false;
960           if (gimple_vdef (stmt))
961             {
962               if (gimple_vdef_op (stmt) == NULL_DEF_OPERAND_P)
963                 {
964                   error ("statement has VDEF operand not in defs list");
965                   has_err = true;
966                 }
967               if (!gimple_vuse (stmt))
968                 {
969                   error ("statement has VDEF but no VUSE operand");
970                   has_err = true;
971                 }
972               else if (SSA_NAME_VAR (gimple_vdef (stmt))
973                        != SSA_NAME_VAR (gimple_vuse (stmt)))
974                 {
975                   error ("VDEF and VUSE do not use the same symbol");
976                   has_err = true;
977                 }
978               has_err |= verify_ssa_name (gimple_vdef (stmt), true);
979             }
980           if (gimple_vuse (stmt))
981             {
982               if  (gimple_vuse_op (stmt) == NULL_USE_OPERAND_P)
983                 {
984                   error ("statement has VUSE operand not in uses list");
985                   has_err = true;
986                 }
987               has_err |= verify_ssa_name (gimple_vuse (stmt), true);
988             }
989           if (has_err)
990             {
991               error ("in statement");
992               print_gimple_stmt (stderr, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
993               goto err;
994             }
995
996           FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE|SSA_OP_DEF)
997             {
998               if (verify_ssa_name (op, false))
999                 {
1000                   error ("in statement");
1001                   print_gimple_stmt (stderr, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
1002                   goto err;
1003                 }
1004             }
1005
1006           FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE|SSA_OP_VUSE)
1007             {
1008               op = USE_FROM_PTR (use_p);
1009               if (verify_use (bb, definition_block[SSA_NAME_VERSION (op)],
1010                               use_p, stmt, false, names_defined_in_bb))
1011                 goto err;
1012             }
1013
1014           FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_ALL_DEFS)
1015             {
1016               if (SSA_NAME_DEF_STMT (op) != stmt)
1017                 {
1018                   error ("SSA_NAME_DEF_STMT is wrong");
1019                   fprintf (stderr, "Expected definition statement:\n");
1020                   print_gimple_stmt (stderr, stmt, 4, TDF_VOPS);
1021                   fprintf (stderr, "\nActual definition statement:\n");
1022                   print_gimple_stmt (stderr, SSA_NAME_DEF_STMT (op),
1023                                      4, TDF_VOPS);
1024                   goto err;
1025                 }
1026               bitmap_set_bit (names_defined_in_bb, SSA_NAME_VERSION (op));
1027             }
1028         }
1029
1030       bitmap_clear (names_defined_in_bb);
1031     }
1032
1033   free (definition_block);
1034
1035   /* Restore the dominance information to its prior known state, so
1036      that we do not perturb the compiler's subsequent behavior.  */
1037   if (orig_dom_state == DOM_NONE)
1038     free_dominance_info (CDI_DOMINATORS);
1039   else
1040     set_dom_info_availability (CDI_DOMINATORS, orig_dom_state);
1041   
1042   BITMAP_FREE (names_defined_in_bb);
1043   timevar_pop (TV_TREE_SSA_VERIFY);
1044   return;
1045
1046 err:
1047   internal_error ("verify_ssa failed");
1048 }
1049
1050 /* Return true if the uid in both int tree maps are equal.  */
1051
1052 int
1053 int_tree_map_eq (const void *va, const void *vb)
1054 {
1055   const struct int_tree_map *a = (const struct int_tree_map *) va;
1056   const struct int_tree_map *b = (const struct int_tree_map *) vb;
1057   return (a->uid == b->uid);
1058 }
1059
1060 /* Hash a UID in a int_tree_map.  */
1061
1062 unsigned int
1063 int_tree_map_hash (const void *item)
1064 {
1065   return ((const struct int_tree_map *)item)->uid;
1066 }
1067
1068 /* Return true if the DECL_UID in both trees are equal.  */
1069
1070 int
1071 uid_decl_map_eq (const void *va, const void *vb)
1072 {
1073   const_tree a = (const_tree) va;
1074   const_tree b = (const_tree) vb;
1075   return (a->decl_minimal.uid == b->decl_minimal.uid);
1076 }
1077
1078 /* Hash a tree in a uid_decl_map.  */
1079
1080 unsigned int
1081 uid_decl_map_hash (const void *item)
1082 {
1083   return ((const_tree)item)->decl_minimal.uid;
1084 }
1085
1086 /* Return true if the DECL_UID in both trees are equal.  */
1087
1088 static int
1089 uid_ssaname_map_eq (const void *va, const void *vb)
1090 {
1091   const_tree a = (const_tree) va;
1092   const_tree b = (const_tree) vb;
1093   return (a->ssa_name.var->decl_minimal.uid == b->ssa_name.var->decl_minimal.uid);
1094 }
1095
1096 /* Hash a tree in a uid_decl_map.  */
1097
1098 static unsigned int
1099 uid_ssaname_map_hash (const void *item)
1100 {
1101   return ((const_tree)item)->ssa_name.var->decl_minimal.uid;
1102 }
1103
1104
1105 /* Initialize global DFA and SSA structures.  */
1106
1107 void
1108 init_tree_ssa (struct function *fn)
1109 {
1110   fn->gimple_df = GGC_CNEW (struct gimple_df);
1111   fn->gimple_df->referenced_vars = htab_create_ggc (20, uid_decl_map_hash, 
1112                                                     uid_decl_map_eq, NULL);
1113   fn->gimple_df->default_defs = htab_create_ggc (20, uid_ssaname_map_hash, 
1114                                                  uid_ssaname_map_eq, NULL);
1115   pt_solution_reset (&fn->gimple_df->escaped);
1116   pt_solution_reset (&fn->gimple_df->callused);
1117   init_ssanames (fn, 0);
1118   init_phinodes ();
1119 }
1120
1121
1122 /* Deallocate memory associated with SSA data structures for FNDECL.  */
1123
1124 void
1125 delete_tree_ssa (void)
1126 {
1127   referenced_var_iterator rvi;
1128   tree var;
1129
1130   /* Remove annotations from every referenced local variable.  */
1131   FOR_EACH_REFERENCED_VAR (var, rvi)
1132     {
1133       if (is_global_var (var))
1134         continue;
1135       if (var->base.ann)
1136         ggc_free (var->base.ann);
1137       var->base.ann = NULL;
1138     }
1139   htab_delete (gimple_referenced_vars (cfun));
1140   cfun->gimple_df->referenced_vars = NULL;
1141
1142   fini_ssanames ();
1143   fini_phinodes ();
1144
1145   /* We no longer maintain the SSA operand cache at this point.  */
1146   if (ssa_operands_active ())
1147     fini_ssa_operands ();
1148
1149   delete_alias_heapvars ();
1150
1151   htab_delete (cfun->gimple_df->default_defs);
1152   cfun->gimple_df->default_defs = NULL;
1153   pt_solution_reset (&cfun->gimple_df->escaped);
1154   pt_solution_reset (&cfun->gimple_df->callused);
1155   if (cfun->gimple_df->decls_to_pointers != NULL)
1156     pointer_map_destroy (cfun->gimple_df->decls_to_pointers);
1157   cfun->gimple_df->decls_to_pointers = NULL;
1158   cfun->gimple_df->modified_noreturn_calls = NULL;
1159   cfun->gimple_df = NULL;
1160
1161   /* We no longer need the edge variable maps.  */
1162   redirect_edge_var_map_destroy ();
1163 }
1164
1165 /* Return true if the conversion from INNER_TYPE to OUTER_TYPE is a
1166    useless type conversion, otherwise return false.
1167
1168    This function implicitly defines the middle-end type system.  With
1169    the notion of 'a < b' meaning that useless_type_conversion_p (a, b)
1170    holds and 'a > b' meaning that useless_type_conversion_p (b, a) holds,
1171    the following invariants shall be fulfilled:
1172
1173      1) useless_type_conversion_p is transitive.
1174         If a < b and b < c then a < c.
1175
1176      2) useless_type_conversion_p is not symmetric.
1177         From a < b does not follow a > b.
1178
1179      3) Types define the available set of operations applicable to values.
1180         A type conversion is useless if the operations for the target type
1181         is a subset of the operations for the source type.  For example
1182         casts to void* are useless, casts from void* are not (void* can't
1183         be dereferenced or offsetted, but copied, hence its set of operations
1184         is a strict subset of that of all other data pointer types).  Casts
1185         to const T* are useless (can't be written to), casts from const T*
1186         to T* are not.  */
1187
1188 bool
1189 useless_type_conversion_p (tree outer_type, tree inner_type)
1190 {
1191   /* Do the following before stripping toplevel qualifiers.  */
1192   if (POINTER_TYPE_P (inner_type)
1193       && POINTER_TYPE_P (outer_type))
1194     {
1195       /* Do not lose casts between pointers to different address spaces.  */
1196       if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
1197           != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
1198         return false;
1199
1200       /* If the outer type is (void *) or a pointer to an incomplete
1201          record type or a pointer to an unprototyped function,
1202          then the conversion is not necessary.  */
1203       if (VOID_TYPE_P (TREE_TYPE (outer_type))
1204           || (AGGREGATE_TYPE_P (TREE_TYPE (outer_type))
1205               && TREE_CODE (TREE_TYPE (outer_type)) != ARRAY_TYPE
1206               && (TREE_CODE (TREE_TYPE (outer_type))
1207                   == TREE_CODE (TREE_TYPE (inner_type)))
1208               && !COMPLETE_TYPE_P (TREE_TYPE (outer_type)))
1209           || ((TREE_CODE (TREE_TYPE (outer_type)) == FUNCTION_TYPE
1210                || TREE_CODE (TREE_TYPE (outer_type)) == METHOD_TYPE)
1211               && (TREE_CODE (TREE_TYPE (outer_type))
1212                   == TREE_CODE (TREE_TYPE (inner_type)))
1213               && !TYPE_ARG_TYPES (TREE_TYPE (outer_type))
1214               && useless_type_conversion_p (TREE_TYPE (TREE_TYPE (outer_type)),
1215                                             TREE_TYPE (TREE_TYPE (inner_type)))))
1216         return true;
1217
1218       /* Do not lose casts to restrict qualified pointers.  */
1219       if ((TYPE_RESTRICT (outer_type)
1220            != TYPE_RESTRICT (inner_type))
1221           && TYPE_RESTRICT (outer_type))
1222         return false;
1223     }
1224
1225   /* From now on qualifiers on value types do not matter.  */
1226   inner_type = TYPE_MAIN_VARIANT (inner_type);
1227   outer_type = TYPE_MAIN_VARIANT (outer_type);
1228
1229   if (inner_type == outer_type)
1230     return true;
1231
1232   /* If we know the canonical types, compare them.  */
1233   if (TYPE_CANONICAL (inner_type)
1234       && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type))
1235     return true;
1236
1237   /* Changes in machine mode are never useless conversions unless we
1238      deal with aggregate types in which case we defer to later checks.  */
1239   if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type)
1240       && !AGGREGATE_TYPE_P (inner_type))
1241     return false;
1242
1243   /* If both the inner and outer types are integral types, then the
1244      conversion is not necessary if they have the same mode and
1245      signedness and precision, and both or neither are boolean.  */
1246   if (INTEGRAL_TYPE_P (inner_type)
1247       && INTEGRAL_TYPE_P (outer_type))
1248     {
1249       /* Preserve changes in signedness or precision.  */
1250       if (TYPE_UNSIGNED (inner_type) != TYPE_UNSIGNED (outer_type)
1251           || TYPE_PRECISION (inner_type) != TYPE_PRECISION (outer_type))
1252         return false;
1253
1254       /* We don't need to preserve changes in the types minimum or
1255          maximum value in general as these do not generate code
1256          unless the types precisions are different.  */
1257       return true;
1258     }
1259
1260   /* Scalar floating point types with the same mode are compatible.  */
1261   else if (SCALAR_FLOAT_TYPE_P (inner_type)
1262            && SCALAR_FLOAT_TYPE_P (outer_type))
1263     return true;
1264
1265   /* Fixed point types with the same mode are compatible.  */
1266   else if (FIXED_POINT_TYPE_P (inner_type)
1267            && FIXED_POINT_TYPE_P (outer_type))
1268     return true;
1269
1270   /* We need to take special care recursing to pointed-to types.  */
1271   else if (POINTER_TYPE_P (inner_type)
1272            && POINTER_TYPE_P (outer_type))
1273     {
1274       /* Don't lose casts between pointers to volatile and non-volatile
1275          qualified types.  Doing so would result in changing the semantics
1276          of later accesses.  For function types the volatile qualifier
1277          is used to indicate noreturn functions.  */
1278       if (TREE_CODE (TREE_TYPE (outer_type)) != FUNCTION_TYPE
1279           && TREE_CODE (TREE_TYPE (outer_type)) != METHOD_TYPE
1280           && TREE_CODE (TREE_TYPE (inner_type)) != FUNCTION_TYPE
1281           && TREE_CODE (TREE_TYPE (inner_type)) != METHOD_TYPE
1282           && (TYPE_VOLATILE (TREE_TYPE (outer_type))
1283               != TYPE_VOLATILE (TREE_TYPE (inner_type)))
1284           && TYPE_VOLATILE (TREE_TYPE (outer_type)))
1285         return false;
1286
1287       /* We require explicit conversions from incomplete target types.  */
1288       if (!COMPLETE_TYPE_P (TREE_TYPE (inner_type))
1289           && COMPLETE_TYPE_P (TREE_TYPE (outer_type)))
1290         return false;
1291
1292       /* Do not lose casts between pointers that when dereferenced access
1293          memory with different alias sets.  */
1294       if (get_deref_alias_set (inner_type) != get_deref_alias_set (outer_type))
1295         return false;
1296
1297       /* We do not care for const qualification of the pointed-to types
1298          as const qualification has no semantic value to the middle-end.  */
1299
1300       /* Otherwise pointers/references are equivalent if their pointed
1301          to types are effectively the same.  We can strip qualifiers
1302          on pointed-to types for further comparison, which is done in
1303          the callee.  Note we have to use true compatibility here
1304          because addresses are subject to propagation into dereferences
1305          and thus might get the original type exposed which is equivalent
1306          to a reverse conversion.  */
1307       return types_compatible_p (TREE_TYPE (outer_type),
1308                                  TREE_TYPE (inner_type));
1309     }
1310
1311   /* Recurse for complex types.  */
1312   else if (TREE_CODE (inner_type) == COMPLEX_TYPE
1313            && TREE_CODE (outer_type) == COMPLEX_TYPE)
1314     return useless_type_conversion_p (TREE_TYPE (outer_type),
1315                                       TREE_TYPE (inner_type));
1316
1317   /* Recurse for vector types with the same number of subparts.  */
1318   else if (TREE_CODE (inner_type) == VECTOR_TYPE
1319            && TREE_CODE (outer_type) == VECTOR_TYPE
1320            && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
1321     return useless_type_conversion_p (TREE_TYPE (outer_type),
1322                                       TREE_TYPE (inner_type));
1323
1324   else if (TREE_CODE (inner_type) == ARRAY_TYPE
1325            && TREE_CODE (outer_type) == ARRAY_TYPE)
1326     {
1327       /* Preserve string attributes.  */
1328       if (TYPE_STRING_FLAG (inner_type) != TYPE_STRING_FLAG (outer_type))
1329         return false;
1330
1331       /* Conversions from array types with unknown extent to
1332          array types with known extent are not useless.  */
1333       if (!TYPE_DOMAIN (inner_type)
1334           && TYPE_DOMAIN (outer_type))
1335         return false;
1336
1337       /* Nor are conversions from array types with non-constant size to
1338          array types with constant size or to different size.  */
1339       if (TYPE_SIZE (outer_type)
1340           && TREE_CODE (TYPE_SIZE (outer_type)) == INTEGER_CST
1341           && (!TYPE_SIZE (inner_type)
1342               || TREE_CODE (TYPE_SIZE (inner_type)) != INTEGER_CST
1343               || !tree_int_cst_equal (TYPE_SIZE (outer_type),
1344                                       TYPE_SIZE (inner_type))))
1345         return false;
1346
1347       /* Check conversions between arrays with partially known extents.
1348          If the array min/max values are constant they have to match.
1349          Otherwise allow conversions to unknown and variable extents.
1350          In particular this declares conversions that may change the
1351          mode to BLKmode as useless.  */
1352       if (TYPE_DOMAIN (inner_type)
1353           && TYPE_DOMAIN (outer_type)
1354           && TYPE_DOMAIN (inner_type) != TYPE_DOMAIN (outer_type))
1355         {
1356           tree inner_min = TYPE_MIN_VALUE (TYPE_DOMAIN (inner_type));
1357           tree outer_min = TYPE_MIN_VALUE (TYPE_DOMAIN (outer_type));
1358           tree inner_max = TYPE_MAX_VALUE (TYPE_DOMAIN (inner_type));
1359           tree outer_max = TYPE_MAX_VALUE (TYPE_DOMAIN (outer_type));
1360
1361           /* After gimplification a variable min/max value carries no
1362              additional information compared to a NULL value.  All that
1363              matters has been lowered to be part of the IL.  */
1364           if (inner_min && TREE_CODE (inner_min) != INTEGER_CST)
1365             inner_min = NULL_TREE;
1366           if (outer_min && TREE_CODE (outer_min) != INTEGER_CST)
1367             outer_min = NULL_TREE;
1368           if (inner_max && TREE_CODE (inner_max) != INTEGER_CST)
1369             inner_max = NULL_TREE;
1370           if (outer_max && TREE_CODE (outer_max) != INTEGER_CST)
1371             outer_max = NULL_TREE;
1372
1373           /* Conversions NULL / variable <- cst are useless, but not
1374              the other way around.  */
1375           if (outer_min
1376               && (!inner_min
1377                   || !tree_int_cst_equal (inner_min, outer_min)))
1378             return false;
1379           if (outer_max
1380               && (!inner_max
1381                   || !tree_int_cst_equal (inner_max, outer_max)))
1382             return false;
1383         }
1384
1385       /* Recurse on the element check.  */
1386       return useless_type_conversion_p (TREE_TYPE (outer_type),
1387                                         TREE_TYPE (inner_type));
1388     }
1389
1390   else if ((TREE_CODE (inner_type) == FUNCTION_TYPE
1391             || TREE_CODE (inner_type) == METHOD_TYPE)
1392            && TREE_CODE (inner_type) == TREE_CODE (outer_type))
1393     {
1394       tree outer_parm, inner_parm;
1395
1396       /* If the return types are not compatible bail out.  */
1397       if (!useless_type_conversion_p (TREE_TYPE (outer_type),
1398                                       TREE_TYPE (inner_type)))
1399         return false;
1400
1401       /* Method types should belong to a compatible base class.  */
1402       if (TREE_CODE (inner_type) == METHOD_TYPE
1403           && !useless_type_conversion_p (TYPE_METHOD_BASETYPE (outer_type),
1404                                          TYPE_METHOD_BASETYPE (inner_type)))
1405         return false;
1406
1407       /* A conversion to an unprototyped argument list is ok.  */
1408       if (!TYPE_ARG_TYPES (outer_type))
1409         return true;
1410
1411       /* If the unqualified argument types are compatible the conversion
1412          is useless.  */
1413       if (TYPE_ARG_TYPES (outer_type) == TYPE_ARG_TYPES (inner_type))
1414         return true;
1415
1416       for (outer_parm = TYPE_ARG_TYPES (outer_type),
1417            inner_parm = TYPE_ARG_TYPES (inner_type);
1418            outer_parm && inner_parm;
1419            outer_parm = TREE_CHAIN (outer_parm),
1420            inner_parm = TREE_CHAIN (inner_parm))
1421         if (!useless_type_conversion_p
1422                (TYPE_MAIN_VARIANT (TREE_VALUE (outer_parm)),
1423                 TYPE_MAIN_VARIANT (TREE_VALUE (inner_parm))))
1424           return false;
1425
1426       /* If there is a mismatch in the number of arguments the functions
1427          are not compatible.  */
1428       if (outer_parm || inner_parm)
1429         return false;
1430
1431       /* Defer to the target if necessary.  */
1432       if (TYPE_ATTRIBUTES (inner_type) || TYPE_ATTRIBUTES (outer_type))
1433         return targetm.comp_type_attributes (outer_type, inner_type) != 0;
1434
1435       return true;
1436     }
1437
1438   /* For aggregates we rely on TYPE_CANONICAL exclusively and require
1439      explicit conversions for types involving to be structurally
1440      compared types.  */
1441   else if (AGGREGATE_TYPE_P (inner_type)
1442            && TREE_CODE (inner_type) == TREE_CODE (outer_type))
1443     return false;
1444   
1445   return false;
1446 }
1447
1448 /* Return true if a conversion from either type of TYPE1 and TYPE2
1449    to the other is not required.  Otherwise return false.  */
1450
1451 bool
1452 types_compatible_p (tree type1, tree type2)
1453 {
1454   return (type1 == type2
1455           || (useless_type_conversion_p (type1, type2)
1456               && useless_type_conversion_p (type2, type1)));
1457 }
1458
1459 /* Return true if EXPR is a useless type conversion, otherwise return
1460    false.  */
1461
1462 bool
1463 tree_ssa_useless_type_conversion (tree expr)
1464 {
1465   /* If we have an assignment that merely uses a NOP_EXPR to change
1466      the top of the RHS to the type of the LHS and the type conversion
1467      is "safe", then strip away the type conversion so that we can
1468      enter LHS = RHS into the const_and_copies table.  */
1469   if (CONVERT_EXPR_P (expr)
1470       || TREE_CODE (expr) == VIEW_CONVERT_EXPR
1471       || TREE_CODE (expr) == NON_LVALUE_EXPR)
1472     return useless_type_conversion_p
1473       (TREE_TYPE (expr),
1474        TREE_TYPE (TREE_OPERAND (expr, 0)));
1475
1476   return false;
1477 }
1478
1479 /* Strip conversions from EXP according to
1480    tree_ssa_useless_type_conversion and return the resulting
1481    expression.  */
1482
1483 tree
1484 tree_ssa_strip_useless_type_conversions (tree exp)
1485 {
1486   while (tree_ssa_useless_type_conversion (exp))
1487     exp = TREE_OPERAND (exp, 0);
1488   return exp;
1489 }
1490
1491
1492 /* Internal helper for walk_use_def_chains.  VAR, FN and DATA are as
1493    described in walk_use_def_chains.
1494    
1495    VISITED is a pointer set used to mark visited SSA_NAMEs to avoid
1496       infinite loops.  We used to have a bitmap for this to just mark
1497       SSA versions we had visited.  But non-sparse bitmaps are way too
1498       expensive, while sparse bitmaps may cause quadratic behavior.
1499
1500    IS_DFS is true if the caller wants to perform a depth-first search
1501       when visiting PHI nodes.  A DFS will visit each PHI argument and
1502       call FN after each one.  Otherwise, all the arguments are
1503       visited first and then FN is called with each of the visited
1504       arguments in a separate pass.  */
1505
1506 static bool
1507 walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
1508                        struct pointer_set_t *visited, bool is_dfs)
1509 {
1510   gimple def_stmt;
1511
1512   if (pointer_set_insert (visited, var))
1513     return false;
1514
1515   def_stmt = SSA_NAME_DEF_STMT (var);
1516
1517   if (gimple_code (def_stmt) != GIMPLE_PHI)
1518     {
1519       /* If we reached the end of the use-def chain, call FN.  */
1520       return fn (var, def_stmt, data);
1521     }
1522   else
1523     {
1524       size_t i;
1525
1526       /* When doing a breadth-first search, call FN before following the
1527          use-def links for each argument.  */
1528       if (!is_dfs)
1529         for (i = 0; i < gimple_phi_num_args (def_stmt); i++)
1530           if (fn (gimple_phi_arg_def (def_stmt, i), def_stmt, data))
1531             return true;
1532
1533       /* Follow use-def links out of each PHI argument.  */
1534       for (i = 0; i < gimple_phi_num_args (def_stmt); i++)
1535         {
1536           tree arg = gimple_phi_arg_def (def_stmt, i);
1537
1538           /* ARG may be NULL for newly introduced PHI nodes.  */
1539           if (arg
1540               && TREE_CODE (arg) == SSA_NAME
1541               && walk_use_def_chains_1 (arg, fn, data, visited, is_dfs))
1542             return true;
1543         }
1544
1545       /* When doing a depth-first search, call FN after following the
1546          use-def links for each argument.  */
1547       if (is_dfs)
1548         for (i = 0; i < gimple_phi_num_args (def_stmt); i++)
1549           if (fn (gimple_phi_arg_def (def_stmt, i), def_stmt, data))
1550             return true;
1551     }
1552   
1553   return false;
1554 }
1555   
1556
1557
1558 /* Walk use-def chains starting at the SSA variable VAR.  Call
1559    function FN at each reaching definition found.  FN takes three
1560    arguments: VAR, its defining statement (DEF_STMT) and a generic
1561    pointer to whatever state information that FN may want to maintain
1562    (DATA).  FN is able to stop the walk by returning true, otherwise
1563    in order to continue the walk, FN should return false.  
1564
1565    Note, that if DEF_STMT is a PHI node, the semantics are slightly
1566    different.  The first argument to FN is no longer the original
1567    variable VAR, but the PHI argument currently being examined.  If FN
1568    wants to get at VAR, it should call PHI_RESULT (PHI).
1569
1570    If IS_DFS is true, this function will:
1571
1572         1- walk the use-def chains for all the PHI arguments, and,
1573         2- call (*FN) (ARG, PHI, DATA) on all the PHI arguments.
1574
1575    If IS_DFS is false, the two steps above are done in reverse order
1576    (i.e., a breadth-first search).  */
1577
1578 void
1579 walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data,
1580                      bool is_dfs)
1581 {
1582   gimple def_stmt;
1583
1584   gcc_assert (TREE_CODE (var) == SSA_NAME);
1585
1586   def_stmt = SSA_NAME_DEF_STMT (var);
1587
1588   /* We only need to recurse if the reaching definition comes from a PHI
1589      node.  */
1590   if (gimple_code (def_stmt) != GIMPLE_PHI)
1591     (*fn) (var, def_stmt, data);
1592   else
1593     {
1594       struct pointer_set_t *visited = pointer_set_create ();
1595       walk_use_def_chains_1 (var, fn, data, visited, is_dfs);
1596       pointer_set_destroy (visited);
1597     }
1598 }
1599
1600 \f
1601 /* Return true if T, an SSA_NAME, has an undefined value.  */
1602
1603 bool
1604 ssa_undefined_value_p (tree t)
1605 {
1606   tree var = SSA_NAME_VAR (t);
1607
1608   /* Parameters get their initial value from the function entry.  */
1609   if (TREE_CODE (var) == PARM_DECL)
1610     return false;
1611
1612   /* Hard register variables get their initial value from the ether.  */
1613   if (TREE_CODE (var) == VAR_DECL && DECL_HARD_REGISTER (var))
1614     return false;
1615
1616   /* The value is undefined iff its definition statement is empty.  */
1617   return gimple_nop_p (SSA_NAME_DEF_STMT (t));
1618 }
1619
1620 /* Emit warnings for uninitialized variables.  This is done in two passes.
1621
1622    The first pass notices real uses of SSA names with undefined values.
1623    Such uses are unconditionally uninitialized, and we can be certain that
1624    such a use is a mistake.  This pass is run before most optimizations,
1625    so that we catch as many as we can.
1626
1627    The second pass follows PHI nodes to find uses that are potentially
1628    uninitialized.  In this case we can't necessarily prove that the use
1629    is really uninitialized.  This pass is run after most optimizations,
1630    so that we thread as many jumps and possible, and delete as much dead
1631    code as possible, in order to reduce false positives.  We also look
1632    again for plain uninitialized variables, since optimization may have
1633    changed conditionally uninitialized to unconditionally uninitialized.  */
1634
1635 /* Emit a warning for T, an SSA_NAME, being uninitialized.  The exact
1636    warning text is in MSGID and LOCUS may contain a location or be null.  */
1637
1638 static void
1639 warn_uninit (tree t, const char *gmsgid, void *data)
1640 {
1641   tree var = SSA_NAME_VAR (t);
1642   gimple context = (gimple) data;
1643   location_t location;
1644   expanded_location xloc, floc;
1645
1646   if (!ssa_undefined_value_p (t))
1647     return;
1648
1649   /* TREE_NO_WARNING either means we already warned, or the front end
1650      wishes to suppress the warning.  */
1651   if (TREE_NO_WARNING (var))
1652     return;
1653
1654   /* Do not warn if it can be initialized outside this module.  */
1655   if (is_global_var (var))
1656     return;
1657   
1658   location = (context != NULL && gimple_has_location (context))
1659              ? gimple_location (context)
1660              : DECL_SOURCE_LOCATION (var);
1661   xloc = expand_location (location);
1662   floc = expand_location (DECL_SOURCE_LOCATION (cfun->decl));
1663   if (warning_at (location, OPT_Wuninitialized, gmsgid, var))
1664     {
1665       TREE_NO_WARNING (var) = 1;
1666
1667       if (xloc.file != floc.file
1668           || xloc.line < floc.line
1669           || xloc.line > LOCATION_LINE (cfun->function_end_locus))
1670         inform (DECL_SOURCE_LOCATION (var), "%qD was declared here", var);
1671     }
1672 }
1673
1674 struct walk_data {
1675   gimple stmt;
1676   bool always_executed;
1677   bool warn_possibly_uninitialized;
1678 };
1679
1680 /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
1681    and warn about them.  */
1682
1683 static tree
1684 warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data_)
1685 {
1686   struct walk_stmt_info *wi = (struct walk_stmt_info *) data_;
1687   struct walk_data *data = (struct walk_data *) wi->info;
1688   tree t = *tp;
1689
1690   /* We do not care about LHS.  */
1691   if (wi->is_lhs)
1692     {
1693       /* Except for operands of INDIRECT_REF.  */
1694       if (!INDIRECT_REF_P (t))
1695         return NULL_TREE;
1696       t = TREE_OPERAND (t, 0);
1697     }
1698
1699   switch (TREE_CODE (t))
1700     {
1701     case ADDR_EXPR:
1702       /* Taking the address of an uninitialized variable does not
1703          count as using it.  */
1704       *walk_subtrees = 0;
1705       break;
1706
1707     case VAR_DECL:
1708       {
1709         /* A VAR_DECL in the RHS of a gimple statement may mean that
1710            this variable is loaded from memory.  */
1711         use_operand_p vuse;
1712         tree op;
1713
1714         /* If there is not gimple stmt, 
1715            or alias information has not been computed,
1716            then we cannot check VUSE ops.  */
1717         if (data->stmt == NULL)
1718           return NULL_TREE;
1719
1720         /* If the load happens as part of a call do not warn about it.  */
1721         if (is_gimple_call (data->stmt))
1722           return NULL_TREE;
1723
1724         vuse = gimple_vuse_op (data->stmt);
1725         if (vuse == NULL_USE_OPERAND_P)
1726           return NULL_TREE;
1727
1728         op = USE_FROM_PTR (vuse);
1729         if (t != SSA_NAME_VAR (op) 
1730             || !SSA_NAME_IS_DEFAULT_DEF (op))
1731           return NULL_TREE;
1732         /* If this is a VUSE of t and it is the default definition,
1733            then warn about op.  */
1734         t = op;
1735         /* Fall through into SSA_NAME.  */
1736       }
1737
1738     case SSA_NAME:
1739       /* We only do data flow with SSA_NAMEs, so that's all we
1740          can warn about.  */
1741       if (data->always_executed)
1742         warn_uninit (t, "%qD is used uninitialized in this function",
1743                      data->stmt);
1744       else if (data->warn_possibly_uninitialized)
1745         warn_uninit (t, "%qD may be used uninitialized in this function",
1746                      data->stmt);
1747       *walk_subtrees = 0;
1748       break;
1749
1750     case REALPART_EXPR:
1751     case IMAGPART_EXPR:
1752       /* The total store transformation performed during gimplification
1753          creates uninitialized variable uses.  If all is well, these will
1754          be optimized away, so don't warn now.  */
1755       if (TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME)
1756         *walk_subtrees = 0;
1757       break;
1758
1759     default:
1760       if (IS_TYPE_OR_DECL_P (t))
1761         *walk_subtrees = 0;
1762       break;
1763     }
1764
1765   return NULL_TREE;
1766 }
1767
1768 /* Look for inputs to PHI that are SSA_NAMEs that have empty definitions
1769    and warn about them.  */
1770
1771 static void
1772 warn_uninitialized_phi (gimple phi)
1773 {
1774   size_t i, n = gimple_phi_num_args (phi);
1775
1776   /* Don't look at memory tags.  */
1777   if (!is_gimple_reg (gimple_phi_result (phi)))
1778     return;
1779
1780   for (i = 0; i < n; ++i)
1781     {
1782       tree op = gimple_phi_arg_def (phi, i);
1783       if (TREE_CODE (op) == SSA_NAME)
1784         warn_uninit (op, "%qD may be used uninitialized in this function",
1785                      NULL);
1786     }
1787 }
1788
1789 static unsigned int
1790 warn_uninitialized_vars (bool warn_possibly_uninitialized)
1791 {
1792   gimple_stmt_iterator gsi;
1793   basic_block bb;
1794   struct walk_data data;
1795
1796   data.warn_possibly_uninitialized = warn_possibly_uninitialized;
1797
1798   calculate_dominance_info (CDI_POST_DOMINATORS);
1799
1800   FOR_EACH_BB (bb)
1801     {
1802       data.always_executed = dominated_by_p (CDI_POST_DOMINATORS,
1803                                              single_succ (ENTRY_BLOCK_PTR), bb);
1804       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1805         {
1806           struct walk_stmt_info wi;
1807           data.stmt = gsi_stmt (gsi);
1808           if (is_gimple_debug (data.stmt))
1809             continue;
1810           memset (&wi, 0, sizeof (wi));
1811           wi.info = &data;
1812           walk_gimple_op (gsi_stmt (gsi), warn_uninitialized_var, &wi);
1813         }
1814     }
1815
1816   /* Post-dominator information can not be reliably updated. Free it
1817      after the use.  */
1818
1819   free_dominance_info (CDI_POST_DOMINATORS);
1820   return 0;
1821 }
1822
1823 static unsigned int
1824 execute_early_warn_uninitialized (void)
1825 {
1826   /* Currently, this pass runs always but
1827      execute_late_warn_uninitialized only runs with optimization. With
1828      optimization we want to warn about possible uninitialized as late
1829      as possible, thus don't do it here.  However, without
1830      optimization we need to warn here about "may be uninitialized".
1831   */
1832   warn_uninitialized_vars (/*warn_possibly_uninitialized=*/!optimize);
1833   return 0;
1834 }
1835
1836 static unsigned int
1837 execute_late_warn_uninitialized (void)
1838 {
1839   basic_block bb;
1840   gimple_stmt_iterator gsi;
1841
1842   /* Re-do the plain uninitialized variable check, as optimization may have
1843      straightened control flow.  Do this first so that we don't accidentally
1844      get a "may be" warning when we'd have seen an "is" warning later.  */
1845   warn_uninitialized_vars (/*warn_possibly_uninitialized=*/1);
1846
1847   FOR_EACH_BB (bb)
1848     for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1849       warn_uninitialized_phi (gsi_stmt (gsi));
1850
1851   return 0;
1852 }
1853
1854 static bool
1855 gate_warn_uninitialized (void)
1856 {
1857   return warn_uninitialized != 0;
1858 }
1859
1860 struct gimple_opt_pass pass_early_warn_uninitialized =
1861 {
1862  {
1863   GIMPLE_PASS,
1864   NULL,                                 /* name */
1865   gate_warn_uninitialized,              /* gate */
1866   execute_early_warn_uninitialized,     /* execute */
1867   NULL,                                 /* sub */
1868   NULL,                                 /* next */
1869   0,                                    /* static_pass_number */
1870   TV_NONE,                              /* tv_id */
1871   PROP_ssa,                             /* properties_required */
1872   0,                                    /* properties_provided */
1873   0,                                    /* properties_destroyed */
1874   0,                                    /* todo_flags_start */
1875   0                                     /* todo_flags_finish */
1876  }
1877 };
1878
1879 struct gimple_opt_pass pass_late_warn_uninitialized =
1880 {
1881  {
1882   GIMPLE_PASS,
1883   NULL,                                 /* name */
1884   gate_warn_uninitialized,              /* gate */
1885   execute_late_warn_uninitialized,      /* execute */
1886   NULL,                                 /* sub */
1887   NULL,                                 /* next */
1888   0,                                    /* static_pass_number */
1889   TV_NONE,                              /* tv_id */
1890   PROP_ssa,                             /* properties_required */
1891   0,                                    /* properties_provided */
1892   0,                                    /* properties_destroyed */
1893   0,                                    /* todo_flags_start */
1894   0                                     /* todo_flags_finish */
1895  }
1896 };
1897
1898 /* Compute TREE_ADDRESSABLE and DECL_GIMPLE_REG_P for local variables.  */
1899
1900 void
1901 execute_update_addresses_taken (bool do_optimize)
1902 {
1903   tree var;
1904   referenced_var_iterator rvi;
1905   gimple_stmt_iterator gsi;
1906   basic_block bb;
1907   bitmap addresses_taken = BITMAP_ALLOC (NULL);
1908   bitmap not_reg_needs = BITMAP_ALLOC (NULL);
1909   bool update_vops = false;
1910
1911   /* Collect into ADDRESSES_TAKEN all variables whose address is taken within
1912      the function body.  */
1913   FOR_EACH_BB (bb)
1914     {
1915       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1916         {
1917           gimple stmt = gsi_stmt (gsi);
1918           enum gimple_code code = gimple_code (stmt);
1919
1920           /* Note all addresses taken by the stmt.  */
1921           gimple_ior_addresses_taken (addresses_taken, stmt);
1922
1923           /* If we have a call or an assignment, see if the lhs contains
1924              a local decl that requires not to be a gimple register.  */
1925           if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL)
1926             {
1927               tree lhs = gimple_get_lhs (stmt);
1928               
1929               /* We may not rewrite TMR_SYMBOL to SSA.  */
1930               if (lhs && TREE_CODE (lhs) == TARGET_MEM_REF
1931                   && TMR_SYMBOL (lhs))
1932                 bitmap_set_bit (not_reg_needs, DECL_UID (TMR_SYMBOL (lhs)));
1933
1934               /* A plain decl does not need it set.  */
1935               else if (lhs && handled_component_p (lhs))
1936                 {
1937                   var = get_base_address (lhs);
1938                   if (DECL_P (var))
1939                     bitmap_set_bit (not_reg_needs, DECL_UID (var));
1940                 }
1941             }
1942         }
1943
1944       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1945         {
1946           size_t i;
1947           gimple phi = gsi_stmt (gsi);
1948
1949           for (i = 0; i < gimple_phi_num_args (phi); i++)
1950             {
1951               tree op = PHI_ARG_DEF (phi, i), var;
1952               if (TREE_CODE (op) == ADDR_EXPR
1953                   && (var = get_base_address (TREE_OPERAND (op, 0))) != NULL
1954                   && DECL_P (var))
1955                 bitmap_set_bit (addresses_taken, DECL_UID (var));
1956             }
1957         }
1958     }
1959
1960   /* When possible, clear ADDRESSABLE bit or set the REGISTER bit
1961      and mark variable for conversion into SSA.  */
1962   if (optimize && do_optimize)
1963     FOR_EACH_REFERENCED_VAR (var, rvi)
1964       {
1965         /* Global Variables, result decls cannot be changed.  */
1966         if (is_global_var (var)
1967             || TREE_CODE (var) == RESULT_DECL
1968             || bitmap_bit_p (addresses_taken, DECL_UID (var)))
1969           continue;
1970
1971         if (TREE_ADDRESSABLE (var)
1972             /* Do not change TREE_ADDRESSABLE if we need to preserve var as
1973                a non-register.  Otherwise we are confused and forget to
1974                add virtual operands for it.  */
1975             && (!is_gimple_reg_type (TREE_TYPE (var))
1976                 || !bitmap_bit_p (not_reg_needs, DECL_UID (var))))
1977           {
1978             TREE_ADDRESSABLE (var) = 0;
1979             if (is_gimple_reg (var))
1980               mark_sym_for_renaming (var);
1981             update_vops = true;
1982             if (dump_file)
1983               {
1984                 fprintf (dump_file, "No longer having address taken ");
1985                 print_generic_expr (dump_file, var, 0);
1986                 fprintf (dump_file, "\n");
1987               }
1988           }
1989         if (!DECL_GIMPLE_REG_P (var)
1990             && !bitmap_bit_p (not_reg_needs, DECL_UID (var))
1991             && (TREE_CODE (TREE_TYPE (var)) == COMPLEX_TYPE
1992                 || TREE_CODE (TREE_TYPE (var)) == VECTOR_TYPE)
1993             && !TREE_THIS_VOLATILE (var)
1994             && (TREE_CODE (var) != VAR_DECL || !DECL_HARD_REGISTER (var)))
1995           {
1996             DECL_GIMPLE_REG_P (var) = 1;
1997             mark_sym_for_renaming (var);
1998             update_vops = true;
1999             if (dump_file)
2000               {
2001                 fprintf (dump_file, "Decl is now a gimple register ");
2002                 print_generic_expr (dump_file, var, 0);
2003                 fprintf (dump_file, "\n");
2004               }
2005           }
2006       }
2007
2008   /* Operand caches needs to be recomputed for operands referencing the updated
2009      variables.  */
2010   if (update_vops)
2011     {
2012       FOR_EACH_BB (bb)
2013           for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
2014             {
2015               gimple stmt = gsi_stmt (gsi);
2016
2017               if (gimple_references_memory_p (stmt)
2018                   || is_gimple_debug (stmt))
2019                 update_stmt (stmt);
2020             }
2021
2022       /* Update SSA form here, we are called as non-pass as well.  */
2023       update_ssa (TODO_update_ssa);
2024     }
2025
2026   BITMAP_FREE (not_reg_needs);
2027   BITMAP_FREE (addresses_taken);
2028 }
2029
2030 struct gimple_opt_pass pass_update_address_taken =
2031 {
2032  {
2033   GIMPLE_PASS,
2034   "addressables",                       /* name */
2035   NULL,                                 /* gate */
2036   NULL,                                 /* execute */
2037   NULL,                                 /* sub */
2038   NULL,                                 /* next */
2039   0,                                    /* static_pass_number */
2040   TV_NONE,                              /* tv_id */
2041   PROP_ssa,                             /* properties_required */
2042   0,                                    /* properties_provided */
2043   0,                                    /* properties_destroyed */
2044   0,                                    /* todo_flags_start */
2045   TODO_update_address_taken
2046   | TODO_dump_func                      /* todo_flags_finish */
2047  }
2048 };