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