2016-09-25 François Dumont <fdumont@gcc.gnu.org>
[official-gcc.git] / gcc / tree-ssa-coalesce.c
blob01f6c5f82390d808c6828585974a8cb50ee4a9f6
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>
5 This file is part of GCC.
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.
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.
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/>. */
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"
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. */
46 /* This structure defines a pair entry. */
48 struct coalesce_pair
50 int first_element;
51 int second_element;
52 int cost;
54 /* A count of the number of unique partitions this pair would conflict
55 with if coalescing was successful. This is the secondary sort key,
56 given two pairs with equal costs, we will prefer the pair with a smaller
57 conflict set.
59 This is lazily initialized when we discover two coalescing pairs have
60 the same primary cost.
62 Note this is not updated and propagated as pairs are coalesced. */
63 int conflict_count;
65 /* The order in which coalescing pairs are discovered is recorded in this
66 field, which is used as the final tie breaker when sorting coalesce
67 pairs. */
68 int index;
71 /* This represents a conflict graph. Implemented as an array of bitmaps.
72 A full matrix is used for conflicts rather than just upper triangular form.
73 this makes it much simpler and faster to perform conflict merges. */
75 struct ssa_conflicts
77 bitmap_obstack obstack; /* A place to allocate our bitmaps. */
78 vec<bitmap> conflicts;
81 /* The narrow API of the qsort comparison function doesn't allow easy
82 access to additional arguments. So we have two globals (ick) to hold
83 the data we need. They're initialized before the call to qsort and
84 wiped immediately after. */
85 static ssa_conflicts *conflicts_;
86 static var_map map_;
88 /* Coalesce pair hashtable helpers. */
90 struct coalesce_pair_hasher : nofree_ptr_hash <coalesce_pair>
92 static inline hashval_t hash (const coalesce_pair *);
93 static inline bool equal (const coalesce_pair *, const coalesce_pair *);
96 /* Hash function for coalesce list. Calculate hash for PAIR. */
98 inline hashval_t
99 coalesce_pair_hasher::hash (const coalesce_pair *pair)
101 hashval_t a = (hashval_t)(pair->first_element);
102 hashval_t b = (hashval_t)(pair->second_element);
104 return b * (b - 1) / 2 + a;
107 /* Equality function for coalesce list hash table. Compare PAIR1 and PAIR2,
108 returning TRUE if the two pairs are equivalent. */
110 inline bool
111 coalesce_pair_hasher::equal (const coalesce_pair *p1, const coalesce_pair *p2)
113 return (p1->first_element == p2->first_element
114 && p1->second_element == p2->second_element);
117 typedef hash_table<coalesce_pair_hasher> coalesce_table_type;
118 typedef coalesce_table_type::iterator coalesce_iterator_type;
121 struct cost_one_pair
123 int first_element;
124 int second_element;
125 cost_one_pair *next;
128 /* This structure maintains the list of coalesce pairs. */
130 struct coalesce_list
132 coalesce_table_type *list; /* Hash table. */
133 coalesce_pair **sorted; /* List when sorted. */
134 int num_sorted; /* Number in the sorted list. */
135 cost_one_pair *cost_one_list;/* Single use coalesces with cost 1. */
138 #define NO_BEST_COALESCE -1
139 #define MUST_COALESCE_COST INT_MAX
142 /* Return cost of execution of copy instruction with FREQUENCY. */
144 static inline int
145 coalesce_cost (int frequency, bool optimize_for_size)
147 /* Base costs on BB frequencies bounded by 1. */
148 int cost = frequency;
150 if (!cost)
151 cost = 1;
153 if (optimize_for_size)
154 cost = 1;
156 return cost;
160 /* Return the cost of executing a copy instruction in basic block BB. */
162 static inline int
163 coalesce_cost_bb (basic_block bb)
165 return coalesce_cost (bb->frequency, optimize_bb_for_size_p (bb));
169 /* Return the cost of executing a copy instruction on edge E. */
171 static inline int
172 coalesce_cost_edge (edge e)
174 int mult = 1;
176 /* Inserting copy on critical edge costs more than inserting it elsewhere. */
177 if (EDGE_CRITICAL_P (e))
178 mult = 2;
179 if (e->flags & EDGE_ABNORMAL)
180 return MUST_COALESCE_COST;
181 if (e->flags & EDGE_EH)
183 edge e2;
184 edge_iterator ei;
185 FOR_EACH_EDGE (e2, ei, e->dest->preds)
186 if (e2 != e)
188 /* Putting code on EH edge that leads to BB
189 with multiple predecestors imply splitting of
190 edge too. */
191 if (mult < 2)
192 mult = 2;
193 /* If there are multiple EH predecestors, we
194 also copy EH regions and produce separate
195 landing pad. This is expensive. */
196 if (e2->flags & EDGE_EH)
198 mult = 5;
199 break;
204 return coalesce_cost (EDGE_FREQUENCY (e),
205 optimize_edge_for_size_p (e)) * mult;
209 /* Retrieve a pair to coalesce from the cost_one_list in CL. Returns the
210 2 elements via P1 and P2. 1 is returned by the function if there is a pair,
211 NO_BEST_COALESCE is returned if there aren't any. */
213 static inline int
214 pop_cost_one_pair (coalesce_list *cl, int *p1, int *p2)
216 cost_one_pair *ptr;
218 ptr = cl->cost_one_list;
219 if (!ptr)
220 return NO_BEST_COALESCE;
222 *p1 = ptr->first_element;
223 *p2 = ptr->second_element;
224 cl->cost_one_list = ptr->next;
226 free (ptr);
228 return 1;
231 /* Retrieve the most expensive remaining pair to coalesce from CL. Returns the
232 2 elements via P1 and P2. Their calculated cost is returned by the function.
233 NO_BEST_COALESCE is returned if the coalesce list is empty. */
235 static inline int
236 pop_best_coalesce (coalesce_list *cl, int *p1, int *p2)
238 coalesce_pair *node;
239 int ret;
241 if (cl->sorted == NULL)
242 return pop_cost_one_pair (cl, p1, p2);
244 if (cl->num_sorted == 0)
245 return pop_cost_one_pair (cl, p1, p2);
247 node = cl->sorted[--(cl->num_sorted)];
248 *p1 = node->first_element;
249 *p2 = node->second_element;
250 ret = node->cost;
251 free (node);
253 return ret;
257 /* Create a new empty coalesce list object and return it. */
259 static inline coalesce_list *
260 create_coalesce_list (void)
262 coalesce_list *list;
263 unsigned size = num_ssa_names * 3;
265 if (size < 40)
266 size = 40;
268 list = (coalesce_list *) xmalloc (sizeof (struct coalesce_list));
269 list->list = new coalesce_table_type (size);
270 list->sorted = NULL;
271 list->num_sorted = 0;
272 list->cost_one_list = NULL;
273 return list;
277 /* Delete coalesce list CL. */
279 static inline void
280 delete_coalesce_list (coalesce_list *cl)
282 gcc_assert (cl->cost_one_list == NULL);
283 delete cl->list;
284 cl->list = NULL;
285 free (cl->sorted);
286 gcc_assert (cl->num_sorted == 0);
287 free (cl);
290 /* Return the number of unique coalesce pairs in CL. */
292 static inline int
293 num_coalesce_pairs (coalesce_list *cl)
295 return cl->list->elements ();
298 /* Find a matching coalesce pair object in CL for the pair P1 and P2. If
299 one isn't found, return NULL if CREATE is false, otherwise create a new
300 coalesce pair object and return it. */
302 static coalesce_pair *
303 find_coalesce_pair (coalesce_list *cl, int p1, int p2, bool create)
305 struct coalesce_pair p;
306 coalesce_pair **slot;
307 unsigned int hash;
309 /* Normalize so that p1 is the smaller value. */
310 if (p2 < p1)
312 p.first_element = p2;
313 p.second_element = p1;
315 else
317 p.first_element = p1;
318 p.second_element = p2;
321 hash = coalesce_pair_hasher::hash (&p);
322 slot = cl->list->find_slot_with_hash (&p, hash, create ? INSERT : NO_INSERT);
323 if (!slot)
324 return NULL;
326 if (!*slot)
328 struct coalesce_pair * pair = XNEW (struct coalesce_pair);
329 gcc_assert (cl->sorted == NULL);
330 pair->first_element = p.first_element;
331 pair->second_element = p.second_element;
332 pair->cost = 0;
333 pair->index = num_coalesce_pairs (cl);
334 pair->conflict_count = 0;
335 *slot = pair;
338 return (struct coalesce_pair *) *slot;
341 static inline void
342 add_cost_one_coalesce (coalesce_list *cl, int p1, int p2)
344 cost_one_pair *pair;
346 pair = XNEW (cost_one_pair);
347 pair->first_element = p1;
348 pair->second_element = p2;
349 pair->next = cl->cost_one_list;
350 cl->cost_one_list = pair;
354 /* Add a coalesce between P1 and P2 in list CL with a cost of VALUE. */
356 static inline void
357 add_coalesce (coalesce_list *cl, int p1, int p2, int value)
359 coalesce_pair *node;
361 gcc_assert (cl->sorted == NULL);
362 if (p1 == p2)
363 return;
365 node = find_coalesce_pair (cl, p1, p2, true);
367 /* Once the value is at least MUST_COALESCE_COST - 1, leave it that way. */
368 if (node->cost < MUST_COALESCE_COST - 1)
370 if (value < MUST_COALESCE_COST - 1)
371 node->cost += value;
372 else
373 node->cost = value;
377 /* Compute and record how many unique conflicts would exist for the
378 representative partition for each coalesce pair in CL.
380 CONFLICTS is the conflict graph and MAP is the current partition view. */
382 static void
383 initialize_conflict_count (coalesce_pair *p,
384 ssa_conflicts *conflicts,
385 var_map map)
387 int p1 = var_to_partition (map, ssa_name (p->first_element));
388 int p2 = var_to_partition (map, ssa_name (p->second_element));
390 /* 4 cases. If both P1 and P2 have conflicts, then build their
391 union and count the members. Else handle the degenerate cases
392 in the obvious ways. */
393 if (conflicts->conflicts[p1] && conflicts->conflicts[p2])
394 p->conflict_count = bitmap_count_unique_bits (conflicts->conflicts[p1],
395 conflicts->conflicts[p2]);
396 else if (conflicts->conflicts[p1])
397 p->conflict_count = bitmap_count_bits (conflicts->conflicts[p1]);
398 else if (conflicts->conflicts[p2])
399 p->conflict_count = bitmap_count_bits (conflicts->conflicts[p2]);
400 else
401 p->conflict_count = 0;
405 /* Comparison function to allow qsort to sort P1 and P2 in Ascending order. */
407 static int
408 compare_pairs (const void *p1, const void *p2)
410 coalesce_pair *const *const pp1 = (coalesce_pair *const *) p1;
411 coalesce_pair *const *const pp2 = (coalesce_pair *const *) p2;
412 int result;
414 result = (* pp1)->cost - (* pp2)->cost;
415 /* We use the size of the resulting conflict set as the secondary sort key.
416 Given two equal costing coalesce pairs, we want to prefer the pair that
417 has the smaller conflict set. */
418 if (result == 0)
420 if (flag_expensive_optimizations)
422 /* Lazily initialize the conflict counts as it's fairly expensive
423 to compute. */
424 if ((*pp2)->conflict_count == 0)
425 initialize_conflict_count (*pp2, conflicts_, map_);
426 if ((*pp1)->conflict_count == 0)
427 initialize_conflict_count (*pp1, conflicts_, map_);
429 result = (*pp2)->conflict_count - (*pp1)->conflict_count;
432 /* And if everything else is equal, then sort based on which
433 coalesce pair was found first. */
434 if (result == 0)
435 result = (*pp2)->index - (*pp1)->index;
438 return result;
441 /* Iterate over CL using ITER, returning values in PAIR. */
443 #define FOR_EACH_PARTITION_PAIR(PAIR, ITER, CL) \
444 FOR_EACH_HASH_TABLE_ELEMENT (*(CL)->list, (PAIR), coalesce_pair_p, (ITER))
447 /* Prepare CL for removal of preferred pairs. When finished they are sorted
448 in order from most important coalesce to least important. */
450 static void
451 sort_coalesce_list (coalesce_list *cl, ssa_conflicts *conflicts, var_map map)
453 unsigned x, num;
454 coalesce_pair *p;
455 coalesce_iterator_type ppi;
457 gcc_assert (cl->sorted == NULL);
459 num = num_coalesce_pairs (cl);
460 cl->num_sorted = num;
461 if (num == 0)
462 return;
464 /* Allocate a vector for the pair pointers. */
465 cl->sorted = XNEWVEC (coalesce_pair *, num);
467 /* Populate the vector with pointers to the pairs. */
468 x = 0;
469 FOR_EACH_PARTITION_PAIR (p, ppi, cl)
470 cl->sorted[x++] = p;
471 gcc_assert (x == num);
473 /* Already sorted. */
474 if (num == 1)
475 return;
477 /* We don't want to depend on qsort_r, so we have to stuff away
478 additional data into globals so it can be referenced in
479 compare_pairs. */
480 conflicts_ = conflicts;
481 map_ = map;
482 qsort (cl->sorted, num, sizeof (coalesce_pair *), compare_pairs);
483 conflicts_ = NULL;
484 map_ = NULL;
488 /* Send debug info for coalesce list CL to file F. */
490 static void
491 dump_coalesce_list (FILE *f, coalesce_list *cl)
493 coalesce_pair *node;
494 coalesce_iterator_type ppi;
496 int x;
497 tree var;
499 if (cl->sorted == NULL)
501 fprintf (f, "Coalesce List:\n");
502 FOR_EACH_PARTITION_PAIR (node, ppi, cl)
504 tree var1 = ssa_name (node->first_element);
505 tree var2 = ssa_name (node->second_element);
506 print_generic_expr (f, var1, TDF_SLIM);
507 fprintf (f, " <-> ");
508 print_generic_expr (f, var2, TDF_SLIM);
509 fprintf (f, " (%1d, %1d), ", node->cost, node->conflict_count);
510 fprintf (f, "\n");
513 else
515 fprintf (f, "Sorted Coalesce list:\n");
516 for (x = cl->num_sorted - 1 ; x >=0; x--)
518 node = cl->sorted[x];
519 fprintf (f, "(%d, %d) ", node->cost, node->conflict_count);
520 var = ssa_name (node->first_element);
521 print_generic_expr (f, var, TDF_SLIM);
522 fprintf (f, " <-> ");
523 var = ssa_name (node->second_element);
524 print_generic_expr (f, var, TDF_SLIM);
525 fprintf (f, "\n");
531 /* Return an empty new conflict graph for SIZE elements. */
533 static inline ssa_conflicts *
534 ssa_conflicts_new (unsigned size)
536 ssa_conflicts *ptr;
538 ptr = XNEW (ssa_conflicts);
539 bitmap_obstack_initialize (&ptr->obstack);
540 ptr->conflicts.create (size);
541 ptr->conflicts.safe_grow_cleared (size);
542 return ptr;
546 /* Free storage for conflict graph PTR. */
548 static inline void
549 ssa_conflicts_delete (ssa_conflicts *ptr)
551 bitmap_obstack_release (&ptr->obstack);
552 ptr->conflicts.release ();
553 free (ptr);
557 /* Test if elements X and Y conflict in graph PTR. */
559 static inline bool
560 ssa_conflicts_test_p (ssa_conflicts *ptr, unsigned x, unsigned y)
562 bitmap bx = ptr->conflicts[x];
563 bitmap by = ptr->conflicts[y];
565 gcc_checking_assert (x != y);
567 if (bx)
568 /* Avoid the lookup if Y has no conflicts. */
569 return by ? bitmap_bit_p (bx, y) : false;
570 else
571 return false;
575 /* Add a conflict with Y to the bitmap for X in graph PTR. */
577 static inline void
578 ssa_conflicts_add_one (ssa_conflicts *ptr, unsigned x, unsigned y)
580 bitmap bx = ptr->conflicts[x];
581 /* If there are no conflicts yet, allocate the bitmap and set bit. */
582 if (! bx)
583 bx = ptr->conflicts[x] = BITMAP_ALLOC (&ptr->obstack);
584 bitmap_set_bit (bx, y);
588 /* Add conflicts between X and Y in graph PTR. */
590 static inline void
591 ssa_conflicts_add (ssa_conflicts *ptr, unsigned x, unsigned y)
593 gcc_checking_assert (x != y);
594 ssa_conflicts_add_one (ptr, x, y);
595 ssa_conflicts_add_one (ptr, y, x);
599 /* Merge all Y's conflict into X in graph PTR. */
601 static inline void
602 ssa_conflicts_merge (ssa_conflicts *ptr, unsigned x, unsigned y)
604 unsigned z;
605 bitmap_iterator bi;
606 bitmap bx = ptr->conflicts[x];
607 bitmap by = ptr->conflicts[y];
609 gcc_checking_assert (x != y);
610 if (! by)
611 return;
613 /* Add a conflict between X and every one Y has. If the bitmap doesn't
614 exist, then it has already been coalesced, and we don't need to add a
615 conflict. */
616 EXECUTE_IF_SET_IN_BITMAP (by, 0, z, bi)
618 bitmap bz = ptr->conflicts[z];
619 if (bz)
620 bitmap_set_bit (bz, x);
623 if (bx)
625 /* If X has conflicts, add Y's to X. */
626 bitmap_ior_into (bx, by);
627 BITMAP_FREE (by);
628 ptr->conflicts[y] = NULL;
630 else
632 /* If X has no conflicts, simply use Y's. */
633 ptr->conflicts[x] = by;
634 ptr->conflicts[y] = NULL;
639 /* Dump a conflicts graph. */
641 static void
642 ssa_conflicts_dump (FILE *file, ssa_conflicts *ptr)
644 unsigned x;
645 bitmap b;
647 fprintf (file, "\nConflict graph:\n");
649 FOR_EACH_VEC_ELT (ptr->conflicts, x, b)
650 if (b)
652 fprintf (file, "%d: ", x);
653 dump_bitmap (file, b);
658 /* This structure is used to efficiently record the current status of live
659 SSA_NAMES when building a conflict graph.
660 LIVE_BASE_VAR has a bit set for each base variable which has at least one
661 ssa version live.
662 LIVE_BASE_PARTITIONS is an array of bitmaps using the basevar table as an
663 index, and is used to track what partitions of each base variable are
664 live. This makes it easy to add conflicts between just live partitions
665 with the same base variable.
666 The values in LIVE_BASE_PARTITIONS are only valid if the base variable is
667 marked as being live. This delays clearing of these bitmaps until
668 they are actually needed again. */
670 struct live_track
672 bitmap_obstack obstack; /* A place to allocate our bitmaps. */
673 bitmap live_base_var; /* Indicates if a basevar is live. */
674 bitmap *live_base_partitions; /* Live partitions for each basevar. */
675 var_map map; /* Var_map being used for partition mapping. */
679 /* This routine will create a new live track structure based on the partitions
680 in MAP. */
682 static live_track *
683 new_live_track (var_map map)
685 live_track *ptr;
686 int lim, x;
688 /* Make sure there is a partition view in place. */
689 gcc_assert (map->partition_to_base_index != NULL);
691 ptr = (live_track *) xmalloc (sizeof (live_track));
692 ptr->map = map;
693 lim = num_basevars (map);
694 bitmap_obstack_initialize (&ptr->obstack);
695 ptr->live_base_partitions = (bitmap *) xmalloc (sizeof (bitmap *) * lim);
696 ptr->live_base_var = BITMAP_ALLOC (&ptr->obstack);
697 for (x = 0; x < lim; x++)
698 ptr->live_base_partitions[x] = BITMAP_ALLOC (&ptr->obstack);
699 return ptr;
703 /* This routine will free the memory associated with PTR. */
705 static void
706 delete_live_track (live_track *ptr)
708 bitmap_obstack_release (&ptr->obstack);
709 free (ptr->live_base_partitions);
710 free (ptr);
714 /* This function will remove PARTITION from the live list in PTR. */
716 static inline void
717 live_track_remove_partition (live_track *ptr, int partition)
719 int root;
721 root = basevar_index (ptr->map, partition);
722 bitmap_clear_bit (ptr->live_base_partitions[root], partition);
723 /* If the element list is empty, make the base variable not live either. */
724 if (bitmap_empty_p (ptr->live_base_partitions[root]))
725 bitmap_clear_bit (ptr->live_base_var, root);
729 /* This function will adds PARTITION to the live list in PTR. */
731 static inline void
732 live_track_add_partition (live_track *ptr, int partition)
734 int root;
736 root = basevar_index (ptr->map, partition);
737 /* If this base var wasn't live before, it is now. Clear the element list
738 since it was delayed until needed. */
739 if (bitmap_set_bit (ptr->live_base_var, root))
740 bitmap_clear (ptr->live_base_partitions[root]);
741 bitmap_set_bit (ptr->live_base_partitions[root], partition);
746 /* Clear the live bit for VAR in PTR. */
748 static inline void
749 live_track_clear_var (live_track *ptr, tree var)
751 int p;
753 p = var_to_partition (ptr->map, var);
754 if (p != NO_PARTITION)
755 live_track_remove_partition (ptr, p);
759 /* Return TRUE if VAR is live in PTR. */
761 static inline bool
762 live_track_live_p (live_track *ptr, tree var)
764 int p, root;
766 p = var_to_partition (ptr->map, var);
767 if (p != NO_PARTITION)
769 root = basevar_index (ptr->map, p);
770 if (bitmap_bit_p (ptr->live_base_var, root))
771 return bitmap_bit_p (ptr->live_base_partitions[root], p);
773 return false;
777 /* This routine will add USE to PTR. USE will be marked as live in both the
778 ssa live map and the live bitmap for the root of USE. */
780 static inline void
781 live_track_process_use (live_track *ptr, tree use)
783 int p;
785 p = var_to_partition (ptr->map, use);
786 if (p == NO_PARTITION)
787 return;
789 /* Mark as live in the appropriate live list. */
790 live_track_add_partition (ptr, p);
794 /* This routine will process a DEF in PTR. DEF will be removed from the live
795 lists, and if there are any other live partitions with the same base
796 variable, conflicts will be added to GRAPH. */
798 static inline void
799 live_track_process_def (live_track *ptr, tree def, ssa_conflicts *graph)
801 int p, root;
802 bitmap b;
803 unsigned x;
804 bitmap_iterator bi;
806 p = var_to_partition (ptr->map, def);
807 if (p == NO_PARTITION)
808 return;
810 /* Clear the liveness bit. */
811 live_track_remove_partition (ptr, p);
813 /* If the bitmap isn't empty now, conflicts need to be added. */
814 root = basevar_index (ptr->map, p);
815 if (bitmap_bit_p (ptr->live_base_var, root))
817 b = ptr->live_base_partitions[root];
818 EXECUTE_IF_SET_IN_BITMAP (b, 0, x, bi)
819 ssa_conflicts_add (graph, p, x);
824 /* Initialize PTR with the partitions set in INIT. */
826 static inline void
827 live_track_init (live_track *ptr, bitmap init)
829 unsigned p;
830 bitmap_iterator bi;
832 /* Mark all live on exit partitions. */
833 EXECUTE_IF_SET_IN_BITMAP (init, 0, p, bi)
834 live_track_add_partition (ptr, p);
838 /* This routine will clear all live partitions in PTR. */
840 static inline void
841 live_track_clear_base_vars (live_track *ptr)
843 /* Simply clear the live base list. Anything marked as live in the element
844 lists will be cleared later if/when the base variable ever comes alive
845 again. */
846 bitmap_clear (ptr->live_base_var);
850 /* Build a conflict graph based on LIVEINFO. Any partitions which are in the
851 partition view of the var_map liveinfo is based on get entries in the
852 conflict graph. Only conflicts between ssa_name partitions with the same
853 base variable are added. */
855 static ssa_conflicts *
856 build_ssa_conflict_graph (tree_live_info_p liveinfo)
858 ssa_conflicts *graph;
859 var_map map;
860 basic_block bb;
861 ssa_op_iter iter;
862 live_track *live;
863 basic_block entry;
865 /* If inter-variable coalescing is enabled, we may attempt to
866 coalesce variables from different base variables, including
867 different parameters, so we have to make sure default defs live
868 at the entry block conflict with each other. */
869 if (flag_tree_coalesce_vars)
870 entry = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
871 else
872 entry = NULL;
874 map = live_var_map (liveinfo);
875 graph = ssa_conflicts_new (num_var_partitions (map));
877 live = new_live_track (map);
879 FOR_EACH_BB_FN (bb, cfun)
881 /* Start with live on exit temporaries. */
882 live_track_init (live, live_on_exit (liveinfo, bb));
884 for (gimple_stmt_iterator gsi = gsi_last_bb (bb); !gsi_end_p (gsi);
885 gsi_prev (&gsi))
887 tree var;
888 gimple *stmt = gsi_stmt (gsi);
890 /* A copy between 2 partitions does not introduce an interference
891 by itself. If they did, you would never be able to coalesce
892 two things which are copied. If the two variables really do
893 conflict, they will conflict elsewhere in the program.
895 This is handled by simply removing the SRC of the copy from the
896 live list, and processing the stmt normally. */
897 if (is_gimple_assign (stmt))
899 tree lhs = gimple_assign_lhs (stmt);
900 tree rhs1 = gimple_assign_rhs1 (stmt);
901 if (gimple_assign_copy_p (stmt)
902 && TREE_CODE (lhs) == SSA_NAME
903 && TREE_CODE (rhs1) == SSA_NAME)
904 live_track_clear_var (live, rhs1);
906 else if (is_gimple_debug (stmt))
907 continue;
909 /* For stmts with more than one SSA_NAME definition pretend all the
910 SSA_NAME outputs but the first one are live at this point, so
911 that conflicts are added in between all those even when they are
912 actually not really live after the asm, because expansion might
913 copy those into pseudos after the asm and if multiple outputs
914 share the same partition, it might overwrite those that should
915 be live. E.g.
916 asm volatile (".." : "=r" (a) : "=r" (b) : "0" (a), "1" (a));
917 return a;
918 See PR70593. */
919 bool first = true;
920 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
921 if (first)
922 first = false;
923 else
924 live_track_process_use (live, var);
926 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
927 live_track_process_def (live, var, graph);
929 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE)
930 live_track_process_use (live, var);
933 /* If result of a PHI is unused, looping over the statements will not
934 record any conflicts since the def was never live. Since the PHI node
935 is going to be translated out of SSA form, it will insert a copy.
936 There must be a conflict recorded between the result of the PHI and
937 any variables that are live. Otherwise the out-of-ssa translation
938 may create incorrect code. */
939 for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
940 gsi_next (&gsi))
942 gphi *phi = gsi.phi ();
943 tree result = PHI_RESULT (phi);
944 if (live_track_live_p (live, result))
945 live_track_process_def (live, result, graph);
948 /* Pretend there are defs for params' default defs at the start
949 of the (post-)entry block. This will prevent PARM_DECLs from
950 coalescing into the same partition. Although RESULT_DECLs'
951 default defs don't have a useful initial value, we have to
952 prevent them from coalescing with PARM_DECLs' default defs
953 too, otherwise assign_parms would attempt to assign different
954 RTL to the same partition. */
955 if (bb == entry)
957 unsigned i;
958 tree var;
960 FOR_EACH_SSA_NAME (i, var, cfun)
962 if (!SSA_NAME_IS_DEFAULT_DEF (var)
963 || !SSA_NAME_VAR (var)
964 || VAR_P (SSA_NAME_VAR (var)))
965 continue;
967 live_track_process_def (live, var, graph);
968 /* Process a use too, so that it remains live and
969 conflicts with other parms' default defs, even unused
970 ones. */
971 live_track_process_use (live, var);
975 live_track_clear_base_vars (live);
978 delete_live_track (live);
979 return graph;
983 /* Shortcut routine to print messages to file F of the form:
984 "STR1 EXPR1 STR2 EXPR2 STR3." */
986 static inline void
987 print_exprs (FILE *f, const char *str1, tree expr1, const char *str2,
988 tree expr2, const char *str3)
990 fprintf (f, "%s", str1);
991 print_generic_expr (f, expr1, TDF_SLIM);
992 fprintf (f, "%s", str2);
993 print_generic_expr (f, expr2, TDF_SLIM);
994 fprintf (f, "%s", str3);
998 /* Print a failure to coalesce a MUST_COALESCE pair X and Y. */
1000 static inline void
1001 fail_abnormal_edge_coalesce (int x, int y)
1003 fprintf (stderr, "\nUnable to coalesce ssa_names %d and %d",x, y);
1004 fprintf (stderr, " which are marked as MUST COALESCE.\n");
1005 print_generic_expr (stderr, ssa_name (x), TDF_SLIM);
1006 fprintf (stderr, " and ");
1007 print_generic_stmt (stderr, ssa_name (y), TDF_SLIM);
1009 internal_error ("SSA corruption");
1012 /* Call CALLBACK for all PARM_DECLs and RESULT_DECLs for which
1013 assign_parms may ask for a default partition. */
1015 static void
1016 for_all_parms (void (*callback)(tree var, void *arg), void *arg)
1018 for (tree var = DECL_ARGUMENTS (current_function_decl); var;
1019 var = DECL_CHAIN (var))
1020 callback (var, arg);
1021 if (!VOID_TYPE_P (TREE_TYPE (DECL_RESULT (current_function_decl))))
1022 callback (DECL_RESULT (current_function_decl), arg);
1023 if (cfun->static_chain_decl)
1024 callback (cfun->static_chain_decl, arg);
1027 /* Create a default def for VAR. */
1029 static void
1030 create_default_def (tree var, void *arg ATTRIBUTE_UNUSED)
1032 if (!is_gimple_reg (var))
1033 return;
1035 tree ssa = get_or_create_ssa_default_def (cfun, var);
1036 gcc_assert (ssa);
1039 /* Register VAR's default def in MAP. */
1041 static void
1042 register_default_def (tree var, void *map_)
1044 var_map map = (var_map)map_;
1046 if (!is_gimple_reg (var))
1047 return;
1049 tree ssa = ssa_default_def (cfun, var);
1050 gcc_assert (ssa);
1052 register_ssa_partition (map, ssa);
1055 /* If VAR is an SSA_NAME associated with a PARM_DECL or a RESULT_DECL,
1056 and the DECL's default def is unused (i.e., it was introduced by
1057 create_default_def), mark VAR and the default def for
1058 coalescing. */
1060 static void
1061 coalesce_with_default (tree var, coalesce_list *cl, bitmap used_in_copy)
1063 if (SSA_NAME_IS_DEFAULT_DEF (var)
1064 || !SSA_NAME_VAR (var)
1065 || VAR_P (SSA_NAME_VAR (var)))
1066 return;
1068 tree ssa = ssa_default_def (cfun, SSA_NAME_VAR (var));
1069 if (!has_zero_uses (ssa))
1070 return;
1072 add_cost_one_coalesce (cl, SSA_NAME_VERSION (ssa), SSA_NAME_VERSION (var));
1073 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
1074 /* Default defs will have their used_in_copy bits set at the end of
1075 create_outofssa_var_map. */
1078 /* This function creates a var_map for the current function as well as creating
1079 a coalesce list for use later in the out of ssa process. */
1081 static var_map
1082 create_outofssa_var_map (coalesce_list *cl, bitmap used_in_copy)
1084 gimple_stmt_iterator gsi;
1085 basic_block bb;
1086 tree var;
1087 gimple *stmt;
1088 tree first;
1089 var_map map;
1090 ssa_op_iter iter;
1091 int v1, v2, cost;
1092 unsigned i;
1094 for_all_parms (create_default_def, NULL);
1096 map = init_var_map (num_ssa_names);
1098 for_all_parms (register_default_def, map);
1100 FOR_EACH_BB_FN (bb, cfun)
1102 tree arg;
1104 for (gphi_iterator gpi = gsi_start_phis (bb);
1105 !gsi_end_p (gpi);
1106 gsi_next (&gpi))
1108 gphi *phi = gpi.phi ();
1109 size_t i;
1110 int ver;
1111 tree res;
1112 bool saw_copy = false;
1114 res = gimple_phi_result (phi);
1115 ver = SSA_NAME_VERSION (res);
1116 register_ssa_partition (map, res);
1118 /* Register ssa_names and coalesces between the args and the result
1119 of all PHI. */
1120 for (i = 0; i < gimple_phi_num_args (phi); i++)
1122 edge e = gimple_phi_arg_edge (phi, i);
1123 arg = PHI_ARG_DEF (phi, i);
1124 if (TREE_CODE (arg) != SSA_NAME)
1125 continue;
1127 register_ssa_partition (map, arg);
1128 if (gimple_can_coalesce_p (arg, res)
1129 || (e->flags & EDGE_ABNORMAL))
1131 saw_copy = true;
1132 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (arg));
1133 if ((e->flags & EDGE_ABNORMAL) == 0)
1135 int cost = coalesce_cost_edge (e);
1136 if (cost == 1 && has_single_use (arg))
1137 add_cost_one_coalesce (cl, ver, SSA_NAME_VERSION (arg));
1138 else
1139 add_coalesce (cl, ver, SSA_NAME_VERSION (arg), cost);
1143 if (saw_copy)
1144 bitmap_set_bit (used_in_copy, ver);
1147 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1149 stmt = gsi_stmt (gsi);
1151 if (is_gimple_debug (stmt))
1152 continue;
1154 /* Register USE and DEF operands in each statement. */
1155 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, (SSA_OP_DEF|SSA_OP_USE))
1156 register_ssa_partition (map, var);
1158 /* Check for copy coalesces. */
1159 switch (gimple_code (stmt))
1161 case GIMPLE_ASSIGN:
1163 tree lhs = gimple_assign_lhs (stmt);
1164 tree rhs1 = gimple_assign_rhs1 (stmt);
1165 if (gimple_assign_ssa_name_copy_p (stmt)
1166 && gimple_can_coalesce_p (lhs, rhs1))
1168 v1 = SSA_NAME_VERSION (lhs);
1169 v2 = SSA_NAME_VERSION (rhs1);
1170 cost = coalesce_cost_bb (bb);
1171 add_coalesce (cl, v1, v2, cost);
1172 bitmap_set_bit (used_in_copy, v1);
1173 bitmap_set_bit (used_in_copy, v2);
1176 break;
1178 case GIMPLE_RETURN:
1180 tree res = DECL_RESULT (current_function_decl);
1181 if (VOID_TYPE_P (TREE_TYPE (res))
1182 || !is_gimple_reg (res))
1183 break;
1184 tree rhs1 = gimple_return_retval (as_a <greturn *> (stmt));
1185 if (!rhs1)
1186 break;
1187 tree lhs = ssa_default_def (cfun, res);
1188 gcc_assert (lhs);
1189 if (TREE_CODE (rhs1) == SSA_NAME
1190 && gimple_can_coalesce_p (lhs, rhs1))
1192 v1 = SSA_NAME_VERSION (lhs);
1193 v2 = SSA_NAME_VERSION (rhs1);
1194 cost = coalesce_cost_bb (bb);
1195 add_coalesce (cl, v1, v2, cost);
1196 bitmap_set_bit (used_in_copy, v1);
1197 bitmap_set_bit (used_in_copy, v2);
1199 break;
1202 case GIMPLE_ASM:
1204 gasm *asm_stmt = as_a <gasm *> (stmt);
1205 unsigned long noutputs, i;
1206 unsigned long ninputs;
1207 tree *outputs, link;
1208 noutputs = gimple_asm_noutputs (asm_stmt);
1209 ninputs = gimple_asm_ninputs (asm_stmt);
1210 outputs = (tree *) alloca (noutputs * sizeof (tree));
1211 for (i = 0; i < noutputs; ++i)
1213 link = gimple_asm_output_op (asm_stmt, i);
1214 outputs[i] = TREE_VALUE (link);
1217 for (i = 0; i < ninputs; ++i)
1219 const char *constraint;
1220 tree input;
1221 char *end;
1222 unsigned long match;
1224 link = gimple_asm_input_op (asm_stmt, i);
1225 constraint
1226 = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link)));
1227 input = TREE_VALUE (link);
1229 if (TREE_CODE (input) != SSA_NAME)
1230 continue;
1232 match = strtoul (constraint, &end, 10);
1233 if (match >= noutputs || end == constraint)
1234 continue;
1236 if (TREE_CODE (outputs[match]) != SSA_NAME)
1237 continue;
1239 v1 = SSA_NAME_VERSION (outputs[match]);
1240 v2 = SSA_NAME_VERSION (input);
1242 if (gimple_can_coalesce_p (outputs[match], input))
1244 cost = coalesce_cost (REG_BR_PROB_BASE,
1245 optimize_bb_for_size_p (bb));
1246 add_coalesce (cl, v1, v2, cost);
1247 bitmap_set_bit (used_in_copy, v1);
1248 bitmap_set_bit (used_in_copy, v2);
1251 break;
1254 default:
1255 break;
1260 /* Now process result decls and live on entry variables for entry into
1261 the coalesce list. */
1262 first = NULL_TREE;
1263 FOR_EACH_SSA_NAME (i, var, cfun)
1265 if (!virtual_operand_p (var))
1267 coalesce_with_default (var, cl, used_in_copy);
1269 /* Add coalesces between all the result decls. */
1270 if (SSA_NAME_VAR (var)
1271 && TREE_CODE (SSA_NAME_VAR (var)) == RESULT_DECL)
1273 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
1274 if (first == NULL_TREE)
1275 first = var;
1276 else
1278 gcc_assert (gimple_can_coalesce_p (var, first));
1279 v1 = SSA_NAME_VERSION (first);
1280 v2 = SSA_NAME_VERSION (var);
1281 cost = coalesce_cost_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
1282 add_coalesce (cl, v1, v2, cost);
1285 /* Mark any default_def variables as being in the coalesce list
1286 since they will have to be coalesced with the base variable. If
1287 not marked as present, they won't be in the coalesce view. */
1288 if (SSA_NAME_IS_DEFAULT_DEF (var)
1289 && (!has_zero_uses (var)
1290 || (SSA_NAME_VAR (var)
1291 && !VAR_P (SSA_NAME_VAR (var)))))
1292 bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
1296 return map;
1300 /* Attempt to coalesce ssa versions X and Y together using the partition
1301 mapping in MAP and checking conflicts in GRAPH. Output any debug info to
1302 DEBUG, if it is nun-NULL. */
1304 static inline bool
1305 attempt_coalesce (var_map map, ssa_conflicts *graph, int x, int y,
1306 FILE *debug)
1308 int z;
1309 tree var1, var2;
1310 int p1, p2;
1312 p1 = var_to_partition (map, ssa_name (x));
1313 p2 = var_to_partition (map, ssa_name (y));
1315 if (debug)
1317 fprintf (debug, "(%d)", x);
1318 print_generic_expr (debug, partition_to_var (map, p1), TDF_SLIM);
1319 fprintf (debug, " & (%d)", y);
1320 print_generic_expr (debug, partition_to_var (map, p2), TDF_SLIM);
1323 if (p1 == p2)
1325 if (debug)
1326 fprintf (debug, ": Already Coalesced.\n");
1327 return true;
1330 if (debug)
1331 fprintf (debug, " [map: %d, %d] ", p1, p2);
1334 if (!ssa_conflicts_test_p (graph, p1, p2))
1336 var1 = partition_to_var (map, p1);
1337 var2 = partition_to_var (map, p2);
1339 z = var_union (map, var1, var2);
1340 if (z == NO_PARTITION)
1342 if (debug)
1343 fprintf (debug, ": Unable to perform partition union.\n");
1344 return false;
1347 /* z is the new combined partition. Remove the other partition from
1348 the list, and merge the conflicts. */
1349 if (z == p1)
1350 ssa_conflicts_merge (graph, p1, p2);
1351 else
1352 ssa_conflicts_merge (graph, p2, p1);
1354 if (debug)
1355 fprintf (debug, ": Success -> %d\n", z);
1357 return true;
1360 if (debug)
1361 fprintf (debug, ": Fail due to conflict\n");
1363 return false;
1367 /* Attempt to Coalesce partitions in MAP which occur in the list CL using
1368 GRAPH. Debug output is sent to DEBUG if it is non-NULL. */
1370 static void
1371 coalesce_partitions (var_map map, ssa_conflicts *graph, coalesce_list *cl,
1372 FILE *debug)
1374 int x = 0, y = 0;
1375 tree var1, var2;
1376 int cost;
1377 basic_block bb;
1378 edge e;
1379 edge_iterator ei;
1381 /* First, coalesce all the copies across abnormal edges. These are not placed
1382 in the coalesce list because they do not need to be sorted, and simply
1383 consume extra memory/compilation time in large programs. */
1385 FOR_EACH_BB_FN (bb, cfun)
1387 FOR_EACH_EDGE (e, ei, bb->preds)
1388 if (e->flags & EDGE_ABNORMAL)
1390 gphi_iterator gsi;
1391 for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
1392 gsi_next (&gsi))
1394 gphi *phi = gsi.phi ();
1395 tree arg = PHI_ARG_DEF (phi, e->dest_idx);
1396 if (SSA_NAME_IS_DEFAULT_DEF (arg)
1397 && (!SSA_NAME_VAR (arg)
1398 || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL))
1399 continue;
1401 tree res = PHI_RESULT (phi);
1402 int v1 = SSA_NAME_VERSION (res);
1403 int v2 = SSA_NAME_VERSION (arg);
1405 if (debug)
1406 fprintf (debug, "Abnormal coalesce: ");
1408 if (!attempt_coalesce (map, graph, v1, v2, debug))
1409 fail_abnormal_edge_coalesce (v1, v2);
1414 /* Now process the items in the coalesce list. */
1416 while ((cost = pop_best_coalesce (cl, &x, &y)) != NO_BEST_COALESCE)
1418 var1 = ssa_name (x);
1419 var2 = ssa_name (y);
1421 /* Assert the coalesces have the same base variable. */
1422 gcc_assert (gimple_can_coalesce_p (var1, var2));
1424 if (debug)
1425 fprintf (debug, "Coalesce list: ");
1426 attempt_coalesce (map, graph, x, y, debug);
1431 /* Hashtable support for storing SSA names hashed by their SSA_NAME_VAR. */
1433 struct ssa_name_var_hash : nofree_ptr_hash <tree_node>
1435 static inline hashval_t hash (const tree_node *);
1436 static inline int equal (const tree_node *, const tree_node *);
1439 inline hashval_t
1440 ssa_name_var_hash::hash (const_tree n)
1442 return DECL_UID (SSA_NAME_VAR (n));
1445 inline int
1446 ssa_name_var_hash::equal (const tree_node *n1, const tree_node *n2)
1448 return SSA_NAME_VAR (n1) == SSA_NAME_VAR (n2);
1452 /* Output partition map MAP with coalescing plan PART to file F. */
1454 void
1455 dump_part_var_map (FILE *f, partition part, var_map map)
1457 int t;
1458 unsigned x, y;
1459 int p;
1461 fprintf (f, "\nCoalescible Partition map \n\n");
1463 for (x = 0; x < map->num_partitions; x++)
1465 if (map->view_to_partition != NULL)
1466 p = map->view_to_partition[x];
1467 else
1468 p = x;
1470 if (ssa_name (p) == NULL_TREE
1471 || virtual_operand_p (ssa_name (p)))
1472 continue;
1474 t = 0;
1475 for (y = 1; y < num_ssa_names; y++)
1477 tree var = version_to_var (map, y);
1478 if (!var)
1479 continue;
1480 int q = var_to_partition (map, var);
1481 p = partition_find (part, q);
1482 gcc_assert (map->partition_to_base_index[q]
1483 == map->partition_to_base_index[p]);
1485 if (p == (int)x)
1487 if (t++ == 0)
1489 fprintf (f, "Partition %d, base %d (", x,
1490 map->partition_to_base_index[q]);
1491 print_generic_expr (f, partition_to_var (map, q), TDF_SLIM);
1492 fprintf (f, " - ");
1494 fprintf (f, "%d ", y);
1497 if (t != 0)
1498 fprintf (f, ")\n");
1500 fprintf (f, "\n");
1503 /* Given SSA_NAMEs NAME1 and NAME2, return true if they are candidates for
1504 coalescing together, false otherwise.
1506 This must stay consistent with compute_samebase_partition_bases and
1507 compute_optimized_partition_bases. */
1509 bool
1510 gimple_can_coalesce_p (tree name1, tree name2)
1512 /* First check the SSA_NAME's associated DECL. Without
1513 optimization, we only want to coalesce if they have the same DECL
1514 or both have no associated DECL. */
1515 tree var1 = SSA_NAME_VAR (name1);
1516 tree var2 = SSA_NAME_VAR (name2);
1517 var1 = (var1 && (!VAR_P (var1) || !DECL_IGNORED_P (var1))) ? var1 : NULL_TREE;
1518 var2 = (var2 && (!VAR_P (var2) || !DECL_IGNORED_P (var2))) ? var2 : NULL_TREE;
1519 if (var1 != var2 && !flag_tree_coalesce_vars)
1520 return false;
1522 /* Now check the types. If the types are the same, then we should
1523 try to coalesce V1 and V2. */
1524 tree t1 = TREE_TYPE (name1);
1525 tree t2 = TREE_TYPE (name2);
1526 if (t1 == t2)
1528 check_modes:
1529 /* If the base variables are the same, we're good: none of the
1530 other tests below could possibly fail. */
1531 var1 = SSA_NAME_VAR (name1);
1532 var2 = SSA_NAME_VAR (name2);
1533 if (var1 == var2)
1534 return true;
1536 /* We don't want to coalesce two SSA names if one of the base
1537 variables is supposed to be a register while the other is
1538 supposed to be on the stack. Anonymous SSA names most often
1539 take registers, but when not optimizing, user variables
1540 should go on the stack, so coalescing them with the anonymous
1541 variable as the partition leader would end up assigning the
1542 user variable to a register. Don't do that! */
1543 bool reg1 = use_register_for_decl (name1);
1544 bool reg2 = use_register_for_decl (name2);
1545 if (reg1 != reg2)
1546 return false;
1548 /* Check that the promoted modes and unsignedness are the same.
1549 We don't want to coalesce if the promoted modes would be
1550 different, or if they would sign-extend differently. Only
1551 PARM_DECLs and RESULT_DECLs have different promotion rules,
1552 so skip the test if both are variables, or both are anonymous
1553 SSA_NAMEs. */
1554 int unsigned1, unsigned2;
1555 return ((!var1 || VAR_P (var1)) && (!var2 || VAR_P (var2)))
1556 || ((promote_ssa_mode (name1, &unsigned1)
1557 == promote_ssa_mode (name2, &unsigned2))
1558 && unsigned1 == unsigned2);
1561 /* If alignment requirements are different, we can't coalesce. */
1562 if (MINIMUM_ALIGNMENT (t1,
1563 var1 ? DECL_MODE (var1) : TYPE_MODE (t1),
1564 var1 ? LOCAL_DECL_ALIGNMENT (var1) : TYPE_ALIGN (t1))
1565 != MINIMUM_ALIGNMENT (t2,
1566 var2 ? DECL_MODE (var2) : TYPE_MODE (t2),
1567 var2 ? LOCAL_DECL_ALIGNMENT (var2) : TYPE_ALIGN (t2)))
1568 return false;
1570 /* If the types are not the same, see whether they are compatible. This
1571 (for example) allows coalescing when the types are fundamentally the
1572 same, but just have different names.
1574 In the non-optimized case, we must first test TYPE_CANONICAL because
1575 we use it to compute the partition_to_base_index of the map. */
1576 if (flag_tree_coalesce_vars)
1578 if (types_compatible_p (t1, t2))
1579 goto check_modes;
1581 else
1583 if (TYPE_CANONICAL (t1)
1584 && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2)
1585 && types_compatible_p (t1, t2))
1586 goto check_modes;
1589 return false;
1592 /* Fill in MAP's partition_to_base_index, with one index for each
1593 partition of SSA names USED_IN_COPIES and related by CL coalesce
1594 possibilities. This must match gimple_can_coalesce_p in the
1595 optimized case. */
1597 static void
1598 compute_optimized_partition_bases (var_map map, bitmap used_in_copies,
1599 coalesce_list *cl)
1601 int parts = num_var_partitions (map);
1602 partition tentative = partition_new (parts);
1604 /* Partition the SSA versions so that, for each coalescible
1605 pair, both of its members are in the same partition in
1606 TENTATIVE. */
1607 gcc_assert (!cl->sorted);
1608 coalesce_pair *node;
1609 coalesce_iterator_type ppi;
1610 FOR_EACH_PARTITION_PAIR (node, ppi, cl)
1612 tree v1 = ssa_name (node->first_element);
1613 int p1 = partition_find (tentative, var_to_partition (map, v1));
1614 tree v2 = ssa_name (node->second_element);
1615 int p2 = partition_find (tentative, var_to_partition (map, v2));
1617 if (p1 == p2)
1618 continue;
1620 partition_union (tentative, p1, p2);
1623 /* We have to deal with cost one pairs too. */
1624 for (cost_one_pair *co = cl->cost_one_list; co; co = co->next)
1626 tree v1 = ssa_name (co->first_element);
1627 int p1 = partition_find (tentative, var_to_partition (map, v1));
1628 tree v2 = ssa_name (co->second_element);
1629 int p2 = partition_find (tentative, var_to_partition (map, v2));
1631 if (p1 == p2)
1632 continue;
1634 partition_union (tentative, p1, p2);
1637 /* And also with abnormal edges. */
1638 basic_block bb;
1639 edge e;
1640 edge_iterator ei;
1641 FOR_EACH_BB_FN (bb, cfun)
1643 FOR_EACH_EDGE (e, ei, bb->preds)
1644 if (e->flags & EDGE_ABNORMAL)
1646 gphi_iterator gsi;
1647 for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
1648 gsi_next (&gsi))
1650 gphi *phi = gsi.phi ();
1651 tree arg = PHI_ARG_DEF (phi, e->dest_idx);
1652 if (SSA_NAME_IS_DEFAULT_DEF (arg)
1653 && (!SSA_NAME_VAR (arg)
1654 || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL))
1655 continue;
1657 tree res = PHI_RESULT (phi);
1659 int p1 = partition_find (tentative, var_to_partition (map, res));
1660 int p2 = partition_find (tentative, var_to_partition (map, arg));
1662 if (p1 == p2)
1663 continue;
1665 partition_union (tentative, p1, p2);
1670 map->partition_to_base_index = XCNEWVEC (int, parts);
1671 auto_vec<unsigned int> index_map (parts);
1672 if (parts)
1673 index_map.quick_grow (parts);
1675 const unsigned no_part = -1;
1676 unsigned count = parts;
1677 while (count)
1678 index_map[--count] = no_part;
1680 /* Initialize MAP's mapping from partition to base index, using
1681 as base indices an enumeration of the TENTATIVE partitions in
1682 which each SSA version ended up, so that we compute conflicts
1683 between all SSA versions that ended up in the same potential
1684 coalesce partition. */
1685 bitmap_iterator bi;
1686 unsigned i;
1687 EXECUTE_IF_SET_IN_BITMAP (used_in_copies, 0, i, bi)
1689 int pidx = var_to_partition (map, ssa_name (i));
1690 int base = partition_find (tentative, pidx);
1691 if (index_map[base] != no_part)
1692 continue;
1693 index_map[base] = count++;
1696 map->num_basevars = count;
1698 EXECUTE_IF_SET_IN_BITMAP (used_in_copies, 0, i, bi)
1700 int pidx = var_to_partition (map, ssa_name (i));
1701 int base = partition_find (tentative, pidx);
1702 gcc_assert (index_map[base] < count);
1703 map->partition_to_base_index[pidx] = index_map[base];
1706 if (dump_file && (dump_flags & TDF_DETAILS))
1707 dump_part_var_map (dump_file, tentative, map);
1709 partition_delete (tentative);
1712 /* Hashtable helpers. */
1714 struct tree_int_map_hasher : nofree_ptr_hash <tree_int_map>
1716 static inline hashval_t hash (const tree_int_map *);
1717 static inline bool equal (const tree_int_map *, const tree_int_map *);
1720 inline hashval_t
1721 tree_int_map_hasher::hash (const tree_int_map *v)
1723 return tree_map_base_hash (v);
1726 inline bool
1727 tree_int_map_hasher::equal (const tree_int_map *v, const tree_int_map *c)
1729 return tree_int_map_eq (v, c);
1732 /* This routine will initialize the basevar fields of MAP with base
1733 names. Partitions will share the same base if they have the same
1734 SSA_NAME_VAR, or, being anonymous variables, the same type. This
1735 must match gimple_can_coalesce_p in the non-optimized case. */
1737 static void
1738 compute_samebase_partition_bases (var_map map)
1740 int x, num_part;
1741 tree var;
1742 struct tree_int_map *m, *mapstorage;
1744 num_part = num_var_partitions (map);
1745 hash_table<tree_int_map_hasher> tree_to_index (num_part);
1746 /* We can have at most num_part entries in the hash tables, so it's
1747 enough to allocate so many map elements once, saving some malloc
1748 calls. */
1749 mapstorage = m = XNEWVEC (struct tree_int_map, num_part);
1751 /* If a base table already exists, clear it, otherwise create it. */
1752 free (map->partition_to_base_index);
1753 map->partition_to_base_index = (int *) xmalloc (sizeof (int) * num_part);
1755 /* Build the base variable list, and point partitions at their bases. */
1756 for (x = 0; x < num_part; x++)
1758 struct tree_int_map **slot;
1759 unsigned baseindex;
1760 var = partition_to_var (map, x);
1761 if (SSA_NAME_VAR (var)
1762 && (!VAR_P (SSA_NAME_VAR (var))
1763 || !DECL_IGNORED_P (SSA_NAME_VAR (var))))
1764 m->base.from = SSA_NAME_VAR (var);
1765 else
1766 /* This restricts what anonymous SSA names we can coalesce
1767 as it restricts the sets we compute conflicts for.
1768 Using TREE_TYPE to generate sets is the easiest as
1769 type equivalency also holds for SSA names with the same
1770 underlying decl.
1772 Check gimple_can_coalesce_p when changing this code. */
1773 m->base.from = (TYPE_CANONICAL (TREE_TYPE (var))
1774 ? TYPE_CANONICAL (TREE_TYPE (var))
1775 : TREE_TYPE (var));
1776 /* If base variable hasn't been seen, set it up. */
1777 slot = tree_to_index.find_slot (m, INSERT);
1778 if (!*slot)
1780 baseindex = m - mapstorage;
1781 m->to = baseindex;
1782 *slot = m;
1783 m++;
1785 else
1786 baseindex = (*slot)->to;
1787 map->partition_to_base_index[x] = baseindex;
1790 map->num_basevars = m - mapstorage;
1792 free (mapstorage);
1795 /* Reduce the number of copies by coalescing variables in the function. Return
1796 a partition map with the resulting coalesces. */
1798 extern var_map
1799 coalesce_ssa_name (void)
1801 tree_live_info_p liveinfo;
1802 ssa_conflicts *graph;
1803 coalesce_list *cl;
1804 bitmap used_in_copies = BITMAP_ALLOC (NULL);
1805 var_map map;
1806 unsigned int i;
1807 tree a;
1809 cl = create_coalesce_list ();
1810 map = create_outofssa_var_map (cl, used_in_copies);
1812 /* If this optimization is disabled, we need to coalesce all the
1813 names originating from the same SSA_NAME_VAR so debug info
1814 remains undisturbed. */
1815 if (!flag_tree_coalesce_vars)
1817 hash_table<ssa_name_var_hash> ssa_name_hash (10);
1819 FOR_EACH_SSA_NAME (i, a, cfun)
1821 if (SSA_NAME_VAR (a)
1822 && !DECL_IGNORED_P (SSA_NAME_VAR (a))
1823 && (!has_zero_uses (a) || !SSA_NAME_IS_DEFAULT_DEF (a)
1824 || !VAR_P (SSA_NAME_VAR (a))))
1826 tree *slot = ssa_name_hash.find_slot (a, INSERT);
1828 if (!*slot)
1829 *slot = a;
1830 else
1832 /* If the variable is a PARM_DECL or a RESULT_DECL, we
1833 _require_ that all the names originating from it be
1834 coalesced, because there must be a single partition
1835 containing all the names so that it can be assigned
1836 the canonical RTL location of the DECL safely.
1837 If in_lto_p, a function could have been compiled
1838 originally with optimizations and only the link
1839 performed at -O0, so we can't actually require it. */
1840 const int cost
1841 = (TREE_CODE (SSA_NAME_VAR (a)) == VAR_DECL || in_lto_p)
1842 ? MUST_COALESCE_COST - 1 : MUST_COALESCE_COST;
1843 add_coalesce (cl, SSA_NAME_VERSION (a),
1844 SSA_NAME_VERSION (*slot), cost);
1845 bitmap_set_bit (used_in_copies, SSA_NAME_VERSION (a));
1846 bitmap_set_bit (used_in_copies, SSA_NAME_VERSION (*slot));
1851 if (dump_file && (dump_flags & TDF_DETAILS))
1852 dump_var_map (dump_file, map);
1854 partition_view_bitmap (map, used_in_copies);
1856 if (flag_tree_coalesce_vars)
1857 compute_optimized_partition_bases (map, used_in_copies, cl);
1858 else
1859 compute_samebase_partition_bases (map);
1861 BITMAP_FREE (used_in_copies);
1863 if (num_var_partitions (map) < 1)
1865 delete_coalesce_list (cl);
1866 return map;
1869 if (dump_file && (dump_flags & TDF_DETAILS))
1870 dump_var_map (dump_file, map);
1872 liveinfo = calculate_live_ranges (map, false);
1874 if (dump_file && (dump_flags & TDF_DETAILS))
1875 dump_live_info (dump_file, liveinfo, LIVEDUMP_ENTRY);
1877 /* Build a conflict graph. */
1878 graph = build_ssa_conflict_graph (liveinfo);
1879 delete_tree_live_info (liveinfo);
1880 if (dump_file && (dump_flags & TDF_DETAILS))
1881 ssa_conflicts_dump (dump_file, graph);
1883 sort_coalesce_list (cl, graph, map);
1885 if (dump_file && (dump_flags & TDF_DETAILS))
1887 fprintf (dump_file, "\nAfter sorting:\n");
1888 dump_coalesce_list (dump_file, cl);
1891 /* First, coalesce all live on entry variables to their base variable.
1892 This will ensure the first use is coming from the correct location. */
1894 if (dump_file && (dump_flags & TDF_DETAILS))
1895 dump_var_map (dump_file, map);
1897 /* Now coalesce everything in the list. */
1898 coalesce_partitions (map, graph, cl,
1899 ((dump_flags & TDF_DETAILS) ? dump_file : NULL));
1901 delete_coalesce_list (cl);
1902 ssa_conflicts_delete (graph);
1904 return map;
1907 /* We need to pass two arguments to set_parm_default_def_partition,
1908 but for_all_parms only supports one. Use a pair. */
1910 typedef std::pair<var_map, bitmap> parm_default_def_partition_arg;
1912 /* Set in ARG's PARTS bitmap the bit corresponding to the partition in
1913 ARG's MAP containing VAR's default def. */
1915 static void
1916 set_parm_default_def_partition (tree var, void *arg_)
1918 parm_default_def_partition_arg *arg = (parm_default_def_partition_arg *)arg_;
1919 var_map map = arg->first;
1920 bitmap parts = arg->second;
1922 if (!is_gimple_reg (var))
1923 return;
1925 tree ssa = ssa_default_def (cfun, var);
1926 gcc_assert (ssa);
1928 int version = var_to_partition (map, ssa);
1929 gcc_assert (version != NO_PARTITION);
1931 bool changed = bitmap_set_bit (parts, version);
1932 gcc_assert (changed);
1935 /* Allocate and return a bitmap that has a bit set for each partition
1936 that contains a default def for a parameter. */
1938 extern bitmap
1939 get_parm_default_def_partitions (var_map map)
1941 bitmap parm_default_def_parts = BITMAP_ALLOC (NULL);
1943 parm_default_def_partition_arg
1944 arg = std::make_pair (map, parm_default_def_parts);
1946 for_all_parms (set_parm_default_def_partition, &arg);
1948 return parm_default_def_parts;