OSDN Git Service

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