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