OSDN Git Service

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