1 /* Rewrite a program in Normal form into SSA.
2    Copyright (C) 2001-2016 Free Software Foundation, Inc.
3    Contributed by Diego Novillo <dnovillo@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 "backend.h"
25 #include "rtl.h"
26 #include "tree.h"
27 #include "gimple.h"
28 #include "tree-pass.h"
29 #include "ssa.h"
30 #include "gimple-pretty-print.h"
31 #include "diagnostic-core.h"
32 #include "langhooks.h"
33 #include "cfganal.h"
34 #include "gimple-iterator.h"
35 #include "tree-cfg.h"
36 #include "tree-into-ssa.h"
37 #include "tree-dfa.h"
38 #include "tree-ssa.h"
39 #include "domwalk.h"
40 
41 #define PERCENT(x,y) ((float)(x) * 100.0 / (float)(y))
42 
43 /* This file builds the SSA form for a function as described in:
44    R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. Zadeck. Efficiently
45    Computing Static Single Assignment Form and the Control Dependence
46    Graph. ACM Transactions on Programming Languages and Systems,
47    13(4):451-490, October 1991.  */
48 
49 /* Structure to map a variable VAR to the set of blocks that contain
50    definitions for VAR.  */
51 struct def_blocks
52 {
53   /* Blocks that contain definitions of VAR.  Bit I will be set if the
54      Ith block contains a definition of VAR.  */
55   bitmap def_blocks;
56 
57   /* Blocks that contain a PHI node for VAR.  */
58   bitmap phi_blocks;
59 
60   /* Blocks where VAR is live-on-entry.  Similar semantics as
61      DEF_BLOCKS.  */
62   bitmap livein_blocks;
63 };
64 
65 /* Stack of trees used to restore the global currdefs to its original
66    state after completing rewriting of a block and its dominator
67    children.  Its elements have the following properties:
68 
69    - An SSA_NAME (N) indicates that the current definition of the
70      underlying variable should be set to the given SSA_NAME.  If the
71      symbol associated with the SSA_NAME is not a GIMPLE register, the
72      next slot in the stack must be a _DECL node (SYM).  In this case,
73      the name N in the previous slot is the current reaching
74      definition for SYM.
75 
76    - A _DECL node indicates that the underlying variable has no
77      current definition.
78 
79    - A NULL node at the top entry is used to mark the last slot
80      associated with the current block.  */
81 static vec<tree> block_defs_stack;
82 
83 
84 /* Set of existing SSA names being replaced by update_ssa.  */
85 static sbitmap old_ssa_names;
86 
87 /* Set of new SSA names being added by update_ssa.  Note that both
88    NEW_SSA_NAMES and OLD_SSA_NAMES are dense bitmaps because most of
89    the operations done on them are presence tests.  */
90 static sbitmap new_ssa_names;
91 
92 static sbitmap interesting_blocks;
93 
94 /* Set of SSA names that have been marked to be released after they
95    were registered in the replacement table.  They will be finally
96    released after we finish updating the SSA web.  */
97 bitmap names_to_release;
98 
99 /* vec of vec of PHIs to rewrite in a basic block.  Element I corresponds
100    the to basic block with index I.  Allocated once per compilation, *not*
101    released between different functions.  */
102 static vec< vec<gphi *> > phis_to_rewrite;
103 
104 /* The bitmap of non-NULL elements of PHIS_TO_REWRITE.  */
105 static bitmap blocks_with_phis_to_rewrite;
106 
107 /* Growth factor for NEW_SSA_NAMES and OLD_SSA_NAMES.  These sets need
108    to grow as the callers to create_new_def_for will create new names on
109    the fly.
110    FIXME.  Currently set to 1/3 to avoid frequent reallocations but still
111    need to find a reasonable growth strategy.  */
112 #define NAME_SETS_GROWTH_FACTOR	(MAX (3, num_ssa_names / 3))
113 
114 
115 /* The function the SSA updating data structures have been initialized for.
116    NULL if they need to be initialized by create_new_def_for.  */
117 static struct function *update_ssa_initialized_fn = NULL;
118 
119 /* Global data to attach to the main dominator walk structure.  */
120 struct mark_def_sites_global_data
121 {
122   /* This bitmap contains the variables which are set before they
123      are used in a basic block.  */
124   bitmap kills;
125 };
126 
127 /* It is advantageous to avoid things like life analysis for variables which
128    do not need PHI nodes.  This enum describes whether or not a particular
129    variable may need a PHI node.  */
130 
131 enum need_phi_state {
132   /* This is the default.  If we are still in this state after finding
133      all the definition and use sites, then we will assume the variable
134      needs PHI nodes.  This is probably an overly conservative assumption.  */
135   NEED_PHI_STATE_UNKNOWN,
136 
137   /* This state indicates that we have seen one or more sets of the
138      variable in a single basic block and that the sets dominate all
139      uses seen so far.  If after finding all definition and use sites
140      we are still in this state, then the variable does not need any
141      PHI nodes.  */
142   NEED_PHI_STATE_NO,
143 
144   /* This state indicates that we have either seen multiple definitions of
145      the variable in multiple blocks, or that we encountered a use in a
146      block that was not dominated by the block containing the set(s) of
147      this variable.  This variable is assumed to need PHI nodes.  */
148   NEED_PHI_STATE_MAYBE
149 };
150 
151 /* Information stored for both SSA names and decls.  */
152 struct common_info
153 {
154   /* This field indicates whether or not the variable may need PHI nodes.
155      See the enum's definition for more detailed information about the
156      states.  */
157   ENUM_BITFIELD (need_phi_state) need_phi_state : 2;
158 
159   /* The current reaching definition replacing this var.  */
160   tree current_def;
161 
162   /* Definitions for this var.  */
163   struct def_blocks def_blocks;
164 };
165 
166 /* Information stored for decls.  */
167 struct var_info
168 {
169   /* The variable.  */
170   tree var;
171 
172   /* Information stored for both SSA names and decls.  */
173   common_info info;
174 };
175 
176 
177 /* VAR_INFOS hashtable helpers.  */
178 
179 struct var_info_hasher : free_ptr_hash <var_info>
180 {
181   static inline hashval_t hash (const value_type &);
182   static inline bool equal (const value_type &, const compare_type &);
183 };
184 
185 inline hashval_t
hash(const value_type & p)186 var_info_hasher::hash (const value_type &p)
187 {
188   return DECL_UID (p->var);
189 }
190 
191 inline bool
equal(const value_type & p1,const compare_type & p2)192 var_info_hasher::equal (const value_type &p1, const compare_type &p2)
193 {
194   return p1->var == p2->var;
195 }
196 
197 
198 /* Each entry in VAR_INFOS contains an element of type STRUCT
199    VAR_INFO_D.  */
200 static hash_table<var_info_hasher> *var_infos;
201 
202 
203 /* Information stored for SSA names.  */
204 struct ssa_name_info
205 {
206   /* Age of this record (so that info_for_ssa_name table can be cleared
207      quickly); if AGE < CURRENT_INFO_FOR_SSA_NAME_AGE, then the fields
208      are assumed to be null.  */
209   unsigned age;
210 
211   /* Replacement mappings, allocated from update_ssa_obstack.  */
212   bitmap repl_set;
213 
214   /* Information stored for both SSA names and decls.  */
215   common_info info;
216 };
217 
218 static vec<ssa_name_info *> info_for_ssa_name;
219 static unsigned current_info_for_ssa_name_age;
220 
221 static bitmap_obstack update_ssa_obstack;
222 
223 /* The set of blocks affected by update_ssa.  */
224 static bitmap blocks_to_update;
225 
226 /* The main entry point to the SSA renamer (rewrite_blocks) may be
227    called several times to do different, but related, tasks.
228    Initially, we need it to rename the whole program into SSA form.
229    At other times, we may need it to only rename into SSA newly
230    exposed symbols.  Finally, we can also call it to incrementally fix
231    an already built SSA web.  */
232 enum rewrite_mode {
233     /* Convert the whole function into SSA form.  */
234     REWRITE_ALL,
235 
236     /* Incrementally update the SSA web by replacing existing SSA
237        names with new ones.  See update_ssa for details.  */
238     REWRITE_UPDATE
239 };
240 
241 /* The set of symbols we ought to re-write into SSA form in update_ssa.  */
242 static bitmap symbols_to_rename_set;
243 static vec<tree> symbols_to_rename;
244 
245 /* Mark SYM for renaming.  */
246 
247 static void
mark_for_renaming(tree sym)248 mark_for_renaming (tree sym)
249 {
250   if (!symbols_to_rename_set)
251     symbols_to_rename_set = BITMAP_ALLOC (NULL);
252   if (bitmap_set_bit (symbols_to_rename_set, DECL_UID (sym)))
253     symbols_to_rename.safe_push (sym);
254 }
255 
256 /* Return true if SYM is marked for renaming.  */
257 
258 static bool
marked_for_renaming(tree sym)259 marked_for_renaming (tree sym)
260 {
261   if (!symbols_to_rename_set || sym == NULL_TREE)
262     return false;
263   return bitmap_bit_p (symbols_to_rename_set, DECL_UID (sym));
264 }
265 
266 
267 /* Return true if STMT needs to be rewritten.  When renaming a subset
268    of the variables, not all statements will be processed.  This is
269    decided in mark_def_sites.  */
270 
271 static inline bool
rewrite_uses_p(gimple * stmt)272 rewrite_uses_p (gimple *stmt)
273 {
274   return gimple_visited_p (stmt);
275 }
276 
277 
278 /* Set the rewrite marker on STMT to the value given by REWRITE_P.  */
279 
280 static inline void
set_rewrite_uses(gimple * stmt,bool rewrite_p)281 set_rewrite_uses (gimple *stmt, bool rewrite_p)
282 {
283   gimple_set_visited (stmt, rewrite_p);
284 }
285 
286 
287 /* Return true if the DEFs created by statement STMT should be
288    registered when marking new definition sites.  This is slightly
289    different than rewrite_uses_p: it's used by update_ssa to
290    distinguish statements that need to have both uses and defs
291    processed from those that only need to have their defs processed.
292    Statements that define new SSA names only need to have their defs
293    registered, but they don't need to have their uses renamed.  */
294 
295 static inline bool
register_defs_p(gimple * stmt)296 register_defs_p (gimple *stmt)
297 {
298   return gimple_plf (stmt, GF_PLF_1) != 0;
299 }
300 
301 
302 /* If REGISTER_DEFS_P is true, mark STMT to have its DEFs registered.  */
303 
304 static inline void
set_register_defs(gimple * stmt,bool register_defs_p)305 set_register_defs (gimple *stmt, bool register_defs_p)
306 {
307   gimple_set_plf (stmt, GF_PLF_1, register_defs_p);
308 }
309 
310 
311 /* Get the information associated with NAME.  */
312 
313 static inline ssa_name_info *
get_ssa_name_ann(tree name)314 get_ssa_name_ann (tree name)
315 {
316   unsigned ver = SSA_NAME_VERSION (name);
317   unsigned len = info_for_ssa_name.length ();
318   struct ssa_name_info *info;
319 
320   /* Re-allocate the vector at most once per update/into-SSA.  */
321   if (ver >= len)
322     info_for_ssa_name.safe_grow_cleared (num_ssa_names);
323 
324   /* But allocate infos lazily.  */
325   info = info_for_ssa_name[ver];
326   if (!info)
327     {
328       info = XCNEW (struct ssa_name_info);
329       info->age = current_info_for_ssa_name_age;
330       info->info.need_phi_state = NEED_PHI_STATE_UNKNOWN;
331       info_for_ssa_name[ver] = info;
332     }
333 
334   if (info->age < current_info_for_ssa_name_age)
335     {
336       info->age = current_info_for_ssa_name_age;
337       info->repl_set = NULL;
338       info->info.need_phi_state = NEED_PHI_STATE_UNKNOWN;
339       info->info.current_def = NULL_TREE;
340       info->info.def_blocks.def_blocks = NULL;
341       info->info.def_blocks.phi_blocks = NULL;
342       info->info.def_blocks.livein_blocks = NULL;
343     }
344 
345   return info;
346 }
347 
348 /* Return and allocate the auxiliar information for DECL.  */
349 
350 static inline var_info *
get_var_info(tree decl)351 get_var_info (tree decl)
352 {
353   var_info vi;
354   var_info **slot;
355   vi.var = decl;
356   slot = var_infos->find_slot_with_hash (&vi, DECL_UID (decl), INSERT);
357   if (*slot == NULL)
358     {
359       var_info *v = XCNEW (var_info);
360       v->var = decl;
361       *slot = v;
362       return v;
363     }
364   return *slot;
365 }
366 
367 
368 /* Clears info for SSA names.  */
369 
370 static void
clear_ssa_name_info(void)371 clear_ssa_name_info (void)
372 {
373   current_info_for_ssa_name_age++;
374 
375   /* If current_info_for_ssa_name_age wraps we use stale information.
376      Asser that this does not happen.  */
377   gcc_assert (current_info_for_ssa_name_age != 0);
378 }
379 
380 
381 /* Get access to the auxiliar information stored per SSA name or decl.  */
382 
383 static inline common_info *
get_common_info(tree var)384 get_common_info (tree var)
385 {
386   if (TREE_CODE (var) == SSA_NAME)
387     return &get_ssa_name_ann (var)->info;
388   else
389     return &get_var_info (var)->info;
390 }
391 
392 
393 /* Return the current definition for VAR.  */
394 
395 tree
get_current_def(tree var)396 get_current_def (tree var)
397 {
398   return get_common_info (var)->current_def;
399 }
400 
401 
402 /* Sets current definition of VAR to DEF.  */
403 
404 void
set_current_def(tree var,tree def)405 set_current_def (tree var, tree def)
406 {
407   get_common_info (var)->current_def = def;
408 }
409 
410 /* Cleans up the REWRITE_THIS_STMT and REGISTER_DEFS_IN_THIS_STMT flags for
411    all statements in basic block BB.  */
412 
413 static void
initialize_flags_in_bb(basic_block bb)414 initialize_flags_in_bb (basic_block bb)
415 {
416   gimple *stmt;
417   gimple_stmt_iterator gsi;
418 
419   for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
420     {
421       gimple *phi = gsi_stmt (gsi);
422       set_rewrite_uses (phi, false);
423       set_register_defs (phi, false);
424     }
425 
426   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
427     {
428       stmt = gsi_stmt (gsi);
429 
430       /* We are going to use the operand cache API, such as
431 	 SET_USE, SET_DEF, and FOR_EACH_IMM_USE_FAST.  The operand
432 	 cache for each statement should be up-to-date.  */
433       gcc_checking_assert (!gimple_modified_p (stmt));
434       set_rewrite_uses (stmt, false);
435       set_register_defs (stmt, false);
436     }
437 }
438 
439 /* Mark block BB as interesting for update_ssa.  */
440 
441 static void
mark_block_for_update(basic_block bb)442 mark_block_for_update (basic_block bb)
443 {
444   gcc_checking_assert (blocks_to_update != NULL);
445   if (!bitmap_set_bit (blocks_to_update, bb->index))
446     return;
447   initialize_flags_in_bb (bb);
448 }
449 
450 /* Return the set of blocks where variable VAR is defined and the blocks
451    where VAR is live on entry (livein).  If no entry is found in
452    DEF_BLOCKS, a new one is created and returned.  */
453 
454 static inline def_blocks *
get_def_blocks_for(common_info * info)455 get_def_blocks_for (common_info *info)
456 {
457   def_blocks *db_p = &info->def_blocks;
458   if (!db_p->def_blocks)
459     {
460       db_p->def_blocks = BITMAP_ALLOC (&update_ssa_obstack);
461       db_p->phi_blocks = BITMAP_ALLOC (&update_ssa_obstack);
462       db_p->livein_blocks = BITMAP_ALLOC (&update_ssa_obstack);
463     }
464 
465   return db_p;
466 }
467 
468 
469 /* Mark block BB as the definition site for variable VAR.  PHI_P is true if
470    VAR is defined by a PHI node.  */
471 
472 static void
set_def_block(tree var,basic_block bb,bool phi_p)473 set_def_block (tree var, basic_block bb, bool phi_p)
474 {
475   def_blocks *db_p;
476   common_info *info;
477 
478   info = get_common_info (var);
479   db_p = get_def_blocks_for (info);
480 
481   /* Set the bit corresponding to the block where VAR is defined.  */
482   bitmap_set_bit (db_p->def_blocks, bb->index);
483   if (phi_p)
484     bitmap_set_bit (db_p->phi_blocks, bb->index);
485 
486   /* Keep track of whether or not we may need to insert PHI nodes.
487 
488      If we are in the UNKNOWN state, then this is the first definition
489      of VAR.  Additionally, we have not seen any uses of VAR yet, so
490      we do not need a PHI node for this variable at this time (i.e.,
491      transition to NEED_PHI_STATE_NO).
492 
493      If we are in any other state, then we either have multiple definitions
494      of this variable occurring in different blocks or we saw a use of the
495      variable which was not dominated by the block containing the
496      definition(s).  In this case we may need a PHI node, so enter
497      state NEED_PHI_STATE_MAYBE.  */
498   if (info->need_phi_state == NEED_PHI_STATE_UNKNOWN)
499     info->need_phi_state = NEED_PHI_STATE_NO;
500   else
501     info->need_phi_state = NEED_PHI_STATE_MAYBE;
502 }
503 
504 
505 /* Mark block BB as having VAR live at the entry to BB.  */
506 
507 static void
set_livein_block(tree var,basic_block bb)508 set_livein_block (tree var, basic_block bb)
509 {
510   common_info *info;
511   def_blocks *db_p;
512 
513   info = get_common_info (var);
514   db_p = get_def_blocks_for (info);
515 
516   /* Set the bit corresponding to the block where VAR is live in.  */
517   bitmap_set_bit (db_p->livein_blocks, bb->index);
518 
519   /* Keep track of whether or not we may need to insert PHI nodes.
520 
521      If we reach here in NEED_PHI_STATE_NO, see if this use is dominated
522      by the single block containing the definition(s) of this variable.  If
523      it is, then we remain in NEED_PHI_STATE_NO, otherwise we transition to
524      NEED_PHI_STATE_MAYBE.  */
525   if (info->need_phi_state == NEED_PHI_STATE_NO)
526     {
527       int def_block_index = bitmap_first_set_bit (db_p->def_blocks);
528 
529       if (def_block_index == -1
530 	  || ! dominated_by_p (CDI_DOMINATORS, bb,
531 	                       BASIC_BLOCK_FOR_FN (cfun, def_block_index)))
532 	info->need_phi_state = NEED_PHI_STATE_MAYBE;
533     }
534   else
535     info->need_phi_state = NEED_PHI_STATE_MAYBE;
536 }
537 
538 
539 /* Return true if NAME is in OLD_SSA_NAMES.  */
540 
541 static inline bool
is_old_name(tree name)542 is_old_name (tree name)
543 {
544   unsigned ver = SSA_NAME_VERSION (name);
545   if (!old_ssa_names)
546     return false;
547   return (ver < SBITMAP_SIZE (old_ssa_names)
548 	  && bitmap_bit_p (old_ssa_names, ver));
549 }
550 
551 
552 /* Return true if NAME is in NEW_SSA_NAMES.  */
553 
554 static inline bool
is_new_name(tree name)555 is_new_name (tree name)
556 {
557   unsigned ver = SSA_NAME_VERSION (name);
558   if (!new_ssa_names)
559     return false;
560   return (ver < SBITMAP_SIZE (new_ssa_names)
561 	  && bitmap_bit_p (new_ssa_names, ver));
562 }
563 
564 
565 /* Return the names replaced by NEW_TREE (i.e., REPL_TBL[NEW_TREE].SET).  */
566 
567 static inline bitmap
names_replaced_by(tree new_tree)568 names_replaced_by (tree new_tree)
569 {
570   return get_ssa_name_ann (new_tree)->repl_set;
571 }
572 
573 
574 /* Add OLD to REPL_TBL[NEW_TREE].SET.  */
575 
576 static inline void
add_to_repl_tbl(tree new_tree,tree old)577 add_to_repl_tbl (tree new_tree, tree old)
578 {
579   bitmap *set = &get_ssa_name_ann (new_tree)->repl_set;
580   if (!*set)
581     *set = BITMAP_ALLOC (&update_ssa_obstack);
582   bitmap_set_bit (*set, SSA_NAME_VERSION (old));
583 }
584 
585 
586 /* Add a new mapping NEW_TREE -> OLD REPL_TBL.  Every entry N_i in REPL_TBL
587    represents the set of names O_1 ... O_j replaced by N_i.  This is
588    used by update_ssa and its helpers to introduce new SSA names in an
589    already formed SSA web.  */
590 
591 static void
add_new_name_mapping(tree new_tree,tree old)592 add_new_name_mapping (tree new_tree, tree old)
593 {
594   /* OLD and NEW_TREE must be different SSA names for the same symbol.  */
595   gcc_checking_assert (new_tree != old
596 		       && SSA_NAME_VAR (new_tree) == SSA_NAME_VAR (old));
597 
598   /* We may need to grow NEW_SSA_NAMES and OLD_SSA_NAMES because our
599      caller may have created new names since the set was created.  */
600   if (SBITMAP_SIZE (new_ssa_names) <= num_ssa_names - 1)
601     {
602       unsigned int new_sz = num_ssa_names + NAME_SETS_GROWTH_FACTOR;
603       new_ssa_names = sbitmap_resize (new_ssa_names, new_sz, 0);
604       old_ssa_names = sbitmap_resize (old_ssa_names, new_sz, 0);
605     }
606 
607   /* Update the REPL_TBL table.  */
608   add_to_repl_tbl (new_tree, old);
609 
610   /* If OLD had already been registered as a new name, then all the
611      names that OLD replaces should also be replaced by NEW_TREE.  */
612   if (is_new_name (old))
613     bitmap_ior_into (names_replaced_by (new_tree), names_replaced_by (old));
614 
615   /* Register NEW_TREE and OLD in NEW_SSA_NAMES and OLD_SSA_NAMES,
616      respectively.  */
617   bitmap_set_bit (new_ssa_names, SSA_NAME_VERSION (new_tree));
618   bitmap_set_bit (old_ssa_names, SSA_NAME_VERSION (old));
619 }
620 
621 
622 /* Call back for walk_dominator_tree used to collect definition sites
623    for every variable in the function.  For every statement S in block
624    BB:
625 
626    1- Variables defined by S in the DEFS of S are marked in the bitmap
627       KILLS.
628 
629    2- If S uses a variable VAR and there is no preceding kill of VAR,
630       then it is marked in the LIVEIN_BLOCKS bitmap associated with VAR.
631 
632    This information is used to determine which variables are live
633    across block boundaries to reduce the number of PHI nodes
634    we create.  */
635 
636 static void
mark_def_sites(basic_block bb,gimple * stmt,bitmap kills)637 mark_def_sites (basic_block bb, gimple *stmt, bitmap kills)
638 {
639   tree def;
640   use_operand_p use_p;
641   ssa_op_iter iter;
642 
643   /* Since this is the first time that we rewrite the program into SSA
644      form, force an operand scan on every statement.  */
645   update_stmt (stmt);
646 
647   gcc_checking_assert (blocks_to_update == NULL);
648   set_register_defs (stmt, false);
649   set_rewrite_uses (stmt, false);
650 
651   if (is_gimple_debug (stmt))
652     {
653       FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
654 	{
655 	  tree sym = USE_FROM_PTR (use_p);
656 	  gcc_checking_assert (DECL_P (sym));
657 	  set_rewrite_uses (stmt, true);
658 	}
659       if (rewrite_uses_p (stmt))
660 	bitmap_set_bit (interesting_blocks, bb->index);
661       return;
662     }
663 
664   /* If a variable is used before being set, then the variable is live
665      across a block boundary, so mark it live-on-entry to BB.  */
666   FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_ALL_USES)
667     {
668       tree sym = USE_FROM_PTR (use_p);
669       gcc_checking_assert (DECL_P (sym));
670       if (!bitmap_bit_p (kills, DECL_UID (sym)))
671 	set_livein_block (sym, bb);
672       set_rewrite_uses (stmt, true);
673     }
674 
675   /* Now process the defs.  Mark BB as the definition block and add
676      each def to the set of killed symbols.  */
677   FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_ALL_DEFS)
678     {
679       gcc_checking_assert (DECL_P (def));
680       set_def_block (def, bb, false);
681       bitmap_set_bit (kills, DECL_UID (def));
682       set_register_defs (stmt, true);
683     }
684 
685   /* If we found the statement interesting then also mark the block BB
686      as interesting.  */
687   if (rewrite_uses_p (stmt) || register_defs_p (stmt))
688     bitmap_set_bit (interesting_blocks, bb->index);
689 }
690 
691 /* Structure used by prune_unused_phi_nodes to record bounds of the intervals
692    in the dfs numbering of the dominance tree.  */
693 
694 struct dom_dfsnum
695 {
696   /* Basic block whose index this entry corresponds to.  */
697   unsigned bb_index;
698 
699   /* The dfs number of this node.  */
700   unsigned dfs_num;
701 };
702 
703 /* Compares two entries of type struct dom_dfsnum by dfs_num field.  Callback
704    for qsort.  */
705 
706 static int
cmp_dfsnum(const void * a,const void * b)707 cmp_dfsnum (const void *a, const void *b)
708 {
709   const struct dom_dfsnum *const da = (const struct dom_dfsnum *) a;
710   const struct dom_dfsnum *const db = (const struct dom_dfsnum *) b;
711 
712   return (int) da->dfs_num - (int) db->dfs_num;
713 }
714 
715 /* Among the intervals starting at the N points specified in DEFS, find
716    the one that contains S, and return its bb_index.  */
717 
718 static unsigned
find_dfsnum_interval(struct dom_dfsnum * defs,unsigned n,unsigned s)719 find_dfsnum_interval (struct dom_dfsnum *defs, unsigned n, unsigned s)
720 {
721   unsigned f = 0, t = n, m;
722 
723   while (t > f + 1)
724     {
725       m = (f + t) / 2;
726       if (defs[m].dfs_num <= s)
727 	f = m;
728       else
729 	t = m;
730     }
731 
732   return defs[f].bb_index;
733 }
734 
735 /* Clean bits from PHIS for phi nodes whose value cannot be used in USES.
736    KILLS is a bitmap of blocks where the value is defined before any use.  */
737 
738 static void
prune_unused_phi_nodes(bitmap phis,bitmap kills,bitmap uses)739 prune_unused_phi_nodes (bitmap phis, bitmap kills, bitmap uses)
740 {
741   bitmap_iterator bi;
742   unsigned i, b, p, u, top;
743   bitmap live_phis;
744   basic_block def_bb, use_bb;
745   edge e;
746   edge_iterator ei;
747   bitmap to_remove;
748   struct dom_dfsnum *defs;
749   unsigned n_defs, adef;
750 
751   if (bitmap_empty_p (uses))
752     {
753       bitmap_clear (phis);
754       return;
755     }
756 
757   /* The phi must dominate a use, or an argument of a live phi.  Also, we
758      do not create any phi nodes in def blocks, unless they are also livein.  */
759   to_remove = BITMAP_ALLOC (NULL);
760   bitmap_and_compl (to_remove, kills, uses);
761   bitmap_and_compl_into (phis, to_remove);
762   if (bitmap_empty_p (phis))
763     {
764       BITMAP_FREE (to_remove);
765       return;
766     }
767 
768   /* We want to remove the unnecessary phi nodes, but we do not want to compute
769      liveness information, as that may be linear in the size of CFG, and if
770      there are lot of different variables to rewrite, this may lead to quadratic
771      behavior.
772 
773      Instead, we basically emulate standard dce.  We put all uses to worklist,
774      then for each of them find the nearest def that dominates them.  If this
775      def is a phi node, we mark it live, and if it was not live before, we
776      add the predecessors of its basic block to the worklist.
777 
778      To quickly locate the nearest def that dominates use, we use dfs numbering
779      of the dominance tree (that is already available in order to speed up
780      queries).  For each def, we have the interval given by the dfs number on
781      entry to and on exit from the corresponding subtree in the dominance tree.
782      The nearest dominator for a given use is the smallest of these intervals
783      that contains entry and exit dfs numbers for the basic block with the use.
784      If we store the bounds for all the uses to an array and sort it, we can
785      locate the nearest dominating def in logarithmic time by binary search.*/
786   bitmap_ior (to_remove, kills, phis);
787   n_defs = bitmap_count_bits (to_remove);
788   defs = XNEWVEC (struct dom_dfsnum, 2 * n_defs + 1);
789   defs[0].bb_index = 1;
790   defs[0].dfs_num = 0;
791   adef = 1;
792   EXECUTE_IF_SET_IN_BITMAP (to_remove, 0, i, bi)
793     {
794       def_bb = BASIC_BLOCK_FOR_FN (cfun, i);
795       defs[adef].bb_index = i;
796       defs[adef].dfs_num = bb_dom_dfs_in (CDI_DOMINATORS, def_bb);
797       defs[adef + 1].bb_index = i;
798       defs[adef + 1].dfs_num = bb_dom_dfs_out (CDI_DOMINATORS, def_bb);
799       adef += 2;
800     }
801   BITMAP_FREE (to_remove);
802   gcc_assert (adef == 2 * n_defs + 1);
803   qsort (defs, adef, sizeof (struct dom_dfsnum), cmp_dfsnum);
804   gcc_assert (defs[0].bb_index == 1);
805 
806   /* Now each DEFS entry contains the number of the basic block to that the
807      dfs number corresponds.  Change them to the number of basic block that
808      corresponds to the interval following the dfs number.  Also, for the
809      dfs_out numbers, increase the dfs number by one (so that it corresponds
810      to the start of the following interval, not to the end of the current
811      one).  We use WORKLIST as a stack.  */
812   auto_vec<int> worklist (n_defs + 1);
813   worklist.quick_push (1);
814   top = 1;
815   n_defs = 1;
816   for (i = 1; i < adef; i++)
817     {
818       b = defs[i].bb_index;
819       if (b == top)
820 	{
821 	  /* This is a closing element.  Interval corresponding to the top
822 	     of the stack after removing it follows.  */
823 	  worklist.pop ();
824 	  top = worklist[worklist.length () - 1];
825 	  defs[n_defs].bb_index = top;
826 	  defs[n_defs].dfs_num = defs[i].dfs_num + 1;
827 	}
828       else
829 	{
830 	  /* Opening element.  Nothing to do, just push it to the stack and move
831 	     it to the correct position.  */
832 	  defs[n_defs].bb_index = defs[i].bb_index;
833 	  defs[n_defs].dfs_num = defs[i].dfs_num;
834 	  worklist.quick_push (b);
835 	  top = b;
836 	}
837 
838       /* If this interval starts at the same point as the previous one, cancel
839 	 the previous one.  */
840       if (defs[n_defs].dfs_num == defs[n_defs - 1].dfs_num)
841 	defs[n_defs - 1].bb_index = defs[n_defs].bb_index;
842       else
843 	n_defs++;
844     }
845   worklist.pop ();
846   gcc_assert (worklist.is_empty ());
847 
848   /* Now process the uses.  */
849   live_phis = BITMAP_ALLOC (NULL);
850   EXECUTE_IF_SET_IN_BITMAP (uses, 0, i, bi)
851     {
852       worklist.safe_push (i);
853     }
854 
855   while (!worklist.is_empty ())
856     {
857       b = worklist.pop ();
858       if (b == ENTRY_BLOCK)
859 	continue;
860 
861       /* If there is a phi node in USE_BB, it is made live.  Otherwise,
862 	 find the def that dominates the immediate dominator of USE_BB
863 	 (the kill in USE_BB does not dominate the use).  */
864       if (bitmap_bit_p (phis, b))
865 	p = b;
866       else
867 	{
868 	  use_bb = get_immediate_dominator (CDI_DOMINATORS,
869 					    BASIC_BLOCK_FOR_FN (cfun, b));
870 	  p = find_dfsnum_interval (defs, n_defs,
871 				    bb_dom_dfs_in (CDI_DOMINATORS, use_bb));
872 	  if (!bitmap_bit_p (phis, p))
873 	    continue;
874 	}
875 
876       /* If the phi node is already live, there is nothing to do.  */
877       if (!bitmap_set_bit (live_phis, p))
878 	continue;
879 
880       /* Add the new uses to the worklist.  */
881       def_bb = BASIC_BLOCK_FOR_FN (cfun, p);
882       FOR_EACH_EDGE (e, ei, def_bb->preds)
883 	{
884 	  u = e->src->index;
885 	  if (bitmap_bit_p (uses, u))
886 	    continue;
887 
888 	  /* In case there is a kill directly in the use block, do not record
889 	     the use (this is also necessary for correctness, as we assume that
890 	     uses dominated by a def directly in their block have been filtered
891 	     out before).  */
892 	  if (bitmap_bit_p (kills, u))
893 	    continue;
894 
895 	  bitmap_set_bit (uses, u);
896 	  worklist.safe_push (u);
897 	}
898     }
899 
900   bitmap_copy (phis, live_phis);
901   BITMAP_FREE (live_phis);
902   free (defs);
903 }
904 
905 /* Return the set of blocks where variable VAR is defined and the blocks
906    where VAR is live on entry (livein).  Return NULL, if no entry is
907    found in DEF_BLOCKS.  */
908 
909 static inline def_blocks *
find_def_blocks_for(tree var)910 find_def_blocks_for (tree var)
911 {
912   def_blocks *p = &get_common_info (var)->def_blocks;
913   if (!p->def_blocks)
914     return NULL;
915   return p;
916 }
917 
918 
919 /* Marks phi node PHI in basic block BB for rewrite.  */
920 
921 static void
mark_phi_for_rewrite(basic_block bb,gphi * phi)922 mark_phi_for_rewrite (basic_block bb, gphi *phi)
923 {
924   vec<gphi *> phis;
925   unsigned n, idx = bb->index;
926 
927   if (rewrite_uses_p (phi))
928     return;
929 
930   set_rewrite_uses (phi, true);
931 
932   if (!blocks_with_phis_to_rewrite)
933     return;
934 
935   bitmap_set_bit (blocks_with_phis_to_rewrite, idx);
936 
937   n = (unsigned) last_basic_block_for_fn (cfun) + 1;
938   if (phis_to_rewrite.length () < n)
939     phis_to_rewrite.safe_grow_cleared (n);
940 
941   phis = phis_to_rewrite[idx];
942   phis.reserve (10);
943 
944   phis.safe_push (phi);
945   phis_to_rewrite[idx] = phis;
946 }
947 
948 /* Insert PHI nodes for variable VAR using the iterated dominance
949    frontier given in PHI_INSERTION_POINTS.  If UPDATE_P is true, this
950    function assumes that the caller is incrementally updating the
951    existing SSA form, in which case VAR may be an SSA name instead of
952    a symbol.
953 
954    PHI_INSERTION_POINTS is updated to reflect nodes that already had a
955    PHI node for VAR.  On exit, only the nodes that received a PHI node
956    for VAR will be present in PHI_INSERTION_POINTS.  */
957 
958 static void
insert_phi_nodes_for(tree var,bitmap phi_insertion_points,bool update_p)959 insert_phi_nodes_for (tree var, bitmap phi_insertion_points, bool update_p)
960 {
961   unsigned bb_index;
962   edge e;
963   gphi *phi;
964   basic_block bb;
965   bitmap_iterator bi;
966   def_blocks *def_map = find_def_blocks_for (var);
967 
968   /* Remove the blocks where we already have PHI nodes for VAR.  */
969   bitmap_and_compl_into (phi_insertion_points, def_map->phi_blocks);
970 
971   /* Remove obviously useless phi nodes.  */
972   prune_unused_phi_nodes (phi_insertion_points, def_map->def_blocks,
973 			  def_map->livein_blocks);
974 
975   /* And insert the PHI nodes.  */
976   EXECUTE_IF_SET_IN_BITMAP (phi_insertion_points, 0, bb_index, bi)
977     {
978       bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
979       if (update_p)
980 	mark_block_for_update (bb);
981 
982       if (dump_file && (dump_flags & TDF_DETAILS))
983 	{
984 	  fprintf (dump_file, "creating PHI node in block #%d for ", bb_index);
985 	  print_generic_expr (dump_file, var, TDF_SLIM);
986 	  fprintf (dump_file, "\n");
987 	}
988       phi = NULL;
989 
990       if (TREE_CODE (var) == SSA_NAME)
991 	{
992 	  /* If we are rewriting SSA names, create the LHS of the PHI
993 	     node by duplicating VAR.  This is useful in the case of
994 	     pointers, to also duplicate pointer attributes (alias
995 	     information, in particular).  */
996 	  edge_iterator ei;
997 	  tree new_lhs;
998 
999 	  gcc_checking_assert (update_p);
1000 	  new_lhs = duplicate_ssa_name (var, NULL);
1001 	  phi = create_phi_node (new_lhs, bb);
1002 	  add_new_name_mapping (new_lhs, var);
1003 
1004 	  /* Add VAR to every argument slot of PHI.  We need VAR in
1005 	     every argument so that rewrite_update_phi_arguments knows
1006 	     which name is this PHI node replacing.  If VAR is a
1007 	     symbol marked for renaming, this is not necessary, the
1008 	     renamer will use the symbol on the LHS to get its
1009 	     reaching definition.  */
1010 	  FOR_EACH_EDGE (e, ei, bb->preds)
1011 	    add_phi_arg (phi, var, e, UNKNOWN_LOCATION);
1012 	}
1013       else
1014 	{
1015 	  tree tracked_var;
1016 
1017 	  gcc_checking_assert (DECL_P (var));
1018 	  phi = create_phi_node (var, bb);
1019 
1020 	  tracked_var = target_for_debug_bind (var);
1021 	  if (tracked_var)
1022 	    {
1023 	      gimple *note = gimple_build_debug_bind (tracked_var,
1024 						      PHI_RESULT (phi),
1025 						     phi);
1026 	      gimple_stmt_iterator si = gsi_after_labels (bb);
1027 	      gsi_insert_before (&si, note, GSI_SAME_STMT);
1028 	    }
1029 	}
1030 
1031       /* Mark this PHI node as interesting for update_ssa.  */
1032       set_register_defs (phi, true);
1033       mark_phi_for_rewrite (bb, phi);
1034     }
1035 }
1036 
1037 /* Sort var_infos after DECL_UID of their var.  */
1038 
1039 static int
insert_phi_nodes_compare_var_infos(const void * a,const void * b)1040 insert_phi_nodes_compare_var_infos (const void *a, const void *b)
1041 {
1042   const var_info *defa = *(var_info * const *)a;
1043   const var_info *defb = *(var_info * const *)b;
1044   if (DECL_UID (defa->var) < DECL_UID (defb->var))
1045     return -1;
1046   else
1047     return 1;
1048 }
1049 
1050 /* Insert PHI nodes at the dominance frontier of blocks with variable
1051    definitions.  DFS contains the dominance frontier information for
1052    the flowgraph.  */
1053 
1054 static void
insert_phi_nodes(bitmap_head * dfs)1055 insert_phi_nodes (bitmap_head *dfs)
1056 {
1057   hash_table<var_info_hasher>::iterator hi;
1058   unsigned i;
1059   var_info *info;
1060 
1061   timevar_push (TV_TREE_INSERT_PHI_NODES);
1062 
1063   auto_vec<var_info *> vars (var_infos->elements ());
1064   FOR_EACH_HASH_TABLE_ELEMENT (*var_infos, info, var_info_p, hi)
1065     if (info->info.need_phi_state != NEED_PHI_STATE_NO)
1066       vars.quick_push (info);
1067 
1068   /* Do two stages to avoid code generation differences for UID
1069      differences but no UID ordering differences.  */
1070   vars.qsort (insert_phi_nodes_compare_var_infos);
1071 
1072   FOR_EACH_VEC_ELT (vars, i, info)
1073     {
1074       bitmap idf = compute_idf (info->info.def_blocks.def_blocks, dfs);
1075       insert_phi_nodes_for (info->var, idf, false);
1076       BITMAP_FREE (idf);
1077     }
1078 
1079   timevar_pop (TV_TREE_INSERT_PHI_NODES);
1080 }
1081 
1082 
1083 /* Push SYM's current reaching definition into BLOCK_DEFS_STACK and
1084    register DEF (an SSA_NAME) to be a new definition for SYM.  */
1085 
1086 static void
register_new_def(tree def,tree sym)1087 register_new_def (tree def, tree sym)
1088 {
1089   common_info *info = get_common_info (sym);
1090   tree currdef;
1091 
1092   /* If this variable is set in a single basic block and all uses are
1093      dominated by the set(s) in that single basic block, then there is
1094      no reason to record anything for this variable in the block local
1095      definition stacks.  Doing so just wastes time and memory.
1096 
1097      This is the same test to prune the set of variables which may
1098      need PHI nodes.  So we just use that information since it's already
1099      computed and available for us to use.  */
1100   if (info->need_phi_state == NEED_PHI_STATE_NO)
1101     {
1102       info->current_def = def;
1103       return;
1104     }
1105 
1106   currdef = info->current_def;
1107 
1108   /* If SYM is not a GIMPLE register, then CURRDEF may be a name whose
1109      SSA_NAME_VAR is not necessarily SYM.  In this case, also push SYM
1110      in the stack so that we know which symbol is being defined by
1111      this SSA name when we unwind the stack.  */
1112   if (currdef && !is_gimple_reg (sym))
1113     block_defs_stack.safe_push (sym);
1114 
1115   /* Push the current reaching definition into BLOCK_DEFS_STACK.  This
1116      stack is later used by the dominator tree callbacks to restore
1117      the reaching definitions for all the variables defined in the
1118      block after a recursive visit to all its immediately dominated
1119      blocks.  If there is no current reaching definition, then just
1120      record the underlying _DECL node.  */
1121   block_defs_stack.safe_push (currdef ? currdef : sym);
1122 
1123   /* Set the current reaching definition for SYM to be DEF.  */
1124   info->current_def = def;
1125 }
1126 
1127 
1128 /* Perform a depth-first traversal of the dominator tree looking for
1129    variables to rename.  BB is the block where to start searching.
1130    Renaming is a five step process:
1131 
1132    1- Every definition made by PHI nodes at the start of the blocks is
1133       registered as the current definition for the corresponding variable.
1134 
1135    2- Every statement in BB is rewritten.  USE and VUSE operands are
1136       rewritten with their corresponding reaching definition.  DEF and
1137       VDEF targets are registered as new definitions.
1138 
1139    3- All the PHI nodes in successor blocks of BB are visited.  The
1140       argument corresponding to BB is replaced with its current reaching
1141       definition.
1142 
1143    4- Recursively rewrite every dominator child block of BB.
1144 
1145    5- Restore (in reverse order) the current reaching definition for every
1146       new definition introduced in this block.  This is done so that when
1147       we return from the recursive call, all the current reaching
1148       definitions are restored to the names that were valid in the
1149       dominator parent of BB.  */
1150 
1151 /* Return the current definition for variable VAR.  If none is found,
1152    create a new SSA name to act as the zeroth definition for VAR.  */
1153 
1154 static tree
get_reaching_def(tree var)1155 get_reaching_def (tree var)
1156 {
1157   common_info *info = get_common_info (var);
1158   tree currdef;
1159 
1160   /* Lookup the current reaching definition for VAR.  */
1161   currdef = info->current_def;
1162 
1163   /* If there is no reaching definition for VAR, create and register a
1164      default definition for it (if needed).  */
1165   if (currdef == NULL_TREE)
1166     {
1167       tree sym = DECL_P (var) ? var : SSA_NAME_VAR (var);
1168       currdef = get_or_create_ssa_default_def (cfun, sym);
1169     }
1170 
1171   /* Return the current reaching definition for VAR, or the default
1172      definition, if we had to create one.  */
1173   return currdef;
1174 }
1175 
1176 
1177 /* Helper function for rewrite_stmt.  Rewrite uses in a debug stmt.  */
1178 
1179 static void
rewrite_debug_stmt_uses(gimple * stmt)1180 rewrite_debug_stmt_uses (gimple *stmt)
1181 {
1182   use_operand_p use_p;
1183   ssa_op_iter iter;
1184   bool update = false;
1185 
1186   FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
1187     {
1188       tree var = USE_FROM_PTR (use_p), def;
1189       common_info *info = get_common_info (var);
1190       gcc_checking_assert (DECL_P (var));
1191       def = info->current_def;
1192       if (!def)
1193 	{
1194 	  if (TREE_CODE (var) == PARM_DECL
1195 	      && single_succ_p (ENTRY_BLOCK_PTR_FOR_FN (cfun)))
1196 	    {
1197 	      gimple_stmt_iterator gsi
1198 		=
1199 	     gsi_after_labels (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
1200 	      int lim;
1201 	      /* Search a few source bind stmts at the start of first bb to
1202 		 see if a DEBUG_EXPR_DECL can't be reused.  */
1203 	      for (lim = 32;
1204 		   !gsi_end_p (gsi) && lim > 0;
1205 		   gsi_next (&gsi), lim--)
1206 		{
1207 		  gimple *gstmt = gsi_stmt (gsi);
1208 		  if (!gimple_debug_source_bind_p (gstmt))
1209 		    break;
1210 		  if (gimple_debug_source_bind_get_value (gstmt) == var)
1211 		    {
1212 		      def = gimple_debug_source_bind_get_var (gstmt);
1213 		      if (TREE_CODE (def) == DEBUG_EXPR_DECL)
1214 			break;
1215 		      else
1216 			def = NULL_TREE;
1217 		    }
1218 		}
1219 	      /* If not, add a new source bind stmt.  */
1220 	      if (def == NULL_TREE)
1221 		{
1222 		  gimple *def_temp;
1223 		  def = make_node (DEBUG_EXPR_DECL);
1224 		  def_temp = gimple_build_debug_source_bind (def, var, NULL);
1225 		  DECL_ARTIFICIAL (def) = 1;
1226 		  TREE_TYPE (def) = TREE_TYPE (var);
1227 		  DECL_MODE (def) = DECL_MODE (var);
1228 		  gsi =
1229 		 gsi_after_labels (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
1230 		  gsi_insert_before (&gsi, def_temp, GSI_SAME_STMT);
1231 		}
1232 	      update = true;
1233 	    }
1234 	}
1235       else
1236 	{
1237 	  /* Check if info->current_def can be trusted.  */
1238 	  basic_block bb = gimple_bb (stmt);
1239 	  basic_block def_bb
1240 	      = SSA_NAME_IS_DEFAULT_DEF (def)
1241 	      ? NULL : gimple_bb (SSA_NAME_DEF_STMT (def));
1242 
1243 	  /* If definition is in current bb, it is fine.  */
1244 	  if (bb == def_bb)
1245 	    ;
1246 	  /* If definition bb doesn't dominate the current bb,
1247 	     it can't be used.  */
1248 	  else if (def_bb && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
1249 	    def = NULL;
1250 	  /* If there is just one definition and dominates the current
1251 	     bb, it is fine.  */
1252 	  else if (info->need_phi_state == NEED_PHI_STATE_NO)
1253 	    ;
1254 	  else
1255 	    {
1256 	      def_blocks *db_p = get_def_blocks_for (info);
1257 
1258 	      /* If there are some non-debug uses in the current bb,
1259 		 it is fine.  */
1260 	      if (bitmap_bit_p (db_p->livein_blocks, bb->index))
1261 		;
1262 	      /* Otherwise give up for now.  */
1263 	      else
1264 		def = NULL;
1265 	    }
1266 	}
1267       if (def == NULL)
1268 	{
1269 	  gimple_debug_bind_reset_value (stmt);
1270 	  update_stmt (stmt);
1271 	  return;
1272 	}
1273       SET_USE (use_p, def);
1274     }
1275   if (update)
1276     update_stmt (stmt);
1277 }
1278 
1279 /* SSA Rewriting Step 2.  Rewrite every variable used in each statement in
1280    the block with its immediate reaching definitions.  Update the current
1281    definition of a variable when a new real or virtual definition is found.  */
1282 
1283 static void
rewrite_stmt(gimple_stmt_iterator * si)1284 rewrite_stmt (gimple_stmt_iterator *si)
1285 {
1286   use_operand_p use_p;
1287   def_operand_p def_p;
1288   ssa_op_iter iter;
1289   gimple *stmt = gsi_stmt (*si);
1290 
1291   /* If mark_def_sites decided that we don't need to rewrite this
1292      statement, ignore it.  */
1293   gcc_assert (blocks_to_update == NULL);
1294   if (!rewrite_uses_p (stmt) && !register_defs_p (stmt))
1295     return;
1296 
1297   if (dump_file && (dump_flags & TDF_DETAILS))
1298     {
1299       fprintf (dump_file, "Renaming statement ");
1300       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1301       fprintf (dump_file, "\n");
1302     }
1303 
1304   /* Step 1.  Rewrite USES in the statement.  */
1305   if (rewrite_uses_p (stmt))
1306     {
1307       if (is_gimple_debug (stmt))
1308 	rewrite_debug_stmt_uses (stmt);
1309       else
1310 	FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_ALL_USES)
1311 	  {
1312 	    tree var = USE_FROM_PTR (use_p);
1313 	    gcc_checking_assert (DECL_P (var));
1314 	    SET_USE (use_p, get_reaching_def (var));
1315 	  }
1316     }
1317 
1318   /* Step 2.  Register the statement's DEF operands.  */
1319   if (register_defs_p (stmt))
1320     FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, iter, SSA_OP_ALL_DEFS)
1321       {
1322 	tree var = DEF_FROM_PTR (def_p);
1323 	tree name;
1324 	tree tracked_var;
1325 
1326 	gcc_checking_assert (DECL_P (var));
1327 
1328 	if (gimple_clobber_p (stmt)
1329 	    && is_gimple_reg (var))
1330 	  {
1331 	    /* If we rewrite a DECL into SSA form then drop its
1332 	       clobber stmts and replace uses with a new default def.  */
1333 	    gcc_checking_assert (TREE_CODE (var) == VAR_DECL
1334 				 && !gimple_vdef (stmt));
1335 	    gsi_replace (si, gimple_build_nop (), true);
1336 	    register_new_def (get_or_create_ssa_default_def (cfun, var), var);
1337 	    break;
1338 	  }
1339 
1340 	name = make_ssa_name (var, stmt);
1341 	SET_DEF (def_p, name);
1342 	register_new_def (DEF_FROM_PTR (def_p), var);
1343 
1344 	tracked_var = target_for_debug_bind (var);
1345 	if (tracked_var)
1346 	  {
1347 	    gimple *note = gimple_build_debug_bind (tracked_var, name, stmt);
1348 	    gsi_insert_after (si, note, GSI_SAME_STMT);
1349 	  }
1350       }
1351 }
1352 
1353 
1354 /* SSA Rewriting Step 3.  Visit all the successor blocks of BB looking for
1355    PHI nodes.  For every PHI node found, add a new argument containing the
1356    current reaching definition for the variable and the edge through which
1357    that definition is reaching the PHI node.  */
1358 
1359 static void
rewrite_add_phi_arguments(basic_block bb)1360 rewrite_add_phi_arguments (basic_block bb)
1361 {
1362   edge e;
1363   edge_iterator ei;
1364 
1365   FOR_EACH_EDGE (e, ei, bb->succs)
1366     {
1367       gphi *phi;
1368       gphi_iterator gsi;
1369 
1370       for (gsi = gsi_start_phis (e->dest); !gsi_end_p (gsi);
1371 	   gsi_next (&gsi))
1372 	{
1373 	  tree currdef, res;
1374 	  location_t loc;
1375 
1376 	  phi = gsi.phi ();
1377 	  res = gimple_phi_result (phi);
1378 	  currdef = get_reaching_def (SSA_NAME_VAR (res));
1379 	  /* Virtual operand PHI args do not need a location.  */
1380 	  if (virtual_operand_p (res))
1381 	    loc = UNKNOWN_LOCATION;
1382 	  else
1383 	    loc = gimple_location (SSA_NAME_DEF_STMT (currdef));
1384 	  add_phi_arg (phi, currdef, e, loc);
1385 	}
1386     }
1387 }
1388 
1389 class rewrite_dom_walker : public dom_walker
1390 {
1391 public:
rewrite_dom_walker(cdi_direction direction)1392   rewrite_dom_walker (cdi_direction direction) : dom_walker (direction) {}
1393 
1394   virtual edge before_dom_children (basic_block);
1395   virtual void after_dom_children (basic_block);
1396 };
1397 
1398 /* SSA Rewriting Step 1.  Initialization, create a block local stack
1399    of reaching definitions for new SSA names produced in this block
1400    (BLOCK_DEFS).  Register new definitions for every PHI node in the
1401    block.  */
1402 
1403 edge
before_dom_children(basic_block bb)1404 rewrite_dom_walker::before_dom_children (basic_block bb)
1405 {
1406   if (dump_file && (dump_flags & TDF_DETAILS))
1407     fprintf (dump_file, "\n\nRenaming block #%d\n\n", bb->index);
1408 
1409   /* Mark the unwind point for this block.  */
1410   block_defs_stack.safe_push (NULL_TREE);
1411 
1412   /* Step 1.  Register new definitions for every PHI node in the block.
1413      Conceptually, all the PHI nodes are executed in parallel and each PHI
1414      node introduces a new version for the associated variable.  */
1415   for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
1416        gsi_next (&gsi))
1417     {
1418       tree result = gimple_phi_result (gsi_stmt (gsi));
1419       register_new_def (result, SSA_NAME_VAR (result));
1420     }
1421 
1422   /* Step 2.  Rewrite every variable used in each statement in the block
1423      with its immediate reaching definitions.  Update the current definition
1424      of a variable when a new real or virtual definition is found.  */
1425   if (bitmap_bit_p (interesting_blocks, bb->index))
1426     for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi);
1427 	 gsi_next (&gsi))
1428       rewrite_stmt (&gsi);
1429 
1430   /* Step 3.  Visit all the successor blocks of BB looking for PHI nodes.
1431      For every PHI node found, add a new argument containing the current
1432      reaching definition for the variable and the edge through which that
1433      definition is reaching the PHI node.  */
1434   rewrite_add_phi_arguments (bb);
1435 
1436   return NULL;
1437 }
1438 
1439 
1440 
1441 /* Called after visiting all the statements in basic block BB and all
1442    of its dominator children.  Restore CURRDEFS to its original value.  */
1443 
1444 void
after_dom_children(basic_block bb ATTRIBUTE_UNUSED)1445 rewrite_dom_walker::after_dom_children (basic_block bb ATTRIBUTE_UNUSED)
1446 {
1447   /* Restore CURRDEFS to its original state.  */
1448   while (block_defs_stack.length () > 0)
1449     {
1450       tree tmp = block_defs_stack.pop ();
1451       tree saved_def, var;
1452 
1453       if (tmp == NULL_TREE)
1454 	break;
1455 
1456       if (TREE_CODE (tmp) == SSA_NAME)
1457 	{
1458 	  /* If we recorded an SSA_NAME, then make the SSA_NAME the
1459 	     current definition of its underlying variable.  Note that
1460 	     if the SSA_NAME is not for a GIMPLE register, the symbol
1461 	     being defined is stored in the next slot in the stack.
1462 	     This mechanism is needed because an SSA name for a
1463 	     non-register symbol may be the definition for more than
1464 	     one symbol (e.g., SFTs, aliased variables, etc).  */
1465 	  saved_def = tmp;
1466 	  var = SSA_NAME_VAR (saved_def);
1467 	  if (!is_gimple_reg (var))
1468 	    var = block_defs_stack.pop ();
1469 	}
1470       else
1471 	{
1472 	  /* If we recorded anything else, it must have been a _DECL
1473 	     node and its current reaching definition must have been
1474 	     NULL.  */
1475 	  saved_def = NULL;
1476 	  var = tmp;
1477 	}
1478 
1479       get_common_info (var)->current_def = saved_def;
1480     }
1481 }
1482 
1483 
1484 /* Dump bitmap SET (assumed to contain VAR_DECLs) to FILE.  */
1485 
1486 DEBUG_FUNCTION void
debug_decl_set(bitmap set)1487 debug_decl_set (bitmap set)
1488 {
1489   dump_decl_set (stderr, set);
1490   fprintf (stderr, "\n");
1491 }
1492 
1493 
1494 /* Dump the renaming stack (block_defs_stack) to FILE.  Traverse the
1495    stack up to a maximum of N levels.  If N is -1, the whole stack is
1496    dumped.  New levels are created when the dominator tree traversal
1497    used for renaming enters a new sub-tree.  */
1498 
1499 void
dump_defs_stack(FILE * file,int n)1500 dump_defs_stack (FILE *file, int n)
1501 {
1502   int i, j;
1503 
1504   fprintf (file, "\n\nRenaming stack");
1505   if (n > 0)
1506     fprintf (file, " (up to %d levels)", n);
1507   fprintf (file, "\n\n");
1508 
1509   i = 1;
1510   fprintf (file, "Level %d (current level)\n", i);
1511   for (j = (int) block_defs_stack.length () - 1; j >= 0; j--)
1512     {
1513       tree name, var;
1514 
1515       name = block_defs_stack[j];
1516       if (name == NULL_TREE)
1517 	{
1518 	  i++;
1519 	  if (n > 0 && i > n)
1520 	    break;
1521 	  fprintf (file, "\nLevel %d\n", i);
1522 	  continue;
1523 	}
1524 
1525       if (DECL_P (name))
1526 	{
1527 	  var = name;
1528 	  name = NULL_TREE;
1529 	}
1530       else
1531 	{
1532 	  var = SSA_NAME_VAR (name);
1533 	  if (!is_gimple_reg (var))
1534 	    {
1535 	      j--;
1536 	      var = block_defs_stack[j];
1537 	    }
1538 	}
1539 
1540       fprintf (file, "    Previous CURRDEF (");
1541       print_generic_expr (file, var, 0);
1542       fprintf (file, ") = ");
1543       if (name)
1544 	print_generic_expr (file, name, 0);
1545       else
1546 	fprintf (file, "<NIL>");
1547       fprintf (file, "\n");
1548     }
1549 }
1550 
1551 
1552 /* Dump the renaming stack (block_defs_stack) to stderr.  Traverse the
1553    stack up to a maximum of N levels.  If N is -1, the whole stack is
1554    dumped.  New levels are created when the dominator tree traversal
1555    used for renaming enters a new sub-tree.  */
1556 
1557 DEBUG_FUNCTION void
debug_defs_stack(int n)1558 debug_defs_stack (int n)
1559 {
1560   dump_defs_stack (stderr, n);
1561 }
1562 
1563 
1564 /* Dump the current reaching definition of every symbol to FILE.  */
1565 
1566 void
dump_currdefs(FILE * file)1567 dump_currdefs (FILE *file)
1568 {
1569   unsigned i;
1570   tree var;
1571 
1572   if (symbols_to_rename.is_empty ())
1573     return;
1574 
1575   fprintf (file, "\n\nCurrent reaching definitions\n\n");
1576   FOR_EACH_VEC_ELT (symbols_to_rename, i, var)
1577     {
1578       common_info *info = get_common_info (var);
1579       fprintf (file, "CURRDEF (");
1580       print_generic_expr (file, var, 0);
1581       fprintf (file, ") = ");
1582       if (info->current_def)
1583 	print_generic_expr (file, info->current_def, 0);
1584       else
1585 	fprintf (file, "<NIL>");
1586       fprintf (file, "\n");
1587     }
1588 }
1589 
1590 
1591 /* Dump the current reaching definition of every symbol to stderr.  */
1592 
1593 DEBUG_FUNCTION void
debug_currdefs(void)1594 debug_currdefs (void)
1595 {
1596   dump_currdefs (stderr);
1597 }
1598 
1599 
1600 /* Dump SSA information to FILE.  */
1601 
1602 void
dump_tree_ssa(FILE * file)1603 dump_tree_ssa (FILE *file)
1604 {
1605   const char *funcname
1606     = lang_hooks.decl_printable_name (current_function_decl, 2);
1607 
1608   fprintf (file, "SSA renaming information for %s\n\n", funcname);
1609 
1610   dump_var_infos (file);
1611   dump_defs_stack (file, -1);
1612   dump_currdefs (file);
1613   dump_tree_ssa_stats (file);
1614 }
1615 
1616 
1617 /* Dump SSA information to stderr.  */
1618 
1619 DEBUG_FUNCTION void
debug_tree_ssa(void)1620 debug_tree_ssa (void)
1621 {
1622   dump_tree_ssa (stderr);
1623 }
1624 
1625 
1626 /* Dump statistics for the hash table HTAB.  */
1627 
1628 static void
htab_statistics(FILE * file,const hash_table<var_info_hasher> & htab)1629 htab_statistics (FILE *file, const hash_table<var_info_hasher> &htab)
1630 {
1631   fprintf (file, "size %ld, %ld elements, %f collision/search ratio\n",
1632 	   (long) htab.size (),
1633 	   (long) htab.elements (),
1634 	   htab.collisions ());
1635 }
1636 
1637 
1638 /* Dump SSA statistics on FILE.  */
1639 
1640 void
dump_tree_ssa_stats(FILE * file)1641 dump_tree_ssa_stats (FILE *file)
1642 {
1643   if (var_infos)
1644     {
1645       fprintf (file, "\nHash table statistics:\n");
1646       fprintf (file, "    var_infos:   ");
1647       htab_statistics (file, *var_infos);
1648       fprintf (file, "\n");
1649     }
1650 }
1651 
1652 
1653 /* Dump SSA statistics on stderr.  */
1654 
1655 DEBUG_FUNCTION void
debug_tree_ssa_stats(void)1656 debug_tree_ssa_stats (void)
1657 {
1658   dump_tree_ssa_stats (stderr);
1659 }
1660 
1661 
1662 /* Callback for htab_traverse to dump the VAR_INFOS hash table.  */
1663 
1664 int
debug_var_infos_r(var_info ** slot,FILE * file)1665 debug_var_infos_r (var_info **slot, FILE *file)
1666 {
1667   var_info *info = *slot;
1668 
1669   fprintf (file, "VAR: ");
1670   print_generic_expr (file, info->var, dump_flags);
1671   bitmap_print (file, info->info.def_blocks.def_blocks,
1672 		", DEF_BLOCKS: { ", "}");
1673   bitmap_print (file, info->info.def_blocks.livein_blocks,
1674 		", LIVEIN_BLOCKS: { ", "}");
1675   bitmap_print (file, info->info.def_blocks.phi_blocks,
1676 		", PHI_BLOCKS: { ", "}\n");
1677 
1678   return 1;
1679 }
1680 
1681 
1682 /* Dump the VAR_INFOS hash table on FILE.  */
1683 
1684 void
dump_var_infos(FILE * file)1685 dump_var_infos (FILE *file)
1686 {
1687   fprintf (file, "\n\nDefinition and live-in blocks:\n\n");
1688   if (var_infos)
1689     var_infos->traverse <FILE *, debug_var_infos_r> (file);
1690 }
1691 
1692 
1693 /* Dump the VAR_INFOS hash table on stderr.  */
1694 
1695 DEBUG_FUNCTION void
debug_var_infos(void)1696 debug_var_infos (void)
1697 {
1698   dump_var_infos (stderr);
1699 }
1700 
1701 
1702 /* Register NEW_NAME to be the new reaching definition for OLD_NAME.  */
1703 
1704 static inline void
register_new_update_single(tree new_name,tree old_name)1705 register_new_update_single (tree new_name, tree old_name)
1706 {
1707   common_info *info = get_common_info (old_name);
1708   tree currdef = info->current_def;
1709 
1710   /* Push the current reaching definition into BLOCK_DEFS_STACK.
1711      This stack is later used by the dominator tree callbacks to
1712      restore the reaching definitions for all the variables
1713      defined in the block after a recursive visit to all its
1714      immediately dominated blocks.  */
1715   block_defs_stack.reserve (2);
1716   block_defs_stack.quick_push (currdef);
1717   block_defs_stack.quick_push (old_name);
1718 
1719   /* Set the current reaching definition for OLD_NAME to be
1720      NEW_NAME.  */
1721   info->current_def = new_name;
1722 }
1723 
1724 
1725 /* Register NEW_NAME to be the new reaching definition for all the
1726    names in OLD_NAMES.  Used by the incremental SSA update routines to
1727    replace old SSA names with new ones.  */
1728 
1729 static inline void
register_new_update_set(tree new_name,bitmap old_names)1730 register_new_update_set (tree new_name, bitmap old_names)
1731 {
1732   bitmap_iterator bi;
1733   unsigned i;
1734 
1735   EXECUTE_IF_SET_IN_BITMAP (old_names, 0, i, bi)
1736     register_new_update_single (new_name, ssa_name (i));
1737 }
1738 
1739 
1740 
1741 /* If the operand pointed to by USE_P is a name in OLD_SSA_NAMES or
1742    it is a symbol marked for renaming, replace it with USE_P's current
1743    reaching definition.  */
1744 
1745 static inline void
maybe_replace_use(use_operand_p use_p)1746 maybe_replace_use (use_operand_p use_p)
1747 {
1748   tree rdef = NULL_TREE;
1749   tree use = USE_FROM_PTR (use_p);
1750   tree sym = DECL_P (use) ? use : SSA_NAME_VAR (use);
1751 
1752   if (marked_for_renaming (sym))
1753     rdef = get_reaching_def (sym);
1754   else if (is_old_name (use))
1755     rdef = get_reaching_def (use);
1756 
1757   if (rdef && rdef != use)
1758     SET_USE (use_p, rdef);
1759 }
1760 
1761 
1762 /* Same as maybe_replace_use, but without introducing default stmts,
1763    returning false to indicate a need to do so.  */
1764 
1765 static inline bool
maybe_replace_use_in_debug_stmt(use_operand_p use_p)1766 maybe_replace_use_in_debug_stmt (use_operand_p use_p)
1767 {
1768   tree rdef = NULL_TREE;
1769   tree use = USE_FROM_PTR (use_p);
1770   tree sym = DECL_P (use) ? use : SSA_NAME_VAR (use);
1771 
1772   if (marked_for_renaming (sym))
1773     rdef = get_var_info (sym)->info.current_def;
1774   else if (is_old_name (use))
1775     {
1776       rdef = get_ssa_name_ann (use)->info.current_def;
1777       /* We can't assume that, if there's no current definition, the
1778 	 default one should be used.  It could be the case that we've
1779 	 rearranged blocks so that the earlier definition no longer
1780 	 dominates the use.  */
1781       if (!rdef && SSA_NAME_IS_DEFAULT_DEF (use))
1782 	rdef = use;
1783     }
1784   else
1785     rdef = use;
1786 
1787   if (rdef && rdef != use)
1788     SET_USE (use_p, rdef);
1789 
1790   return rdef != NULL_TREE;
1791 }
1792 
1793 
1794 /* If the operand pointed to by DEF_P is an SSA name in NEW_SSA_NAMES
1795    or OLD_SSA_NAMES, or if it is a symbol marked for renaming,
1796    register it as the current definition for the names replaced by
1797    DEF_P.  Returns whether the statement should be removed.  */
1798 
1799 static inline bool
maybe_register_def(def_operand_p def_p,gimple * stmt,gimple_stmt_iterator gsi)1800 maybe_register_def (def_operand_p def_p, gimple *stmt,
1801 		    gimple_stmt_iterator gsi)
1802 {
1803   tree def = DEF_FROM_PTR (def_p);
1804   tree sym = DECL_P (def) ? def : SSA_NAME_VAR (def);
1805   bool to_delete = false;
1806 
1807   /* If DEF is a naked symbol that needs renaming, create a new
1808      name for it.  */
1809   if (marked_for_renaming (sym))
1810     {
1811       if (DECL_P (def))
1812 	{
1813 	  if (gimple_clobber_p (stmt) && is_gimple_reg (sym))
1814 	    {
1815 	      gcc_checking_assert (TREE_CODE (sym) == VAR_DECL);
1816 	      /* Replace clobber stmts with a default def. This new use of a
1817 		 default definition may make it look like SSA_NAMEs have
1818 		 conflicting lifetimes, so we need special code to let them
1819 		 coalesce properly.  */
1820 	      to_delete = true;
1821 	      def = get_or_create_ssa_default_def (cfun, sym);
1822 	    }
1823 	  else
1824 	    def = make_ssa_name (def, stmt);
1825 	  SET_DEF (def_p, def);
1826 
1827 	  tree tracked_var = target_for_debug_bind (sym);
1828 	  if (tracked_var)
1829 	    {
1830 	      gimple *note = gimple_build_debug_bind (tracked_var, def, stmt);
1831 	      /* If stmt ends the bb, insert the debug stmt on the single
1832 		 non-EH edge from the stmt.  */
1833 	      if (gsi_one_before_end_p (gsi) && stmt_ends_bb_p (stmt))
1834 		{
1835 		  basic_block bb = gsi_bb (gsi);
1836 		  edge_iterator ei;
1837 		  edge e, ef = NULL;
1838 		  FOR_EACH_EDGE (e, ei, bb->succs)
1839 		    if (!(e->flags & EDGE_EH))
1840 		      {
1841 			gcc_checking_assert (!ef);
1842 			ef = e;
1843 		      }
1844 		  /* If there are other predecessors to ef->dest, then
1845 		     there must be PHI nodes for the modified
1846 		     variable, and therefore there will be debug bind
1847 		     stmts after the PHI nodes.  The debug bind notes
1848 		     we'd insert would force the creation of a new
1849 		     block (diverging codegen) and be redundant with
1850 		     the post-PHI bind stmts, so don't add them.
1851 
1852 		     As for the exit edge, there wouldn't be redundant
1853 		     bind stmts, but there wouldn't be a PC to bind
1854 		     them to either, so avoid diverging the CFG.  */
1855 		  if (ef && single_pred_p (ef->dest)
1856 		      && ef->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
1857 		    {
1858 		      /* If there were PHI nodes in the node, we'd
1859 			 have to make sure the value we're binding
1860 			 doesn't need rewriting.  But there shouldn't
1861 			 be PHI nodes in a single-predecessor block,
1862 			 so we just add the note.  */
1863 		      gsi_insert_on_edge_immediate (ef, note);
1864 		    }
1865 		}
1866 	      else
1867 		gsi_insert_after (&gsi, note, GSI_SAME_STMT);
1868 	    }
1869 	}
1870 
1871       register_new_update_single (def, sym);
1872     }
1873   else
1874     {
1875       /* If DEF is a new name, register it as a new definition
1876 	 for all the names replaced by DEF.  */
1877       if (is_new_name (def))
1878 	register_new_update_set (def, names_replaced_by (def));
1879 
1880       /* If DEF is an old name, register DEF as a new
1881 	 definition for itself.  */
1882       if (is_old_name (def))
1883 	register_new_update_single (def, def);
1884     }
1885 
1886   return to_delete;
1887 }
1888 
1889 
1890 /* Update every variable used in the statement pointed-to by SI.  The
1891    statement is assumed to be in SSA form already.  Names in
1892    OLD_SSA_NAMES used by SI will be updated to their current reaching
1893    definition.  Names in OLD_SSA_NAMES or NEW_SSA_NAMES defined by SI
1894    will be registered as a new definition for their corresponding name
1895    in OLD_SSA_NAMES.  Returns whether STMT should be removed.  */
1896 
1897 static bool
rewrite_update_stmt(gimple * stmt,gimple_stmt_iterator gsi)1898 rewrite_update_stmt (gimple *stmt, gimple_stmt_iterator gsi)
1899 {
1900   use_operand_p use_p;
1901   def_operand_p def_p;
1902   ssa_op_iter iter;
1903 
1904   /* Only update marked statements.  */
1905   if (!rewrite_uses_p (stmt) && !register_defs_p (stmt))
1906     return false;
1907 
1908   if (dump_file && (dump_flags & TDF_DETAILS))
1909     {
1910       fprintf (dump_file, "Updating SSA information for statement ");
1911       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1912     }
1913 
1914   /* Rewrite USES included in OLD_SSA_NAMES and USES whose underlying
1915      symbol is marked for renaming.  */
1916   if (rewrite_uses_p (stmt))
1917     {
1918       if (is_gimple_debug (stmt))
1919 	{
1920 	  bool failed = false;
1921 
1922 	  FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
1923 	    if (!maybe_replace_use_in_debug_stmt (use_p))
1924 	      {
1925 		failed = true;
1926 		break;
1927 	      }
1928 
1929 	  if (failed)
1930 	    {
1931 	      /* DOM sometimes threads jumps in such a way that a
1932 		 debug stmt ends up referencing a SSA variable that no
1933 		 longer dominates the debug stmt, but such that all
1934 		 incoming definitions refer to the same definition in
1935 		 an earlier dominator.  We could try to recover that
1936 		 definition somehow, but this will have to do for now.
1937 
1938 		 Introducing a default definition, which is what
1939 		 maybe_replace_use() would do in such cases, may
1940 		 modify code generation, for the otherwise-unused
1941 		 default definition would never go away, modifying SSA
1942 		 version numbers all over.  */
1943 	      gimple_debug_bind_reset_value (stmt);
1944 	      update_stmt (stmt);
1945 	    }
1946 	}
1947       else
1948 	{
1949 	  FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_ALL_USES)
1950 	    maybe_replace_use (use_p);
1951 	}
1952     }
1953 
1954   /* Register definitions of names in NEW_SSA_NAMES and OLD_SSA_NAMES.
1955      Also register definitions for names whose underlying symbol is
1956      marked for renaming.  */
1957   bool to_delete = false;
1958   if (register_defs_p (stmt))
1959     FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, iter, SSA_OP_ALL_DEFS)
1960       to_delete |= maybe_register_def (def_p, stmt, gsi);
1961 
1962   return to_delete;
1963 }
1964 
1965 
1966 /* Visit all the successor blocks of BB looking for PHI nodes.  For
1967    every PHI node found, check if any of its arguments is in
1968    OLD_SSA_NAMES.  If so, and if the argument has a current reaching
1969    definition, replace it.  */
1970 
1971 static void
rewrite_update_phi_arguments(basic_block bb)1972 rewrite_update_phi_arguments (basic_block bb)
1973 {
1974   edge e;
1975   edge_iterator ei;
1976   unsigned i;
1977 
1978   FOR_EACH_EDGE (e, ei, bb->succs)
1979     {
1980       gphi *phi;
1981       vec<gphi *> phis;
1982 
1983       if (!bitmap_bit_p (blocks_with_phis_to_rewrite, e->dest->index))
1984 	continue;
1985 
1986       phis = phis_to_rewrite[e->dest->index];
1987       FOR_EACH_VEC_ELT (phis, i, phi)
1988 	{
1989 	  tree arg, lhs_sym, reaching_def = NULL;
1990 	  use_operand_p arg_p;
1991 
1992   	  gcc_checking_assert (rewrite_uses_p (phi));
1993 
1994 	  arg_p = PHI_ARG_DEF_PTR_FROM_EDGE (phi, e);
1995 	  arg = USE_FROM_PTR (arg_p);
1996 
1997 	  if (arg && !DECL_P (arg) && TREE_CODE (arg) != SSA_NAME)
1998 	    continue;
1999 
2000 	  lhs_sym = SSA_NAME_VAR (gimple_phi_result (phi));
2001 
2002 	  if (arg == NULL_TREE)
2003 	    {
2004 	      /* When updating a PHI node for a recently introduced
2005 		 symbol we may find NULL arguments.  That's why we
2006 		 take the symbol from the LHS of the PHI node.  */
2007 	      reaching_def = get_reaching_def (lhs_sym);
2008 
2009 	    }
2010 	  else
2011 	    {
2012 	      tree sym = DECL_P (arg) ? arg : SSA_NAME_VAR (arg);
2013 
2014 	      if (marked_for_renaming (sym))
2015 		reaching_def = get_reaching_def (sym);
2016 	      else if (is_old_name (arg))
2017 		reaching_def = get_reaching_def (arg);
2018 	    }
2019 
2020           /* Update the argument if there is a reaching def.  */
2021 	  if (reaching_def)
2022 	    {
2023 	      source_location locus;
2024 	      int arg_i = PHI_ARG_INDEX_FROM_USE (arg_p);
2025 
2026 	      SET_USE (arg_p, reaching_def);
2027 
2028 	      /* Virtual operands do not need a location.  */
2029 	      if (virtual_operand_p (reaching_def))
2030 		locus = UNKNOWN_LOCATION;
2031 	      else
2032 		{
2033 		  gimple *stmt = SSA_NAME_DEF_STMT (reaching_def);
2034 		  gphi *other_phi = dyn_cast <gphi *> (stmt);
2035 
2036 		  /* Single element PHI nodes  behave like copies, so get the
2037 		     location from the phi argument.  */
2038 		  if (other_phi
2039 		      && gimple_phi_num_args (other_phi) == 1)
2040 		    locus = gimple_phi_arg_location (other_phi, 0);
2041 		  else
2042 		    locus = gimple_location (stmt);
2043 		}
2044 
2045 	      gimple_phi_arg_set_location (phi, arg_i, locus);
2046 	    }
2047 
2048 
2049 	  if (e->flags & EDGE_ABNORMAL)
2050 	    SSA_NAME_OCCURS_IN_ABNORMAL_PHI (USE_FROM_PTR (arg_p)) = 1;
2051 	}
2052     }
2053 }
2054 
2055 class rewrite_update_dom_walker : public dom_walker
2056 {
2057 public:
rewrite_update_dom_walker(cdi_direction direction)2058   rewrite_update_dom_walker (cdi_direction direction) : dom_walker (direction) {}
2059 
2060   virtual edge before_dom_children (basic_block);
2061   virtual void after_dom_children (basic_block);
2062 };
2063 
2064 /* Initialization of block data structures for the incremental SSA
2065    update pass.  Create a block local stack of reaching definitions
2066    for new SSA names produced in this block (BLOCK_DEFS).  Register
2067    new definitions for every PHI node in the block.  */
2068 
2069 edge
before_dom_children(basic_block bb)2070 rewrite_update_dom_walker::before_dom_children (basic_block bb)
2071 {
2072   bool is_abnormal_phi;
2073 
2074   if (dump_file && (dump_flags & TDF_DETAILS))
2075     fprintf (dump_file, "Registering new PHI nodes in block #%d\n",
2076 	     bb->index);
2077 
2078   /* Mark the unwind point for this block.  */
2079   block_defs_stack.safe_push (NULL_TREE);
2080 
2081   if (!bitmap_bit_p (blocks_to_update, bb->index))
2082     return NULL;
2083 
2084   /* Mark the LHS if any of the arguments flows through an abnormal
2085      edge.  */
2086   is_abnormal_phi = bb_has_abnormal_pred (bb);
2087 
2088   /* If any of the PHI nodes is a replacement for a name in
2089      OLD_SSA_NAMES or it's one of the names in NEW_SSA_NAMES, then
2090      register it as a new definition for its corresponding name.  Also
2091      register definitions for names whose underlying symbols are
2092      marked for renaming.  */
2093   for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
2094        gsi_next (&gsi))
2095     {
2096       tree lhs, lhs_sym;
2097       gphi *phi = gsi.phi ();
2098 
2099       if (!register_defs_p (phi))
2100 	continue;
2101 
2102       lhs = gimple_phi_result (phi);
2103       lhs_sym = SSA_NAME_VAR (lhs);
2104 
2105       if (marked_for_renaming (lhs_sym))
2106 	register_new_update_single (lhs, lhs_sym);
2107       else
2108 	{
2109 
2110 	  /* If LHS is a new name, register a new definition for all
2111 	     the names replaced by LHS.  */
2112 	  if (is_new_name (lhs))
2113 	    register_new_update_set (lhs, names_replaced_by (lhs));
2114 
2115 	  /* If LHS is an OLD name, register it as a new definition
2116 	     for itself.  */
2117 	  if (is_old_name (lhs))
2118 	    register_new_update_single (lhs, lhs);
2119 	}
2120 
2121       if (is_abnormal_phi)
2122 	SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) = 1;
2123     }
2124 
2125   /* Step 2.  Rewrite every variable used in each statement in the block.  */
2126   if (bitmap_bit_p (interesting_blocks, bb->index))
2127     {
2128       gcc_checking_assert (bitmap_bit_p (blocks_to_update, bb->index));
2129       for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); )
2130 	if (rewrite_update_stmt (gsi_stmt (gsi), gsi))
2131 	  gsi_remove (&gsi, true);
2132 	else
2133 	  gsi_next (&gsi);
2134     }
2135 
2136   /* Step 3.  Update PHI nodes.  */
2137   rewrite_update_phi_arguments (bb);
2138 
2139   return NULL;
2140 }
2141 
2142 /* Called after visiting block BB.  Unwind BLOCK_DEFS_STACK to restore
2143    the current reaching definition of every name re-written in BB to
2144    the original reaching definition before visiting BB.  This
2145    unwinding must be done in the opposite order to what is done in
2146    register_new_update_set.  */
2147 
2148 void
after_dom_children(basic_block bb ATTRIBUTE_UNUSED)2149 rewrite_update_dom_walker::after_dom_children (basic_block bb ATTRIBUTE_UNUSED)
2150 {
2151   while (block_defs_stack.length () > 0)
2152     {
2153       tree var = block_defs_stack.pop ();
2154       tree saved_def;
2155 
2156       /* NULL indicates the unwind stop point for this block (see
2157 	 rewrite_update_enter_block).  */
2158       if (var == NULL)
2159 	return;
2160 
2161       saved_def = block_defs_stack.pop ();
2162       get_common_info (var)->current_def = saved_def;
2163     }
2164 }
2165 
2166 
2167 /* Rewrite the actual blocks, statements, and PHI arguments, to be in SSA
2168    form.
2169 
2170    ENTRY indicates the block where to start.  Every block dominated by
2171       ENTRY will be rewritten.
2172 
2173    WHAT indicates what actions will be taken by the renamer (see enum
2174       rewrite_mode).
2175 
2176    BLOCKS are the set of interesting blocks for the dominator walker
2177       to process.  If this set is NULL, then all the nodes dominated
2178       by ENTRY are walked.  Otherwise, blocks dominated by ENTRY that
2179       are not present in BLOCKS are ignored.  */
2180 
2181 static void
rewrite_blocks(basic_block entry,enum rewrite_mode what)2182 rewrite_blocks (basic_block entry, enum rewrite_mode what)
2183 {
2184   /* Rewrite all the basic blocks in the program.  */
2185   timevar_push (TV_TREE_SSA_REWRITE_BLOCKS);
2186 
2187   block_defs_stack.create (10);
2188 
2189   /* Recursively walk the dominator tree rewriting each statement in
2190      each basic block.  */
2191   if (what == REWRITE_ALL)
2192       rewrite_dom_walker (CDI_DOMINATORS).walk (entry);
2193   else if (what == REWRITE_UPDATE)
2194       rewrite_update_dom_walker (CDI_DOMINATORS).walk (entry);
2195   else
2196     gcc_unreachable ();
2197 
2198   /* Debugging dumps.  */
2199   if (dump_file && (dump_flags & TDF_STATS))
2200     {
2201       dump_dfa_stats (dump_file);
2202       if (var_infos)
2203 	dump_tree_ssa_stats (dump_file);
2204     }
2205 
2206   block_defs_stack.release ();
2207 
2208   timevar_pop (TV_TREE_SSA_REWRITE_BLOCKS);
2209 }
2210 
2211 class mark_def_dom_walker : public dom_walker
2212 {
2213 public:
2214   mark_def_dom_walker (cdi_direction direction);
2215   ~mark_def_dom_walker ();
2216 
2217   virtual edge before_dom_children (basic_block);
2218 
2219 private:
2220   /* Notice that this bitmap is indexed using variable UIDs, so it must be
2221      large enough to accommodate all the variables referenced in the
2222      function, not just the ones we are renaming.  */
2223   bitmap m_kills;
2224 };
2225 
mark_def_dom_walker(cdi_direction direction)2226 mark_def_dom_walker::mark_def_dom_walker (cdi_direction direction)
2227   : dom_walker (direction), m_kills (BITMAP_ALLOC (NULL))
2228 {
2229 }
2230 
~mark_def_dom_walker()2231 mark_def_dom_walker::~mark_def_dom_walker ()
2232 {
2233   BITMAP_FREE (m_kills);
2234 }
2235 
2236 /* Block processing routine for mark_def_sites.  Clear the KILLS bitmap
2237    at the start of each block, and call mark_def_sites for each statement.  */
2238 
2239 edge
before_dom_children(basic_block bb)2240 mark_def_dom_walker::before_dom_children (basic_block bb)
2241 {
2242   gimple_stmt_iterator gsi;
2243 
2244   bitmap_clear (m_kills);
2245   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
2246     mark_def_sites (bb, gsi_stmt (gsi), m_kills);
2247   return NULL;
2248 }
2249 
2250 /* Initialize internal data needed during renaming.  */
2251 
2252 static void
init_ssa_renamer(void)2253 init_ssa_renamer (void)
2254 {
2255   cfun->gimple_df->in_ssa_p = false;
2256 
2257   /* Allocate memory for the DEF_BLOCKS hash table.  */
2258   gcc_assert (!var_infos);
2259   var_infos = new hash_table<var_info_hasher>
2260     (vec_safe_length (cfun->local_decls));
2261 
2262   bitmap_obstack_initialize (&update_ssa_obstack);
2263 }
2264 
2265 
2266 /* Deallocate internal data structures used by the renamer.  */
2267 
2268 static void
fini_ssa_renamer(void)2269 fini_ssa_renamer (void)
2270 {
2271   delete var_infos;
2272     var_infos = NULL;
2273 
2274   bitmap_obstack_release (&update_ssa_obstack);
2275 
2276   cfun->gimple_df->ssa_renaming_needed = 0;
2277   cfun->gimple_df->rename_vops = 0;
2278   cfun->gimple_df->in_ssa_p = true;
2279 }
2280 
2281 /* Main entry point into the SSA builder.  The renaming process
2282    proceeds in four main phases:
2283 
2284    1- Compute dominance frontier and immediate dominators, needed to
2285       insert PHI nodes and rename the function in dominator tree
2286       order.
2287 
2288    2- Find and mark all the blocks that define variables.
2289 
2290    3- Insert PHI nodes at dominance frontiers (insert_phi_nodes).
2291 
2292    4- Rename all the blocks (rewrite_blocks) and statements in the program.
2293 
2294    Steps 3 and 4 are done using the dominator tree walker
2295    (walk_dominator_tree).  */
2296 
2297 namespace {
2298 
2299 const pass_data pass_data_build_ssa =
2300 {
2301   GIMPLE_PASS, /* type */
2302   "ssa", /* name */
2303   OPTGROUP_NONE, /* optinfo_flags */
2304   TV_TREE_SSA_OTHER, /* tv_id */
2305   PROP_cfg, /* properties_required */
2306   PROP_ssa, /* properties_provided */
2307   0, /* properties_destroyed */
2308   0, /* todo_flags_start */
2309   TODO_remove_unused_locals, /* todo_flags_finish */
2310 };
2311 
2312 class pass_build_ssa : public gimple_opt_pass
2313 {
2314 public:
pass_build_ssa(gcc::context * ctxt)2315   pass_build_ssa (gcc::context *ctxt)
2316     : gimple_opt_pass (pass_data_build_ssa, ctxt)
2317   {}
2318 
2319   /* opt_pass methods: */
gate(function * fun)2320   virtual bool gate (function *fun)
2321     {
2322       /* Do nothing for funcions that was produced already in SSA form.  */
2323       return !(fun->curr_properties & PROP_ssa);
2324     }
2325 
2326   virtual unsigned int execute (function *);
2327 
2328 }; // class pass_build_ssa
2329 
2330 unsigned int
execute(function * fun)2331 pass_build_ssa::execute (function *fun)
2332 {
2333   bitmap_head *dfs;
2334   basic_block bb;
2335   unsigned i;
2336 
2337   /* Initialize operand data structures.  */
2338   init_ssa_operands (fun);
2339 
2340   /* Initialize internal data needed by the renamer.  */
2341   init_ssa_renamer ();
2342 
2343   /* Initialize the set of interesting blocks.  The callback
2344      mark_def_sites will add to this set those blocks that the renamer
2345      should process.  */
2346   interesting_blocks = sbitmap_alloc (last_basic_block_for_fn (fun));
2347   bitmap_clear (interesting_blocks);
2348 
2349   /* Initialize dominance frontier.  */
2350   dfs = XNEWVEC (bitmap_head, last_basic_block_for_fn (fun));
2351   FOR_EACH_BB_FN (bb, fun)
2352     bitmap_initialize (&dfs[bb->index], &bitmap_default_obstack);
2353 
2354   /* 1- Compute dominance frontiers.  */
2355   calculate_dominance_info (CDI_DOMINATORS);
2356   compute_dominance_frontiers (dfs);
2357 
2358   /* 2- Find and mark definition sites.  */
2359   mark_def_dom_walker (CDI_DOMINATORS).walk (fun->cfg->x_entry_block_ptr);
2360 
2361   /* 3- Insert PHI nodes at dominance frontiers of definition blocks.  */
2362   insert_phi_nodes (dfs);
2363 
2364   /* 4- Rename all the blocks.  */
2365   rewrite_blocks (ENTRY_BLOCK_PTR_FOR_FN (fun), REWRITE_ALL);
2366 
2367   /* Free allocated memory.  */
2368   FOR_EACH_BB_FN (bb, fun)
2369     bitmap_clear (&dfs[bb->index]);
2370   free (dfs);
2371 
2372   sbitmap_free (interesting_blocks);
2373 
2374   fini_ssa_renamer ();
2375 
2376   /* Try to get rid of all gimplifier generated temporaries by making
2377      its SSA names anonymous.  This way we can garbage collect them
2378      all after removing unused locals which we do in our TODO.  */
2379   for (i = 1; i < num_ssa_names; ++i)
2380     {
2381       tree decl, name = ssa_name (i);
2382       if (!name
2383 	  || SSA_NAME_IS_DEFAULT_DEF (name))
2384 	continue;
2385       decl = SSA_NAME_VAR (name);
2386       if (decl
2387 	  && TREE_CODE (decl) == VAR_DECL
2388 	  && !VAR_DECL_IS_VIRTUAL_OPERAND (decl)
2389 	  && DECL_IGNORED_P (decl))
2390 	SET_SSA_NAME_VAR_OR_IDENTIFIER (name, DECL_NAME (decl));
2391     }
2392 
2393   return 0;
2394 }
2395 
2396 } // anon namespace
2397 
2398 gimple_opt_pass *
make_pass_build_ssa(gcc::context * ctxt)2399 make_pass_build_ssa (gcc::context *ctxt)
2400 {
2401   return new pass_build_ssa (ctxt);
2402 }
2403 
2404 
2405 /* Mark the definition of VAR at STMT and BB as interesting for the
2406    renamer.  BLOCKS is the set of blocks that need updating.  */
2407 
2408 static void
mark_def_interesting(tree var,gimple * stmt,basic_block bb,bool insert_phi_p)2409 mark_def_interesting (tree var, gimple *stmt, basic_block bb,
2410 		      bool insert_phi_p)
2411 {
2412   gcc_checking_assert (bitmap_bit_p (blocks_to_update, bb->index));
2413   set_register_defs (stmt, true);
2414 
2415   if (insert_phi_p)
2416     {
2417       bool is_phi_p = gimple_code (stmt) == GIMPLE_PHI;
2418 
2419       set_def_block (var, bb, is_phi_p);
2420 
2421       /* If VAR is an SSA name in NEW_SSA_NAMES, this is a definition
2422 	 site for both itself and all the old names replaced by it.  */
2423       if (TREE_CODE (var) == SSA_NAME && is_new_name (var))
2424 	{
2425 	  bitmap_iterator bi;
2426 	  unsigned i;
2427 	  bitmap set = names_replaced_by (var);
2428 	  if (set)
2429 	    EXECUTE_IF_SET_IN_BITMAP (set, 0, i, bi)
2430 	      set_def_block (ssa_name (i), bb, is_phi_p);
2431 	}
2432     }
2433 }
2434 
2435 
2436 /* Mark the use of VAR at STMT and BB as interesting for the
2437    renamer.  INSERT_PHI_P is true if we are going to insert new PHI
2438    nodes.  */
2439 
2440 static inline void
mark_use_interesting(tree var,gimple * stmt,basic_block bb,bool insert_phi_p)2441 mark_use_interesting (tree var, gimple *stmt, basic_block bb,
2442 		      bool insert_phi_p)
2443 {
2444   basic_block def_bb = gimple_bb (stmt);
2445 
2446   mark_block_for_update (def_bb);
2447   mark_block_for_update (bb);
2448 
2449   if (gimple_code (stmt) == GIMPLE_PHI)
2450     mark_phi_for_rewrite (def_bb, as_a <gphi *> (stmt));
2451   else
2452     {
2453       set_rewrite_uses (stmt, true);
2454 
2455       if (is_gimple_debug (stmt))
2456 	return;
2457     }
2458 
2459   /* If VAR has not been defined in BB, then it is live-on-entry
2460      to BB.  Note that we cannot just use the block holding VAR's
2461      definition because if VAR is one of the names in OLD_SSA_NAMES,
2462      it will have several definitions (itself and all the names that
2463      replace it).  */
2464   if (insert_phi_p)
2465     {
2466       def_blocks *db_p = get_def_blocks_for (get_common_info (var));
2467       if (!bitmap_bit_p (db_p->def_blocks, bb->index))
2468 	set_livein_block (var, bb);
2469     }
2470 }
2471 
2472 
2473 /* Do a dominator walk starting at BB processing statements that
2474    reference symbols in SSA operands.  This is very similar to
2475    mark_def_sites, but the scan handles statements whose operands may
2476    already be SSA names.
2477 
2478    If INSERT_PHI_P is true, mark those uses as live in the
2479    corresponding block.  This is later used by the PHI placement
2480    algorithm to make PHI pruning decisions.
2481 
2482    FIXME.  Most of this would be unnecessary if we could associate a
2483 	   symbol to all the SSA names that reference it.  But that
2484 	   sounds like it would be expensive to maintain.  Still, it
2485 	   would be interesting to see if it makes better sense to do
2486 	   that.  */
2487 
2488 static void
prepare_block_for_update(basic_block bb,bool insert_phi_p)2489 prepare_block_for_update (basic_block bb, bool insert_phi_p)
2490 {
2491   basic_block son;
2492   edge e;
2493   edge_iterator ei;
2494 
2495   mark_block_for_update (bb);
2496 
2497   /* Process PHI nodes marking interesting those that define or use
2498      the symbols that we are interested in.  */
2499   for (gphi_iterator si = gsi_start_phis (bb); !gsi_end_p (si);
2500        gsi_next (&si))
2501     {
2502       gphi *phi = si.phi ();
2503       tree lhs_sym, lhs = gimple_phi_result (phi);
2504 
2505       if (TREE_CODE (lhs) == SSA_NAME
2506 	  && (! virtual_operand_p (lhs)
2507 	      || ! cfun->gimple_df->rename_vops))
2508 	continue;
2509 
2510       lhs_sym = DECL_P (lhs) ? lhs : SSA_NAME_VAR (lhs);
2511       mark_for_renaming (lhs_sym);
2512       mark_def_interesting (lhs_sym, phi, bb, insert_phi_p);
2513 
2514       /* Mark the uses in phi nodes as interesting.  It would be more correct
2515 	 to process the arguments of the phi nodes of the successor edges of
2516 	 BB at the end of prepare_block_for_update, however, that turns out
2517 	 to be significantly more expensive.  Doing it here is conservatively
2518 	 correct -- it may only cause us to believe a value to be live in a
2519 	 block that also contains its definition, and thus insert a few more
2520 	 phi nodes for it.  */
2521       FOR_EACH_EDGE (e, ei, bb->preds)
2522 	mark_use_interesting (lhs_sym, phi, e->src, insert_phi_p);
2523     }
2524 
2525   /* Process the statements.  */
2526   for (gimple_stmt_iterator si = gsi_start_bb (bb); !gsi_end_p (si);
2527        gsi_next (&si))
2528     {
2529       gimple *stmt;
2530       ssa_op_iter i;
2531       use_operand_p use_p;
2532       def_operand_p def_p;
2533 
2534       stmt = gsi_stmt (si);
2535 
2536       if (cfun->gimple_df->rename_vops
2537 	  && gimple_vuse (stmt))
2538 	{
2539 	  tree use = gimple_vuse (stmt);
2540 	  tree sym = DECL_P (use) ? use : SSA_NAME_VAR (use);
2541 	  mark_for_renaming (sym);
2542 	  mark_use_interesting (sym, stmt, bb, insert_phi_p);
2543 	}
2544 
2545       FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_USE)
2546 	{
2547 	  tree use = USE_FROM_PTR (use_p);
2548 	  if (!DECL_P (use))
2549 	    continue;
2550 	  mark_for_renaming (use);
2551 	  mark_use_interesting (use, stmt, bb, insert_phi_p);
2552 	}
2553 
2554       if (cfun->gimple_df->rename_vops
2555 	  && gimple_vdef (stmt))
2556 	{
2557 	  tree def = gimple_vdef (stmt);
2558 	  tree sym = DECL_P (def) ? def : SSA_NAME_VAR (def);
2559 	  mark_for_renaming (sym);
2560 	  mark_def_interesting (sym, stmt, bb, insert_phi_p);
2561 	}
2562 
2563       FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, i, SSA_OP_DEF)
2564 	{
2565 	  tree def = DEF_FROM_PTR (def_p);
2566 	  if (!DECL_P (def))
2567 	    continue;
2568 	  mark_for_renaming (def);
2569 	  mark_def_interesting (def, stmt, bb, insert_phi_p);
2570 	}
2571     }
2572 
2573   /* Now visit all the blocks dominated by BB.  */
2574   for (son = first_dom_son (CDI_DOMINATORS, bb);
2575        son;
2576        son = next_dom_son (CDI_DOMINATORS, son))
2577     prepare_block_for_update (son, insert_phi_p);
2578 }
2579 
2580 
2581 /* Helper for prepare_names_to_update.  Mark all the use sites for
2582    NAME as interesting.  BLOCKS and INSERT_PHI_P are as in
2583    prepare_names_to_update.  */
2584 
2585 static void
prepare_use_sites_for(tree name,bool insert_phi_p)2586 prepare_use_sites_for (tree name, bool insert_phi_p)
2587 {
2588   use_operand_p use_p;
2589   imm_use_iterator iter;
2590 
2591   FOR_EACH_IMM_USE_FAST (use_p, iter, name)
2592     {
2593       gimple *stmt = USE_STMT (use_p);
2594       basic_block bb = gimple_bb (stmt);
2595 
2596       if (gimple_code (stmt) == GIMPLE_PHI)
2597 	{
2598 	  int ix = PHI_ARG_INDEX_FROM_USE (use_p);
2599 	  edge e = gimple_phi_arg_edge (as_a <gphi *> (stmt), ix);
2600 	  mark_use_interesting (name, stmt, e->src, insert_phi_p);
2601 	}
2602       else
2603 	{
2604 	  /* For regular statements, mark this as an interesting use
2605 	     for NAME.  */
2606 	  mark_use_interesting (name, stmt, bb, insert_phi_p);
2607 	}
2608     }
2609 }
2610 
2611 
2612 /* Helper for prepare_names_to_update.  Mark the definition site for
2613    NAME as interesting.  BLOCKS and INSERT_PHI_P are as in
2614    prepare_names_to_update.  */
2615 
2616 static void
prepare_def_site_for(tree name,bool insert_phi_p)2617 prepare_def_site_for (tree name, bool insert_phi_p)
2618 {
2619   gimple *stmt;
2620   basic_block bb;
2621 
2622   gcc_checking_assert (names_to_release == NULL
2623 		       || !bitmap_bit_p (names_to_release,
2624 					 SSA_NAME_VERSION (name)));
2625 
2626   stmt = SSA_NAME_DEF_STMT (name);
2627   bb = gimple_bb (stmt);
2628   if (bb)
2629     {
2630       gcc_checking_assert (bb->index < last_basic_block_for_fn (cfun));
2631       mark_block_for_update (bb);
2632       mark_def_interesting (name, stmt, bb, insert_phi_p);
2633     }
2634 }
2635 
2636 
2637 /* Mark definition and use sites of names in NEW_SSA_NAMES and
2638    OLD_SSA_NAMES.  INSERT_PHI_P is true if the caller wants to insert
2639    PHI nodes for newly created names.  */
2640 
2641 static void
prepare_names_to_update(bool insert_phi_p)2642 prepare_names_to_update (bool insert_phi_p)
2643 {
2644   unsigned i = 0;
2645   bitmap_iterator bi;
2646   sbitmap_iterator sbi;
2647 
2648   /* If a name N from NEW_SSA_NAMES is also marked to be released,
2649      remove it from NEW_SSA_NAMES so that we don't try to visit its
2650      defining basic block (which most likely doesn't exist).  Notice
2651      that we cannot do the same with names in OLD_SSA_NAMES because we
2652      want to replace existing instances.  */
2653   if (names_to_release)
2654     EXECUTE_IF_SET_IN_BITMAP (names_to_release, 0, i, bi)
2655       bitmap_clear_bit (new_ssa_names, i);
2656 
2657   /* First process names in NEW_SSA_NAMES.  Otherwise, uses of old
2658      names may be considered to be live-in on blocks that contain
2659      definitions for their replacements.  */
2660   EXECUTE_IF_SET_IN_BITMAP (new_ssa_names, 0, i, sbi)
2661     prepare_def_site_for (ssa_name (i), insert_phi_p);
2662 
2663   /* If an old name is in NAMES_TO_RELEASE, we cannot remove it from
2664      OLD_SSA_NAMES, but we have to ignore its definition site.  */
2665   EXECUTE_IF_SET_IN_BITMAP (old_ssa_names, 0, i, sbi)
2666     {
2667       if (names_to_release == NULL || !bitmap_bit_p (names_to_release, i))
2668 	prepare_def_site_for (ssa_name (i), insert_phi_p);
2669       prepare_use_sites_for (ssa_name (i), insert_phi_p);
2670     }
2671 }
2672 
2673 
2674 /* Dump all the names replaced by NAME to FILE.  */
2675 
2676 void
dump_names_replaced_by(FILE * file,tree name)2677 dump_names_replaced_by (FILE *file, tree name)
2678 {
2679   unsigned i;
2680   bitmap old_set;
2681   bitmap_iterator bi;
2682 
2683   print_generic_expr (file, name, 0);
2684   fprintf (file, " -> { ");
2685 
2686   old_set = names_replaced_by (name);
2687   EXECUTE_IF_SET_IN_BITMAP (old_set, 0, i, bi)
2688     {
2689       print_generic_expr (file, ssa_name (i), 0);
2690       fprintf (file, " ");
2691     }
2692 
2693   fprintf (file, "}\n");
2694 }
2695 
2696 
2697 /* Dump all the names replaced by NAME to stderr.  */
2698 
2699 DEBUG_FUNCTION void
debug_names_replaced_by(tree name)2700 debug_names_replaced_by (tree name)
2701 {
2702   dump_names_replaced_by (stderr, name);
2703 }
2704 
2705 
2706 /* Dump SSA update information to FILE.  */
2707 
2708 void
dump_update_ssa(FILE * file)2709 dump_update_ssa (FILE *file)
2710 {
2711   unsigned i = 0;
2712   bitmap_iterator bi;
2713 
2714   if (!need_ssa_update_p (cfun))
2715     return;
2716 
2717   if (new_ssa_names && bitmap_first_set_bit (new_ssa_names) >= 0)
2718     {
2719       sbitmap_iterator sbi;
2720 
2721       fprintf (file, "\nSSA replacement table\n");
2722       fprintf (file, "N_i -> { O_1 ... O_j } means that N_i replaces "
2723 	             "O_1, ..., O_j\n\n");
2724 
2725       EXECUTE_IF_SET_IN_BITMAP (new_ssa_names, 0, i, sbi)
2726 	dump_names_replaced_by (file, ssa_name (i));
2727     }
2728 
2729   if (symbols_to_rename_set && !bitmap_empty_p (symbols_to_rename_set))
2730     {
2731       fprintf (file, "\nSymbols to be put in SSA form\n");
2732       dump_decl_set (file, symbols_to_rename_set);
2733       fprintf (file, "\n");
2734     }
2735 
2736   if (names_to_release && !bitmap_empty_p (names_to_release))
2737     {
2738       fprintf (file, "\nSSA names to release after updating the SSA web\n\n");
2739       EXECUTE_IF_SET_IN_BITMAP (names_to_release, 0, i, bi)
2740 	{
2741 	  print_generic_expr (file, ssa_name (i), 0);
2742 	  fprintf (file, " ");
2743 	}
2744       fprintf (file, "\n");
2745     }
2746 }
2747 
2748 
2749 /* Dump SSA update information to stderr.  */
2750 
2751 DEBUG_FUNCTION void
debug_update_ssa(void)2752 debug_update_ssa (void)
2753 {
2754   dump_update_ssa (stderr);
2755 }
2756 
2757 
2758 /* Initialize data structures used for incremental SSA updates.  */
2759 
2760 static void
init_update_ssa(struct function * fn)2761 init_update_ssa (struct function *fn)
2762 {
2763   /* Reserve more space than the current number of names.  The calls to
2764      add_new_name_mapping are typically done after creating new SSA
2765      names, so we'll need to reallocate these arrays.  */
2766   old_ssa_names = sbitmap_alloc (num_ssa_names + NAME_SETS_GROWTH_FACTOR);
2767   bitmap_clear (old_ssa_names);
2768 
2769   new_ssa_names = sbitmap_alloc (num_ssa_names + NAME_SETS_GROWTH_FACTOR);
2770   bitmap_clear (new_ssa_names);
2771 
2772   bitmap_obstack_initialize (&update_ssa_obstack);
2773 
2774   names_to_release = NULL;
2775   update_ssa_initialized_fn = fn;
2776 }
2777 
2778 
2779 /* Deallocate data structures used for incremental SSA updates.  */
2780 
2781 void
delete_update_ssa(void)2782 delete_update_ssa (void)
2783 {
2784   unsigned i;
2785   bitmap_iterator bi;
2786 
2787   sbitmap_free (old_ssa_names);
2788   old_ssa_names = NULL;
2789 
2790   sbitmap_free (new_ssa_names);
2791   new_ssa_names = NULL;
2792 
2793   BITMAP_FREE (symbols_to_rename_set);
2794   symbols_to_rename_set = NULL;
2795   symbols_to_rename.release ();
2796 
2797   if (names_to_release)
2798     {
2799       EXECUTE_IF_SET_IN_BITMAP (names_to_release, 0, i, bi)
2800 	release_ssa_name (ssa_name (i));
2801       BITMAP_FREE (names_to_release);
2802     }
2803 
2804   clear_ssa_name_info ();
2805 
2806   fini_ssa_renamer ();
2807 
2808   if (blocks_with_phis_to_rewrite)
2809     EXECUTE_IF_SET_IN_BITMAP (blocks_with_phis_to_rewrite, 0, i, bi)
2810       {
2811 	vec<gphi *> phis = phis_to_rewrite[i];
2812 	phis.release ();
2813 	phis_to_rewrite[i].create (0);
2814       }
2815 
2816   BITMAP_FREE (blocks_with_phis_to_rewrite);
2817   BITMAP_FREE (blocks_to_update);
2818 
2819   update_ssa_initialized_fn = NULL;
2820 }
2821 
2822 
2823 /* Create a new name for OLD_NAME in statement STMT and replace the
2824    operand pointed to by DEF_P with the newly created name.  If DEF_P
2825    is NULL then STMT should be a GIMPLE assignment.
2826    Return the new name and register the replacement mapping <NEW, OLD> in
2827    update_ssa's tables.  */
2828 
2829 tree
create_new_def_for(tree old_name,gimple * stmt,def_operand_p def)2830 create_new_def_for (tree old_name, gimple *stmt, def_operand_p def)
2831 {
2832   tree new_name;
2833 
2834   timevar_push (TV_TREE_SSA_INCREMENTAL);
2835 
2836   if (!update_ssa_initialized_fn)
2837     init_update_ssa (cfun);
2838 
2839   gcc_assert (update_ssa_initialized_fn == cfun);
2840 
2841   new_name = duplicate_ssa_name (old_name, stmt);
2842   if (def)
2843     SET_DEF (def, new_name);
2844   else
2845     gimple_assign_set_lhs (stmt, new_name);
2846 
2847   if (gimple_code (stmt) == GIMPLE_PHI)
2848     {
2849       basic_block bb = gimple_bb (stmt);
2850 
2851       /* If needed, mark NEW_NAME as occurring in an abnormal PHI node. */
2852       SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_name) = bb_has_abnormal_pred (bb);
2853     }
2854 
2855   add_new_name_mapping (new_name, old_name);
2856 
2857   /* For the benefit of passes that will be updating the SSA form on
2858      their own, set the current reaching definition of OLD_NAME to be
2859      NEW_NAME.  */
2860   get_ssa_name_ann (old_name)->info.current_def = new_name;
2861 
2862   timevar_pop (TV_TREE_SSA_INCREMENTAL);
2863 
2864   return new_name;
2865 }
2866 
2867 
2868 /* Mark virtual operands of FN for renaming by update_ssa.  */
2869 
2870 void
mark_virtual_operands_for_renaming(struct function * fn)2871 mark_virtual_operands_for_renaming (struct function *fn)
2872 {
2873   fn->gimple_df->ssa_renaming_needed = 1;
2874   fn->gimple_df->rename_vops = 1;
2875 }
2876 
2877 /* Replace all uses of NAME by underlying variable and mark it
2878    for renaming.  This assumes the defining statement of NAME is
2879    going to be removed.  */
2880 
2881 void
mark_virtual_operand_for_renaming(tree name)2882 mark_virtual_operand_for_renaming (tree name)
2883 {
2884   tree name_var = SSA_NAME_VAR (name);
2885   bool used = false;
2886   imm_use_iterator iter;
2887   use_operand_p use_p;
2888   gimple *stmt;
2889 
2890   gcc_assert (VAR_DECL_IS_VIRTUAL_OPERAND (name_var));
2891   FOR_EACH_IMM_USE_STMT (stmt, iter, name)
2892     {
2893       FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
2894         SET_USE (use_p, name_var);
2895       used = true;
2896     }
2897   if (used)
2898     mark_virtual_operands_for_renaming (cfun);
2899 }
2900 
2901 /* Replace all uses of the virtual PHI result by its underlying variable
2902    and mark it for renaming.  This assumes the PHI node is going to be
2903    removed.  */
2904 
2905 void
mark_virtual_phi_result_for_renaming(gphi * phi)2906 mark_virtual_phi_result_for_renaming (gphi *phi)
2907 {
2908   if (dump_file && (dump_flags & TDF_DETAILS))
2909     {
2910       fprintf (dump_file, "Marking result for renaming : ");
2911       print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
2912       fprintf (dump_file, "\n");
2913     }
2914 
2915   mark_virtual_operand_for_renaming (gimple_phi_result (phi));
2916 }
2917 
2918 /* Return true if there is any work to be done by update_ssa
2919    for function FN.  */
2920 
2921 bool
need_ssa_update_p(struct function * fn)2922 need_ssa_update_p (struct function *fn)
2923 {
2924   gcc_assert (fn != NULL);
2925   return (update_ssa_initialized_fn == fn
2926 	  || (fn->gimple_df && fn->gimple_df->ssa_renaming_needed));
2927 }
2928 
2929 /* Return true if name N has been registered in the replacement table.  */
2930 
2931 bool
name_registered_for_update_p(tree n ATTRIBUTE_UNUSED)2932 name_registered_for_update_p (tree n ATTRIBUTE_UNUSED)
2933 {
2934   if (!update_ssa_initialized_fn)
2935     return false;
2936 
2937   gcc_assert (update_ssa_initialized_fn == cfun);
2938 
2939   return is_new_name (n) || is_old_name (n);
2940 }
2941 
2942 
2943 /* Mark NAME to be released after update_ssa has finished.  */
2944 
2945 void
release_ssa_name_after_update_ssa(tree name)2946 release_ssa_name_after_update_ssa (tree name)
2947 {
2948   gcc_assert (cfun && update_ssa_initialized_fn == cfun);
2949 
2950   if (names_to_release == NULL)
2951     names_to_release = BITMAP_ALLOC (NULL);
2952 
2953   bitmap_set_bit (names_to_release, SSA_NAME_VERSION (name));
2954 }
2955 
2956 
2957 /* Insert new PHI nodes to replace VAR.  DFS contains dominance
2958    frontier information.  BLOCKS is the set of blocks to be updated.
2959 
2960    This is slightly different than the regular PHI insertion
2961    algorithm.  The value of UPDATE_FLAGS controls how PHI nodes for
2962    real names (i.e., GIMPLE registers) are inserted:
2963 
2964    - If UPDATE_FLAGS == TODO_update_ssa, we are only interested in PHI
2965      nodes inside the region affected by the block that defines VAR
2966      and the blocks that define all its replacements.  All these
2967      definition blocks are stored in DEF_BLOCKS[VAR]->DEF_BLOCKS.
2968 
2969      First, we compute the entry point to the region (ENTRY).  This is
2970      given by the nearest common dominator to all the definition
2971      blocks. When computing the iterated dominance frontier (IDF), any
2972      block not strictly dominated by ENTRY is ignored.
2973 
2974      We then call the standard PHI insertion algorithm with the pruned
2975      IDF.
2976 
2977    - If UPDATE_FLAGS == TODO_update_ssa_full_phi, the IDF for real
2978      names is not pruned.  PHI nodes are inserted at every IDF block.  */
2979 
2980 static void
insert_updated_phi_nodes_for(tree var,bitmap_head * dfs,bitmap blocks,unsigned update_flags)2981 insert_updated_phi_nodes_for (tree var, bitmap_head *dfs, bitmap blocks,
2982                               unsigned update_flags)
2983 {
2984   basic_block entry;
2985   def_blocks *db;
2986   bitmap idf, pruned_idf;
2987   bitmap_iterator bi;
2988   unsigned i;
2989 
2990   if (TREE_CODE (var) == SSA_NAME)
2991     gcc_checking_assert (is_old_name (var));
2992   else
2993     gcc_checking_assert (marked_for_renaming (var));
2994 
2995   /* Get all the definition sites for VAR.  */
2996   db = find_def_blocks_for (var);
2997 
2998   /* No need to do anything if there were no definitions to VAR.  */
2999   if (db == NULL || bitmap_empty_p (db->def_blocks))
3000     return;
3001 
3002   /* Compute the initial iterated dominance frontier.  */
3003   idf = compute_idf (db->def_blocks, dfs);
3004   pruned_idf = BITMAP_ALLOC (NULL);
3005 
3006   if (TREE_CODE (var) == SSA_NAME)
3007     {
3008       if (update_flags == TODO_update_ssa)
3009 	{
3010 	  /* If doing regular SSA updates for GIMPLE registers, we are
3011 	     only interested in IDF blocks dominated by the nearest
3012 	     common dominator of all the definition blocks.  */
3013 	  entry = nearest_common_dominator_for_set (CDI_DOMINATORS,
3014 						    db->def_blocks);
3015 	  if (entry != ENTRY_BLOCK_PTR_FOR_FN (cfun))
3016 	    EXECUTE_IF_SET_IN_BITMAP (idf, 0, i, bi)
3017 	      if (BASIC_BLOCK_FOR_FN (cfun, i) != entry
3018 		  && dominated_by_p (CDI_DOMINATORS,
3019 				     BASIC_BLOCK_FOR_FN (cfun, i), entry))
3020 		bitmap_set_bit (pruned_idf, i);
3021 	}
3022       else
3023 	{
3024 	  /* Otherwise, do not prune the IDF for VAR.  */
3025 	  gcc_checking_assert (update_flags == TODO_update_ssa_full_phi);
3026 	  bitmap_copy (pruned_idf, idf);
3027 	}
3028     }
3029   else
3030     {
3031       /* Otherwise, VAR is a symbol that needs to be put into SSA form
3032 	 for the first time, so we need to compute the full IDF for
3033 	 it.  */
3034       bitmap_copy (pruned_idf, idf);
3035     }
3036 
3037   if (!bitmap_empty_p (pruned_idf))
3038     {
3039       /* Make sure that PRUNED_IDF blocks and all their feeding blocks
3040 	 are included in the region to be updated.  The feeding blocks
3041 	 are important to guarantee that the PHI arguments are renamed
3042 	 properly.  */
3043 
3044       /* FIXME, this is not needed if we are updating symbols.  We are
3045 	 already starting at the ENTRY block anyway.  */
3046       bitmap_ior_into (blocks, pruned_idf);
3047       EXECUTE_IF_SET_IN_BITMAP (pruned_idf, 0, i, bi)
3048 	{
3049 	  edge e;
3050 	  edge_iterator ei;
3051 	  basic_block bb = BASIC_BLOCK_FOR_FN (cfun, i);
3052 
3053 	  FOR_EACH_EDGE (e, ei, bb->preds)
3054 	    if (e->src->index >= 0)
3055 	      bitmap_set_bit (blocks, e->src->index);
3056 	}
3057 
3058       insert_phi_nodes_for (var, pruned_idf, true);
3059     }
3060 
3061   BITMAP_FREE (pruned_idf);
3062   BITMAP_FREE (idf);
3063 }
3064 
3065 /* Sort symbols_to_rename after their DECL_UID.  */
3066 
3067 static int
insert_updated_phi_nodes_compare_uids(const void * a,const void * b)3068 insert_updated_phi_nodes_compare_uids (const void *a, const void *b)
3069 {
3070   const_tree syma = *(const const_tree *)a;
3071   const_tree symb = *(const const_tree *)b;
3072   if (DECL_UID (syma) == DECL_UID (symb))
3073     return 0;
3074   return DECL_UID (syma) < DECL_UID (symb) ? -1 : 1;
3075 }
3076 
3077 /* Given a set of newly created SSA names (NEW_SSA_NAMES) and a set of
3078    existing SSA names (OLD_SSA_NAMES), update the SSA form so that:
3079 
3080    1- The names in OLD_SSA_NAMES dominated by the definitions of
3081       NEW_SSA_NAMES are all re-written to be reached by the
3082       appropriate definition from NEW_SSA_NAMES.
3083 
3084    2- If needed, new PHI nodes are added to the iterated dominance
3085       frontier of the blocks where each of NEW_SSA_NAMES are defined.
3086 
3087    The mapping between OLD_SSA_NAMES and NEW_SSA_NAMES is setup by
3088    calling create_new_def_for to create new defs for names that the
3089    caller wants to replace.
3090 
3091    The caller cretaes the new names to be inserted and the names that need
3092    to be replaced by calling create_new_def_for for each old definition
3093    to be replaced.  Note that the function assumes that the
3094    new defining statement has already been inserted in the IL.
3095 
3096    For instance, given the following code:
3097 
3098      1	L0:
3099      2	x_1 = PHI (0, x_5)
3100      3	if (x_1 < 10)
3101      4	  if (x_1 > 7)
3102      5	    y_2 = 0
3103      6	  else
3104      7	    y_3 = x_1 + x_7
3105      8	  endif
3106      9	  x_5 = x_1 + 1
3107      10   goto L0;
3108      11	endif
3109 
3110    Suppose that we insert new names x_10 and x_11 (lines 4 and 8).
3111 
3112      1	L0:
3113      2	x_1 = PHI (0, x_5)
3114      3	if (x_1 < 10)
3115      4	  x_10 = ...
3116      5	  if (x_1 > 7)
3117      6	    y_2 = 0
3118      7	  else
3119      8	    x_11 = ...
3120      9	    y_3 = x_1 + x_7
3121      10	  endif
3122      11	  x_5 = x_1 + 1
3123      12	  goto L0;
3124      13	endif
3125 
3126    We want to replace all the uses of x_1 with the new definitions of
3127    x_10 and x_11.  Note that the only uses that should be replaced are
3128    those at lines 5, 9 and 11.  Also, the use of x_7 at line 9 should
3129    *not* be replaced (this is why we cannot just mark symbol 'x' for
3130    renaming).
3131 
3132    Additionally, we may need to insert a PHI node at line 11 because
3133    that is a merge point for x_10 and x_11.  So the use of x_1 at line
3134    11 will be replaced with the new PHI node.  The insertion of PHI
3135    nodes is optional.  They are not strictly necessary to preserve the
3136    SSA form, and depending on what the caller inserted, they may not
3137    even be useful for the optimizers.  UPDATE_FLAGS controls various
3138    aspects of how update_ssa operates, see the documentation for
3139    TODO_update_ssa*.  */
3140 
3141 void
update_ssa(unsigned update_flags)3142 update_ssa (unsigned update_flags)
3143 {
3144   basic_block bb, start_bb;
3145   bitmap_iterator bi;
3146   unsigned i = 0;
3147   bool insert_phi_p;
3148   sbitmap_iterator sbi;
3149   tree sym;
3150 
3151   /* Only one update flag should be set.  */
3152   gcc_assert (update_flags == TODO_update_ssa
3153               || update_flags == TODO_update_ssa_no_phi
3154 	      || update_flags == TODO_update_ssa_full_phi
3155 	      || update_flags == TODO_update_ssa_only_virtuals);
3156 
3157   if (!need_ssa_update_p (cfun))
3158     return;
3159 
3160   if (flag_checking)
3161     {
3162       timevar_push (TV_TREE_STMT_VERIFY);
3163 
3164       bool err = false;
3165 
3166       FOR_EACH_BB_FN (bb, cfun)
3167 	{
3168 	  gimple_stmt_iterator gsi;
3169 	  for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
3170 	    {
3171 	      gimple *stmt = gsi_stmt (gsi);
3172 
3173 	      ssa_op_iter i;
3174 	      use_operand_p use_p;
3175 	      FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_ALL_USES)
3176 		{
3177 		  tree use = USE_FROM_PTR (use_p);
3178 		  if (TREE_CODE (use) != SSA_NAME)
3179 		    continue;
3180 
3181 		  if (SSA_NAME_IN_FREE_LIST (use))
3182 		    {
3183 		      error ("statement uses released SSA name:");
3184 		      debug_gimple_stmt (stmt);
3185 		      fprintf (stderr, "The use of ");
3186 		      print_generic_expr (stderr, use, 0);
3187 		      fprintf (stderr," should have been replaced\n");
3188 		      err = true;
3189 		    }
3190 		}
3191 	    }
3192 	}
3193 
3194       if (err)
3195 	internal_error ("cannot update SSA form");
3196 
3197       timevar_pop (TV_TREE_STMT_VERIFY);
3198     }
3199 
3200   timevar_push (TV_TREE_SSA_INCREMENTAL);
3201 
3202   if (dump_file && (dump_flags & TDF_DETAILS))
3203     fprintf (dump_file, "\nUpdating SSA:\n");
3204 
3205   if (!update_ssa_initialized_fn)
3206     init_update_ssa (cfun);
3207   else if (update_flags == TODO_update_ssa_only_virtuals)
3208     {
3209       /* If we only need to update virtuals, remove all the mappings for
3210 	 real names before proceeding.  The caller is responsible for
3211 	 having dealt with the name mappings before calling update_ssa.  */
3212       bitmap_clear (old_ssa_names);
3213       bitmap_clear (new_ssa_names);
3214     }
3215 
3216   gcc_assert (update_ssa_initialized_fn == cfun);
3217 
3218   blocks_with_phis_to_rewrite = BITMAP_ALLOC (NULL);
3219   if (!phis_to_rewrite.exists ())
3220     phis_to_rewrite.create (last_basic_block_for_fn (cfun) + 1);
3221   blocks_to_update = BITMAP_ALLOC (NULL);
3222 
3223   /* Ensure that the dominance information is up-to-date.  */
3224   calculate_dominance_info (CDI_DOMINATORS);
3225 
3226   insert_phi_p = (update_flags != TODO_update_ssa_no_phi);
3227 
3228   /* If there are names defined in the replacement table, prepare
3229      definition and use sites for all the names in NEW_SSA_NAMES and
3230      OLD_SSA_NAMES.  */
3231   if (bitmap_first_set_bit (new_ssa_names) >= 0)
3232     {
3233       prepare_names_to_update (insert_phi_p);
3234 
3235       /* If all the names in NEW_SSA_NAMES had been marked for
3236 	 removal, and there are no symbols to rename, then there's
3237 	 nothing else to do.  */
3238       if (bitmap_first_set_bit (new_ssa_names) < 0
3239 	  && !cfun->gimple_df->ssa_renaming_needed)
3240 	goto done;
3241     }
3242 
3243   /* Next, determine the block at which to start the renaming process.  */
3244   if (cfun->gimple_df->ssa_renaming_needed)
3245     {
3246       /* If we rename bare symbols initialize the mapping to
3247          auxiliar info we need to keep track of.  */
3248       var_infos = new hash_table<var_info_hasher> (47);
3249 
3250       /* If we have to rename some symbols from scratch, we need to
3251 	 start the process at the root of the CFG.  FIXME, it should
3252 	 be possible to determine the nearest block that had a
3253 	 definition for each of the symbols that are marked for
3254 	 updating.  For now this seems more work than it's worth.  */
3255       start_bb = ENTRY_BLOCK_PTR_FOR_FN (cfun);
3256 
3257       /* Traverse the CFG looking for existing definitions and uses of
3258 	 symbols in SSA operands.  Mark interesting blocks and
3259 	 statements and set local live-in information for the PHI
3260 	 placement heuristics.  */
3261       prepare_block_for_update (start_bb, insert_phi_p);
3262 
3263       if (flag_checking)
3264 	for (i = 1; i < num_ssa_names; ++i)
3265 	  {
3266 	    tree name = ssa_name (i);
3267 	    if (!name
3268 		|| virtual_operand_p (name))
3269 	      continue;
3270 
3271 	    /* For all but virtual operands, which do not have SSA names
3272 	       with overlapping life ranges, ensure that symbols marked
3273 	       for renaming do not have existing SSA names associated with
3274 	       them as we do not re-write them out-of-SSA before going
3275 	       into SSA for the remaining symbol uses.  */
3276 	    if (marked_for_renaming (SSA_NAME_VAR (name)))
3277 	      {
3278 		fprintf (stderr, "Existing SSA name for symbol marked for "
3279 			 "renaming: ");
3280 		print_generic_expr (stderr, name, TDF_SLIM);
3281 		fprintf (stderr, "\n");
3282 		internal_error ("SSA corruption");
3283 	      }
3284 	  }
3285     }
3286   else
3287     {
3288       /* Otherwise, the entry block to the region is the nearest
3289 	 common dominator for the blocks in BLOCKS.  */
3290       start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS,
3291 						   blocks_to_update);
3292     }
3293 
3294   /* If requested, insert PHI nodes at the iterated dominance frontier
3295      of every block, creating new definitions for names in OLD_SSA_NAMES
3296      and for symbols found.  */
3297   if (insert_phi_p)
3298     {
3299       bitmap_head *dfs;
3300 
3301       /* If the caller requested PHI nodes to be added, compute
3302 	 dominance frontiers.  */
3303       dfs = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun));
3304       FOR_EACH_BB_FN (bb, cfun)
3305 	bitmap_initialize (&dfs[bb->index], &bitmap_default_obstack);
3306       compute_dominance_frontiers (dfs);
3307 
3308       if (bitmap_first_set_bit (old_ssa_names) >= 0)
3309 	{
3310 	  sbitmap_iterator sbi;
3311 
3312 	  /* insert_update_phi_nodes_for will call add_new_name_mapping
3313 	     when inserting new PHI nodes, so the set OLD_SSA_NAMES
3314 	     will grow while we are traversing it (but it will not
3315 	     gain any new members).  Copy OLD_SSA_NAMES to a temporary
3316 	     for traversal.  */
3317 	  sbitmap tmp = sbitmap_alloc (SBITMAP_SIZE (old_ssa_names));
3318 	  bitmap_copy (tmp, old_ssa_names);
3319 	  EXECUTE_IF_SET_IN_BITMAP (tmp, 0, i, sbi)
3320 	    insert_updated_phi_nodes_for (ssa_name (i), dfs, blocks_to_update,
3321 	                                  update_flags);
3322 	  sbitmap_free (tmp);
3323 	}
3324 
3325       symbols_to_rename.qsort (insert_updated_phi_nodes_compare_uids);
3326       FOR_EACH_VEC_ELT (symbols_to_rename, i, sym)
3327 	insert_updated_phi_nodes_for (sym, dfs, blocks_to_update,
3328 	                              update_flags);
3329 
3330       FOR_EACH_BB_FN (bb, cfun)
3331 	bitmap_clear (&dfs[bb->index]);
3332       free (dfs);
3333 
3334       /* Insertion of PHI nodes may have added blocks to the region.
3335 	 We need to re-compute START_BB to include the newly added
3336 	 blocks.  */
3337       if (start_bb != ENTRY_BLOCK_PTR_FOR_FN (cfun))
3338 	start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS,
3339 						     blocks_to_update);
3340     }
3341 
3342   /* Reset the current definition for name and symbol before renaming
3343      the sub-graph.  */
3344   EXECUTE_IF_SET_IN_BITMAP (old_ssa_names, 0, i, sbi)
3345     get_ssa_name_ann (ssa_name (i))->info.current_def = NULL_TREE;
3346 
3347   FOR_EACH_VEC_ELT (symbols_to_rename, i, sym)
3348     get_var_info (sym)->info.current_def = NULL_TREE;
3349 
3350   /* Now start the renaming process at START_BB.  */
3351   interesting_blocks = sbitmap_alloc (last_basic_block_for_fn (cfun));
3352   bitmap_clear (interesting_blocks);
3353   EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
3354     bitmap_set_bit (interesting_blocks, i);
3355 
3356   rewrite_blocks (start_bb, REWRITE_UPDATE);
3357 
3358   sbitmap_free (interesting_blocks);
3359 
3360   /* Debugging dumps.  */
3361   if (dump_file)
3362     {
3363       int c;
3364       unsigned i;
3365 
3366       dump_update_ssa (dump_file);
3367 
3368       fprintf (dump_file, "Incremental SSA update started at block: %d\n",
3369 	       start_bb->index);
3370 
3371       c = 0;
3372       EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
3373 	c++;
3374       fprintf (dump_file, "Number of blocks in CFG: %d\n",
3375 	       last_basic_block_for_fn (cfun));
3376       fprintf (dump_file, "Number of blocks to update: %d (%3.0f%%)\n",
3377 	       c, PERCENT (c, last_basic_block_for_fn (cfun)));
3378 
3379       if (dump_flags & TDF_DETAILS)
3380 	{
3381 	  fprintf (dump_file, "Affected blocks:");
3382 	  EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
3383 	    fprintf (dump_file, " %u", i);
3384 	  fprintf (dump_file, "\n");
3385 	}
3386 
3387       fprintf (dump_file, "\n\n");
3388     }
3389 
3390   /* Free allocated memory.  */
3391 done:
3392   delete_update_ssa ();
3393 
3394   timevar_pop (TV_TREE_SSA_INCREMENTAL);
3395 }
3396