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