OSDN Git Service

PR 43839
[pf3gnuchains/gcc-fork.git] / gcc / tree-ssa-live.c
1 /* Liveness for SSA trees.
2    Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4    Contributed by Andrew MacLeod <amacleod@redhat.com>
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "tree.h"
27 #include "diagnostic.h"
28 #include "tree-pretty-print.h"
29 #include "gimple-pretty-print.h"
30 #include "bitmap.h"
31 #include "tree-flow.h"
32 #include "tree-dump.h"
33 #include "tree-ssa-live.h"
34 #include "toplev.h"
35 #include "debug.h"
36 #include "flags.h"
37
38 #ifdef ENABLE_CHECKING
39 static void  verify_live_on_entry (tree_live_info_p);
40 #endif
41
42
43 /* VARMAP maintains a mapping from SSA version number to real variables.
44
45    All SSA_NAMES are divided into partitions.  Initially each ssa_name is the
46    only member of it's own partition.  Coalescing will attempt to group any
47    ssa_names which occur in a copy or in a PHI node into the same partition.
48
49    At the end of out-of-ssa, each partition becomes a "real" variable and is
50    rewritten as a compiler variable.
51
52    The var_map data structure is used to manage these partitions.  It allows
53    partitions to be combined, and determines which partition belongs to what
54    ssa_name or variable, and vice versa.  */
55
56
57 /* This routine will initialize the basevar fields of MAP.  */
58
59 static void
60 var_map_base_init (var_map map)
61 {
62   int x, num_part, num;
63   tree var;
64   var_ann_t ann;
65
66   num = 0;
67   num_part = num_var_partitions (map);
68
69   /* If a base table already exists, clear it, otherwise create it.  */
70   if (map->partition_to_base_index != NULL)
71     {
72       free (map->partition_to_base_index);
73       VEC_truncate (tree, map->basevars, 0);
74     }
75   else
76     map->basevars = VEC_alloc (tree, heap, MAX (40, (num_part / 10)));
77
78   map->partition_to_base_index = (int *) xmalloc (sizeof (int) * num_part);
79
80   /* Build the base variable list, and point partitions at their bases.  */
81   for (x = 0; x < num_part; x++)
82     {
83       var = partition_to_var (map, x);
84       if (TREE_CODE (var) == SSA_NAME)
85          var = SSA_NAME_VAR (var);
86       ann = var_ann (var);
87       /* If base variable hasn't been seen, set it up.  */
88       if (!ann->base_var_processed)
89         {
90           ann->base_var_processed = 1;
91           VAR_ANN_BASE_INDEX (ann) = num++;
92           VEC_safe_push (tree, heap, map->basevars, var);
93         }
94       map->partition_to_base_index[x] = VAR_ANN_BASE_INDEX (ann);
95     }
96
97   map->num_basevars = num;
98
99   /* Now clear the processed bit.  */
100   for (x = 0; x < num; x++)
101     {
102        var = VEC_index (tree, map->basevars, x);
103        var_ann (var)->base_var_processed = 0;
104     }
105
106 #ifdef ENABLE_CHECKING
107   for (x = 0; x < num_part; x++)
108     {
109       tree var2;
110       var = SSA_NAME_VAR (partition_to_var (map, x));
111       var2 = VEC_index (tree, map->basevars, basevar_index (map, x));
112       gcc_assert (var == var2);
113     }
114 #endif
115 }
116
117
118 /* Remove the base table in MAP.  */
119
120 static void
121 var_map_base_fini (var_map map)
122 {
123   /* Free the basevar info if it is present.  */
124   if (map->partition_to_base_index != NULL)
125     {
126       VEC_free (tree, heap, map->basevars);
127       free (map->partition_to_base_index);
128       map->partition_to_base_index = NULL;
129       map->num_basevars = 0;
130     }
131 }
132 /* Create a variable partition map of SIZE, initialize and return it.  */
133
134 var_map
135 init_var_map (int size)
136 {
137   var_map map;
138
139   map = (var_map) xmalloc (sizeof (struct _var_map));
140   map->var_partition = partition_new (size);
141
142   map->partition_to_view = NULL;
143   map->view_to_partition = NULL;
144   map->num_partitions = size;
145   map->partition_size = size;
146   map->num_basevars = 0;
147   map->partition_to_base_index = NULL;
148   map->basevars = NULL;
149   return map;
150 }
151
152
153 /* Free memory associated with MAP.  */
154
155 void
156 delete_var_map (var_map map)
157 {
158   var_map_base_fini (map);
159   partition_delete (map->var_partition);
160   if (map->partition_to_view)
161     free (map->partition_to_view);
162   if (map->view_to_partition)
163     free (map->view_to_partition);
164   free (map);
165 }
166
167
168 /* This function will combine the partitions in MAP for VAR1 and VAR2.  It
169    Returns the partition which represents the new partition.  If the two
170    partitions cannot be combined, NO_PARTITION is returned.  */
171
172 int
173 var_union (var_map map, tree var1, tree var2)
174 {
175   int p1, p2, p3;
176
177   gcc_assert (TREE_CODE (var1) == SSA_NAME);
178   gcc_assert (TREE_CODE (var2) == SSA_NAME);
179
180   /* This is independent of partition_to_view. If partition_to_view is
181      on, then whichever one of these partitions is absorbed will never have a
182      dereference into the partition_to_view array any more.  */
183
184   p1 = partition_find (map->var_partition, SSA_NAME_VERSION (var1));
185   p2 = partition_find (map->var_partition, SSA_NAME_VERSION (var2));
186
187   gcc_assert (p1 != NO_PARTITION);
188   gcc_assert (p2 != NO_PARTITION);
189
190   if (p1 == p2)
191     p3 = p1;
192   else
193     p3 = partition_union (map->var_partition, p1, p2);
194
195   if (map->partition_to_view)
196     p3 = map->partition_to_view[p3];
197
198   return p3;
199 }
200
201
202 /* Compress the partition numbers in MAP such that they fall in the range
203    0..(num_partitions-1) instead of wherever they turned out during
204    the partitioning exercise.  This removes any references to unused
205    partitions, thereby allowing bitmaps and other vectors to be much
206    denser.
207
208    This is implemented such that compaction doesn't affect partitioning.
209    Ie., once partitions are created and possibly merged, running one
210    or more different kind of compaction will not affect the partitions
211    themselves.  Their index might change, but all the same variables will
212    still be members of the same partition group.  This allows work on reduced
213    sets, and no loss of information when a larger set is later desired.
214
215    In particular, coalescing can work on partitions which have 2 or more
216    definitions, and then 'recompact' later to include all the single
217    definitions for assignment to program variables.  */
218
219
220 /* Set MAP back to the initial state of having no partition view.  Return a
221    bitmap which has a bit set for each partition number which is in use in the
222    varmap.  */
223
224 static bitmap
225 partition_view_init (var_map map)
226 {
227   bitmap used;
228   int tmp;
229   unsigned int x;
230
231   used = BITMAP_ALLOC (NULL);
232
233   /* Already in a view? Abandon the old one.  */
234   if (map->partition_to_view)
235     {
236       free (map->partition_to_view);
237       map->partition_to_view = NULL;
238     }
239   if (map->view_to_partition)
240     {
241       free (map->view_to_partition);
242       map->view_to_partition = NULL;
243     }
244
245   /* Find out which partitions are actually referenced.  */
246   for (x = 0; x < map->partition_size; x++)
247     {
248       tmp = partition_find (map->var_partition, x);
249       if (ssa_name (tmp) != NULL_TREE && is_gimple_reg (ssa_name (tmp))
250           && (!has_zero_uses (ssa_name (tmp))
251               || !SSA_NAME_IS_DEFAULT_DEF (ssa_name (tmp))))
252         bitmap_set_bit (used, tmp);
253     }
254
255   map->num_partitions = map->partition_size;
256   return used;
257 }
258
259
260 /* This routine will finalize the view data for MAP based on the partitions
261    set in SELECTED.  This is either the same bitmap returned from
262    partition_view_init, or a trimmed down version if some of those partitions
263    were not desired in this view.  SELECTED is freed before returning.  */
264
265 static void
266 partition_view_fini (var_map map, bitmap selected)
267 {
268   bitmap_iterator bi;
269   unsigned count, i, x, limit;
270
271   gcc_assert (selected);
272
273   count = bitmap_count_bits (selected);
274   limit = map->partition_size;
275
276   /* If its a one-to-one ratio, we don't need any view compaction.  */
277   if (count < limit)
278     {
279       map->partition_to_view = (int *)xmalloc (limit * sizeof (int));
280       memset (map->partition_to_view, 0xff, (limit * sizeof (int)));
281       map->view_to_partition = (int *)xmalloc (count * sizeof (int));
282
283       i = 0;
284       /* Give each selected partition an index.  */
285       EXECUTE_IF_SET_IN_BITMAP (selected, 0, x, bi)
286         {
287           map->partition_to_view[x] = i;
288           map->view_to_partition[i] = x;
289           i++;
290         }
291       gcc_assert (i == count);
292       map->num_partitions = i;
293     }
294
295   BITMAP_FREE (selected);
296 }
297
298
299 /* Create a partition view which includes all the used partitions in MAP.  If
300    WANT_BASES is true, create the base variable map as well.  */
301
302 extern void
303 partition_view_normal (var_map map, bool want_bases)
304 {
305   bitmap used;
306
307   used = partition_view_init (map);
308   partition_view_fini (map, used);
309
310   if (want_bases)
311     var_map_base_init (map);
312   else
313     var_map_base_fini (map);
314 }
315
316
317 /* Create a partition view in MAP which includes just partitions which occur in
318    the bitmap ONLY. If WANT_BASES is true, create the base variable map
319    as well.  */
320
321 extern void
322 partition_view_bitmap (var_map map, bitmap only, bool want_bases)
323 {
324   bitmap used;
325   bitmap new_partitions = BITMAP_ALLOC (NULL);
326   unsigned x, p;
327   bitmap_iterator bi;
328
329   used = partition_view_init (map);
330   EXECUTE_IF_SET_IN_BITMAP (only, 0, x, bi)
331     {
332       p = partition_find (map->var_partition, x);
333       gcc_assert (bitmap_bit_p (used, p));
334       bitmap_set_bit (new_partitions, p);
335     }
336   partition_view_fini (map, new_partitions);
337
338   BITMAP_FREE (used);
339   if (want_bases)
340     var_map_base_init (map);
341   else
342     var_map_base_fini (map);
343 }
344
345
346 static inline void mark_all_vars_used (tree *, void *data);
347
348 /* Helper function for mark_all_vars_used, called via walk_tree.  */
349
350 static tree
351 mark_all_vars_used_1 (tree *tp, int *walk_subtrees, void *data)
352 {
353   tree t = *tp;
354   enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
355   tree b;
356
357   if (TREE_CODE (t) == SSA_NAME)
358     t = SSA_NAME_VAR (t);
359
360   if (IS_EXPR_CODE_CLASS (c)
361       && (b = TREE_BLOCK (t)) != NULL)
362     TREE_USED (b) = true;
363
364   /* Ignore TREE_ORIGINAL for TARGET_MEM_REFS, as well as other
365      fields that do not contain vars.  */
366   if (TREE_CODE (t) == TARGET_MEM_REF)
367     {
368       mark_all_vars_used (&TMR_SYMBOL (t), data);
369       mark_all_vars_used (&TMR_BASE (t), data);
370       mark_all_vars_used (&TMR_INDEX (t), data);
371       *walk_subtrees = 0;
372       return NULL;
373     }
374
375   /* Only need to mark VAR_DECLS; parameters and return results are not
376      eliminated as unused.  */
377   if (TREE_CODE (t) == VAR_DECL)
378     {
379       if (data != NULL && bitmap_bit_p ((bitmap) data, DECL_UID (t)))
380         {
381           bitmap_clear_bit ((bitmap) data, DECL_UID (t));
382           mark_all_vars_used (&DECL_INITIAL (t), data);
383         }
384       set_is_used (t);
385     }
386
387   if (IS_TYPE_OR_DECL_P (t))
388     *walk_subtrees = 0;
389
390   return NULL;
391 }
392
393 /* Mark the scope block SCOPE and its subblocks unused when they can be
394    possibly eliminated if dead.  */
395
396 static void
397 mark_scope_block_unused (tree scope)
398 {
399   tree t;
400   TREE_USED (scope) = false;
401   if (!(*debug_hooks->ignore_block) (scope))
402     TREE_USED (scope) = true;
403   for (t = BLOCK_SUBBLOCKS (scope); t ; t = BLOCK_CHAIN (t))
404     mark_scope_block_unused (t);
405 }
406
407 /* Look if the block is dead (by possibly eliminating its dead subblocks)
408    and return true if so.
409    Block is declared dead if:
410      1) No statements are associated with it.
411      2) Declares no live variables
412      3) All subblocks are dead
413         or there is precisely one subblocks and the block
414         has same abstract origin as outer block and declares
415         no variables, so it is pure wrapper.
416    When we are not outputting full debug info, we also eliminate dead variables
417    out of scope blocks to let them to be recycled by GGC and to save copying work
418    done by the inliner.  */
419
420 static bool
421 remove_unused_scope_block_p (tree scope)
422 {
423   tree *t, *next;
424   bool unused = !TREE_USED (scope);
425   var_ann_t ann;
426   int nsubblocks = 0;
427
428   for (t = &BLOCK_VARS (scope); *t; t = next)
429     {
430       next = &TREE_CHAIN (*t);
431
432       /* Debug info of nested function refers to the block of the
433          function.  We might stil call it even if all statements
434          of function it was nested into was elliminated.
435
436          TODO: We can actually look into cgraph to see if function
437          will be output to file.  */
438       if (TREE_CODE (*t) == FUNCTION_DECL)
439         unused = false;
440
441       /* If a decl has a value expr, we need to instantiate it
442          regardless of debug info generation, to avoid codegen
443          differences in memory overlap tests.  update_equiv_regs() may
444          indirectly call validate_equiv_mem() to test whether a
445          SET_DEST overlaps with others, and if the value expr changes
446          by virtual register instantiation, we may get end up with
447          different results.  */
448       else if (TREE_CODE (*t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (*t))
449         unused = false;
450
451       /* Remove everything we don't generate debug info for.  */
452       else if (DECL_IGNORED_P (*t))
453         {
454           *t = TREE_CHAIN (*t);
455           next = t;
456         }
457
458       /* When we are outputting debug info, we usually want to output
459          info about optimized-out variables in the scope blocks.
460          Exception are the scope blocks not containing any instructions
461          at all so user can't get into the scopes at first place.  */
462       else if ((ann = var_ann (*t)) != NULL
463                 && ann->used)
464         unused = false;
465
466       /* When we are not doing full debug info, we however can keep around
467          only the used variables for cfgexpand's memory packing saving quite
468          a lot of memory.
469
470          For sake of -g3, we keep around those vars but we don't count this as
471          use of block, so innermost block with no used vars and no instructions
472          can be considered dead.  We only want to keep around blocks user can
473          breakpoint into and ask about value of optimized out variables.
474
475          Similarly we need to keep around types at least until all variables of
476          all nested blocks are gone.  We track no information on whether given
477          type is used or not.  */
478
479       else if (debug_info_level == DINFO_LEVEL_NORMAL
480                || debug_info_level == DINFO_LEVEL_VERBOSE)
481         ;
482       else
483         {
484           *t = TREE_CHAIN (*t);
485           next = t;
486         }
487     }
488
489   for (t = &BLOCK_SUBBLOCKS (scope); *t ;)
490     if (remove_unused_scope_block_p (*t))
491       {
492         if (BLOCK_SUBBLOCKS (*t))
493           {
494             tree next = BLOCK_CHAIN (*t);
495             tree supercontext = BLOCK_SUPERCONTEXT (*t);
496
497             *t = BLOCK_SUBBLOCKS (*t);
498             while (BLOCK_CHAIN (*t))
499               {
500                 BLOCK_SUPERCONTEXT (*t) = supercontext;
501                 t = &BLOCK_CHAIN (*t);
502               }
503             BLOCK_CHAIN (*t) = next;
504             BLOCK_SUPERCONTEXT (*t) = supercontext;
505             t = &BLOCK_CHAIN (*t);
506             nsubblocks ++;
507           }
508         else
509           *t = BLOCK_CHAIN (*t);
510       }
511     else
512       {
513         t = &BLOCK_CHAIN (*t);
514         nsubblocks ++;
515       }
516
517
518    if (!unused)
519      ;
520    /* Outer scope is always used.  */
521    else if (!BLOCK_SUPERCONTEXT (scope)
522             || TREE_CODE (BLOCK_SUPERCONTEXT (scope)) == FUNCTION_DECL)
523      unused = false;
524    /* Innermost blocks with no live variables nor statements can be always
525       eliminated.  */
526    else if (!nsubblocks)
527      ;
528    /* For terse debug info we can eliminate info on unused variables.  */
529    else if (debug_info_level == DINFO_LEVEL_NONE
530             || debug_info_level == DINFO_LEVEL_TERSE)
531      {
532        /* Even for -g0/-g1 don't prune outer scopes from artificial
533           functions, otherwise diagnostics using tree_nonartificial_location
534           will not be emitted properly.  */
535        if (inlined_function_outer_scope_p (scope))
536          {
537            tree ao = scope;
538
539            while (ao
540                   && TREE_CODE (ao) == BLOCK
541                   && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
542              ao = BLOCK_ABSTRACT_ORIGIN (ao);
543            if (ao
544                && TREE_CODE (ao) == FUNCTION_DECL
545                && DECL_DECLARED_INLINE_P (ao)
546                && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
547              unused = false;
548          }
549      }
550    else if (BLOCK_VARS (scope) || BLOCK_NUM_NONLOCALIZED_VARS (scope))
551      unused = false;
552    /* See if this block is important for representation of inlined function.
553       Inlined functions are always represented by block with
554       block_ultimate_origin being set to FUNCTION_DECL and DECL_SOURCE_LOCATION
555       set...  */
556    else if (inlined_function_outer_scope_p (scope))
557      unused = false;
558    else
559    /* Verfify that only blocks with source location set
560       are entry points to the inlined functions.  */
561      gcc_assert (BLOCK_SOURCE_LOCATION (scope) == UNKNOWN_LOCATION);
562
563    TREE_USED (scope) = !unused;
564    return unused;
565 }
566
567 /* Mark all VAR_DECLS under *EXPR_P as used, so that they won't be
568    eliminated during the tree->rtl conversion process.  */
569
570 static inline void
571 mark_all_vars_used (tree *expr_p, void *data)
572 {
573   walk_tree (expr_p, mark_all_vars_used_1, data, NULL);
574 }
575
576
577 /* Dump scope blocks starting at SCOPE to FILE.  INDENT is the
578    indentation level and FLAGS is as in print_generic_expr.  */
579
580 static void
581 dump_scope_block (FILE *file, int indent, tree scope, int flags)
582 {
583   tree var, t;
584   unsigned int i;
585
586   fprintf (file, "\n%*s{ Scope block #%i%s%s",indent, "" , BLOCK_NUMBER (scope),
587            TREE_USED (scope) ? "" : " (unused)",
588            BLOCK_ABSTRACT (scope) ? " (abstract)": "");
589   if (BLOCK_SOURCE_LOCATION (scope) != UNKNOWN_LOCATION)
590     {
591       expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (scope));
592       fprintf (file, " %s:%i", s.file, s.line);
593     }
594   if (BLOCK_ABSTRACT_ORIGIN (scope))
595     {
596       tree origin = block_ultimate_origin (scope);
597       if (origin)
598         {
599           fprintf (file, " Originating from :");
600           if (DECL_P (origin))
601             print_generic_decl (file, origin, flags);
602           else
603             fprintf (file, "#%i", BLOCK_NUMBER (origin));
604         }
605     }
606   fprintf (file, " \n");
607   for (var = BLOCK_VARS (scope); var; var = TREE_CHAIN (var))
608     {
609       bool used = false;
610       var_ann_t ann;
611
612       if ((ann = var_ann (var))
613           && ann->used)
614         used = true;
615
616       fprintf (file, "%*s",indent, "");
617       print_generic_decl (file, var, flags);
618       fprintf (file, "%s\n", used ? "" : " (unused)");
619     }
620   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (scope); i++)
621     {
622       fprintf (file, "%*s",indent, "");
623       print_generic_decl (file, BLOCK_NONLOCALIZED_VAR (scope, i),
624                           flags);
625       fprintf (file, " (nonlocalized)\n");
626     }
627   for (t = BLOCK_SUBBLOCKS (scope); t ; t = BLOCK_CHAIN (t))
628     dump_scope_block (file, indent + 2, t, flags);
629   fprintf (file, "\n%*s}\n",indent, "");
630 }
631
632 /* Dump the tree of lexical scopes starting at SCOPE to stderr.  FLAGS
633    is as in print_generic_expr.  */
634
635 void
636 debug_scope_block (tree scope, int flags)
637 {
638   dump_scope_block (stderr, 0, scope, flags);
639 }
640
641
642 /* Dump the tree of lexical scopes of current_function_decl to FILE.
643    FLAGS is as in print_generic_expr.  */
644
645 void
646 dump_scope_blocks (FILE *file, int flags)
647 {
648   dump_scope_block (file, 0, DECL_INITIAL (current_function_decl), flags);
649 }
650
651
652 /* Dump the tree of lexical scopes of current_function_decl to stderr.
653    FLAGS is as in print_generic_expr.  */
654
655 void
656 debug_scope_blocks (int flags)
657 {
658   dump_scope_blocks (stderr, flags);
659 }
660
661 /* Remove local variables that are not referenced in the IL.  */
662
663 void
664 remove_unused_locals (void)
665 {
666   basic_block bb;
667   tree t, *cell;
668   referenced_var_iterator rvi;
669   var_ann_t ann;
670   bitmap global_unused_vars = NULL;
671
672   /* Removing declarations from lexical blocks when not optimizing is
673      not only a waste of time, it actually causes differences in stack
674      layout.  */
675   if (!optimize)
676     return;
677
678   mark_scope_block_unused (DECL_INITIAL (current_function_decl));
679
680   /* Assume all locals are unused.  */
681   FOR_EACH_REFERENCED_VAR (t, rvi)
682     var_ann (t)->used = false;
683
684   /* Walk the CFG marking all referenced symbols.  */
685   FOR_EACH_BB (bb)
686     {
687       gimple_stmt_iterator gsi;
688       size_t i;
689       edge_iterator ei;
690       edge e;
691
692       /* Walk the statements.  */
693       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
694         {
695           gimple stmt = gsi_stmt (gsi);
696           tree b = gimple_block (stmt);
697
698           if (is_gimple_debug (stmt))
699             continue;
700
701           if (b)
702             TREE_USED (b) = true;
703
704           for (i = 0; i < gimple_num_ops (stmt); i++)
705             mark_all_vars_used (gimple_op_ptr (gsi_stmt (gsi), i), NULL);
706         }
707
708       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
709         {
710           use_operand_p arg_p;
711           ssa_op_iter i;
712           tree def;
713           gimple phi = gsi_stmt (gsi);
714
715           /* No point processing globals.  */
716           if (is_global_var (SSA_NAME_VAR (gimple_phi_result (phi))))
717             continue;
718
719           def = gimple_phi_result (phi);
720           mark_all_vars_used (&def, NULL);
721
722           FOR_EACH_PHI_ARG (arg_p, phi, i, SSA_OP_ALL_USES)
723             {
724               tree arg = USE_FROM_PTR (arg_p);
725               mark_all_vars_used (&arg, NULL);
726             }
727         }
728
729       FOR_EACH_EDGE (e, ei, bb->succs)
730         if (e->goto_locus)
731           TREE_USED (e->goto_block) = true;
732     }
733
734   cfun->has_local_explicit_reg_vars = false;
735
736   /* Remove unmarked local vars from local_decls.  */
737   for (cell = &cfun->local_decls; *cell; )
738     {
739       tree var = TREE_VALUE (*cell);
740
741       if (TREE_CODE (var) != FUNCTION_DECL
742           && (!(ann = var_ann (var))
743               || !ann->used))
744         {
745           if (is_global_var (var))
746             {
747               if (global_unused_vars == NULL)
748                 global_unused_vars = BITMAP_ALLOC (NULL);
749               bitmap_set_bit (global_unused_vars, DECL_UID (var));
750             }
751           else
752             {
753               *cell = TREE_CHAIN (*cell);
754               continue;
755             }
756         }
757       else if (TREE_CODE (var) == VAR_DECL
758                && DECL_HARD_REGISTER (var)
759                && !is_global_var (var))
760         cfun->has_local_explicit_reg_vars = true;
761       cell = &TREE_CHAIN (*cell);
762     }
763
764   /* Remove unmarked global vars from local_decls.  */
765   if (global_unused_vars != NULL)
766     {
767       for (t = cfun->local_decls; t; t = TREE_CHAIN (t))
768         {
769           tree var = TREE_VALUE (t);
770
771           if (TREE_CODE (var) == VAR_DECL
772               && is_global_var (var)
773               && (ann = var_ann (var)) != NULL
774               && ann->used)
775             mark_all_vars_used (&DECL_INITIAL (var), global_unused_vars);
776         }
777
778       for (cell = &cfun->local_decls; *cell; )
779         {
780           tree var = TREE_VALUE (*cell);
781
782           if (TREE_CODE (var) == VAR_DECL
783               && is_global_var (var)
784               && bitmap_bit_p (global_unused_vars, DECL_UID (var)))
785             *cell = TREE_CHAIN (*cell);
786           else
787             cell = &TREE_CHAIN (*cell);
788         }
789       BITMAP_FREE (global_unused_vars);
790     }
791
792   /* Remove unused variables from REFERENCED_VARs.  As a special
793      exception keep the variables that are believed to be aliased.
794      Those can't be easily removed from the alias sets and operand
795      caches.  They will be removed shortly after the next may_alias
796      pass is performed.  */
797   FOR_EACH_REFERENCED_VAR (t, rvi)
798     if (!is_global_var (t)
799         && TREE_CODE (t) != PARM_DECL
800         && TREE_CODE (t) != RESULT_DECL
801         && !(ann = var_ann (t))->used
802         && !ann->is_heapvar
803         && !TREE_ADDRESSABLE (t))
804       remove_referenced_var (t);
805   remove_unused_scope_block_p (DECL_INITIAL (current_function_decl));
806   if (dump_file && (dump_flags & TDF_DETAILS))
807     {
808       fprintf (dump_file, "Scope blocks after cleanups:\n");
809       dump_scope_blocks (dump_file, dump_flags);
810     }
811 }
812
813
814 /* Allocate and return a new live range information object base on MAP.  */
815
816 static tree_live_info_p
817 new_tree_live_info (var_map map)
818 {
819   tree_live_info_p live;
820   unsigned x;
821
822   live = (tree_live_info_p) xmalloc (sizeof (struct tree_live_info_d));
823   live->map = map;
824   live->num_blocks = last_basic_block;
825
826   live->livein = (bitmap *)xmalloc (last_basic_block * sizeof (bitmap));
827   for (x = 0; x < (unsigned)last_basic_block; x++)
828     live->livein[x] = BITMAP_ALLOC (NULL);
829
830   live->liveout = (bitmap *)xmalloc (last_basic_block * sizeof (bitmap));
831   for (x = 0; x < (unsigned)last_basic_block; x++)
832     live->liveout[x] = BITMAP_ALLOC (NULL);
833
834   live->work_stack = XNEWVEC (int, last_basic_block);
835   live->stack_top = live->work_stack;
836
837   live->global = BITMAP_ALLOC (NULL);
838   return live;
839 }
840
841
842 /* Free storage for live range info object LIVE.  */
843
844 void
845 delete_tree_live_info (tree_live_info_p live)
846 {
847   int x;
848
849   BITMAP_FREE (live->global);
850   free (live->work_stack);
851
852   for (x = live->num_blocks - 1; x >= 0; x--)
853     BITMAP_FREE (live->liveout[x]);
854   free (live->liveout);
855
856   for (x = live->num_blocks - 1; x >= 0; x--)
857     BITMAP_FREE (live->livein[x]);
858   free (live->livein);
859
860   free (live);
861 }
862
863
864 /* Visit basic block BB and propagate any required live on entry bits from
865    LIVE into the predecessors.  VISITED is the bitmap of visited blocks.
866    TMP is a temporary work bitmap which is passed in to avoid reallocating
867    it each time.  */
868
869 static void
870 loe_visit_block (tree_live_info_p live, basic_block bb, sbitmap visited,
871                  bitmap tmp)
872 {
873   edge e;
874   bool change;
875   edge_iterator ei;
876   basic_block pred_bb;
877   bitmap loe;
878   gcc_assert (!TEST_BIT (visited, bb->index));
879
880   SET_BIT (visited, bb->index);
881   loe = live_on_entry (live, bb);
882
883   FOR_EACH_EDGE (e, ei, bb->preds)
884     {
885       pred_bb = e->src;
886       if (pred_bb == ENTRY_BLOCK_PTR)
887         continue;
888       /* TMP is variables live-on-entry from BB that aren't defined in the
889          predecessor block.  This should be the live on entry vars to pred.
890          Note that liveout is the DEFs in a block while live on entry is
891          being calculated.  */
892       bitmap_and_compl (tmp, loe, live->liveout[pred_bb->index]);
893
894       /* Add these bits to live-on-entry for the pred. if there are any
895          changes, and pred_bb has been visited already, add it to the
896          revisit stack.  */
897       change = bitmap_ior_into (live_on_entry (live, pred_bb), tmp);
898       if (TEST_BIT (visited, pred_bb->index) && change)
899         {
900           RESET_BIT (visited, pred_bb->index);
901           *(live->stack_top)++ = pred_bb->index;
902         }
903     }
904 }
905
906
907 /* Using LIVE, fill in all the live-on-entry blocks between the defs and uses
908    of all the variables.  */
909
910 static void
911 live_worklist (tree_live_info_p live)
912 {
913   unsigned b;
914   basic_block bb;
915   sbitmap visited = sbitmap_alloc (last_basic_block + 1);
916   bitmap tmp = BITMAP_ALLOC (NULL);
917
918   sbitmap_zero (visited);
919
920   /* Visit all the blocks in reverse order and propagate live on entry values
921      into the predecessors blocks.  */
922   FOR_EACH_BB_REVERSE (bb)
923     loe_visit_block (live, bb, visited, tmp);
924
925   /* Process any blocks which require further iteration.  */
926   while (live->stack_top != live->work_stack)
927     {
928       b = *--(live->stack_top);
929       loe_visit_block (live, BASIC_BLOCK (b), visited, tmp);
930     }
931
932   BITMAP_FREE (tmp);
933   sbitmap_free (visited);
934 }
935
936
937 /* Calculate the initial live on entry vector for SSA_NAME using immediate_use
938    links.  Set the live on entry fields in LIVE.  Def's are marked temporarily
939    in the liveout vector.  */
940
941 static void
942 set_var_live_on_entry (tree ssa_name, tree_live_info_p live)
943 {
944   int p;
945   gimple stmt;
946   use_operand_p use;
947   basic_block def_bb = NULL;
948   imm_use_iterator imm_iter;
949   bool global = false;
950
951   p = var_to_partition (live->map, ssa_name);
952   if (p == NO_PARTITION)
953     return;
954
955   stmt = SSA_NAME_DEF_STMT (ssa_name);
956   if (stmt)
957     {
958       def_bb = gimple_bb (stmt);
959       /* Mark defs in liveout bitmap temporarily.  */
960       if (def_bb)
961         bitmap_set_bit (live->liveout[def_bb->index], p);
962     }
963   else
964     def_bb = ENTRY_BLOCK_PTR;
965
966   /* Visit each use of SSA_NAME and if it isn't in the same block as the def,
967      add it to the list of live on entry blocks.  */
968   FOR_EACH_IMM_USE_FAST (use, imm_iter, ssa_name)
969     {
970       gimple use_stmt = USE_STMT (use);
971       basic_block add_block = NULL;
972
973       if (gimple_code (use_stmt) == GIMPLE_PHI)
974         {
975           /* Uses in PHI's are considered to be live at exit of the SRC block
976              as this is where a copy would be inserted.  Check to see if it is
977              defined in that block, or whether its live on entry.  */
978           int index = PHI_ARG_INDEX_FROM_USE (use);
979           edge e = gimple_phi_arg_edge (use_stmt, index);
980           if (e->src != ENTRY_BLOCK_PTR)
981             {
982               if (e->src != def_bb)
983                 add_block = e->src;
984             }
985         }
986       else if (is_gimple_debug (use_stmt))
987         continue;
988       else
989         {
990           /* If its not defined in this block, its live on entry.  */
991           basic_block use_bb = gimple_bb (use_stmt);
992           if (use_bb != def_bb)
993             add_block = use_bb;
994         }
995
996       /* If there was a live on entry use, set the bit.  */
997       if (add_block)
998         {
999           global = true;
1000           bitmap_set_bit (live->livein[add_block->index], p);
1001         }
1002     }
1003
1004   /* If SSA_NAME is live on entry to at least one block, fill in all the live
1005      on entry blocks between the def and all the uses.  */
1006   if (global)
1007     bitmap_set_bit (live->global, p);
1008 }
1009
1010
1011 /* Calculate the live on exit vectors based on the entry info in LIVEINFO.  */
1012
1013 void
1014 calculate_live_on_exit (tree_live_info_p liveinfo)
1015 {
1016   basic_block bb;
1017   edge e;
1018   edge_iterator ei;
1019
1020   /* live on entry calculations used liveout vectors for defs, clear them.  */
1021   FOR_EACH_BB (bb)
1022     bitmap_clear (liveinfo->liveout[bb->index]);
1023
1024   /* Set all the live-on-exit bits for uses in PHIs.  */
1025   FOR_EACH_BB (bb)
1026     {
1027       gimple_stmt_iterator gsi;
1028       size_t i;
1029
1030       /* Mark the PHI arguments which are live on exit to the pred block.  */
1031       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1032         {
1033           gimple phi = gsi_stmt (gsi);
1034           for (i = 0; i < gimple_phi_num_args (phi); i++)
1035             {
1036               tree t = PHI_ARG_DEF (phi, i);
1037               int p;
1038
1039               if (TREE_CODE (t) != SSA_NAME)
1040                 continue;
1041
1042               p = var_to_partition (liveinfo->map, t);
1043               if (p == NO_PARTITION)
1044                 continue;
1045               e = gimple_phi_arg_edge (phi, i);
1046               if (e->src != ENTRY_BLOCK_PTR)
1047                 bitmap_set_bit (liveinfo->liveout[e->src->index], p);
1048             }
1049         }
1050
1051       /* Add each successors live on entry to this bock live on exit.  */
1052       FOR_EACH_EDGE (e, ei, bb->succs)
1053         if (e->dest != EXIT_BLOCK_PTR)
1054           bitmap_ior_into (liveinfo->liveout[bb->index],
1055                            live_on_entry (liveinfo, e->dest));
1056     }
1057 }
1058
1059
1060 /* Given partition map MAP, calculate all the live on entry bitmaps for
1061    each partition.  Return a new live info object.  */
1062
1063 tree_live_info_p
1064 calculate_live_ranges (var_map map)
1065 {
1066   tree var;
1067   unsigned i;
1068   tree_live_info_p live;
1069
1070   live = new_tree_live_info (map);
1071   for (i = 0; i < num_var_partitions (map); i++)
1072     {
1073       var = partition_to_var (map, i);
1074       if (var != NULL_TREE)
1075         set_var_live_on_entry (var, live);
1076     }
1077
1078   live_worklist (live);
1079
1080 #ifdef ENABLE_CHECKING
1081   verify_live_on_entry (live);
1082 #endif
1083
1084   calculate_live_on_exit (live);
1085   return live;
1086 }
1087
1088
1089 /* Output partition map MAP to file F.  */
1090
1091 void
1092 dump_var_map (FILE *f, var_map map)
1093 {
1094   int t;
1095   unsigned x, y;
1096   int p;
1097
1098   fprintf (f, "\nPartition map \n\n");
1099
1100   for (x = 0; x < map->num_partitions; x++)
1101     {
1102       if (map->view_to_partition != NULL)
1103         p = map->view_to_partition[x];
1104       else
1105         p = x;
1106
1107       if (ssa_name (p) == NULL_TREE)
1108         continue;
1109
1110       t = 0;
1111       for (y = 1; y < num_ssa_names; y++)
1112         {
1113           p = partition_find (map->var_partition, y);
1114           if (map->partition_to_view)
1115             p = map->partition_to_view[p];
1116           if (p == (int)x)
1117             {
1118               if (t++ == 0)
1119                 {
1120                   fprintf(f, "Partition %d (", x);
1121                   print_generic_expr (f, partition_to_var (map, p), TDF_SLIM);
1122                   fprintf (f, " - ");
1123                 }
1124               fprintf (f, "%d ", y);
1125             }
1126         }
1127       if (t != 0)
1128         fprintf (f, ")\n");
1129     }
1130   fprintf (f, "\n");
1131 }
1132
1133
1134 /* Output live range info LIVE to file F, controlled by FLAG.  */
1135
1136 void
1137 dump_live_info (FILE *f, tree_live_info_p live, int flag)
1138 {
1139   basic_block bb;
1140   unsigned i;
1141   var_map map = live->map;
1142   bitmap_iterator bi;
1143
1144   if ((flag & LIVEDUMP_ENTRY) && live->livein)
1145     {
1146       FOR_EACH_BB (bb)
1147         {
1148           fprintf (f, "\nLive on entry to BB%d : ", bb->index);
1149           EXECUTE_IF_SET_IN_BITMAP (live->livein[bb->index], 0, i, bi)
1150             {
1151               print_generic_expr (f, partition_to_var (map, i), TDF_SLIM);
1152               fprintf (f, "  ");
1153             }
1154           fprintf (f, "\n");
1155         }
1156     }
1157
1158   if ((flag & LIVEDUMP_EXIT) && live->liveout)
1159     {
1160       FOR_EACH_BB (bb)
1161         {
1162           fprintf (f, "\nLive on exit from BB%d : ", bb->index);
1163           EXECUTE_IF_SET_IN_BITMAP (live->liveout[bb->index], 0, i, bi)
1164             {
1165               print_generic_expr (f, partition_to_var (map, i), TDF_SLIM);
1166               fprintf (f, "  ");
1167             }
1168           fprintf (f, "\n");
1169         }
1170     }
1171 }
1172
1173
1174 #ifdef ENABLE_CHECKING
1175 /* Verify that SSA_VAR is a non-virtual SSA_NAME.  */
1176
1177 void
1178 register_ssa_partition_check (tree ssa_var)
1179 {
1180   gcc_assert (TREE_CODE (ssa_var) == SSA_NAME);
1181   if (!is_gimple_reg (SSA_NAME_VAR (ssa_var)))
1182     {
1183       fprintf (stderr, "Illegally registering a virtual SSA name :");
1184       print_generic_expr (stderr, ssa_var, TDF_SLIM);
1185       fprintf (stderr, " in the SSA->Normal phase.\n");
1186       internal_error ("SSA corruption");
1187     }
1188 }
1189
1190
1191 /* Verify that the info in LIVE matches the current cfg.  */
1192
1193 static void
1194 verify_live_on_entry (tree_live_info_p live)
1195 {
1196   unsigned i;
1197   tree var;
1198   gimple stmt;
1199   basic_block bb;
1200   edge e;
1201   int num;
1202   edge_iterator ei;
1203   var_map map = live->map;
1204
1205    /* Check for live on entry partitions and report those with a DEF in
1206       the program. This will typically mean an optimization has done
1207       something wrong.  */
1208   bb = ENTRY_BLOCK_PTR;
1209   num = 0;
1210   FOR_EACH_EDGE (e, ei, bb->succs)
1211     {
1212       int entry_block = e->dest->index;
1213       if (e->dest == EXIT_BLOCK_PTR)
1214         continue;
1215       for (i = 0; i < (unsigned)num_var_partitions (map); i++)
1216         {
1217           basic_block tmp;
1218           tree d;
1219           bitmap loe;
1220           var = partition_to_var (map, i);
1221           stmt = SSA_NAME_DEF_STMT (var);
1222           tmp = gimple_bb (stmt);
1223           d = gimple_default_def (cfun, SSA_NAME_VAR (var));
1224
1225           loe = live_on_entry (live, e->dest);
1226           if (loe && bitmap_bit_p (loe, i))
1227             {
1228               if (!gimple_nop_p (stmt))
1229                 {
1230                   num++;
1231                   print_generic_expr (stderr, var, TDF_SLIM);
1232                   fprintf (stderr, " is defined ");
1233                   if (tmp)
1234                     fprintf (stderr, " in BB%d, ", tmp->index);
1235                   fprintf (stderr, "by:\n");
1236                   print_gimple_stmt (stderr, stmt, 0, TDF_SLIM);
1237                   fprintf (stderr, "\nIt is also live-on-entry to entry BB %d",
1238                            entry_block);
1239                   fprintf (stderr, " So it appears to have multiple defs.\n");
1240                 }
1241               else
1242                 {
1243                   if (d != var)
1244                     {
1245                       num++;
1246                       print_generic_expr (stderr, var, TDF_SLIM);
1247                       fprintf (stderr, " is live-on-entry to BB%d ",
1248                                entry_block);
1249                       if (d)
1250                         {
1251                           fprintf (stderr, " but is not the default def of ");
1252                           print_generic_expr (stderr, d, TDF_SLIM);
1253                           fprintf (stderr, "\n");
1254                         }
1255                       else
1256                         fprintf (stderr, " and there is no default def.\n");
1257                     }
1258                 }
1259             }
1260           else
1261             if (d == var)
1262               {
1263                 /* The only way this var shouldn't be marked live on entry is
1264                    if it occurs in a PHI argument of the block.  */
1265                 size_t z;
1266                 bool ok = false;
1267                 gimple_stmt_iterator gsi;
1268                 for (gsi = gsi_start_phis (e->dest);
1269                      !gsi_end_p (gsi) && !ok;
1270                      gsi_next (&gsi))
1271                   {
1272                     gimple phi = gsi_stmt (gsi);
1273                     for (z = 0; z < gimple_phi_num_args (phi); z++)
1274                       if (var == gimple_phi_arg_def (phi, z))
1275                         {
1276                           ok = true;
1277                           break;
1278                         }
1279                   }
1280                 if (ok)
1281                   continue;
1282                 num++;
1283                 print_generic_expr (stderr, var, TDF_SLIM);
1284                 fprintf (stderr, " is not marked live-on-entry to entry BB%d ",
1285                          entry_block);
1286                 fprintf (stderr, "but it is a default def so it should be.\n");
1287               }
1288         }
1289     }
1290   gcc_assert (num <= 0);
1291 }
1292 #endif