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