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