OSDN Git Service

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