]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/ssa.c
LANGUAGES: Follow spelling conventions.
[thirdparty/gcc.git] / gcc / ssa.c
1 /* Static Single Assignment conversion routines for the GNU compiler.
2 Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING. If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA. */
20
21 /* References:
22
23 Building an Optimizing Compiler
24 Robert Morgan
25 Butterworth-Heinemann, 1998
26
27 Static Single Assignment Construction
28 Preston Briggs, Tim Harvey, Taylor Simpson
29 Technical Report, Rice University, 1995
30 ftp://ftp.cs.rice.edu/public/preston/optimizer/SSA.ps.gz. */
31
32 #include "config.h"
33 #include "system.h"
34
35 #include "rtl.h"
36 #include "expr.h"
37 #include "varray.h"
38 #include "partition.h"
39 #include "sbitmap.h"
40 #include "hashtab.h"
41 #include "regs.h"
42 #include "hard-reg-set.h"
43 #include "flags.h"
44 #include "function.h"
45 #include "real.h"
46 #include "insn-config.h"
47 #include "recog.h"
48 #include "basic-block.h"
49 #include "output.h"
50 #include "ssa.h"
51
52 /* TODO:
53
54 Handle subregs better, maybe. For now, if a reg that's set in a
55 subreg expression is duplicated going into SSA form, an extra copy
56 is inserted first that copies the entire reg into the duplicate, so
57 that the other bits are preserved. This isn't strictly SSA, since
58 at least part of the reg is assigned in more than one place (though
59 they are adjacent).
60
61 ??? What to do about strict_low_part. Probably I'll have to split
62 them out of their current instructions first thing.
63
64 Actually the best solution may be to have a kind of "mid-level rtl"
65 in which the RTL encodes exactly what we want, without exposing a
66 lot of niggling processor details. At some later point we lower
67 the representation, calling back into optabs to finish any necessary
68 expansion. */
69
70 /* All pseudo-registers and select hard registers are converted to SSA
71 form. When converting out of SSA, these select hard registers are
72 guaranteed to be mapped to their original register number. Each
73 machine's .h file should define CONVERT_HARD_REGISTER_TO_SSA_P
74 indicating which hard registers should be converted.
75
76 When converting out of SSA, temporaries for all registers are
77 partitioned. The partition is checked to ensure that all uses of
78 the same hard register in the same machine mode are in the same
79 class. */
80
81 /* If conservative_reg_partition is nonzero, use a conservative
82 register partitioning algorithm (which leaves more regs after
83 emerging from SSA) instead of the coalescing one. This is being
84 left in for a limited time only, as a debugging tool until the
85 coalescing algorithm is validated. */
86
87 static int conservative_reg_partition;
88
89 /* This flag is set when the CFG is in SSA form. */
90 int in_ssa_form = 0;
91
92 /* Element I is the single instruction that sets register I. */
93 varray_type ssa_definition;
94
95 /* Element I-PSEUDO is the normal register that originated the ssa
96 register in question. */
97 varray_type ssa_rename_from;
98
99 /* Element I is the normal register that originated the ssa
100 register in question.
101
102 A hash table stores the (register, rtl) pairs. These are each
103 xmalloc'ed and deleted when the hash table is destroyed. */
104 htab_t ssa_rename_from_ht;
105
106 /* The running target ssa register for a given pseudo register.
107 (Pseudo registers appear in only one mode.) */
108 static rtx *ssa_rename_to_pseudo;
109 /* Similar, but for hard registers. A hard register can appear in
110 many modes, so we store an equivalent pseudo for each of the
111 modes. */
112 static rtx ssa_rename_to_hard[FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES];
113
114 /* ssa_rename_from maps pseudo registers to the original corresponding
115 RTL. It is implemented as using a hash table. */
116
117 typedef struct {
118 unsigned int reg;
119 rtx original;
120 } ssa_rename_from_pair;
121
122 struct ssa_rename_from_hash_table_data {
123 sbitmap canonical_elements;
124 partition reg_partition;
125 };
126
127 static rtx gen_sequence
128 PARAMS ((void));
129 static void ssa_rename_from_initialize
130 PARAMS ((void));
131 static rtx ssa_rename_from_lookup
132 PARAMS ((int reg));
133 static unsigned int original_register
134 PARAMS ((unsigned int regno));
135 static void ssa_rename_from_insert
136 PARAMS ((unsigned int reg, rtx r));
137 static void ssa_rename_from_free
138 PARAMS ((void));
139 typedef int (*srf_trav) PARAMS ((int regno, rtx r, sbitmap canonical_elements, partition reg_partition));
140 static void ssa_rename_from_traverse
141 PARAMS ((htab_trav callback_function, sbitmap canonical_elements, partition reg_partition));
142 /*static Avoid warnign message. */ void ssa_rename_from_print
143 PARAMS ((void));
144 static int ssa_rename_from_print_1
145 PARAMS ((void **slot, void *data));
146 static hashval_t ssa_rename_from_hash_function
147 PARAMS ((const void * srfp));
148 static int ssa_rename_from_equal
149 PARAMS ((const void *srfp1, const void *srfp2));
150 static void ssa_rename_from_delete
151 PARAMS ((void *srfp));
152
153 static rtx ssa_rename_to_lookup
154 PARAMS ((rtx reg));
155 static void ssa_rename_to_insert
156 PARAMS ((rtx reg, rtx r));
157
158 /* The number of registers that were live on entry to the SSA routines. */
159 static unsigned int ssa_max_reg_num;
160
161 /* Local function prototypes. */
162
163 struct rename_context;
164
165 static inline rtx * phi_alternative
166 PARAMS ((rtx, int));
167 static void compute_dominance_frontiers_1
168 PARAMS ((sbitmap *frontiers, dominance_info idom, int bb, sbitmap done));
169 static void find_evaluations_1
170 PARAMS ((rtx dest, rtx set, void *data));
171 static void find_evaluations
172 PARAMS ((sbitmap *evals, int nregs));
173 static void compute_iterated_dominance_frontiers
174 PARAMS ((sbitmap *idfs, sbitmap *frontiers, sbitmap *evals, int nregs));
175 static void insert_phi_node
176 PARAMS ((int regno, int b));
177 static void insert_phi_nodes
178 PARAMS ((sbitmap *idfs, sbitmap *evals, int nregs));
179 static void create_delayed_rename
180 PARAMS ((struct rename_context *, rtx *));
181 static void apply_delayed_renames
182 PARAMS ((struct rename_context *));
183 static int rename_insn_1
184 PARAMS ((rtx *ptr, void *data));
185 static void rename_block
186 PARAMS ((int b, dominance_info dom));
187 static void rename_registers
188 PARAMS ((int nregs, dominance_info idom));
189
190 static inline int ephi_add_node
191 PARAMS ((rtx reg, rtx *nodes, int *n_nodes));
192 static int * ephi_forward
193 PARAMS ((int t, sbitmap visited, sbitmap *succ, int *tstack));
194 static void ephi_backward
195 PARAMS ((int t, sbitmap visited, sbitmap *pred, rtx *nodes));
196 static void ephi_create
197 PARAMS ((int t, sbitmap visited, sbitmap *pred, sbitmap *succ, rtx *nodes));
198 static void eliminate_phi
199 PARAMS ((edge e, partition reg_partition));
200 static int make_regs_equivalent_over_bad_edges
201 PARAMS ((int bb, partition reg_partition));
202
203 /* These are used only in the conservative register partitioning
204 algorithms. */
205 static int make_equivalent_phi_alternatives_equivalent
206 PARAMS ((int bb, partition reg_partition));
207 static partition compute_conservative_reg_partition
208 PARAMS ((void));
209 static int record_canonical_element_1
210 PARAMS ((void **srfp, void *data));
211 static int check_hard_regs_in_partition
212 PARAMS ((partition reg_partition));
213 static int rename_equivalent_regs_in_insn
214 PARAMS ((rtx *ptr, void *data));
215
216 /* These are used in the register coalescing algorithm. */
217 static int coalesce_if_unconflicting
218 PARAMS ((partition p, conflict_graph conflicts, int reg1, int reg2));
219 static int coalesce_regs_in_copies
220 PARAMS ((basic_block bb, partition p, conflict_graph conflicts));
221 static int coalesce_reg_in_phi
222 PARAMS ((rtx, int dest_regno, int src_regno, void *data));
223 static int coalesce_regs_in_successor_phi_nodes
224 PARAMS ((basic_block bb, partition p, conflict_graph conflicts));
225 static partition compute_coalesced_reg_partition
226 PARAMS ((void));
227 static int mark_reg_in_phi
228 PARAMS ((rtx *ptr, void *data));
229 static void mark_phi_and_copy_regs
230 PARAMS ((regset phi_set));
231
232 static int rename_equivalent_regs_in_insn
233 PARAMS ((rtx *ptr, void *data));
234 static void rename_equivalent_regs
235 PARAMS ((partition reg_partition));
236
237 /* Deal with hard registers. */
238 static int conflicting_hard_regs_p
239 PARAMS ((int reg1, int reg2));
240
241 /* ssa_rename_to maps registers and machine modes to SSA pseudo registers. */
242
243 /* Find the register associated with REG in the indicated mode. */
244
245 static rtx
246 ssa_rename_to_lookup (reg)
247 rtx reg;
248 {
249 if (!HARD_REGISTER_P (reg))
250 return ssa_rename_to_pseudo[REGNO (reg) - FIRST_PSEUDO_REGISTER];
251 else
252 return ssa_rename_to_hard[REGNO (reg)][GET_MODE (reg)];
253 }
254
255 /* Store a new value mapping REG to R in ssa_rename_to. */
256
257 static void
258 ssa_rename_to_insert(reg, r)
259 rtx reg;
260 rtx r;
261 {
262 if (!HARD_REGISTER_P (reg))
263 ssa_rename_to_pseudo[REGNO (reg) - FIRST_PSEUDO_REGISTER] = r;
264 else
265 ssa_rename_to_hard[REGNO (reg)][GET_MODE (reg)] = r;
266 }
267
268 /* Prepare ssa_rename_from for use. */
269
270 static void
271 ssa_rename_from_initialize ()
272 {
273 /* We use an arbitrary initial hash table size of 64. */
274 ssa_rename_from_ht = htab_create (64,
275 &ssa_rename_from_hash_function,
276 &ssa_rename_from_equal,
277 &ssa_rename_from_delete);
278 }
279
280 /* Find the REG entry in ssa_rename_from. Return NULL_RTX if no entry is
281 found. */
282
283 static rtx
284 ssa_rename_from_lookup (reg)
285 int reg;
286 {
287 ssa_rename_from_pair srfp;
288 ssa_rename_from_pair *answer;
289 srfp.reg = reg;
290 srfp.original = NULL_RTX;
291 answer = (ssa_rename_from_pair *)
292 htab_find_with_hash (ssa_rename_from_ht, (void *) &srfp, reg);
293 return (answer == 0 ? NULL_RTX : answer->original);
294 }
295
296 /* Find the number of the original register specified by REGNO. If
297 the register is a pseudo, return the original register's number.
298 Otherwise, return this register number REGNO. */
299
300 static unsigned int
301 original_register (regno)
302 unsigned int regno;
303 {
304 rtx original_rtx = ssa_rename_from_lookup (regno);
305 return original_rtx != NULL_RTX ? REGNO (original_rtx) : regno;
306 }
307
308 /* Add mapping from R to REG to ssa_rename_from even if already present. */
309
310 static void
311 ssa_rename_from_insert (reg, r)
312 unsigned int reg;
313 rtx r;
314 {
315 void **slot;
316 ssa_rename_from_pair *srfp = xmalloc (sizeof (ssa_rename_from_pair));
317 srfp->reg = reg;
318 srfp->original = r;
319 slot = htab_find_slot_with_hash (ssa_rename_from_ht, (const void *) srfp,
320 reg, INSERT);
321 if (*slot != 0)
322 free ((void *) *slot);
323 *slot = srfp;
324 }
325
326 /* Apply the CALLBACK_FUNCTION to each element in ssa_rename_from.
327 CANONICAL_ELEMENTS and REG_PARTITION pass data needed by the only
328 current use of this function. */
329
330 static void
331 ssa_rename_from_traverse (callback_function,
332 canonical_elements, reg_partition)
333 htab_trav callback_function;
334 sbitmap canonical_elements;
335 partition reg_partition;
336 {
337 struct ssa_rename_from_hash_table_data srfhd;
338 srfhd.canonical_elements = canonical_elements;
339 srfhd.reg_partition = reg_partition;
340 htab_traverse (ssa_rename_from_ht, callback_function, (void *) &srfhd);
341 }
342
343 /* Destroy ssa_rename_from. */
344
345 static void
346 ssa_rename_from_free ()
347 {
348 htab_delete (ssa_rename_from_ht);
349 }
350
351 /* Print the contents of ssa_rename_from. */
352
353 /* static Avoid erroneous error message. */
354 void
355 ssa_rename_from_print ()
356 {
357 printf ("ssa_rename_from's hash table contents:\n");
358 htab_traverse (ssa_rename_from_ht, &ssa_rename_from_print_1, NULL);
359 }
360
361 /* Print the contents of the hash table entry SLOT, passing the unused
362 sttribute DATA. Used as a callback function with htab_traverse (). */
363
364 static int
365 ssa_rename_from_print_1 (slot, data)
366 void **slot;
367 void *data ATTRIBUTE_UNUSED;
368 {
369 ssa_rename_from_pair * p = *slot;
370 printf ("ssa_rename_from maps pseudo %i to original %i.\n",
371 p->reg, REGNO (p->original));
372 return 1;
373 }
374
375 /* Given a hash entry SRFP, yield a hash value. */
376
377 static hashval_t
378 ssa_rename_from_hash_function (srfp)
379 const void *srfp;
380 {
381 return ((const ssa_rename_from_pair *) srfp)->reg;
382 }
383
384 /* Test whether two hash table entries SRFP1 and SRFP2 are equal. */
385
386 static int
387 ssa_rename_from_equal (srfp1, srfp2)
388 const void *srfp1;
389 const void *srfp2;
390 {
391 return ssa_rename_from_hash_function (srfp1) ==
392 ssa_rename_from_hash_function (srfp2);
393 }
394
395 /* Delete the hash table entry SRFP. */
396
397 static void
398 ssa_rename_from_delete (srfp)
399 void *srfp;
400 {
401 free (srfp);
402 }
403
404 /* Given the SET of a PHI node, return the address of the alternative
405 for predecessor block C. */
406
407 static inline rtx *
408 phi_alternative (set, c)
409 rtx set;
410 int c;
411 {
412 rtvec phi_vec = XVEC (SET_SRC (set), 0);
413 int v;
414
415 for (v = GET_NUM_ELEM (phi_vec) - 2; v >= 0; v -= 2)
416 if (INTVAL (RTVEC_ELT (phi_vec, v + 1)) == c)
417 return &RTVEC_ELT (phi_vec, v);
418
419 return NULL;
420 }
421
422 /* Given the SET of a phi node, remove the alternative for predecessor
423 block C. Return nonzero on success, or zero if no alternative is
424 found for C. */
425
426 int
427 remove_phi_alternative (set, block)
428 rtx set;
429 basic_block block;
430 {
431 rtvec phi_vec = XVEC (SET_SRC (set), 0);
432 int num_elem = GET_NUM_ELEM (phi_vec);
433 int v, c;
434
435 c = block->index;
436 for (v = num_elem - 2; v >= 0; v -= 2)
437 if (INTVAL (RTVEC_ELT (phi_vec, v + 1)) == c)
438 {
439 if (v < num_elem - 2)
440 {
441 RTVEC_ELT (phi_vec, v) = RTVEC_ELT (phi_vec, num_elem - 2);
442 RTVEC_ELT (phi_vec, v + 1) = RTVEC_ELT (phi_vec, num_elem - 1);
443 }
444 PUT_NUM_ELEM (phi_vec, num_elem - 2);
445 return 1;
446 }
447
448 return 0;
449 }
450
451 /* For all registers, find all blocks in which they are set.
452
453 This is the transform of what would be local kill information that
454 we ought to be getting from flow. */
455
456 static sbitmap *fe_evals;
457 static int fe_current_bb;
458
459 static void
460 find_evaluations_1 (dest, set, data)
461 rtx dest;
462 rtx set ATTRIBUTE_UNUSED;
463 void *data ATTRIBUTE_UNUSED;
464 {
465 if (GET_CODE (dest) == REG
466 && CONVERT_REGISTER_TO_SSA_P (REGNO (dest)))
467 SET_BIT (fe_evals[REGNO (dest)], fe_current_bb);
468 }
469
470 static void
471 find_evaluations (evals, nregs)
472 sbitmap *evals;
473 int nregs;
474 {
475 basic_block bb;
476
477 sbitmap_vector_zero (evals, nregs);
478 fe_evals = evals;
479
480 FOR_EACH_BB_REVERSE (bb)
481 {
482 rtx p, last;
483
484 fe_current_bb = bb->index;
485 p = bb->head;
486 last = bb->end;
487 while (1)
488 {
489 if (INSN_P (p))
490 note_stores (PATTERN (p), find_evaluations_1, NULL);
491
492 if (p == last)
493 break;
494 p = NEXT_INSN (p);
495 }
496 }
497 }
498
499 /* Computing the Dominance Frontier:
500
501 As decribed in Morgan, section 3.5, this may be done simply by
502 walking the dominator tree bottom-up, computing the frontier for
503 the children before the parent. When considering a block B,
504 there are two cases:
505
506 (1) A flow graph edge leaving B that does not lead to a child
507 of B in the dominator tree must be a block that is either equal
508 to B or not dominated by B. Such blocks belong in the frontier
509 of B.
510
511 (2) Consider a block X in the frontier of one of the children C
512 of B. If X is not equal to B and is not dominated by B, it
513 is in the frontier of B.
514 */
515
516 static void
517 compute_dominance_frontiers_1 (frontiers, idom, bb, done)
518 sbitmap *frontiers;
519 dominance_info idom;
520 int bb;
521 sbitmap done;
522 {
523 basic_block b = BASIC_BLOCK (bb);
524 edge e;
525 basic_block c;
526
527 SET_BIT (done, bb);
528 sbitmap_zero (frontiers[bb]);
529
530 /* Do the frontier of the children first. Not all children in the
531 dominator tree (blocks dominated by this one) are children in the
532 CFG, so check all blocks. */
533 FOR_EACH_BB (c)
534 if (get_immediate_dominator (idom, c)->index == bb
535 && ! TEST_BIT (done, c->index))
536 compute_dominance_frontiers_1 (frontiers, idom, c->index, done);
537
538 /* Find blocks conforming to rule (1) above. */
539 for (e = b->succ; e; e = e->succ_next)
540 {
541 if (e->dest == EXIT_BLOCK_PTR)
542 continue;
543 if (get_immediate_dominator (idom, e->dest)->index != bb)
544 SET_BIT (frontiers[bb], e->dest->index);
545 }
546
547 /* Find blocks conforming to rule (2). */
548 FOR_EACH_BB (c)
549 if (get_immediate_dominator (idom, c)->index == bb)
550 {
551 int x;
552 EXECUTE_IF_SET_IN_SBITMAP (frontiers[c->index], 0, x,
553 {
554 if (get_immediate_dominator (idom, BASIC_BLOCK (x))->index != bb)
555 SET_BIT (frontiers[bb], x);
556 });
557 }
558 }
559
560 void
561 compute_dominance_frontiers (frontiers, idom)
562 sbitmap *frontiers;
563 dominance_info idom;
564 {
565 sbitmap done = sbitmap_alloc (last_basic_block);
566 sbitmap_zero (done);
567
568 compute_dominance_frontiers_1 (frontiers, idom, 0, done);
569
570 sbitmap_free (done);
571 }
572
573 /* Computing the Iterated Dominance Frontier:
574
575 This is the set of merge points for a given register.
576
577 This is not particularly intuitive. See section 7.1 of Morgan, in
578 particular figures 7.3 and 7.4 and the immediately surrounding text.
579 */
580
581 static void
582 compute_iterated_dominance_frontiers (idfs, frontiers, evals, nregs)
583 sbitmap *idfs;
584 sbitmap *frontiers;
585 sbitmap *evals;
586 int nregs;
587 {
588 sbitmap worklist;
589 int reg, passes = 0;
590
591 worklist = sbitmap_alloc (last_basic_block);
592
593 for (reg = 0; reg < nregs; ++reg)
594 {
595 sbitmap idf = idfs[reg];
596 int b, changed;
597
598 /* Start the iterative process by considering those blocks that
599 evaluate REG. We'll add their dominance frontiers to the
600 IDF, and then consider the blocks we just added. */
601 sbitmap_copy (worklist, evals[reg]);
602
603 /* Morgan's algorithm is incorrect here. Blocks that evaluate
604 REG aren't necessarily in REG's IDF. Start with an empty IDF. */
605 sbitmap_zero (idf);
606
607 /* Iterate until the worklist is empty. */
608 do
609 {
610 changed = 0;
611 passes++;
612 EXECUTE_IF_SET_IN_SBITMAP (worklist, 0, b,
613 {
614 RESET_BIT (worklist, b);
615 /* For each block on the worklist, add to the IDF all
616 blocks on its dominance frontier that aren't already
617 on the IDF. Every block that's added is also added
618 to the worklist. */
619 sbitmap_union_of_diff (worklist, worklist, frontiers[b], idf);
620 sbitmap_a_or_b (idf, idf, frontiers[b]);
621 changed = 1;
622 });
623 }
624 while (changed);
625 }
626
627 sbitmap_free (worklist);
628
629 if (rtl_dump_file)
630 {
631 fprintf (rtl_dump_file,
632 "Iterated dominance frontier: %d passes on %d regs.\n",
633 passes, nregs);
634 }
635 }
636
637 /* Insert the phi nodes. */
638
639 static void
640 insert_phi_node (regno, bb)
641 int regno, bb;
642 {
643 basic_block b = BASIC_BLOCK (bb);
644 edge e;
645 int npred, i;
646 rtvec vec;
647 rtx phi, reg;
648 rtx insn;
649 int end_p;
650
651 /* Find out how many predecessors there are. */
652 for (e = b->pred, npred = 0; e; e = e->pred_next)
653 if (e->src != ENTRY_BLOCK_PTR)
654 npred++;
655
656 /* If this block has no "interesting" preds, then there is nothing to
657 do. Consider a block that only has the entry block as a pred. */
658 if (npred == 0)
659 return;
660
661 /* This is the register to which the phi function will be assigned. */
662 reg = regno_reg_rtx[regno];
663
664 /* Construct the arguments to the PHI node. The use of pc_rtx is just
665 a placeholder; we'll insert the proper value in rename_registers. */
666 vec = rtvec_alloc (npred * 2);
667 for (e = b->pred, i = 0; e ; e = e->pred_next, i += 2)
668 if (e->src != ENTRY_BLOCK_PTR)
669 {
670 RTVEC_ELT (vec, i + 0) = pc_rtx;
671 RTVEC_ELT (vec, i + 1) = GEN_INT (e->src->index);
672 }
673
674 phi = gen_rtx_PHI (VOIDmode, vec);
675 phi = gen_rtx_SET (VOIDmode, reg, phi);
676
677 insn = first_insn_after_basic_block_note (b);
678 end_p = PREV_INSN (insn) == b->end;
679 emit_insn_before (phi, insn);
680 if (end_p)
681 b->end = PREV_INSN (insn);
682 }
683
684 static void
685 insert_phi_nodes (idfs, evals, nregs)
686 sbitmap *idfs;
687 sbitmap *evals ATTRIBUTE_UNUSED;
688 int nregs;
689 {
690 int reg;
691
692 for (reg = 0; reg < nregs; ++reg)
693 if (CONVERT_REGISTER_TO_SSA_P (reg))
694 {
695 int b;
696 EXECUTE_IF_SET_IN_SBITMAP (idfs[reg], 0, b,
697 {
698 if (REGNO_REG_SET_P (BASIC_BLOCK (b)->global_live_at_start, reg))
699 insert_phi_node (reg, b);
700 });
701 }
702 }
703
704 /* Rename the registers to conform to SSA.
705
706 This is essentially the algorithm presented in Figure 7.8 of Morgan,
707 with a few changes to reduce pattern search time in favor of a bit
708 more memory usage. */
709
710 /* One of these is created for each set. It will live in a list local
711 to its basic block for the duration of that block's processing. */
712 struct rename_set_data
713 {
714 struct rename_set_data *next;
715 /* This is the SET_DEST of the (first) SET that sets the REG. */
716 rtx *reg_loc;
717 /* This is what used to be at *REG_LOC. */
718 rtx old_reg;
719 /* This is the REG that will replace OLD_REG. It's set only
720 when the rename data is moved onto the DONE_RENAMES queue. */
721 rtx new_reg;
722 /* This is what to restore ssa_rename_to_lookup (old_reg) to. It is
723 usually the previous contents of ssa_rename_to_lookup (old_reg). */
724 rtx prev_reg;
725 /* This is the insn that contains all the SETs of the REG. */
726 rtx set_insn;
727 };
728
729 /* This struct is used to pass information to callback functions while
730 renaming registers. */
731 struct rename_context
732 {
733 struct rename_set_data *new_renames;
734 struct rename_set_data *done_renames;
735 rtx current_insn;
736 };
737
738 /* Queue the rename of *REG_LOC. */
739 static void
740 create_delayed_rename (c, reg_loc)
741 struct rename_context *c;
742 rtx *reg_loc;
743 {
744 struct rename_set_data *r;
745 r = (struct rename_set_data *) xmalloc (sizeof(*r));
746
747 if (GET_CODE (*reg_loc) != REG
748 || !CONVERT_REGISTER_TO_SSA_P (REGNO (*reg_loc)))
749 abort ();
750
751 r->reg_loc = reg_loc;
752 r->old_reg = *reg_loc;
753 r->prev_reg = ssa_rename_to_lookup(r->old_reg);
754 r->set_insn = c->current_insn;
755 r->next = c->new_renames;
756 c->new_renames = r;
757 }
758
759 /* This is part of a rather ugly hack to allow the pre-ssa regno to be
760 reused. If, during processing, a register has not yet been touched,
761 ssa_rename_to[regno][machno] will be NULL. Now, in the course of pushing
762 and popping values from ssa_rename_to, when we would ordinarily
763 pop NULL back in, we pop RENAME_NO_RTX. We treat this exactly the
764 same as NULL, except that it signals that the original regno has
765 already been reused. */
766 #define RENAME_NO_RTX pc_rtx
767
768 /* Move all the entries from NEW_RENAMES onto DONE_RENAMES by
769 applying all the renames on NEW_RENAMES. */
770
771 static void
772 apply_delayed_renames (c)
773 struct rename_context *c;
774 {
775 struct rename_set_data *r;
776 struct rename_set_data *last_r = NULL;
777
778 for (r = c->new_renames; r != NULL; r = r->next)
779 {
780 int new_regno;
781
782 /* Failure here means that someone has a PARALLEL that sets
783 a register twice (bad!). */
784 if (ssa_rename_to_lookup (r->old_reg) != r->prev_reg)
785 abort ();
786 /* Failure here means we have changed REG_LOC before applying
787 the rename. */
788 /* For the first set we come across, reuse the original regno. */
789 if (r->prev_reg == NULL_RTX && !HARD_REGISTER_P (r->old_reg))
790 {
791 r->new_reg = r->old_reg;
792 /* We want to restore RENAME_NO_RTX rather than NULL_RTX. */
793 r->prev_reg = RENAME_NO_RTX;
794 }
795 else
796 r->new_reg = gen_reg_rtx (GET_MODE (r->old_reg));
797 new_regno = REGNO (r->new_reg);
798 ssa_rename_to_insert (r->old_reg, r->new_reg);
799
800 if (new_regno >= (int) ssa_definition->num_elements)
801 {
802 int new_limit = new_regno * 5 / 4;
803 VARRAY_GROW (ssa_definition, new_limit);
804 }
805
806 VARRAY_RTX (ssa_definition, new_regno) = r->set_insn;
807 ssa_rename_from_insert (new_regno, r->old_reg);
808 last_r = r;
809 }
810 if (last_r != NULL)
811 {
812 last_r->next = c->done_renames;
813 c->done_renames = c->new_renames;
814 c->new_renames = NULL;
815 }
816 }
817
818 /* Part one of the first step of rename_block, called through for_each_rtx.
819 Mark pseudos that are set for later update. Transform uses of pseudos. */
820
821 static int
822 rename_insn_1 (ptr, data)
823 rtx *ptr;
824 void *data;
825 {
826 rtx x = *ptr;
827 struct rename_context *context = data;
828
829 if (x == NULL_RTX)
830 return 0;
831
832 switch (GET_CODE (x))
833 {
834 case SET:
835 {
836 rtx *destp = &SET_DEST (x);
837 rtx dest = SET_DEST (x);
838
839 /* An assignment to a paradoxical SUBREG does not read from
840 the destination operand, and thus does not need to be
841 wrapped into a SEQUENCE when translating into SSA form.
842 We merely strip off the SUBREG and proceed normally for
843 this case. */
844 if (GET_CODE (dest) == SUBREG
845 && (GET_MODE_SIZE (GET_MODE (dest))
846 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest))))
847 && GET_CODE (SUBREG_REG (dest)) == REG
848 && CONVERT_REGISTER_TO_SSA_P (REGNO (SUBREG_REG (dest))))
849 {
850 destp = &XEXP (dest, 0);
851 dest = XEXP (dest, 0);
852 }
853
854 /* Some SETs also use the REG specified in their LHS.
855 These can be detected by the presence of
856 STRICT_LOW_PART, SUBREG, SIGN_EXTRACT, and ZERO_EXTRACT
857 in the LHS. Handle these by changing
858 (set (subreg (reg foo)) ...)
859 into
860 (sequence [(set (reg foo_1) (reg foo))
861 (set (subreg (reg foo_1)) ...)])
862
863 FIXME: Much of the time this is too much. For some constructs
864 we know that the output register is strictly an output
865 (paradoxical SUBREGs and some libcalls for example).
866
867 For those cases we are better off not making the false
868 dependency. */
869 if (GET_CODE (dest) == STRICT_LOW_PART
870 || GET_CODE (dest) == SUBREG
871 || GET_CODE (dest) == SIGN_EXTRACT
872 || GET_CODE (dest) == ZERO_EXTRACT)
873 {
874 rtx i, reg;
875 reg = dest;
876
877 while (GET_CODE (reg) == STRICT_LOW_PART
878 || GET_CODE (reg) == SUBREG
879 || GET_CODE (reg) == SIGN_EXTRACT
880 || GET_CODE (reg) == ZERO_EXTRACT)
881 reg = XEXP (reg, 0);
882
883 if (GET_CODE (reg) == REG
884 && CONVERT_REGISTER_TO_SSA_P (REGNO (reg)))
885 {
886 /* Generate (set reg reg), and do renaming on it so
887 that it becomes (set reg_1 reg_0), and we will
888 replace reg with reg_1 in the SUBREG. */
889
890 struct rename_set_data *saved_new_renames;
891 saved_new_renames = context->new_renames;
892 context->new_renames = NULL;
893 i = emit_insn (gen_rtx_SET (VOIDmode, reg, reg));
894 for_each_rtx (&i, rename_insn_1, data);
895 apply_delayed_renames (context);
896 context->new_renames = saved_new_renames;
897 }
898 }
899 else if (GET_CODE (dest) == REG
900 && CONVERT_REGISTER_TO_SSA_P (REGNO (dest)))
901 {
902 /* We found a genuine set of an interesting register. Tag
903 it so that we can create a new name for it after we finish
904 processing this insn. */
905
906 create_delayed_rename (context, destp);
907
908 /* Since we do not wish to (directly) traverse the
909 SET_DEST, recurse through for_each_rtx for the SET_SRC
910 and return. */
911 if (GET_CODE (x) == SET)
912 for_each_rtx (&SET_SRC (x), rename_insn_1, data);
913 return -1;
914 }
915
916 /* Otherwise, this was not an interesting destination. Continue
917 on, marking uses as normal. */
918 return 0;
919 }
920
921 case REG:
922 if (CONVERT_REGISTER_TO_SSA_P (REGNO (x))
923 && REGNO (x) < ssa_max_reg_num)
924 {
925 rtx new_reg = ssa_rename_to_lookup (x);
926
927 if (new_reg != RENAME_NO_RTX && new_reg != NULL_RTX)
928 {
929 if (GET_MODE (x) != GET_MODE (new_reg))
930 abort ();
931 *ptr = new_reg;
932 }
933 else
934 {
935 /* Undefined value used, rename it to a new pseudo register so
936 that it cannot conflict with an existing register. */
937 *ptr = gen_reg_rtx (GET_MODE (x));
938 }
939 }
940 return -1;
941
942 case CLOBBER:
943 /* There is considerable debate on how CLOBBERs ought to be
944 handled in SSA. For now, we're keeping the CLOBBERs, which
945 means that we don't really have SSA form. There are a couple
946 of proposals for how to fix this problem, but neither is
947 implemented yet. */
948 {
949 rtx dest = XCEXP (x, 0, CLOBBER);
950 if (REG_P (dest))
951 {
952 if (CONVERT_REGISTER_TO_SSA_P (REGNO (dest))
953 && REGNO (dest) < ssa_max_reg_num)
954 {
955 rtx new_reg = ssa_rename_to_lookup (dest);
956 if (new_reg != NULL_RTX && new_reg != RENAME_NO_RTX)
957 XCEXP (x, 0, CLOBBER) = new_reg;
958 }
959 /* Stop traversing. */
960 return -1;
961 }
962 else
963 /* Continue traversing. */
964 return 0;
965 }
966
967 case PHI:
968 /* Never muck with the phi. We do that elsewhere, special-like. */
969 return -1;
970
971 default:
972 /* Anything else, continue traversing. */
973 return 0;
974 }
975 }
976
977 static rtx
978 gen_sequence ()
979 {
980 rtx first_insn = get_insns ();
981 rtx result;
982 rtx tem;
983 int i;
984 int len;
985
986 /* Count the insns in the chain. */
987 len = 0;
988 for (tem = first_insn; tem; tem = NEXT_INSN (tem))
989 len++;
990
991 result = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (len));
992
993 for (i = 0, tem = first_insn; tem; tem = NEXT_INSN (tem), i++)
994 XVECEXP (result, 0, i) = tem;
995
996 return result;
997 }
998
999 static void
1000 rename_block (bb, idom)
1001 int bb;
1002 dominance_info idom;
1003 {
1004 basic_block b = BASIC_BLOCK (bb);
1005 edge e;
1006 rtx insn, next, last;
1007 struct rename_set_data *set_data = NULL;
1008 basic_block c;
1009
1010 /* Step One: Walk the basic block, adding new names for sets and
1011 replacing uses. */
1012
1013 next = b->head;
1014 last = b->end;
1015 do
1016 {
1017 insn = next;
1018 if (INSN_P (insn))
1019 {
1020 struct rename_context context;
1021 context.done_renames = set_data;
1022 context.new_renames = NULL;
1023 context.current_insn = insn;
1024
1025 start_sequence ();
1026 for_each_rtx (&PATTERN (insn), rename_insn_1, &context);
1027 for_each_rtx (&REG_NOTES (insn), rename_insn_1, &context);
1028
1029 /* Sometimes, we end up with a sequence of insns that
1030 SSA needs to treat as a single insn. Wrap these in a
1031 SEQUENCE. (Any notes now get attached to the SEQUENCE,
1032 not to the old version inner insn.) */
1033 if (get_insns () != NULL_RTX)
1034 {
1035 rtx seq;
1036 int i;
1037
1038 emit (PATTERN (insn));
1039 seq = gen_sequence ();
1040 /* We really want a SEQUENCE of SETs, not a SEQUENCE
1041 of INSNs. */
1042 for (i = 0; i < XVECLEN (seq, 0); i++)
1043 XVECEXP (seq, 0, i) = PATTERN (XVECEXP (seq, 0, i));
1044 PATTERN (insn) = seq;
1045 }
1046 end_sequence ();
1047
1048 apply_delayed_renames (&context);
1049 set_data = context.done_renames;
1050 }
1051
1052 next = NEXT_INSN (insn);
1053 }
1054 while (insn != last);
1055
1056 /* Step Two: Update the phi nodes of this block's successors. */
1057
1058 for (e = b->succ; e; e = e->succ_next)
1059 {
1060 if (e->dest == EXIT_BLOCK_PTR)
1061 continue;
1062
1063 insn = first_insn_after_basic_block_note (e->dest);
1064
1065 while (PHI_NODE_P (insn))
1066 {
1067 rtx phi = PATTERN (insn);
1068 rtx reg;
1069
1070 /* Find out which of our outgoing registers this node is
1071 intended to replace. Note that if this is not the first PHI
1072 node to have been created for this register, we have to
1073 jump through rename links to figure out which register
1074 we're talking about. This can easily be recognized by
1075 noting that the regno is new to this pass. */
1076 reg = SET_DEST (phi);
1077 if (REGNO (reg) >= ssa_max_reg_num)
1078 reg = ssa_rename_from_lookup (REGNO (reg));
1079 if (reg == NULL_RTX)
1080 abort ();
1081 reg = ssa_rename_to_lookup (reg);
1082
1083 /* It is possible for the variable to be uninitialized on
1084 edges in. Reduce the arity of the PHI so that we don't
1085 consider those edges. */
1086 if (reg == NULL || reg == RENAME_NO_RTX)
1087 {
1088 if (! remove_phi_alternative (phi, b))
1089 abort ();
1090 }
1091 else
1092 {
1093 /* When we created the PHI nodes, we did not know what mode
1094 the register should be. Now that we've found an original,
1095 we can fill that in. */
1096 if (GET_MODE (SET_DEST (phi)) == VOIDmode)
1097 PUT_MODE (SET_DEST (phi), GET_MODE (reg));
1098 else if (GET_MODE (SET_DEST (phi)) != GET_MODE (reg))
1099 abort ();
1100
1101 *phi_alternative (phi, bb) = reg;
1102 }
1103
1104 insn = NEXT_INSN (insn);
1105 }
1106 }
1107
1108 /* Step Three: Do the same to the children of this block in
1109 dominator order. */
1110
1111 FOR_EACH_BB (c)
1112 if (get_immediate_dominator (idom, c)->index == bb)
1113 rename_block (c->index, idom);
1114
1115 /* Step Four: Update the sets to refer to their new register,
1116 and restore ssa_rename_to to its previous state. */
1117
1118 while (set_data)
1119 {
1120 struct rename_set_data *next;
1121 rtx old_reg = *set_data->reg_loc;
1122
1123 if (*set_data->reg_loc != set_data->old_reg)
1124 abort ();
1125 *set_data->reg_loc = set_data->new_reg;
1126
1127 ssa_rename_to_insert (old_reg, set_data->prev_reg);
1128
1129 next = set_data->next;
1130 free (set_data);
1131 set_data = next;
1132 }
1133 }
1134
1135 static void
1136 rename_registers (nregs, idom)
1137 int nregs;
1138 dominance_info idom;
1139 {
1140 VARRAY_RTX_INIT (ssa_definition, nregs * 3, "ssa_definition");
1141 ssa_rename_from_initialize ();
1142
1143 ssa_rename_to_pseudo = (rtx *) alloca (nregs * sizeof(rtx));
1144 memset ((char *) ssa_rename_to_pseudo, 0, nregs * sizeof(rtx));
1145 memset ((char *) ssa_rename_to_hard, 0,
1146 FIRST_PSEUDO_REGISTER * NUM_MACHINE_MODES * sizeof (rtx));
1147
1148 rename_block (0, idom);
1149
1150 /* ??? Update basic_block_live_at_start, and other flow info
1151 as needed. */
1152
1153 ssa_rename_to_pseudo = NULL;
1154 }
1155
1156 /* The main entry point for moving to SSA. */
1157
1158 void
1159 convert_to_ssa ()
1160 {
1161 /* Element I is the set of blocks that set register I. */
1162 sbitmap *evals;
1163
1164 /* Dominator bitmaps. */
1165 sbitmap *dfs;
1166 sbitmap *idfs;
1167
1168 /* Element I is the immediate dominator of block I. */
1169 dominance_info idom;
1170
1171 int nregs;
1172
1173 basic_block bb;
1174
1175 /* Don't do it twice. */
1176 if (in_ssa_form)
1177 abort ();
1178
1179 /* Need global_live_at_{start,end} up to date. Do not remove any
1180 dead code. We'll let the SSA optimizers do that. */
1181 life_analysis (get_insns (), NULL, 0);
1182
1183 idom = calculate_dominance_info (CDI_DOMINATORS);
1184
1185 if (rtl_dump_file)
1186 {
1187 fputs (";; Immediate Dominators:\n", rtl_dump_file);
1188 FOR_EACH_BB (bb)
1189 fprintf (rtl_dump_file, ";\t%3d = %3d\n", bb->index,
1190 get_immediate_dominator (idom, bb)->index);
1191 fflush (rtl_dump_file);
1192 }
1193
1194 /* Compute dominance frontiers. */
1195
1196 dfs = sbitmap_vector_alloc (last_basic_block, last_basic_block);
1197 compute_dominance_frontiers (dfs, idom);
1198
1199 if (rtl_dump_file)
1200 {
1201 dump_sbitmap_vector (rtl_dump_file, ";; Dominance Frontiers:",
1202 "; Basic Block", dfs, last_basic_block);
1203 fflush (rtl_dump_file);
1204 }
1205
1206 /* Compute register evaluations. */
1207
1208 ssa_max_reg_num = max_reg_num ();
1209 nregs = ssa_max_reg_num;
1210 evals = sbitmap_vector_alloc (nregs, last_basic_block);
1211 find_evaluations (evals, nregs);
1212
1213 /* Compute the iterated dominance frontier for each register. */
1214
1215 idfs = sbitmap_vector_alloc (nregs, last_basic_block);
1216 compute_iterated_dominance_frontiers (idfs, dfs, evals, nregs);
1217
1218 if (rtl_dump_file)
1219 {
1220 dump_sbitmap_vector (rtl_dump_file, ";; Iterated Dominance Frontiers:",
1221 "; Register", idfs, nregs);
1222 fflush (rtl_dump_file);
1223 }
1224
1225 /* Insert the phi nodes. */
1226
1227 insert_phi_nodes (idfs, evals, nregs);
1228
1229 /* Rename the registers to satisfy SSA. */
1230
1231 rename_registers (nregs, idom);
1232
1233 /* All done! Clean up and go home. */
1234
1235 sbitmap_vector_free (dfs);
1236 sbitmap_vector_free (evals);
1237 sbitmap_vector_free (idfs);
1238 in_ssa_form = 1;
1239
1240 reg_scan (get_insns (), max_reg_num (), 1);
1241 free_dominance_info (idom);
1242 }
1243
1244 /* REG is the representative temporary of its partition. Add it to the
1245 set of nodes to be processed, if it hasn't been already. Return the
1246 index of this register in the node set. */
1247
1248 static inline int
1249 ephi_add_node (reg, nodes, n_nodes)
1250 rtx reg, *nodes;
1251 int *n_nodes;
1252 {
1253 int i;
1254 for (i = *n_nodes - 1; i >= 0; --i)
1255 if (REGNO (reg) == REGNO (nodes[i]))
1256 return i;
1257
1258 nodes[i = (*n_nodes)++] = reg;
1259 return i;
1260 }
1261
1262 /* Part one of the topological sort. This is a forward (downward) search
1263 through the graph collecting a stack of nodes to process. Assuming no
1264 cycles, the nodes at top of the stack when we are finished will have
1265 no other dependencies. */
1266
1267 static int *
1268 ephi_forward (t, visited, succ, tstack)
1269 int t;
1270 sbitmap visited;
1271 sbitmap *succ;
1272 int *tstack;
1273 {
1274 int s;
1275
1276 SET_BIT (visited, t);
1277
1278 EXECUTE_IF_SET_IN_SBITMAP (succ[t], 0, s,
1279 {
1280 if (! TEST_BIT (visited, s))
1281 tstack = ephi_forward (s, visited, succ, tstack);
1282 });
1283
1284 *tstack++ = t;
1285 return tstack;
1286 }
1287
1288 /* Part two of the topological sort. The is a backward search through
1289 a cycle in the graph, copying the data forward as we go. */
1290
1291 static void
1292 ephi_backward (t, visited, pred, nodes)
1293 int t;
1294 sbitmap visited, *pred;
1295 rtx *nodes;
1296 {
1297 int p;
1298
1299 SET_BIT (visited, t);
1300
1301 EXECUTE_IF_SET_IN_SBITMAP (pred[t], 0, p,
1302 {
1303 if (! TEST_BIT (visited, p))
1304 {
1305 ephi_backward (p, visited, pred, nodes);
1306 emit_move_insn (nodes[p], nodes[t]);
1307 }
1308 });
1309 }
1310
1311 /* Part two of the topological sort. Create the copy for a register
1312 and any cycle of which it is a member. */
1313
1314 static void
1315 ephi_create (t, visited, pred, succ, nodes)
1316 int t;
1317 sbitmap visited, *pred, *succ;
1318 rtx *nodes;
1319 {
1320 rtx reg_u = NULL_RTX;
1321 int unvisited_predecessors = 0;
1322 int p;
1323
1324 /* Iterate through the predecessor list looking for unvisited nodes.
1325 If there are any, we have a cycle, and must deal with that. At
1326 the same time, look for a visited predecessor. If there is one,
1327 we won't need to create a temporary. */
1328
1329 EXECUTE_IF_SET_IN_SBITMAP (pred[t], 0, p,
1330 {
1331 if (! TEST_BIT (visited, p))
1332 unvisited_predecessors = 1;
1333 else if (!reg_u)
1334 reg_u = nodes[p];
1335 });
1336
1337 if (unvisited_predecessors)
1338 {
1339 /* We found a cycle. Copy out one element of the ring (if necessary),
1340 then traverse the ring copying as we go. */
1341
1342 if (!reg_u)
1343 {
1344 reg_u = gen_reg_rtx (GET_MODE (nodes[t]));
1345 emit_move_insn (reg_u, nodes[t]);
1346 }
1347
1348 EXECUTE_IF_SET_IN_SBITMAP (pred[t], 0, p,
1349 {
1350 if (! TEST_BIT (visited, p))
1351 {
1352 ephi_backward (p, visited, pred, nodes);
1353 emit_move_insn (nodes[p], reg_u);
1354 }
1355 });
1356 }
1357 else
1358 {
1359 /* No cycle. Just copy the value from a successor. */
1360
1361 int s;
1362 EXECUTE_IF_SET_IN_SBITMAP (succ[t], 0, s,
1363 {
1364 SET_BIT (visited, t);
1365 emit_move_insn (nodes[t], nodes[s]);
1366 return;
1367 });
1368 }
1369 }
1370
1371 /* Convert the edge to normal form. */
1372
1373 static void
1374 eliminate_phi (e, reg_partition)
1375 edge e;
1376 partition reg_partition;
1377 {
1378 int n_nodes;
1379 sbitmap *pred, *succ;
1380 sbitmap visited;
1381 rtx *nodes;
1382 int *stack, *tstack;
1383 rtx insn;
1384 int i;
1385
1386 /* Collect an upper bound on the number of registers needing processing. */
1387
1388 insn = first_insn_after_basic_block_note (e->dest);
1389
1390 n_nodes = 0;
1391 while (PHI_NODE_P (insn))
1392 {
1393 insn = next_nonnote_insn (insn);
1394 n_nodes += 2;
1395 }
1396
1397 if (n_nodes == 0)
1398 return;
1399
1400 /* Build the auxiliary graph R(B).
1401
1402 The nodes of the graph are the members of the register partition
1403 present in Phi(B). There is an edge from FIND(T0)->FIND(T1) for
1404 each T0 = PHI(...,T1,...), where T1 is for the edge from block C. */
1405
1406 nodes = (rtx *) alloca (n_nodes * sizeof(rtx));
1407 pred = sbitmap_vector_alloc (n_nodes, n_nodes);
1408 succ = sbitmap_vector_alloc (n_nodes, n_nodes);
1409 sbitmap_vector_zero (pred, n_nodes);
1410 sbitmap_vector_zero (succ, n_nodes);
1411
1412 insn = first_insn_after_basic_block_note (e->dest);
1413
1414 n_nodes = 0;
1415 for (; PHI_NODE_P (insn); insn = next_nonnote_insn (insn))
1416 {
1417 rtx* preg = phi_alternative (PATTERN (insn), e->src->index);
1418 rtx tgt = SET_DEST (PATTERN (insn));
1419 rtx reg;
1420
1421 /* There may be no phi alternative corresponding to this edge.
1422 This indicates that the phi variable is undefined along this
1423 edge. */
1424 if (preg == NULL)
1425 continue;
1426 reg = *preg;
1427
1428 if (GET_CODE (reg) != REG || GET_CODE (tgt) != REG)
1429 abort ();
1430
1431 reg = regno_reg_rtx[partition_find (reg_partition, REGNO (reg))];
1432 tgt = regno_reg_rtx[partition_find (reg_partition, REGNO (tgt))];
1433 /* If the two registers are already in the same partition,
1434 nothing will need to be done. */
1435 if (reg != tgt)
1436 {
1437 int ireg, itgt;
1438
1439 ireg = ephi_add_node (reg, nodes, &n_nodes);
1440 itgt = ephi_add_node (tgt, nodes, &n_nodes);
1441
1442 SET_BIT (pred[ireg], itgt);
1443 SET_BIT (succ[itgt], ireg);
1444 }
1445 }
1446
1447 if (n_nodes == 0)
1448 goto out;
1449
1450 /* Begin a topological sort of the graph. */
1451
1452 visited = sbitmap_alloc (n_nodes);
1453 sbitmap_zero (visited);
1454
1455 tstack = stack = (int *) alloca (n_nodes * sizeof (int));
1456
1457 for (i = 0; i < n_nodes; ++i)
1458 if (! TEST_BIT (visited, i))
1459 tstack = ephi_forward (i, visited, succ, tstack);
1460
1461 sbitmap_zero (visited);
1462
1463 /* As we find a solution to the tsort, collect the implementation
1464 insns in a sequence. */
1465 start_sequence ();
1466
1467 while (tstack != stack)
1468 {
1469 i = *--tstack;
1470 if (! TEST_BIT (visited, i))
1471 ephi_create (i, visited, pred, succ, nodes);
1472 }
1473
1474 insn = get_insns ();
1475 end_sequence ();
1476 insert_insn_on_edge (insn, e);
1477 if (rtl_dump_file)
1478 fprintf (rtl_dump_file, "Emitting copy on edge (%d,%d)\n",
1479 e->src->index, e->dest->index);
1480
1481 sbitmap_free (visited);
1482 out:
1483 sbitmap_vector_free (pred);
1484 sbitmap_vector_free (succ);
1485 }
1486
1487 /* For basic block B, consider all phi insns which provide an
1488 alternative corresponding to an incoming abnormal critical edge.
1489 Place the phi alternative corresponding to that abnormal critical
1490 edge in the same register class as the destination of the set.
1491
1492 From Morgan, p. 178:
1493
1494 For each abnormal critical edge (C, B),
1495 if T0 = phi (T1, ..., Ti, ..., Tm) is a phi node in B,
1496 and C is the ith predecessor of B,
1497 then T0 and Ti must be equivalent.
1498
1499 Return nonzero iff any such cases were found for which the two
1500 regs were not already in the same class. */
1501
1502 static int
1503 make_regs_equivalent_over_bad_edges (bb, reg_partition)
1504 int bb;
1505 partition reg_partition;
1506 {
1507 int changed = 0;
1508 basic_block b = BASIC_BLOCK (bb);
1509 rtx phi;
1510
1511 /* Advance to the first phi node. */
1512 phi = first_insn_after_basic_block_note (b);
1513
1514 /* Scan all the phi nodes. */
1515 for (;
1516 PHI_NODE_P (phi);
1517 phi = next_nonnote_insn (phi))
1518 {
1519 edge e;
1520 int tgt_regno;
1521 rtx set = PATTERN (phi);
1522 rtx tgt = SET_DEST (set);
1523
1524 /* The set target is expected to be an SSA register. */
1525 if (GET_CODE (tgt) != REG
1526 || !CONVERT_REGISTER_TO_SSA_P (REGNO (tgt)))
1527 abort ();
1528 tgt_regno = REGNO (tgt);
1529
1530 /* Scan incoming abnormal critical edges. */
1531 for (e = b->pred; e; e = e->pred_next)
1532 if ((e->flags & EDGE_ABNORMAL) && EDGE_CRITICAL_P (e))
1533 {
1534 rtx *alt = phi_alternative (set, e->src->index);
1535 int alt_regno;
1536
1537 /* If there is no alternative corresponding to this edge,
1538 the value is undefined along the edge, so just go on. */
1539 if (alt == 0)
1540 continue;
1541
1542 /* The phi alternative is expected to be an SSA register. */
1543 if (GET_CODE (*alt) != REG
1544 || !CONVERT_REGISTER_TO_SSA_P (REGNO (*alt)))
1545 abort ();
1546 alt_regno = REGNO (*alt);
1547
1548 /* If the set destination and the phi alternative aren't
1549 already in the same class... */
1550 if (partition_find (reg_partition, tgt_regno)
1551 != partition_find (reg_partition, alt_regno))
1552 {
1553 /* ... make them such. */
1554 if (conflicting_hard_regs_p (tgt_regno, alt_regno))
1555 /* It is illegal to unify a hard register with a
1556 different register. */
1557 abort ();
1558
1559 partition_union (reg_partition,
1560 tgt_regno, alt_regno);
1561 ++changed;
1562 }
1563 }
1564 }
1565
1566 return changed;
1567 }
1568
1569 /* Consider phi insns in basic block BB pairwise. If the set target
1570 of both isns are equivalent pseudos, make the corresponding phi
1571 alternatives in each phi corresponding equivalent.
1572
1573 Return nonzero if any new register classes were unioned. */
1574
1575 static int
1576 make_equivalent_phi_alternatives_equivalent (bb, reg_partition)
1577 int bb;
1578 partition reg_partition;
1579 {
1580 int changed = 0;
1581 basic_block b = BASIC_BLOCK (bb);
1582 rtx phi;
1583
1584 /* Advance to the first phi node. */
1585 phi = first_insn_after_basic_block_note (b);
1586
1587 /* Scan all the phi nodes. */
1588 for (;
1589 PHI_NODE_P (phi);
1590 phi = next_nonnote_insn (phi))
1591 {
1592 rtx set = PATTERN (phi);
1593 /* The regno of the destination of the set. */
1594 int tgt_regno = REGNO (SET_DEST (PATTERN (phi)));
1595
1596 rtx phi2 = next_nonnote_insn (phi);
1597
1598 /* Scan all phi nodes following this one. */
1599 for (;
1600 PHI_NODE_P (phi2);
1601 phi2 = next_nonnote_insn (phi2))
1602 {
1603 rtx set2 = PATTERN (phi2);
1604 /* The regno of the destination of the set. */
1605 int tgt2_regno = REGNO (SET_DEST (set2));
1606
1607 /* Are the set destinations equivalent regs? */
1608 if (partition_find (reg_partition, tgt_regno) ==
1609 partition_find (reg_partition, tgt2_regno))
1610 {
1611 edge e;
1612 /* Scan over edges. */
1613 for (e = b->pred; e; e = e->pred_next)
1614 {
1615 int pred_block = e->src->index;
1616 /* Identify the phi alternatives from both phi
1617 nodes corresponding to this edge. */
1618 rtx *alt = phi_alternative (set, pred_block);
1619 rtx *alt2 = phi_alternative (set2, pred_block);
1620
1621 /* If one of the phi nodes doesn't have a
1622 corresponding alternative, just skip it. */
1623 if (alt == 0 || alt2 == 0)
1624 continue;
1625
1626 /* Both alternatives should be SSA registers. */
1627 if (GET_CODE (*alt) != REG
1628 || !CONVERT_REGISTER_TO_SSA_P (REGNO (*alt)))
1629 abort ();
1630 if (GET_CODE (*alt2) != REG
1631 || !CONVERT_REGISTER_TO_SSA_P (REGNO (*alt2)))
1632 abort ();
1633
1634 /* If the alternatives aren't already in the same
1635 class ... */
1636 if (partition_find (reg_partition, REGNO (*alt))
1637 != partition_find (reg_partition, REGNO (*alt2)))
1638 {
1639 /* ... make them so. */
1640 if (conflicting_hard_regs_p (REGNO (*alt), REGNO (*alt2)))
1641 /* It is illegal to unify a hard register with
1642 a different register. */
1643 abort ();
1644
1645 partition_union (reg_partition,
1646 REGNO (*alt), REGNO (*alt2));
1647 ++changed;
1648 }
1649 }
1650 }
1651 }
1652 }
1653
1654 return changed;
1655 }
1656
1657 /* Compute a conservative partition of outstanding pseudo registers.
1658 See Morgan 7.3.1. */
1659
1660 static partition
1661 compute_conservative_reg_partition ()
1662 {
1663 basic_block bb;
1664 int changed = 0;
1665
1666 /* We don't actually work with hard registers, but it's easier to
1667 carry them around anyway rather than constantly doing register
1668 number arithmetic. */
1669 partition p =
1670 partition_new (ssa_definition->num_elements);
1671
1672 /* The first priority is to make sure registers that might have to
1673 be copied on abnormal critical edges are placed in the same
1674 partition. This saves us from having to split abnormal critical
1675 edges. */
1676 FOR_EACH_BB_REVERSE (bb)
1677 changed += make_regs_equivalent_over_bad_edges (bb->index, p);
1678
1679 /* Now we have to insure that corresponding arguments of phi nodes
1680 assigning to corresponding regs are equivalent. Iterate until
1681 nothing changes. */
1682 while (changed > 0)
1683 {
1684 changed = 0;
1685 FOR_EACH_BB_REVERSE (bb)
1686 changed += make_equivalent_phi_alternatives_equivalent (bb->index, p);
1687 }
1688
1689 return p;
1690 }
1691
1692 /* The following functions compute a register partition that attempts
1693 to eliminate as many reg copies and phi node copies as possible by
1694 coalescing registers. This is the strategy:
1695
1696 1. As in the conservative case, the top priority is to coalesce
1697 registers that otherwise would cause copies to be placed on
1698 abnormal critical edges (which isn't possible).
1699
1700 2. Figure out which regs are involved (in the LHS or RHS) of
1701 copies and phi nodes. Compute conflicts among these regs.
1702
1703 3. Walk around the instruction stream, placing two regs in the
1704 same class of the partition if one appears on the LHS and the
1705 other on the RHS of a copy or phi node and the two regs don't
1706 conflict. The conflict information of course needs to be
1707 updated.
1708
1709 4. If anything has changed, there may be new opportunities to
1710 coalesce regs, so go back to 2.
1711 */
1712
1713 /* If REG1 and REG2 don't conflict in CONFLICTS, place them in the
1714 same class of partition P, if they aren't already. Update
1715 CONFLICTS appropriately.
1716
1717 Returns one if REG1 and REG2 were placed in the same class but were
1718 not previously; zero otherwise.
1719
1720 See Morgan figure 11.15. */
1721
1722 static int
1723 coalesce_if_unconflicting (p, conflicts, reg1, reg2)
1724 partition p;
1725 conflict_graph conflicts;
1726 int reg1;
1727 int reg2;
1728 {
1729 int reg;
1730
1731 /* Work only on SSA registers. */
1732 if (!CONVERT_REGISTER_TO_SSA_P (reg1) || !CONVERT_REGISTER_TO_SSA_P (reg2))
1733 return 0;
1734
1735 /* Find the canonical regs for the classes containing REG1 and
1736 REG2. */
1737 reg1 = partition_find (p, reg1);
1738 reg2 = partition_find (p, reg2);
1739
1740 /* If they're already in the same class, there's nothing to do. */
1741 if (reg1 == reg2)
1742 return 0;
1743
1744 /* If the regs conflict, our hands are tied. */
1745 if (conflicting_hard_regs_p (reg1, reg2) ||
1746 conflict_graph_conflict_p (conflicts, reg1, reg2))
1747 return 0;
1748
1749 /* We're good to go. Put the regs in the same partition. */
1750 partition_union (p, reg1, reg2);
1751
1752 /* Find the new canonical reg for the merged class. */
1753 reg = partition_find (p, reg1);
1754
1755 /* Merge conflicts from the two previous classes. */
1756 conflict_graph_merge_regs (conflicts, reg, reg1);
1757 conflict_graph_merge_regs (conflicts, reg, reg2);
1758
1759 return 1;
1760 }
1761
1762 /* For each register copy insn in basic block BB, place the LHS and
1763 RHS regs in the same class in partition P if they do not conflict
1764 according to CONFLICTS.
1765
1766 Returns the number of changes that were made to P.
1767
1768 See Morgan figure 11.14. */
1769
1770 static int
1771 coalesce_regs_in_copies (bb, p, conflicts)
1772 basic_block bb;
1773 partition p;
1774 conflict_graph conflicts;
1775 {
1776 int changed = 0;
1777 rtx insn;
1778 rtx end = bb->end;
1779
1780 /* Scan the instruction stream of the block. */
1781 for (insn = bb->head; insn != end; insn = NEXT_INSN (insn))
1782 {
1783 rtx pattern;
1784 rtx src;
1785 rtx dest;
1786
1787 /* If this isn't a set insn, go to the next insn. */
1788 if (GET_CODE (insn) != INSN)
1789 continue;
1790 pattern = PATTERN (insn);
1791 if (GET_CODE (pattern) != SET)
1792 continue;
1793
1794 src = SET_SRC (pattern);
1795 dest = SET_DEST (pattern);
1796
1797 /* We're only looking for copies. */
1798 if (GET_CODE (src) != REG || GET_CODE (dest) != REG)
1799 continue;
1800
1801 /* Coalesce only if the reg modes are the same. As long as
1802 each reg's rtx is unique, it can have only one mode, so two
1803 pseudos of different modes can't be coalesced into one.
1804
1805 FIXME: We can probably get around this by inserting SUBREGs
1806 where appropriate, but for now we don't bother. */
1807 if (GET_MODE (src) != GET_MODE (dest))
1808 continue;
1809
1810 /* Found a copy; see if we can use the same reg for both the
1811 source and destination (and thus eliminate the copy,
1812 ultimately). */
1813 changed += coalesce_if_unconflicting (p, conflicts,
1814 REGNO (src), REGNO (dest));
1815 }
1816
1817 return changed;
1818 }
1819
1820 struct phi_coalesce_context
1821 {
1822 partition p;
1823 conflict_graph conflicts;
1824 int changed;
1825 };
1826
1827 /* Callback function for for_each_successor_phi. If the set
1828 destination and the phi alternative regs do not conflict, place
1829 them in the same paritition class. DATA is a pointer to a
1830 phi_coalesce_context struct. */
1831
1832 static int
1833 coalesce_reg_in_phi (insn, dest_regno, src_regno, data)
1834 rtx insn ATTRIBUTE_UNUSED;
1835 int dest_regno;
1836 int src_regno;
1837 void *data;
1838 {
1839 struct phi_coalesce_context *context =
1840 (struct phi_coalesce_context *) data;
1841
1842 /* Attempt to use the same reg, if they don't conflict. */
1843 context->changed
1844 += coalesce_if_unconflicting (context->p, context->conflicts,
1845 dest_regno, src_regno);
1846 return 0;
1847 }
1848
1849 /* For each alternative in a phi function corresponding to basic block
1850 BB (in phi nodes in successor block to BB), place the reg in the
1851 phi alternative and the reg to which the phi value is set into the
1852 same class in partition P, if allowed by CONFLICTS.
1853
1854 Return the number of changes that were made to P.
1855
1856 See Morgan figure 11.14. */
1857
1858 static int
1859 coalesce_regs_in_successor_phi_nodes (bb, p, conflicts)
1860 basic_block bb;
1861 partition p;
1862 conflict_graph conflicts;
1863 {
1864 struct phi_coalesce_context context;
1865 context.p = p;
1866 context.conflicts = conflicts;
1867 context.changed = 0;
1868
1869 for_each_successor_phi (bb, &coalesce_reg_in_phi, &context);
1870
1871 return context.changed;
1872 }
1873
1874 /* Compute and return a partition of pseudos. Where possible,
1875 non-conflicting pseudos are placed in the same class.
1876
1877 The caller is responsible for deallocating the returned partition. */
1878
1879 static partition
1880 compute_coalesced_reg_partition ()
1881 {
1882 basic_block bb;
1883 int changed = 0;
1884 regset_head phi_set_head;
1885 regset phi_set = &phi_set_head;
1886
1887 partition p =
1888 partition_new (ssa_definition->num_elements);
1889
1890 /* The first priority is to make sure registers that might have to
1891 be copied on abnormal critical edges are placed in the same
1892 partition. This saves us from having to split abnormal critical
1893 edges (which can't be done). */
1894 FOR_EACH_BB_REVERSE (bb)
1895 make_regs_equivalent_over_bad_edges (bb->index, p);
1896
1897 INIT_REG_SET (phi_set);
1898
1899 do
1900 {
1901 conflict_graph conflicts;
1902
1903 changed = 0;
1904
1905 /* Build the set of registers involved in phi nodes, either as
1906 arguments to the phi function or as the target of a set. */
1907 CLEAR_REG_SET (phi_set);
1908 mark_phi_and_copy_regs (phi_set);
1909
1910 /* Compute conflicts. */
1911 conflicts = conflict_graph_compute (phi_set, p);
1912
1913 /* FIXME: Better would be to process most frequently executed
1914 blocks first, so that most frequently executed copies would
1915 be more likely to be removed by register coalescing. But any
1916 order will generate correct, if non-optimal, results. */
1917 FOR_EACH_BB_REVERSE (bb)
1918 {
1919 changed += coalesce_regs_in_copies (bb, p, conflicts);
1920 changed +=
1921 coalesce_regs_in_successor_phi_nodes (bb, p, conflicts);
1922 }
1923
1924 conflict_graph_delete (conflicts);
1925 }
1926 while (changed > 0);
1927
1928 FREE_REG_SET (phi_set);
1929
1930 return p;
1931 }
1932
1933 /* Mark the regs in a phi node. PTR is a phi expression or one of its
1934 components (a REG or a CONST_INT). DATA is a reg set in which to
1935 set all regs. Called from for_each_rtx. */
1936
1937 static int
1938 mark_reg_in_phi (ptr, data)
1939 rtx *ptr;
1940 void *data;
1941 {
1942 rtx expr = *ptr;
1943 regset set = (regset) data;
1944
1945 switch (GET_CODE (expr))
1946 {
1947 case REG:
1948 SET_REGNO_REG_SET (set, REGNO (expr));
1949 /* Fall through. */
1950 case CONST_INT:
1951 case PHI:
1952 return 0;
1953 default:
1954 abort ();
1955 }
1956 }
1957
1958 /* Mark in PHI_SET all pseudos that are used in a phi node -- either
1959 set from a phi expression, or used as an argument in one. Also
1960 mark regs that are the source or target of a reg copy. Uses
1961 ssa_definition. */
1962
1963 static void
1964 mark_phi_and_copy_regs (phi_set)
1965 regset phi_set;
1966 {
1967 unsigned int reg;
1968
1969 /* Scan the definitions of all regs. */
1970 for (reg = 0; reg < VARRAY_SIZE (ssa_definition); ++reg)
1971 if (CONVERT_REGISTER_TO_SSA_P (reg))
1972 {
1973 rtx insn = VARRAY_RTX (ssa_definition, reg);
1974 rtx pattern;
1975 rtx src;
1976
1977 if (insn == NULL
1978 || (GET_CODE (insn) == NOTE
1979 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED))
1980 continue;
1981 pattern = PATTERN (insn);
1982 /* Sometimes we get PARALLEL insns. These aren't phi nodes or
1983 copies. */
1984 if (GET_CODE (pattern) != SET)
1985 continue;
1986 src = SET_SRC (pattern);
1987
1988 if (GET_CODE (src) == REG)
1989 {
1990 /* It's a reg copy. */
1991 SET_REGNO_REG_SET (phi_set, reg);
1992 SET_REGNO_REG_SET (phi_set, REGNO (src));
1993 }
1994 else if (GET_CODE (src) == PHI)
1995 {
1996 /* It's a phi node. Mark the reg being set. */
1997 SET_REGNO_REG_SET (phi_set, reg);
1998 /* Mark the regs used in the phi function. */
1999 for_each_rtx (&src, mark_reg_in_phi, phi_set);
2000 }
2001 /* ... else nothing to do. */
2002 }
2003 }
2004
2005 /* Rename regs in insn PTR that are equivalent. DATA is the register
2006 partition which specifies equivalences. */
2007
2008 static int
2009 rename_equivalent_regs_in_insn (ptr, data)
2010 rtx *ptr;
2011 void* data;
2012 {
2013 rtx x = *ptr;
2014 partition reg_partition = (partition) data;
2015
2016 if (x == NULL_RTX)
2017 return 0;
2018
2019 switch (GET_CODE (x))
2020 {
2021 case REG:
2022 if (CONVERT_REGISTER_TO_SSA_P (REGNO (x)))
2023 {
2024 unsigned int regno = REGNO (x);
2025 unsigned int new_regno = partition_find (reg_partition, regno);
2026 rtx canonical_element_rtx = ssa_rename_from_lookup (new_regno);
2027
2028 if (canonical_element_rtx != NULL_RTX &&
2029 HARD_REGISTER_P (canonical_element_rtx))
2030 {
2031 if (REGNO (canonical_element_rtx) != regno)
2032 *ptr = canonical_element_rtx;
2033 }
2034 else if (regno != new_regno)
2035 {
2036 rtx new_reg = regno_reg_rtx[new_regno];
2037 if (GET_MODE (x) != GET_MODE (new_reg))
2038 abort ();
2039 *ptr = new_reg;
2040 }
2041 }
2042 return -1;
2043
2044 case PHI:
2045 /* No need to rename the phi nodes. We'll check equivalence
2046 when inserting copies. */
2047 return -1;
2048
2049 default:
2050 /* Anything else, continue traversing. */
2051 return 0;
2052 }
2053 }
2054
2055 /* Record the register's canonical element stored in SRFP in the
2056 canonical_elements sbitmap packaged in DATA. This function is used
2057 as a callback function for traversing ssa_rename_from. */
2058
2059 static int
2060 record_canonical_element_1 (srfp, data)
2061 void **srfp;
2062 void *data;
2063 {
2064 unsigned int reg = ((ssa_rename_from_pair *) *srfp)->reg;
2065 sbitmap canonical_elements =
2066 ((struct ssa_rename_from_hash_table_data *) data)->canonical_elements;
2067 partition reg_partition =
2068 ((struct ssa_rename_from_hash_table_data *) data)->reg_partition;
2069
2070 SET_BIT (canonical_elements, partition_find (reg_partition, reg));
2071 return 1;
2072 }
2073
2074 /* For each class in the REG_PARTITION corresponding to a particular
2075 hard register and machine mode, check that there are no other
2076 classes with the same hard register and machine mode. Returns
2077 nonzero if this is the case, i.e., the partition is acceptable. */
2078
2079 static int
2080 check_hard_regs_in_partition (reg_partition)
2081 partition reg_partition;
2082 {
2083 /* CANONICAL_ELEMENTS has a nonzero bit if a class with the given register
2084 number and machine mode has already been seen. This is a
2085 problem with the partition. */
2086 sbitmap canonical_elements;
2087 int element_index;
2088 int already_seen[FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES];
2089 int reg;
2090 int mach_mode;
2091
2092 /* Collect a list of canonical elements. */
2093 canonical_elements = sbitmap_alloc (max_reg_num ());
2094 sbitmap_zero (canonical_elements);
2095 ssa_rename_from_traverse (&record_canonical_element_1,
2096 canonical_elements, reg_partition);
2097
2098 /* We have not seen any hard register uses. */
2099 for (reg = 0; reg < FIRST_PSEUDO_REGISTER; ++reg)
2100 for (mach_mode = 0; mach_mode < NUM_MACHINE_MODES; ++mach_mode)
2101 already_seen[reg][mach_mode] = 0;
2102
2103 /* Check for classes with the same hard register and machine mode. */
2104 EXECUTE_IF_SET_IN_SBITMAP (canonical_elements, 0, element_index,
2105 {
2106 rtx hard_reg_rtx = ssa_rename_from_lookup (element_index);
2107 if (hard_reg_rtx != NULL_RTX &&
2108 HARD_REGISTER_P (hard_reg_rtx) &&
2109 already_seen[REGNO (hard_reg_rtx)][GET_MODE (hard_reg_rtx)] != 0)
2110 /* Two distinct partition classes should be mapped to the same
2111 hard register. */
2112 return 0;
2113 });
2114
2115 sbitmap_free (canonical_elements);
2116
2117 return 1;
2118 }
2119
2120 /* Rename regs that are equivalent in REG_PARTITION. Also collapse
2121 any SEQUENCE insns. */
2122
2123 static void
2124 rename_equivalent_regs (reg_partition)
2125 partition reg_partition;
2126 {
2127 basic_block b;
2128
2129 FOR_EACH_BB_REVERSE (b)
2130 {
2131 rtx next = b->head;
2132 rtx last = b->end;
2133 rtx insn;
2134
2135 do
2136 {
2137 insn = next;
2138 if (INSN_P (insn))
2139 {
2140 for_each_rtx (&PATTERN (insn),
2141 rename_equivalent_regs_in_insn,
2142 reg_partition);
2143 for_each_rtx (&REG_NOTES (insn),
2144 rename_equivalent_regs_in_insn,
2145 reg_partition);
2146
2147 if (GET_CODE (PATTERN (insn)) == SEQUENCE)
2148 {
2149 rtx s = PATTERN (insn);
2150 int slen = XVECLEN (s, 0);
2151 int i;
2152
2153 if (slen <= 1)
2154 abort ();
2155
2156 PATTERN (insn) = XVECEXP (s, 0, slen-1);
2157 for (i = 0; i < slen - 1; i++)
2158 emit_insn_before (XVECEXP (s, 0, i), insn);
2159 }
2160 }
2161
2162 next = NEXT_INSN (insn);
2163 }
2164 while (insn != last);
2165 }
2166 }
2167
2168 /* The main entry point for moving from SSA. */
2169
2170 void
2171 convert_from_ssa ()
2172 {
2173 basic_block b, bb;
2174 partition reg_partition;
2175 rtx insns = get_insns ();
2176
2177 /* Need global_live_at_{start,end} up to date. There should not be
2178 any significant dead code at this point, except perhaps dead
2179 stores. So do not take the time to perform dead code elimination.
2180
2181 Register coalescing needs death notes, so generate them. */
2182 life_analysis (insns, NULL, PROP_DEATH_NOTES);
2183
2184 /* Figure out which regs in copies and phi nodes don't conflict and
2185 therefore can be coalesced. */
2186 if (conservative_reg_partition)
2187 reg_partition = compute_conservative_reg_partition ();
2188 else
2189 reg_partition = compute_coalesced_reg_partition ();
2190
2191 if (!check_hard_regs_in_partition (reg_partition))
2192 /* Two separate partitions should correspond to the same hard
2193 register but do not. */
2194 abort ();
2195
2196 rename_equivalent_regs (reg_partition);
2197
2198 /* Eliminate the PHI nodes. */
2199 FOR_EACH_BB_REVERSE (b)
2200 {
2201 edge e;
2202
2203 for (e = b->pred; e; e = e->pred_next)
2204 if (e->src != ENTRY_BLOCK_PTR)
2205 eliminate_phi (e, reg_partition);
2206 }
2207
2208 partition_delete (reg_partition);
2209
2210 /* Actually delete the PHI nodes. */
2211 FOR_EACH_BB_REVERSE (bb)
2212 {
2213 rtx insn = bb->head;
2214
2215 while (1)
2216 {
2217 /* If this is a PHI node delete it. */
2218 if (PHI_NODE_P (insn))
2219 {
2220 if (insn == bb->end)
2221 bb->end = PREV_INSN (insn);
2222 insn = delete_insn (insn);
2223 }
2224 /* Since all the phi nodes come at the beginning of the
2225 block, if we find an ordinary insn, we can stop looking
2226 for more phi nodes. */
2227 else if (INSN_P (insn))
2228 break;
2229 /* If we've reached the end of the block, stop. */
2230 else if (insn == bb->end)
2231 break;
2232 else
2233 insn = NEXT_INSN (insn);
2234 }
2235 }
2236
2237 /* Commit all the copy nodes needed to convert out of SSA form. */
2238 commit_edge_insertions ();
2239
2240 in_ssa_form = 0;
2241
2242 count_or_remove_death_notes (NULL, 1);
2243
2244 /* Deallocate the data structures. */
2245 ssa_definition = 0;
2246 ssa_rename_from_free ();
2247 }
2248
2249 /* Scan phi nodes in successors to BB. For each such phi node that
2250 has a phi alternative value corresponding to BB, invoke FN. FN
2251 is passed the entire phi node insn, the regno of the set
2252 destination, the regno of the phi argument corresponding to BB,
2253 and DATA.
2254
2255 If FN ever returns nonzero, stops immediately and returns this
2256 value. Otherwise, returns zero. */
2257
2258 int
2259 for_each_successor_phi (bb, fn, data)
2260 basic_block bb;
2261 successor_phi_fn fn;
2262 void *data;
2263 {
2264 edge e;
2265
2266 if (bb == EXIT_BLOCK_PTR)
2267 return 0;
2268
2269 /* Scan outgoing edges. */
2270 for (e = bb->succ; e != NULL; e = e->succ_next)
2271 {
2272 rtx insn;
2273
2274 basic_block successor = e->dest;
2275 if (successor == ENTRY_BLOCK_PTR
2276 || successor == EXIT_BLOCK_PTR)
2277 continue;
2278
2279 /* Advance to the first non-label insn of the successor block. */
2280 insn = first_insn_after_basic_block_note (successor);
2281
2282 if (insn == NULL)
2283 continue;
2284
2285 /* Scan phi nodes in the successor. */
2286 for ( ; PHI_NODE_P (insn); insn = NEXT_INSN (insn))
2287 {
2288 int result;
2289 rtx phi_set = PATTERN (insn);
2290 rtx *alternative = phi_alternative (phi_set, bb->index);
2291 rtx phi_src;
2292
2293 /* This phi function may not have an alternative
2294 corresponding to the incoming edge, indicating the
2295 assigned variable is not defined along the edge. */
2296 if (alternative == NULL)
2297 continue;
2298 phi_src = *alternative;
2299
2300 /* Invoke the callback. */
2301 result = (*fn) (insn, REGNO (SET_DEST (phi_set)),
2302 REGNO (phi_src), data);
2303
2304 /* Terminate if requested. */
2305 if (result != 0)
2306 return result;
2307 }
2308 }
2309
2310 return 0;
2311 }
2312
2313 /* Assuming the ssa_rename_from mapping has been established, yields
2314 nonzero if 1) only one SSA register of REG1 and REG2 comes from a
2315 hard register or 2) both SSA registers REG1 and REG2 come from
2316 different hard registers. */
2317
2318 static int
2319 conflicting_hard_regs_p (reg1, reg2)
2320 int reg1;
2321 int reg2;
2322 {
2323 int orig_reg1 = original_register (reg1);
2324 int orig_reg2 = original_register (reg2);
2325 if (HARD_REGISTER_NUM_P (orig_reg1) && HARD_REGISTER_NUM_P (orig_reg2)
2326 && orig_reg1 != orig_reg2)
2327 return 1;
2328 if (HARD_REGISTER_NUM_P (orig_reg1) && !HARD_REGISTER_NUM_P (orig_reg2))
2329 return 1;
2330 if (!HARD_REGISTER_NUM_P (orig_reg1) && HARD_REGISTER_NUM_P (orig_reg2))
2331 return 1;
2332
2333 return 0;
2334 }