re PR target/69894 (dependency of gcc-plugin.h not installed on aarch64-linux-gnu)
[gcc.git] / gcc / tree-ssa-coalesce.c
1 /* Coalesce SSA_NAMES together for the out-of-ssa pass.
2 Copyright (C) 2004-2016 Free Software Foundation, Inc.
3 Contributed by Andrew MacLeod <amacleod@redhat.com>
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "backend.h"
25 #include "tree.h"
26 #include "gimple.h"
27 #include "predict.h"
28 #include "tm_p.h"
29 #include "ssa.h"
30 #include "tree-pretty-print.h"
31 #include "diagnostic-core.h"
32 #include "dumpfile.h"
33 #include "gimple-iterator.h"
34 #include "tree-ssa-live.h"
35 #include "tree-ssa-coalesce.h"
36 #include "explow.h"
37 #include "tree-dfa.h"
38 #include "stor-layout.h"
39
40 /* This set of routines implements a coalesce_list. This is an object which
41 is used to track pairs of ssa_names which are desirable to coalesce
42 together to avoid copies. Costs are associated with each pair, and when
43 all desired information has been collected, the object can be used to
44 order the pairs for processing. */
45
46 /* This structure defines a pair entry. */
47
48 struct coalesce_pair
49 {
50 int first_element;
51 int second_element;
52 int cost;
53 };
54
55 /* Coalesce pair hashtable helpers. */
56
57 struct coalesce_pair_hasher : nofree_ptr_hash <coalesce_pair>
58 {
59 static inline hashval_t hash (const coalesce_pair *);
60 static inline bool equal (const coalesce_pair *, const coalesce_pair *);
61 };
62
63 /* Hash function for coalesce list. Calculate hash for PAIR. */
64
65 inline hashval_t
66 coalesce_pair_hasher::hash (const coalesce_pair *pair)
67 {
68 hashval_t a = (hashval_t)(pair->first_element);
69 hashval_t b = (hashval_t)(pair->second_element);
70
71 return b * (b - 1) / 2 + a;
72 }
73
74 /* Equality function for coalesce list hash table. Compare PAIR1 and PAIR2,
75 returning TRUE if the two pairs are equivalent. */
76
77 inline bool
78 coalesce_pair_hasher::equal (const coalesce_pair *p1, const coalesce_pair *p2)
79 {
80 return (p1->first_element == p2->first_element
81 && p1->second_element == p2->second_element);
82 }
83
84 typedef hash_table<coalesce_pair_hasher> coalesce_table_type;
85 typedef coalesce_table_type::iterator coalesce_iterator_type;
86
87
88 struct cost_one_pair
89 {
90 int first_element;
91 int second_element;
92 cost_one_pair *next;
93 };
94
95 /* This structure maintains the list of coalesce pairs. */
96
97 struct coalesce_list
98 {
99 coalesce_table_type *list; /* Hash table. */
100 coalesce_pair **sorted; /* List when sorted. */
101 int num_sorted; /* Number in the sorted list. */
102 cost_one_pair *cost_one_list;/* Single use coalesces with cost 1. */
103 };
104
105 #define NO_BEST_COALESCE -1
106 #define MUST_COALESCE_COST INT_MAX
107
108
109 /* Return cost of execution of copy instruction with FREQUENCY. */
110
111 static inline int
112 coalesce_cost (int frequency, bool optimize_for_size)
113 {
114 /* Base costs on BB frequencies bounded by 1. */
115 int cost = frequency;
116
117 if (!cost)
118 cost = 1;
119
120 if (optimize_for_size)
121 cost = 1;
122
123 return cost;
124 }
125
126
127 /* Return the cost of executing a copy instruction in basic block BB. */
128
129 static inline int
130 coalesce_cost_bb (basic_block bb)
131 {
132 return coalesce_cost (bb->frequency, optimize_bb_for_size_p (bb));
133 }
134
135
136 /* Return the cost of executing a copy instruction on edge E. */
137
138 static inline int
139 coalesce_cost_edge (edge e)
140 {
141 int mult = 1;
142
143 /* Inserting copy on critical edge costs more than inserting it elsewhere. */
144 if (EDGE_CRITICAL_P (e))
145 mult = 2;
146 if (e->flags & EDGE_ABNORMAL)
147 return MUST_COALESCE_COST;
148 if (e->flags & EDGE_EH)
149 {
150 edge e2;
151 edge_iterator ei;
152 FOR_EACH_EDGE (e2, ei, e->dest->preds)
153 if (e2 != e)
154 {
155 /* Putting code on EH edge that leads to BB
156 with multiple predecestors imply splitting of
157 edge too. */
158 if (mult < 2)
159 mult = 2;
160 /* If there are multiple EH predecestors, we
161 also copy EH regions and produce separate
162 landing pad. This is expensive. */
163 if (e2->flags & EDGE_EH)
164 {
165 mult = 5;
166 break;
167 }
168 }
169 }
170
171 return coalesce_cost (EDGE_FREQUENCY (e),
172 optimize_edge_for_size_p (e)) * mult;
173 }
174
175
176 /* Retrieve a pair to coalesce from the cost_one_list in CL. Returns the
177 2 elements via P1 and P2. 1 is returned by the function if there is a pair,
178 NO_BEST_COALESCE is returned if there aren't any. */
179
180 static inline int
181 pop_cost_one_pair (coalesce_list *cl, int *p1, int *p2)
182 {
183 cost_one_pair *ptr;
184
185 ptr = cl->cost_one_list;
186 if (!ptr)
187 return NO_BEST_COALESCE;
188
189 *p1 = ptr->first_element;
190 *p2 = ptr->second_element;
191 cl->cost_one_list = ptr->next;
192
193 free (ptr);
194
195 return 1;
196 }
197
198 /* Retrieve the most expensive remaining pair to coalesce from CL. Returns the
199 2 elements via P1 and P2. Their calculated cost is returned by the function.
200 NO_BEST_COALESCE is returned if the coalesce list is empty. */
201
202 static inline int
203 pop_best_coalesce (coalesce_list *cl, int *p1, int *p2)
204 {
205 coalesce_pair *node;
206 int ret;
207
208 if (cl->sorted == NULL)
209 return pop_cost_one_pair (cl, p1, p2);
210
211 if (cl->num_sorted == 0)
212 return pop_cost_one_pair (cl, p1, p2);
213
214 node = cl->sorted[--(cl->num_sorted)];
215 *p1 = node->first_element;
216 *p2 = node->second_element;
217 ret = node->cost;
218 free (node);
219
220 return ret;
221 }
222
223
224 /* Create a new empty coalesce list object and return it. */
225
226 static inline coalesce_list *
227 create_coalesce_list (void)
228 {
229 coalesce_list *list;
230 unsigned size = num_ssa_names * 3;
231
232 if (size < 40)
233 size = 40;
234
235 list = (coalesce_list *) xmalloc (sizeof (struct coalesce_list));
236 list->list = new coalesce_table_type (size);
237 list->sorted = NULL;
238 list->num_sorted = 0;
239 list->cost_one_list = NULL;
240 return list;
241 }
242
243
244 /* Delete coalesce list CL. */
245
246 static inline void
247 delete_coalesce_list (coalesce_list *cl)
248 {
249 gcc_assert (cl->cost_one_list == NULL);
250 delete cl->list;
251 cl->list = NULL;
252 free (cl->sorted);
253 gcc_assert (cl->num_sorted == 0);
254 free (cl);
255 }
256
257
258 /* Find a matching coalesce pair object in CL for the pair P1 and P2. If
259 one isn't found, return NULL if CREATE is false, otherwise create a new
260 coalesce pair object and return it. */
261
262 static coalesce_pair *
263 find_coalesce_pair (coalesce_list *cl, int p1, int p2, bool create)
264 {
265 struct coalesce_pair p;
266 coalesce_pair **slot;
267 unsigned int hash;
268
269 /* Normalize so that p1 is the smaller value. */
270 if (p2 < p1)
271 {
272 p.first_element = p2;
273 p.second_element = p1;
274 }
275 else
276 {
277 p.first_element = p1;
278 p.second_element = p2;
279 }
280
281 hash = coalesce_pair_hasher::hash (&p);
282 slot = cl->list->find_slot_with_hash (&p, hash, create ? INSERT : NO_INSERT);
283 if (!slot)
284 return NULL;
285
286 if (!*slot)
287 {
288 struct coalesce_pair * pair = XNEW (struct coalesce_pair);
289 gcc_assert (cl->sorted == NULL);
290 pair->first_element = p.first_element;
291 pair->second_element = p.second_element;
292 pair->cost = 0;
293 *slot = pair;
294 }
295
296 return (struct coalesce_pair *) *slot;
297 }
298
299 static inline void
300 add_cost_one_coalesce (coalesce_list *cl, int p1, int p2)
301 {
302 cost_one_pair *pair;
303
304 pair = XNEW (cost_one_pair);
305 pair->first_element = p1;
306 pair->second_element = p2;
307 pair->next = cl->cost_one_list;
308 cl->cost_one_list = pair;
309 }
310
311
312 /* Add a coalesce between P1 and P2 in list CL with a cost of VALUE. */
313
314 static inline void
315 add_coalesce (coalesce_list *cl, int p1, int p2, int value)
316 {
317 coalesce_pair *node;
318
319 gcc_assert (cl->sorted == NULL);
320 if (p1 == p2)
321 return;
322
323 node = find_coalesce_pair (cl, p1, p2, true);
324
325 /* Once the value is at least MUST_COALESCE_COST - 1, leave it that way. */
326 if (node->cost < MUST_COALESCE_COST - 1)
327 {
328 if (value < MUST_COALESCE_COST - 1)
329 node->cost += value;
330 else
331 node->cost = value;
332 }
333 }
334
335
336 /* Comparison function to allow qsort to sort P1 and P2 in Ascending order. */
337
338 static int
339 compare_pairs (const void *p1, const void *p2)
340 {
341 const coalesce_pair *const *const pp1 = (const coalesce_pair *const *) p1;
342 const coalesce_pair *const *const pp2 = (const coalesce_pair *const *) p2;
343 int result;
344
345 result = (* pp1)->cost - (* pp2)->cost;
346 /* Since qsort does not guarantee stability we use the elements
347 as a secondary key. This provides us with independence from
348 the host's implementation of the sorting algorithm. */
349 if (result == 0)
350 {
351 result = (* pp2)->first_element - (* pp1)->first_element;
352 if (result == 0)
353 result = (* pp2)->second_element - (* pp1)->second_element;
354 }
355
356 return result;
357 }
358
359
360 /* Return the number of unique coalesce pairs in CL. */
361
362 static inline int
363 num_coalesce_pairs (coalesce_list *cl)
364 {
365 return cl->list->elements ();
366 }
367
368
369 /* Iterate over CL using ITER, returning values in PAIR. */
370
371 #define FOR_EACH_PARTITION_PAIR(PAIR, ITER, CL) \
372 FOR_EACH_HASH_TABLE_ELEMENT (*(CL)->list, (PAIR), coalesce_pair_p, (ITER))
373
374
375 /* Prepare CL for removal of preferred pairs. When finished they are sorted
376 in order from most important coalesce to least important. */
377
378 static void
379 sort_coalesce_list (coalesce_list *cl)
380 {
381 unsigned x, num;
382 coalesce_pair *p;
383 coalesce_iterator_type ppi;
384
385 gcc_assert (cl->sorted == NULL);
386
387 num = num_coalesce_pairs (cl);
388 cl->num_sorted = num;
389 if (num == 0)
390 return;
391
392 /* Allocate a vector for the pair pointers. */
393 cl->sorted = XNEWVEC (coalesce_pair *, num);
394
395 /* Populate the vector with pointers to the pairs. */
396 x = 0;
397 FOR_EACH_PARTITION_PAIR (p, ppi, cl)
398 cl->sorted[x++] = p;
399 gcc_assert (x == num);
400
401 /* Already sorted. */
402 if (num == 1)
403 return;
404
405 /* If there are only 2, just pick swap them if the order isn't correct. */
406 if (num == 2)
407 {
408 if (cl->sorted[0]->cost > cl->sorted[1]->cost)
409 std::swap (cl->sorted[0], cl->sorted[1]);
410 return;
411 }
412
413 /* Only call qsort if there are more than 2 items.
414 ??? Maybe std::sort will do better, provided that compare_pairs
415 can be inlined. */
416 if (num > 2)
417 qsort (cl->sorted, num, sizeof (coalesce_pair *), compare_pairs);
418 }
419
420
421 /* Send debug info for coalesce list CL to file F. */
422
423 static void
424 dump_coalesce_list (FILE *f, coalesce_list *cl)
425 {
426 coalesce_pair *node;
427 coalesce_iterator_type ppi;
428
429 int x;
430 tree var;
431
432 if (cl->sorted == NULL)
433 {
434 fprintf (f, "Coalesce List:\n");
435 FOR_EACH_PARTITION_PAIR (node, ppi, cl)
436 {
437 tree var1 = ssa_name (node->first_element);
438 tree var2 = ssa_name (node->second_element);
439 print_generic_expr (f, var1, TDF_SLIM);
440 fprintf (f, " <-> ");
441 print_generic_expr (f, var2, TDF_SLIM);
442 fprintf (f, " (%1d), ", node->cost);
443 fprintf (f, "\n");
444 }
445 }
446 else
447 {
448 fprintf (f, "Sorted Coalesce list:\n");
449 for (x = cl->num_sorted - 1 ; x >=0; x--)
450 {
451 node = cl->sorted[x];
452 fprintf (f, "(%d) ", node->cost);
453 var = ssa_name (node->first_element);
454 print_generic_expr (f, var, TDF_SLIM);
455 fprintf (f, " <-> ");
456 var = ssa_name (node->second_element);
457 print_generic_expr (f, var, TDF_SLIM);
458 fprintf (f, "\n");
459 }
460 }
461 }
462
463
464 /* This represents a conflict graph. Implemented as an array of bitmaps.
465 A full matrix is used for conflicts rather than just upper triangular form.
466 this make sit much simpler and faster to perform conflict merges. */
467
468 struct ssa_conflicts
469 {
470 bitmap_obstack obstack; /* A place to allocate our bitmaps. */
471 vec<bitmap> conflicts;
472 };
473
474 /* Return an empty new conflict graph for SIZE elements. */
475
476 static inline ssa_conflicts *
477 ssa_conflicts_new (unsigned size)
478 {
479 ssa_conflicts *ptr;
480
481 ptr = XNEW (ssa_conflicts);
482 bitmap_obstack_initialize (&ptr->obstack);
483 ptr->conflicts.create (size);
484 ptr->conflicts.safe_grow_cleared (size);
485 return ptr;
486 }
487
488
489 /* Free storage for conflict graph PTR. */
490
491 static inline void
492 ssa_conflicts_delete (ssa_conflicts *ptr)
493 {
494 bitmap_obstack_release (&ptr->obstack);
495 ptr->conflicts.release ();
496 free (ptr);
497 }
498
499
500 /* Test if elements X and Y conflict in graph PTR. */
501
502 static inline bool
503 ssa_conflicts_test_p (ssa_conflicts *ptr, unsigned x, unsigned y)
504 {
505 bitmap bx = ptr->conflicts[x];
506 bitmap by = ptr->conflicts[y];
507
508 gcc_checking_assert (x != y);
509
510 if (bx)
511 /* Avoid the lookup if Y has no conflicts. */
512 return by ? bitmap_bit_p (bx, y) : false;
513 else
514 return false;
515 }
516
517
518 /* Add a conflict with Y to the bitmap for X in graph PTR. */
519
520 static inline void
521 ssa_conflicts_add_one (ssa_conflicts *ptr, unsigned x, unsigned y)
522 {
523 bitmap bx = ptr->conflicts[x];
524 /* If there are no conflicts yet, allocate the bitmap and set bit. */
525 if (! bx)
526 bx = ptr->conflicts[x] = BITMAP_ALLOC (&ptr->obstack);
527 bitmap_set_bit (bx, y);
528 }
529
530
531 /* Add conflicts between X and Y in graph PTR. */
532
533 static inline void
534 ssa_conflicts_add (ssa_conflicts *ptr, unsigned x, unsigned y)
535 {
536 gcc_checking_assert (x != y);
537 ssa_conflicts_add_one (ptr, x, y);
538 ssa_conflicts_add_one (ptr, y, x);
539 }
540
541
542 /* Merge all Y's conflict into X in graph PTR. */
543
544 static inline void
545 ssa_conflicts_merge (ssa_conflicts *ptr, unsigned x, unsigned y)
546 {
547 unsigned z;
548 bitmap_iterator bi;
549 bitmap bx = ptr->conflicts[x];
550 bitmap by = ptr->conflicts[y];
551
552 gcc_checking_assert (x != y);
553 if (! by)
554 return;
555
556 /* Add a conflict between X and every one Y has. If the bitmap doesn't
557 exist, then it has already been coalesced, and we don't need to add a
558 conflict. */
559 EXECUTE_IF_SET_IN_BITMAP (by, 0, z, bi)
560 {
561 bitmap bz = ptr->conflicts[z];
562 if (bz)
563 bitmap_set_bit (bz, x);
564 }
565
566 if (bx)
567 {
568 /* If X has conflicts, add Y's to X. */
569 bitmap_ior_into (bx, by);
570 BITMAP_FREE (by);
571 ptr->conflicts[y] = NULL;
572 }
573 else
574 {
575 /* If X has no conflicts, simply use Y's. */
576 ptr->conflicts[x] = by;
577 ptr->conflicts[y] = NULL;
578 }
579 }
580
581
582 /* Dump a conflicts graph. */
583
584 static void
585 ssa_conflicts_dump (FILE *file, ssa_conflicts *ptr)
586 {
587 unsigned x;
588 bitmap b;
589
590 fprintf (file, "\nConflict graph:\n");
591
592 FOR_EACH_VEC_ELT (ptr->conflicts, x, b)
593 if (b)
594 {
595 fprintf (file, "%d: ", x);
596 dump_bitmap (file, b);
597 }
598 }
599
600
601 /* This structure is used to efficiently record the current status of live
602 SSA_NAMES when building a conflict graph.
603 LIVE_BASE_VAR has a bit set for each base variable which has at least one
604 ssa version live.
605 LIVE_BASE_PARTITIONS is an array of bitmaps using the basevar table as an
606 index, and is used to track what partitions of each base variable are
607 live. This makes it easy to add conflicts between just live partitions
608 with the same base variable.
609 The values in LIVE_BASE_PARTITIONS are only valid if the base variable is
610 marked as being live. This delays clearing of these bitmaps until
611 they are actually needed again. */
612
613 struct live_track
614 {
615 bitmap_obstack obstack; /* A place to allocate our bitmaps. */
616 bitmap live_base_var; /* Indicates if a basevar is live. */
617 bitmap *live_base_partitions; /* Live partitions for each basevar. */
618 var_map map; /* Var_map being used for partition mapping. */
619 };
620
621
622 /* This routine will create a new live track structure based on the partitions
623 in MAP. */
624
625 static live_track *
626 new_live_track (var_map map)
627 {
628 live_track *ptr;
629 int lim, x;
630
631 /* Make sure there is a partition view in place. */
632 gcc_assert (map->partition_to_base_index != NULL);
633
634 ptr = (live_track *) xmalloc (sizeof (live_track));
635 ptr->map = map;
636 lim = num_basevars (map);
637 bitmap_obstack_initialize (&ptr->obstack);
638 ptr->live_base_partitions = (bitmap *) xmalloc (sizeof (bitmap *) * lim);
639 ptr->live_base_var = BITMAP_ALLOC (&ptr->obstack);
640 for (x = 0; x < lim; x++)
641 ptr->live_base_partitions[x] = BITMAP_ALLOC (&ptr->obstack);
642 return ptr;
643 }
644
645
646 /* This routine will free the memory associated with PTR. */
647
648 static void
649 delete_live_track (live_track *ptr)
650 {
651 bitmap_obstack_release (&ptr->obstack);
652 free (ptr->live_base_partitions);
653 free (ptr);
654 }
655
656
657 /* This function will remove PARTITION from the live list in PTR. */
658
659 static inline void
660 live_track_remove_partition (live_track *ptr, int partition)
661 {
662 int root;
663
664 root = basevar_index (ptr->map, partition);
665 bitmap_clear_bit (ptr->live_base_partitions[root], partition);
666 /* If the element list is empty, make the base variable not live either. */
667 if (bitmap_empty_p (ptr->live_base_partitions[root]))
668 bitmap_clear_bit (ptr->live_base_var, root);
669 }
670
671
672 /* This function will adds PARTITION to the live list in PTR. */
673
674 static inline void
675 live_track_add_partition (live_track *ptr, int partition)
676 {
677 int root;
678
679 root = basevar_index (ptr->map, partition);
680 /* If this base var wasn't live before, it is now. Clear the element list
681 since it was delayed until needed. */
682 if (bitmap_set_bit (ptr->live_base_var, root))
683 bitmap_clear (ptr->live_base_partitions[root]);
684 bitmap_set_bit (ptr->live_base_partitions[root], partition);
685
686 }
687
688
689 /* Clear the live bit for VAR in PTR. */
690
691 static inline void
692 live_track_clear_var (live_track *ptr, tree var)
693 {
694 int p;
695
696 p = var_to_partition (ptr->map, var);
697 if (p != NO_PARTITION)
698 live_track_remove_partition (ptr, p);
699 }
700
701
702 /* Return TRUE if VAR is live in PTR. */
703
704 static inline bool
705 live_track_live_p (live_track *ptr, tree var)
706 {
707 int p, root;
708
709 p = var_to_partition (ptr->map, var);
710 if (p != NO_PARTITION)
711 {
712 root = basevar_index (ptr->map, p);
713 if (bitmap_bit_p (ptr->live_base_var, root))
714 return bitmap_bit_p (ptr->live_base_partitions[root], p);
715 }
716 return false;
717 }
718
719
720 /* This routine will add USE to PTR. USE will be marked as live in both the
721 ssa live map and the live bitmap for the root of USE. */
722
723 static inline void
724 live_track_process_use (live_track *ptr, tree use)
725 {
726 int p;
727
728 p = var_to_partition (ptr->map, use);
729 if (p == NO_PARTITION)
730 return;
731
732 /* Mark as live in the appropriate live list. */
733 live_track_add_partition (ptr, p);
734 }
735
736
737 /* This routine will process a DEF in PTR. DEF will be removed from the live
738 lists, and if there are any other live partitions with the same base
739 variable, conflicts will be added to GRAPH. */
740
741 static inline void
742 live_track_process_def (live_track *ptr, tree def, ssa_conflicts *graph)
743 {
744 int p, root;
745 bitmap b;
746 unsigned x;
747 bitmap_iterator bi;
748
749 p = var_to_partition (ptr->map, def);
750 if (p == NO_PARTITION)
751 return;
752
753 /* Clear the liveness bit. */
754 live_track_remove_partition (ptr, p);
755
756 /* If the bitmap isn't empty now, conflicts need to be added. */
757 root = basevar_index (ptr->map, p);
758 if (bitmap_bit_p (ptr->live_base_var, root))
759 {
760 b = ptr->live_base_partitions[root];
761 EXECUTE_IF_SET_IN_BITMAP (b, 0, x, bi)
762 ssa_conflicts_add (graph, p, x);
763 }
764 }
765
766
767 /* Initialize PTR with the partitions set in INIT. */
768
769 static inline void
770 live_track_init (live_track *ptr, bitmap init)
771 {
772 unsigned p;
773 bitmap_iterator bi;
774
775 /* Mark all live on exit partitions. */
776 EXECUTE_IF_SET_IN_BITMAP (init, 0, p, bi)
777 live_track_add_partition (ptr, p);
778 }
779
780
781 /* This routine will clear all live partitions in PTR. */
782
783 static inline void
784 live_track_clear_base_vars (live_track *ptr)
785 {
786 /* Simply clear the live base list. Anything marked as live in the element
787 lists will be cleared later if/when the base variable ever comes alive
788 again. */
789 bitmap_clear (ptr->live_base_var);
790 }
791
792
793 /* Build a conflict graph based on LIVEINFO. Any partitions which are in the
794 partition view of the var_map liveinfo is based on get entries in the
795 conflict graph. Only conflicts between ssa_name partitions with the same
796 base variable are added. */
797
798 static ssa_conflicts *
799 build_ssa_conflict_graph (tree_live_info_p liveinfo)
800 {
801 ssa_conflicts *graph;
802 var_map map;
803 basic_block bb;
804 ssa_op_iter iter;
805 live_track *live;
806 basic_block entry;
807
808 /* If inter-variable coalescing is enabled, we may attempt to
809 coalesce variables from different base variables, including
810 different parameters, so we have to make sure default defs live
811 at the entry block conflict with each other. */
812 if (flag_tree_coalesce_vars)
813 entry = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
814 else
815 entry = NULL;
816
817 map = live_var_map (liveinfo);
818 graph = ssa_conflicts_new (num_var_partitions (map));
819
820 live = new_live_track (map);
821
822 FOR_EACH_BB_FN (bb, cfun)
823 {
824 /* Start with live on exit temporaries. */
825 live_track_init (live, live_on_exit (liveinfo, bb));
826
827 for (gimple_stmt_iterator gsi = gsi_last_bb (bb); !gsi_end_p (gsi);
828 gsi_prev (&gsi))
829 {
830 tree var;
831 gimple *stmt = gsi_stmt (gsi);
832
833 /* A copy between 2 partitions does not introduce an interference
834 by itself. If they did, you would never be able to coalesce
835 two things which are copied. If the two variables really do
836 conflict, they will conflict elsewhere in the program.
837
838 This is handled by simply removing the SRC of the copy from the
839 live list, and processing the stmt normally. */
840 if (is_gimple_assign (stmt))
841 {
842 tree lhs = gimple_assign_lhs (stmt);
843 tree rhs1 = gimple_assign_rhs1 (stmt);
844 if (gimple_assign_copy_p (stmt)
845 && TREE_CODE (lhs) == SSA_NAME
846 && TREE_CODE (rhs1) == SSA_NAME)
847 live_track_clear_var (live, rhs1);
848 }
849 else if (is_gimple_debug (stmt))
850 continue;
851
852 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
853 live_track_process_def (live, var, graph);
854
855 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE)
856 live_track_process_use (live, var);
857 }
858
859 /* If result of a PHI is unused, looping over the statements will not
860 record any conflicts since the def was never live. Since the PHI node
861 is going to be translated out of SSA form, it will insert a copy.
862 There must be a conflict recorded between the result of the PHI and
863 any variables that are live. Otherwise the out-of-ssa translation
864 may create incorrect code. */
865 for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
866 gsi_next (&gsi))
867 {
868 gphi *phi = gsi.phi ();
869 tree result = PHI_RESULT (phi);
870 if (live_track_live_p (live, result))
871 live_track_process_def (live, result, graph);
872 }
873
874 /* Pretend there are defs for params' default defs at the start
875 of the (post-)entry block. This will prevent PARM_DECLs from
876 coalescing into the same partition. Although RESULT_DECLs'
877 default defs don't have a useful initial value, we have to
878 prevent them from coalescing with PARM_DECLs' default defs
879 too, otherwise assign_parms would attempt to assign different
880 RTL to the same partition. */
881 if (bb == entry)
882 {
883 unsigned i;
884 for (i = 1; i < num_ssa_names; i++)
885 {
886 tree var = ssa_name (i);
887
888 if (!var
889 || !SSA_NAME_IS_DEFAULT_DEF (var)
890 || !SSA_NAME_VAR (var)
891 || VAR_P (SSA_NAME_VAR (var)))
892 continue;
893
894 live_track_process_def (live, var, graph);
895 /* Process a use too, so that it remains live and
896 conflicts with other parms' default defs, even unused
897 ones. */
898 live_track_process_use (live, var);
899 }
900 }
901
902 live_track_clear_base_vars (live);
903 }
904
905 delete_live_track (live);
906 return graph;
907 }
908
909
910 /* Shortcut routine to print messages to file F of the form:
911 "STR1 EXPR1 STR2 EXPR2 STR3." */
912
913 static inline void
914 print_exprs (FILE *f, const char *str1, tree expr1, const char *str2,
915 tree expr2, const char *str3)
916 {
917 fprintf (f, "%s", str1);
918 print_generic_expr (f, expr1, TDF_SLIM);
919 fprintf (f, "%s", str2);
920 print_generic_expr (f, expr2, TDF_SLIM);
921 fprintf (f, "%s", str3);
922 }
923
924
925 /* Print a failure to coalesce a MUST_COALESCE pair X and Y. */
926
927 static inline void
928 fail_abnormal_edge_coalesce (int x, int y)
929 {
930 fprintf (stderr, "\nUnable to coalesce ssa_names %d and %d",x, y);
931 fprintf (stderr, " which are marked as MUST COALESCE.\n");
932 print_generic_expr (stderr, ssa_name (x), TDF_SLIM);
933 fprintf (stderr, " and ");
934 print_generic_stmt (stderr, ssa_name (y), TDF_SLIM);
935
936 internal_error ("SSA corruption");
937 }
938
939 /* Call CALLBACK for all PARM_DECLs and RESULT_DECLs for which
940 assign_parms may ask for a default partition. */
941
942 static void
943 for_all_parms (void (*callback)(tree var, void *arg), void *arg)
944 {
945 for (tree var = DECL_ARGUMENTS (current_function_decl); var;
946 var = DECL_CHAIN (var))
947 callback (var, arg);
948 if (!VOID_TYPE_P (TREE_TYPE (DECL_RESULT (current_function_decl))))
949 callback (DECL_RESULT (current_function_decl), arg);
950 if (cfun->static_chain_decl)
951 callback (cfun->static_chain_decl, arg);
952 }
953
954 /* Create a default def for VAR. */
955
956 static void
957 create_default_def (tree var, void *arg ATTRIBUTE_UNUSED)
958 {
959 if (!is_gimple_reg (var))
960 return;
961
962 tree ssa = get_or_create_ssa_default_def (cfun, var);
963 gcc_assert (ssa);
964 }
965
966 /* Register VAR's default def in MAP. */
967
968 static void
969 register_default_def (tree var, void *map_)
970 {
971 var_map map = (var_map)map_;
972
973 if (!is_gimple_reg (var))
974 return;
975
976 tree ssa = ssa_default_def (cfun, var);
977 gcc_assert (ssa);
978
979 register_ssa_partition (map, ssa);
980 }
981
982 /* If VAR is an SSA_NAME associated with a PARM_DECL or a RESULT_DECL,
983 and the DECL's default def is unused (i.e., it was introduced by
984 create_default_def), mark VAR and the default def for
985 coalescing. */
986
987 static void
988 coalesce_with_default (tree var, coalesce_list *cl, bitmap used_in_copy)
989 {
990 if (SSA_NAME_IS_DEFAULT_DEF (var)
991 || !SSA_NAME_VAR (var)
992 || VAR_P (SSA_NAME_VAR (var)))
993 return;
994
995 tree ssa = ssa_default_def (cfun, SSA_NAME_VAR (var));
996 if (!has_zero_uses (ssa))
997 return;
998
999 add_cost_one_coalesce (cl, SSA_NAME_VERSION (ssa), SSA_NAME_VERSION (var));
1000 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
1001 /* Default defs will have their used_in_copy bits set at the end of
1002 create_outofssa_var_map. */
1003 }
1004
1005 /* This function creates a var_map for the current function as well as creating
1006 a coalesce list for use later in the out of ssa process. */
1007
1008 static var_map
1009 create_outofssa_var_map (coalesce_list *cl, bitmap used_in_copy)
1010 {
1011 gimple_stmt_iterator gsi;
1012 basic_block bb;
1013 tree var;
1014 gimple *stmt;
1015 tree first;
1016 var_map map;
1017 ssa_op_iter iter;
1018 int v1, v2, cost;
1019 unsigned i;
1020
1021 for_all_parms (create_default_def, NULL);
1022
1023 map = init_var_map (num_ssa_names);
1024
1025 for_all_parms (register_default_def, map);
1026
1027 FOR_EACH_BB_FN (bb, cfun)
1028 {
1029 tree arg;
1030
1031 for (gphi_iterator gpi = gsi_start_phis (bb);
1032 !gsi_end_p (gpi);
1033 gsi_next (&gpi))
1034 {
1035 gphi *phi = gpi.phi ();
1036 size_t i;
1037 int ver;
1038 tree res;
1039 bool saw_copy = false;
1040
1041 res = gimple_phi_result (phi);
1042 ver = SSA_NAME_VERSION (res);
1043 register_ssa_partition (map, res);
1044
1045 /* Register ssa_names and coalesces between the args and the result
1046 of all PHI. */
1047 for (i = 0; i < gimple_phi_num_args (phi); i++)
1048 {
1049 edge e = gimple_phi_arg_edge (phi, i);
1050 arg = PHI_ARG_DEF (phi, i);
1051 if (TREE_CODE (arg) != SSA_NAME)
1052 continue;
1053
1054 register_ssa_partition (map, arg);
1055 if (gimple_can_coalesce_p (arg, res)
1056 || (e->flags & EDGE_ABNORMAL))
1057 {
1058 saw_copy = true;
1059 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (arg));
1060 if ((e->flags & EDGE_ABNORMAL) == 0)
1061 {
1062 int cost = coalesce_cost_edge (e);
1063 if (cost == 1 && has_single_use (arg))
1064 add_cost_one_coalesce (cl, ver, SSA_NAME_VERSION (arg));
1065 else
1066 add_coalesce (cl, ver, SSA_NAME_VERSION (arg), cost);
1067 }
1068 }
1069 }
1070 if (saw_copy)
1071 bitmap_set_bit (used_in_copy, ver);
1072 }
1073
1074 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1075 {
1076 stmt = gsi_stmt (gsi);
1077
1078 if (is_gimple_debug (stmt))
1079 continue;
1080
1081 /* Register USE and DEF operands in each statement. */
1082 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, (SSA_OP_DEF|SSA_OP_USE))
1083 register_ssa_partition (map, var);
1084
1085 /* Check for copy coalesces. */
1086 switch (gimple_code (stmt))
1087 {
1088 case GIMPLE_ASSIGN:
1089 {
1090 tree lhs = gimple_assign_lhs (stmt);
1091 tree rhs1 = gimple_assign_rhs1 (stmt);
1092 if (gimple_assign_ssa_name_copy_p (stmt)
1093 && gimple_can_coalesce_p (lhs, rhs1))
1094 {
1095 v1 = SSA_NAME_VERSION (lhs);
1096 v2 = SSA_NAME_VERSION (rhs1);
1097 cost = coalesce_cost_bb (bb);
1098 add_coalesce (cl, v1, v2, cost);
1099 bitmap_set_bit (used_in_copy, v1);
1100 bitmap_set_bit (used_in_copy, v2);
1101 }
1102 }
1103 break;
1104
1105 case GIMPLE_RETURN:
1106 {
1107 tree res = DECL_RESULT (current_function_decl);
1108 if (VOID_TYPE_P (TREE_TYPE (res))
1109 || !is_gimple_reg (res))
1110 break;
1111 tree rhs1 = gimple_return_retval (as_a <greturn *> (stmt));
1112 if (!rhs1)
1113 break;
1114 tree lhs = ssa_default_def (cfun, res);
1115 gcc_assert (lhs);
1116 if (TREE_CODE (rhs1) == SSA_NAME
1117 && gimple_can_coalesce_p (lhs, rhs1))
1118 {
1119 v1 = SSA_NAME_VERSION (lhs);
1120 v2 = SSA_NAME_VERSION (rhs1);
1121 cost = coalesce_cost_bb (bb);
1122 add_coalesce (cl, v1, v2, cost);
1123 bitmap_set_bit (used_in_copy, v1);
1124 bitmap_set_bit (used_in_copy, v2);
1125 }
1126 break;
1127 }
1128
1129 case GIMPLE_ASM:
1130 {
1131 gasm *asm_stmt = as_a <gasm *> (stmt);
1132 unsigned long noutputs, i;
1133 unsigned long ninputs;
1134 tree *outputs, link;
1135 noutputs = gimple_asm_noutputs (asm_stmt);
1136 ninputs = gimple_asm_ninputs (asm_stmt);
1137 outputs = (tree *) alloca (noutputs * sizeof (tree));
1138 for (i = 0; i < noutputs; ++i)
1139 {
1140 link = gimple_asm_output_op (asm_stmt, i);
1141 outputs[i] = TREE_VALUE (link);
1142 }
1143
1144 for (i = 0; i < ninputs; ++i)
1145 {
1146 const char *constraint;
1147 tree input;
1148 char *end;
1149 unsigned long match;
1150
1151 link = gimple_asm_input_op (asm_stmt, i);
1152 constraint
1153 = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link)));
1154 input = TREE_VALUE (link);
1155
1156 if (TREE_CODE (input) != SSA_NAME)
1157 continue;
1158
1159 match = strtoul (constraint, &end, 10);
1160 if (match >= noutputs || end == constraint)
1161 continue;
1162
1163 if (TREE_CODE (outputs[match]) != SSA_NAME)
1164 continue;
1165
1166 v1 = SSA_NAME_VERSION (outputs[match]);
1167 v2 = SSA_NAME_VERSION (input);
1168
1169 if (gimple_can_coalesce_p (outputs[match], input))
1170 {
1171 cost = coalesce_cost (REG_BR_PROB_BASE,
1172 optimize_bb_for_size_p (bb));
1173 add_coalesce (cl, v1, v2, cost);
1174 bitmap_set_bit (used_in_copy, v1);
1175 bitmap_set_bit (used_in_copy, v2);
1176 }
1177 }
1178 break;
1179 }
1180
1181 default:
1182 break;
1183 }
1184 }
1185 }
1186
1187 /* Now process result decls and live on entry variables for entry into
1188 the coalesce list. */
1189 first = NULL_TREE;
1190 for (i = 1; i < num_ssa_names; i++)
1191 {
1192 var = ssa_name (i);
1193 if (var != NULL_TREE && !virtual_operand_p (var))
1194 {
1195 coalesce_with_default (var, cl, used_in_copy);
1196
1197 /* Add coalesces between all the result decls. */
1198 if (SSA_NAME_VAR (var)
1199 && TREE_CODE (SSA_NAME_VAR (var)) == RESULT_DECL)
1200 {
1201 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
1202 if (first == NULL_TREE)
1203 first = var;
1204 else
1205 {
1206 gcc_assert (gimple_can_coalesce_p (var, first));
1207 v1 = SSA_NAME_VERSION (first);
1208 v2 = SSA_NAME_VERSION (var);
1209 cost = coalesce_cost_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
1210 add_coalesce (cl, v1, v2, cost);
1211 }
1212 }
1213 /* Mark any default_def variables as being in the coalesce list
1214 since they will have to be coalesced with the base variable. If
1215 not marked as present, they won't be in the coalesce view. */
1216 if (SSA_NAME_IS_DEFAULT_DEF (var)
1217 && (!has_zero_uses (var)
1218 || (SSA_NAME_VAR (var)
1219 && !VAR_P (SSA_NAME_VAR (var)))))
1220 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
1221 }
1222 }
1223
1224 return map;
1225 }
1226
1227
1228 /* Attempt to coalesce ssa versions X and Y together using the partition
1229 mapping in MAP and checking conflicts in GRAPH. Output any debug info to
1230 DEBUG, if it is nun-NULL. */
1231
1232 static inline bool
1233 attempt_coalesce (var_map map, ssa_conflicts *graph, int x, int y,
1234 FILE *debug)
1235 {
1236 int z;
1237 tree var1, var2;
1238 int p1, p2;
1239
1240 p1 = var_to_partition (map, ssa_name (x));
1241 p2 = var_to_partition (map, ssa_name (y));
1242
1243 if (debug)
1244 {
1245 fprintf (debug, "(%d)", x);
1246 print_generic_expr (debug, partition_to_var (map, p1), TDF_SLIM);
1247 fprintf (debug, " & (%d)", y);
1248 print_generic_expr (debug, partition_to_var (map, p2), TDF_SLIM);
1249 }
1250
1251 if (p1 == p2)
1252 {
1253 if (debug)
1254 fprintf (debug, ": Already Coalesced.\n");
1255 return true;
1256 }
1257
1258 if (debug)
1259 fprintf (debug, " [map: %d, %d] ", p1, p2);
1260
1261
1262 if (!ssa_conflicts_test_p (graph, p1, p2))
1263 {
1264 var1 = partition_to_var (map, p1);
1265 var2 = partition_to_var (map, p2);
1266
1267 z = var_union (map, var1, var2);
1268 if (z == NO_PARTITION)
1269 {
1270 if (debug)
1271 fprintf (debug, ": Unable to perform partition union.\n");
1272 return false;
1273 }
1274
1275 /* z is the new combined partition. Remove the other partition from
1276 the list, and merge the conflicts. */
1277 if (z == p1)
1278 ssa_conflicts_merge (graph, p1, p2);
1279 else
1280 ssa_conflicts_merge (graph, p2, p1);
1281
1282 if (debug)
1283 fprintf (debug, ": Success -> %d\n", z);
1284
1285 return true;
1286 }
1287
1288 if (debug)
1289 fprintf (debug, ": Fail due to conflict\n");
1290
1291 return false;
1292 }
1293
1294
1295 /* Attempt to Coalesce partitions in MAP which occur in the list CL using
1296 GRAPH. Debug output is sent to DEBUG if it is non-NULL. */
1297
1298 static void
1299 coalesce_partitions (var_map map, ssa_conflicts *graph, coalesce_list *cl,
1300 FILE *debug)
1301 {
1302 int x = 0, y = 0;
1303 tree var1, var2;
1304 int cost;
1305 basic_block bb;
1306 edge e;
1307 edge_iterator ei;
1308
1309 /* First, coalesce all the copies across abnormal edges. These are not placed
1310 in the coalesce list because they do not need to be sorted, and simply
1311 consume extra memory/compilation time in large programs. */
1312
1313 FOR_EACH_BB_FN (bb, cfun)
1314 {
1315 FOR_EACH_EDGE (e, ei, bb->preds)
1316 if (e->flags & EDGE_ABNORMAL)
1317 {
1318 gphi_iterator gsi;
1319 for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
1320 gsi_next (&gsi))
1321 {
1322 gphi *phi = gsi.phi ();
1323 tree arg = PHI_ARG_DEF (phi, e->dest_idx);
1324 if (SSA_NAME_IS_DEFAULT_DEF (arg)
1325 && (!SSA_NAME_VAR (arg)
1326 || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL))
1327 continue;
1328
1329 tree res = PHI_RESULT (phi);
1330 int v1 = SSA_NAME_VERSION (res);
1331 int v2 = SSA_NAME_VERSION (arg);
1332
1333 if (debug)
1334 fprintf (debug, "Abnormal coalesce: ");
1335
1336 if (!attempt_coalesce (map, graph, v1, v2, debug))
1337 fail_abnormal_edge_coalesce (v1, v2);
1338 }
1339 }
1340 }
1341
1342 /* Now process the items in the coalesce list. */
1343
1344 while ((cost = pop_best_coalesce (cl, &x, &y)) != NO_BEST_COALESCE)
1345 {
1346 var1 = ssa_name (x);
1347 var2 = ssa_name (y);
1348
1349 /* Assert the coalesces have the same base variable. */
1350 gcc_assert (gimple_can_coalesce_p (var1, var2));
1351
1352 if (debug)
1353 fprintf (debug, "Coalesce list: ");
1354 attempt_coalesce (map, graph, x, y, debug);
1355 }
1356 }
1357
1358
1359 /* Hashtable support for storing SSA names hashed by their SSA_NAME_VAR. */
1360
1361 struct ssa_name_var_hash : nofree_ptr_hash <tree_node>
1362 {
1363 static inline hashval_t hash (const tree_node *);
1364 static inline int equal (const tree_node *, const tree_node *);
1365 };
1366
1367 inline hashval_t
1368 ssa_name_var_hash::hash (const_tree n)
1369 {
1370 return DECL_UID (SSA_NAME_VAR (n));
1371 }
1372
1373 inline int
1374 ssa_name_var_hash::equal (const tree_node *n1, const tree_node *n2)
1375 {
1376 return SSA_NAME_VAR (n1) == SSA_NAME_VAR (n2);
1377 }
1378
1379
1380 /* Output partition map MAP with coalescing plan PART to file F. */
1381
1382 void
1383 dump_part_var_map (FILE *f, partition part, var_map map)
1384 {
1385 int t;
1386 unsigned x, y;
1387 int p;
1388
1389 fprintf (f, "\nCoalescible Partition map \n\n");
1390
1391 for (x = 0; x < map->num_partitions; x++)
1392 {
1393 if (map->view_to_partition != NULL)
1394 p = map->view_to_partition[x];
1395 else
1396 p = x;
1397
1398 if (ssa_name (p) == NULL_TREE
1399 || virtual_operand_p (ssa_name (p)))
1400 continue;
1401
1402 t = 0;
1403 for (y = 1; y < num_ssa_names; y++)
1404 {
1405 tree var = version_to_var (map, y);
1406 if (!var)
1407 continue;
1408 int q = var_to_partition (map, var);
1409 p = partition_find (part, q);
1410 gcc_assert (map->partition_to_base_index[q]
1411 == map->partition_to_base_index[p]);
1412
1413 if (p == (int)x)
1414 {
1415 if (t++ == 0)
1416 {
1417 fprintf (f, "Partition %d, base %d (", x,
1418 map->partition_to_base_index[q]);
1419 print_generic_expr (f, partition_to_var (map, q), TDF_SLIM);
1420 fprintf (f, " - ");
1421 }
1422 fprintf (f, "%d ", y);
1423 }
1424 }
1425 if (t != 0)
1426 fprintf (f, ")\n");
1427 }
1428 fprintf (f, "\n");
1429 }
1430
1431 /* Given SSA_NAMEs NAME1 and NAME2, return true if they are candidates for
1432 coalescing together, false otherwise.
1433
1434 This must stay consistent with var_map_base_init in tree-ssa-live.c. */
1435
1436 bool
1437 gimple_can_coalesce_p (tree name1, tree name2)
1438 {
1439 /* First check the SSA_NAME's associated DECL. Without
1440 optimization, we only want to coalesce if they have the same DECL
1441 or both have no associated DECL. */
1442 tree var1 = SSA_NAME_VAR (name1);
1443 tree var2 = SSA_NAME_VAR (name2);
1444 var1 = (var1 && (!VAR_P (var1) || !DECL_IGNORED_P (var1))) ? var1 : NULL_TREE;
1445 var2 = (var2 && (!VAR_P (var2) || !DECL_IGNORED_P (var2))) ? var2 : NULL_TREE;
1446 if (var1 != var2 && !flag_tree_coalesce_vars)
1447 return false;
1448
1449 /* Now check the types. If the types are the same, then we should
1450 try to coalesce V1 and V2. */
1451 tree t1 = TREE_TYPE (name1);
1452 tree t2 = TREE_TYPE (name2);
1453 if (t1 == t2)
1454 {
1455 check_modes:
1456 /* If the base variables are the same, we're good: none of the
1457 other tests below could possibly fail. */
1458 var1 = SSA_NAME_VAR (name1);
1459 var2 = SSA_NAME_VAR (name2);
1460 if (var1 == var2)
1461 return true;
1462
1463 /* We don't want to coalesce two SSA names if one of the base
1464 variables is supposed to be a register while the other is
1465 supposed to be on the stack. Anonymous SSA names most often
1466 take registers, but when not optimizing, user variables
1467 should go on the stack, so coalescing them with the anonymous
1468 variable as the partition leader would end up assigning the
1469 user variable to a register. Don't do that! */
1470 bool reg1 = use_register_for_decl (name1);
1471 bool reg2 = use_register_for_decl (name2);
1472 if (reg1 != reg2)
1473 return false;
1474
1475 /* Check that the promoted modes and unsignedness are the same.
1476 We don't want to coalesce if the promoted modes would be
1477 different, or if they would sign-extend differently. Only
1478 PARM_DECLs and RESULT_DECLs have different promotion rules,
1479 so skip the test if both are variables, or both are anonymous
1480 SSA_NAMEs. */
1481 int unsigned1, unsigned2;
1482 return ((!var1 || VAR_P (var1)) && (!var2 || VAR_P (var2)))
1483 || ((promote_ssa_mode (name1, &unsigned1)
1484 == promote_ssa_mode (name2, &unsigned2))
1485 && unsigned1 == unsigned2);
1486 }
1487
1488 /* If alignment requirements are different, we can't coalesce. */
1489 if (MINIMUM_ALIGNMENT (t1,
1490 var1 ? DECL_MODE (var1) : TYPE_MODE (t1),
1491 var1 ? LOCAL_DECL_ALIGNMENT (var1) : TYPE_ALIGN (t1))
1492 != MINIMUM_ALIGNMENT (t2,
1493 var2 ? DECL_MODE (var2) : TYPE_MODE (t2),
1494 var2 ? LOCAL_DECL_ALIGNMENT (var2) : TYPE_ALIGN (t2)))
1495 return false;
1496
1497 /* If the types are not the same, check for a canonical type match. This
1498 (for example) allows coalescing when the types are fundamentally the
1499 same, but just have different names.
1500
1501 Note pointer types with different address spaces may have the same
1502 canonical type. Those are rejected for coalescing by the
1503 types_compatible_p check. */
1504 if (TYPE_CANONICAL (t1)
1505 && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2)
1506 && types_compatible_p (t1, t2))
1507 goto check_modes;
1508
1509 return false;
1510 }
1511
1512 /* Fill in MAP's partition_to_base_index, with one index for each
1513 partition of SSA names USED_IN_COPIES and related by CL coalesce
1514 possibilities. This must match gimple_can_coalesce_p in the
1515 optimized case. */
1516
1517 static void
1518 compute_optimized_partition_bases (var_map map, bitmap used_in_copies,
1519 coalesce_list *cl)
1520 {
1521 int parts = num_var_partitions (map);
1522 partition tentative = partition_new (parts);
1523
1524 /* Partition the SSA versions so that, for each coalescible
1525 pair, both of its members are in the same partition in
1526 TENTATIVE. */
1527 gcc_assert (!cl->sorted);
1528 coalesce_pair *node;
1529 coalesce_iterator_type ppi;
1530 FOR_EACH_PARTITION_PAIR (node, ppi, cl)
1531 {
1532 tree v1 = ssa_name (node->first_element);
1533 int p1 = partition_find (tentative, var_to_partition (map, v1));
1534 tree v2 = ssa_name (node->second_element);
1535 int p2 = partition_find (tentative, var_to_partition (map, v2));
1536
1537 if (p1 == p2)
1538 continue;
1539
1540 partition_union (tentative, p1, p2);
1541 }
1542
1543 /* We have to deal with cost one pairs too. */
1544 for (cost_one_pair *co = cl->cost_one_list; co; co = co->next)
1545 {
1546 tree v1 = ssa_name (co->first_element);
1547 int p1 = partition_find (tentative, var_to_partition (map, v1));
1548 tree v2 = ssa_name (co->second_element);
1549 int p2 = partition_find (tentative, var_to_partition (map, v2));
1550
1551 if (p1 == p2)
1552 continue;
1553
1554 partition_union (tentative, p1, p2);
1555 }
1556
1557 /* And also with abnormal edges. */
1558 basic_block bb;
1559 edge e;
1560 edge_iterator ei;
1561 FOR_EACH_BB_FN (bb, cfun)
1562 {
1563 FOR_EACH_EDGE (e, ei, bb->preds)
1564 if (e->flags & EDGE_ABNORMAL)
1565 {
1566 gphi_iterator gsi;
1567 for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
1568 gsi_next (&gsi))
1569 {
1570 gphi *phi = gsi.phi ();
1571 tree arg = PHI_ARG_DEF (phi, e->dest_idx);
1572 if (SSA_NAME_IS_DEFAULT_DEF (arg)
1573 && (!SSA_NAME_VAR (arg)
1574 || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL))
1575 continue;
1576
1577 tree res = PHI_RESULT (phi);
1578
1579 int p1 = partition_find (tentative, var_to_partition (map, res));
1580 int p2 = partition_find (tentative, var_to_partition (map, arg));
1581
1582 if (p1 == p2)
1583 continue;
1584
1585 partition_union (tentative, p1, p2);
1586 }
1587 }
1588 }
1589
1590 map->partition_to_base_index = XCNEWVEC (int, parts);
1591 auto_vec<unsigned int> index_map (parts);
1592 if (parts)
1593 index_map.quick_grow (parts);
1594
1595 const unsigned no_part = -1;
1596 unsigned count = parts;
1597 while (count)
1598 index_map[--count] = no_part;
1599
1600 /* Initialize MAP's mapping from partition to base index, using
1601 as base indices an enumeration of the TENTATIVE partitions in
1602 which each SSA version ended up, so that we compute conflicts
1603 between all SSA versions that ended up in the same potential
1604 coalesce partition. */
1605 bitmap_iterator bi;
1606 unsigned i;
1607 EXECUTE_IF_SET_IN_BITMAP (used_in_copies, 0, i, bi)
1608 {
1609 int pidx = var_to_partition (map, ssa_name (i));
1610 int base = partition_find (tentative, pidx);
1611 if (index_map[base] != no_part)
1612 continue;
1613 index_map[base] = count++;
1614 }
1615
1616 map->num_basevars = count;
1617
1618 EXECUTE_IF_SET_IN_BITMAP (used_in_copies, 0, i, bi)
1619 {
1620 int pidx = var_to_partition (map, ssa_name (i));
1621 int base = partition_find (tentative, pidx);
1622 gcc_assert (index_map[base] < count);
1623 map->partition_to_base_index[pidx] = index_map[base];
1624 }
1625
1626 if (dump_file && (dump_flags & TDF_DETAILS))
1627 dump_part_var_map (dump_file, tentative, map);
1628
1629 partition_delete (tentative);
1630 }
1631
1632 /* Hashtable helpers. */
1633
1634 struct tree_int_map_hasher : nofree_ptr_hash <tree_int_map>
1635 {
1636 static inline hashval_t hash (const tree_int_map *);
1637 static inline bool equal (const tree_int_map *, const tree_int_map *);
1638 };
1639
1640 inline hashval_t
1641 tree_int_map_hasher::hash (const tree_int_map *v)
1642 {
1643 return tree_map_base_hash (v);
1644 }
1645
1646 inline bool
1647 tree_int_map_hasher::equal (const tree_int_map *v, const tree_int_map *c)
1648 {
1649 return tree_int_map_eq (v, c);
1650 }
1651
1652 /* This routine will initialize the basevar fields of MAP with base
1653 names. Partitions will share the same base if they have the same
1654 SSA_NAME_VAR, or, being anonymous variables, the same type. This
1655 must match gimple_can_coalesce_p in the non-optimized case. */
1656
1657 static void
1658 compute_samebase_partition_bases (var_map map)
1659 {
1660 int x, num_part;
1661 tree var;
1662 struct tree_int_map *m, *mapstorage;
1663
1664 num_part = num_var_partitions (map);
1665 hash_table<tree_int_map_hasher> tree_to_index (num_part);
1666 /* We can have at most num_part entries in the hash tables, so it's
1667 enough to allocate so many map elements once, saving some malloc
1668 calls. */
1669 mapstorage = m = XNEWVEC (struct tree_int_map, num_part);
1670
1671 /* If a base table already exists, clear it, otherwise create it. */
1672 free (map->partition_to_base_index);
1673 map->partition_to_base_index = (int *) xmalloc (sizeof (int) * num_part);
1674
1675 /* Build the base variable list, and point partitions at their bases. */
1676 for (x = 0; x < num_part; x++)
1677 {
1678 struct tree_int_map **slot;
1679 unsigned baseindex;
1680 var = partition_to_var (map, x);
1681 if (SSA_NAME_VAR (var)
1682 && (!VAR_P (SSA_NAME_VAR (var))
1683 || !DECL_IGNORED_P (SSA_NAME_VAR (var))))
1684 m->base.from = SSA_NAME_VAR (var);
1685 else
1686 /* This restricts what anonymous SSA names we can coalesce
1687 as it restricts the sets we compute conflicts for.
1688 Using TREE_TYPE to generate sets is the easies as
1689 type equivalency also holds for SSA names with the same
1690 underlying decl.
1691
1692 Check gimple_can_coalesce_p when changing this code. */
1693 m->base.from = (TYPE_CANONICAL (TREE_TYPE (var))
1694 ? TYPE_CANONICAL (TREE_TYPE (var))
1695 : TREE_TYPE (var));
1696 /* If base variable hasn't been seen, set it up. */
1697 slot = tree_to_index.find_slot (m, INSERT);
1698 if (!*slot)
1699 {
1700 baseindex = m - mapstorage;
1701 m->to = baseindex;
1702 *slot = m;
1703 m++;
1704 }
1705 else
1706 baseindex = (*slot)->to;
1707 map->partition_to_base_index[x] = baseindex;
1708 }
1709
1710 map->num_basevars = m - mapstorage;
1711
1712 free (mapstorage);
1713 }
1714
1715 /* Reduce the number of copies by coalescing variables in the function. Return
1716 a partition map with the resulting coalesces. */
1717
1718 extern var_map
1719 coalesce_ssa_name (void)
1720 {
1721 tree_live_info_p liveinfo;
1722 ssa_conflicts *graph;
1723 coalesce_list *cl;
1724 bitmap used_in_copies = BITMAP_ALLOC (NULL);
1725 var_map map;
1726 unsigned int i;
1727
1728 cl = create_coalesce_list ();
1729 map = create_outofssa_var_map (cl, used_in_copies);
1730
1731 /* If this optimization is disabled, we need to coalesce all the
1732 names originating from the same SSA_NAME_VAR so debug info
1733 remains undisturbed. */
1734 if (!flag_tree_coalesce_vars)
1735 {
1736 hash_table<ssa_name_var_hash> ssa_name_hash (10);
1737
1738 for (i = 1; i < num_ssa_names; i++)
1739 {
1740 tree a = ssa_name (i);
1741
1742 if (a
1743 && SSA_NAME_VAR (a)
1744 && !DECL_IGNORED_P (SSA_NAME_VAR (a))
1745 && (!has_zero_uses (a) || !SSA_NAME_IS_DEFAULT_DEF (a)
1746 || !VAR_P (SSA_NAME_VAR (a))))
1747 {
1748 tree *slot = ssa_name_hash.find_slot (a, INSERT);
1749
1750 if (!*slot)
1751 *slot = a;
1752 else
1753 {
1754 /* If the variable is a PARM_DECL or a RESULT_DECL, we
1755 _require_ that all the names originating from it be
1756 coalesced, because there must be a single partition
1757 containing all the names so that it can be assigned
1758 the canonical RTL location of the DECL safely.
1759 If in_lto_p, a function could have been compiled
1760 originally with optimizations and only the link
1761 performed at -O0, so we can't actually require it. */
1762 const int cost
1763 = (TREE_CODE (SSA_NAME_VAR (a)) == VAR_DECL || in_lto_p)
1764 ? MUST_COALESCE_COST - 1 : MUST_COALESCE_COST;
1765 add_coalesce (cl, SSA_NAME_VERSION (a),
1766 SSA_NAME_VERSION (*slot), cost);
1767 bitmap_set_bit (used_in_copies, SSA_NAME_VERSION (a));
1768 bitmap_set_bit (used_in_copies, SSA_NAME_VERSION (*slot));
1769 }
1770 }
1771 }
1772 }
1773 if (dump_file && (dump_flags & TDF_DETAILS))
1774 dump_var_map (dump_file, map);
1775
1776 partition_view_bitmap (map, used_in_copies);
1777
1778 if (flag_tree_coalesce_vars)
1779 compute_optimized_partition_bases (map, used_in_copies, cl);
1780 else
1781 compute_samebase_partition_bases (map);
1782
1783 BITMAP_FREE (used_in_copies);
1784
1785 if (num_var_partitions (map) < 1)
1786 {
1787 delete_coalesce_list (cl);
1788 return map;
1789 }
1790
1791 if (dump_file && (dump_flags & TDF_DETAILS))
1792 dump_var_map (dump_file, map);
1793
1794 liveinfo = calculate_live_ranges (map, false);
1795
1796 if (dump_file && (dump_flags & TDF_DETAILS))
1797 dump_live_info (dump_file, liveinfo, LIVEDUMP_ENTRY);
1798
1799 /* Build a conflict graph. */
1800 graph = build_ssa_conflict_graph (liveinfo);
1801 delete_tree_live_info (liveinfo);
1802 if (dump_file && (dump_flags & TDF_DETAILS))
1803 ssa_conflicts_dump (dump_file, graph);
1804
1805 sort_coalesce_list (cl);
1806
1807 if (dump_file && (dump_flags & TDF_DETAILS))
1808 {
1809 fprintf (dump_file, "\nAfter sorting:\n");
1810 dump_coalesce_list (dump_file, cl);
1811 }
1812
1813 /* First, coalesce all live on entry variables to their base variable.
1814 This will ensure the first use is coming from the correct location. */
1815
1816 if (dump_file && (dump_flags & TDF_DETAILS))
1817 dump_var_map (dump_file, map);
1818
1819 /* Now coalesce everything in the list. */
1820 coalesce_partitions (map, graph, cl,
1821 ((dump_flags & TDF_DETAILS) ? dump_file : NULL));
1822
1823 delete_coalesce_list (cl);
1824 ssa_conflicts_delete (graph);
1825
1826 return map;
1827 }
1828
1829 /* We need to pass two arguments to set_parm_default_def_partition,
1830 but for_all_parms only supports one. Use a pair. */
1831
1832 typedef std::pair<var_map, bitmap> parm_default_def_partition_arg;
1833
1834 /* Set in ARG's PARTS bitmap the bit corresponding to the partition in
1835 ARG's MAP containing VAR's default def. */
1836
1837 static void
1838 set_parm_default_def_partition (tree var, void *arg_)
1839 {
1840 parm_default_def_partition_arg *arg = (parm_default_def_partition_arg *)arg_;
1841 var_map map = arg->first;
1842 bitmap parts = arg->second;
1843
1844 if (!is_gimple_reg (var))
1845 return;
1846
1847 tree ssa = ssa_default_def (cfun, var);
1848 gcc_assert (ssa);
1849
1850 int version = var_to_partition (map, ssa);
1851 gcc_assert (version != NO_PARTITION);
1852
1853 bool changed = bitmap_set_bit (parts, version);
1854 gcc_assert (changed);
1855 }
1856
1857 /* Allocate and return a bitmap that has a bit set for each partition
1858 that contains a default def for a parameter. */
1859
1860 extern bitmap
1861 get_parm_default_def_partitions (var_map map)
1862 {
1863 bitmap parm_default_def_parts = BITMAP_ALLOC (NULL);
1864
1865 parm_default_def_partition_arg
1866 arg = std::make_pair (map, parm_default_def_parts);
1867
1868 for_all_parms (set_parm_default_def_partition, &arg);
1869
1870 return parm_default_def_parts;
1871 }