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