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