]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/loop-invariant.c
Update Copyright years for files modified in 2011 and/or 2012.
[thirdparty/gcc.git] / gcc / loop-invariant.c
1 /* RTL-level loop invariant motion.
2 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
3 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
10 later version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 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 /* This implements the loop invariant motion pass. It is very simple
22 (no calls, no loads/stores, etc.). This should be sufficient to cleanup
23 things like address arithmetics -- other more complicated invariants should
24 be eliminated on GIMPLE either in tree-ssa-loop-im.c or in tree-ssa-pre.c.
25
26 We proceed loop by loop -- it is simpler than trying to handle things
27 globally and should not lose much. First we inspect all sets inside loop
28 and create a dependency graph on insns (saying "to move this insn, you must
29 also move the following insns").
30
31 We then need to determine what to move. We estimate the number of registers
32 used and move as many invariants as possible while we still have enough free
33 registers. We prefer the expensive invariants.
34
35 Then we move the selected invariants out of the loop, creating a new
36 temporaries for them if necessary. */
37
38 #include "config.h"
39 #include "system.h"
40 #include "coretypes.h"
41 #include "tm.h"
42 #include "hard-reg-set.h"
43 #include "rtl.h"
44 #include "tm_p.h"
45 #include "obstack.h"
46 #include "basic-block.h"
47 #include "cfgloop.h"
48 #include "expr.h"
49 #include "recog.h"
50 #include "target.h"
51 #include "function.h"
52 #include "flags.h"
53 #include "df.h"
54 #include "hashtab.h"
55 #include "except.h"
56 #include "params.h"
57 #include "regs.h"
58 #include "ira.h"
59 #include "dumpfile.h"
60
61 /* The data stored for the loop. */
62
63 struct loop_data
64 {
65 struct loop *outermost_exit; /* The outermost exit of the loop. */
66 bool has_call; /* True if the loop contains a call. */
67 /* Maximal register pressure inside loop for given register class
68 (defined only for the pressure classes). */
69 int max_reg_pressure[N_REG_CLASSES];
70 /* Loop regs referenced and live pseudo-registers. */
71 bitmap_head regs_ref;
72 bitmap_head regs_live;
73 };
74
75 #define LOOP_DATA(LOOP) ((struct loop_data *) (LOOP)->aux)
76
77 /* The description of an use. */
78
79 struct use
80 {
81 rtx *pos; /* Position of the use. */
82 rtx insn; /* The insn in that the use occurs. */
83 unsigned addr_use_p; /* Whether the use occurs in an address. */
84 struct use *next; /* Next use in the list. */
85 };
86
87 /* The description of a def. */
88
89 struct def
90 {
91 struct use *uses; /* The list of uses that are uniquely reached
92 by it. */
93 unsigned n_uses; /* Number of such uses. */
94 unsigned n_addr_uses; /* Number of uses in addresses. */
95 unsigned invno; /* The corresponding invariant. */
96 };
97
98 /* The data stored for each invariant. */
99
100 struct invariant
101 {
102 /* The number of the invariant. */
103 unsigned invno;
104
105 /* The number of the invariant with the same value. */
106 unsigned eqto;
107
108 /* If we moved the invariant out of the loop, the register that contains its
109 value. */
110 rtx reg;
111
112 /* If we moved the invariant out of the loop, the original regno
113 that contained its value. */
114 int orig_regno;
115
116 /* The definition of the invariant. */
117 struct def *def;
118
119 /* The insn in that it is defined. */
120 rtx insn;
121
122 /* Whether it is always executed. */
123 bool always_executed;
124
125 /* Whether to move the invariant. */
126 bool move;
127
128 /* Whether the invariant is cheap when used as an address. */
129 bool cheap_address;
130
131 /* Cost of the invariant. */
132 unsigned cost;
133
134 /* The invariants it depends on. */
135 bitmap depends_on;
136
137 /* Used for detecting already visited invariants during determining
138 costs of movements. */
139 unsigned stamp;
140 };
141
142 /* Currently processed loop. */
143 static struct loop *curr_loop;
144
145 /* Table of invariants indexed by the df_ref uid field. */
146
147 static unsigned int invariant_table_size = 0;
148 static struct invariant ** invariant_table;
149
150 /* Entry for hash table of invariant expressions. */
151
152 struct invariant_expr_entry
153 {
154 /* The invariant. */
155 struct invariant *inv;
156
157 /* Its value. */
158 rtx expr;
159
160 /* Its mode. */
161 enum machine_mode mode;
162
163 /* Its hash. */
164 hashval_t hash;
165 };
166
167 /* The actual stamp for marking already visited invariants during determining
168 costs of movements. */
169
170 static unsigned actual_stamp;
171
172 typedef struct invariant *invariant_p;
173
174
175 /* The invariants. */
176
177 static vec<invariant_p> invariants;
178
179 /* Check the size of the invariant table and realloc if necessary. */
180
181 static void
182 check_invariant_table_size (void)
183 {
184 if (invariant_table_size < DF_DEFS_TABLE_SIZE())
185 {
186 unsigned int new_size = DF_DEFS_TABLE_SIZE () + (DF_DEFS_TABLE_SIZE () / 4);
187 invariant_table = XRESIZEVEC (struct invariant *, invariant_table, new_size);
188 memset (&invariant_table[invariant_table_size], 0,
189 (new_size - invariant_table_size) * sizeof (struct invariant *));
190 invariant_table_size = new_size;
191 }
192 }
193
194 /* Test for possibility of invariantness of X. */
195
196 static bool
197 check_maybe_invariant (rtx x)
198 {
199 enum rtx_code code = GET_CODE (x);
200 int i, j;
201 const char *fmt;
202
203 switch (code)
204 {
205 CASE_CONST_ANY:
206 case SYMBOL_REF:
207 case CONST:
208 case LABEL_REF:
209 return true;
210
211 case PC:
212 case CC0:
213 case UNSPEC_VOLATILE:
214 case CALL:
215 return false;
216
217 case REG:
218 return true;
219
220 case MEM:
221 /* Load/store motion is done elsewhere. ??? Perhaps also add it here?
222 It should not be hard, and might be faster than "elsewhere". */
223
224 /* Just handle the most trivial case where we load from an unchanging
225 location (most importantly, pic tables). */
226 if (MEM_READONLY_P (x) && !MEM_VOLATILE_P (x))
227 break;
228
229 return false;
230
231 case ASM_OPERANDS:
232 /* Don't mess with insns declared volatile. */
233 if (MEM_VOLATILE_P (x))
234 return false;
235 break;
236
237 default:
238 break;
239 }
240
241 fmt = GET_RTX_FORMAT (code);
242 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
243 {
244 if (fmt[i] == 'e')
245 {
246 if (!check_maybe_invariant (XEXP (x, i)))
247 return false;
248 }
249 else if (fmt[i] == 'E')
250 {
251 for (j = 0; j < XVECLEN (x, i); j++)
252 if (!check_maybe_invariant (XVECEXP (x, i, j)))
253 return false;
254 }
255 }
256
257 return true;
258 }
259
260 /* Returns the invariant definition for USE, or NULL if USE is not
261 invariant. */
262
263 static struct invariant *
264 invariant_for_use (df_ref use)
265 {
266 struct df_link *defs;
267 df_ref def;
268 basic_block bb = DF_REF_BB (use), def_bb;
269
270 if (DF_REF_FLAGS (use) & DF_REF_READ_WRITE)
271 return NULL;
272
273 defs = DF_REF_CHAIN (use);
274 if (!defs || defs->next)
275 return NULL;
276 def = defs->ref;
277 check_invariant_table_size ();
278 if (!invariant_table[DF_REF_ID(def)])
279 return NULL;
280
281 def_bb = DF_REF_BB (def);
282 if (!dominated_by_p (CDI_DOMINATORS, bb, def_bb))
283 return NULL;
284 return invariant_table[DF_REF_ID(def)];
285 }
286
287 /* Computes hash value for invariant expression X in INSN. */
288
289 static hashval_t
290 hash_invariant_expr_1 (rtx insn, rtx x)
291 {
292 enum rtx_code code = GET_CODE (x);
293 int i, j;
294 const char *fmt;
295 hashval_t val = code;
296 int do_not_record_p;
297 df_ref use;
298 struct invariant *inv;
299
300 switch (code)
301 {
302 CASE_CONST_ANY:
303 case SYMBOL_REF:
304 case CONST:
305 case LABEL_REF:
306 return hash_rtx (x, GET_MODE (x), &do_not_record_p, NULL, false);
307
308 case REG:
309 use = df_find_use (insn, x);
310 if (!use)
311 return hash_rtx (x, GET_MODE (x), &do_not_record_p, NULL, false);
312 inv = invariant_for_use (use);
313 if (!inv)
314 return hash_rtx (x, GET_MODE (x), &do_not_record_p, NULL, false);
315
316 gcc_assert (inv->eqto != ~0u);
317 return inv->eqto;
318
319 default:
320 break;
321 }
322
323 fmt = GET_RTX_FORMAT (code);
324 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
325 {
326 if (fmt[i] == 'e')
327 val ^= hash_invariant_expr_1 (insn, XEXP (x, i));
328 else if (fmt[i] == 'E')
329 {
330 for (j = 0; j < XVECLEN (x, i); j++)
331 val ^= hash_invariant_expr_1 (insn, XVECEXP (x, i, j));
332 }
333 else if (fmt[i] == 'i' || fmt[i] == 'n')
334 val ^= XINT (x, i);
335 }
336
337 return val;
338 }
339
340 /* Returns true if the invariant expressions E1 and E2 used in insns INSN1
341 and INSN2 have always the same value. */
342
343 static bool
344 invariant_expr_equal_p (rtx insn1, rtx e1, rtx insn2, rtx e2)
345 {
346 enum rtx_code code = GET_CODE (e1);
347 int i, j;
348 const char *fmt;
349 df_ref use1, use2;
350 struct invariant *inv1 = NULL, *inv2 = NULL;
351 rtx sub1, sub2;
352
353 /* If mode of only one of the operands is VOIDmode, it is not equivalent to
354 the other one. If both are VOIDmode, we rely on the caller of this
355 function to verify that their modes are the same. */
356 if (code != GET_CODE (e2) || GET_MODE (e1) != GET_MODE (e2))
357 return false;
358
359 switch (code)
360 {
361 CASE_CONST_ANY:
362 case SYMBOL_REF:
363 case CONST:
364 case LABEL_REF:
365 return rtx_equal_p (e1, e2);
366
367 case REG:
368 use1 = df_find_use (insn1, e1);
369 use2 = df_find_use (insn2, e2);
370 if (use1)
371 inv1 = invariant_for_use (use1);
372 if (use2)
373 inv2 = invariant_for_use (use2);
374
375 if (!inv1 && !inv2)
376 return rtx_equal_p (e1, e2);
377
378 if (!inv1 || !inv2)
379 return false;
380
381 gcc_assert (inv1->eqto != ~0u);
382 gcc_assert (inv2->eqto != ~0u);
383 return inv1->eqto == inv2->eqto;
384
385 default:
386 break;
387 }
388
389 fmt = GET_RTX_FORMAT (code);
390 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
391 {
392 if (fmt[i] == 'e')
393 {
394 sub1 = XEXP (e1, i);
395 sub2 = XEXP (e2, i);
396
397 if (!invariant_expr_equal_p (insn1, sub1, insn2, sub2))
398 return false;
399 }
400
401 else if (fmt[i] == 'E')
402 {
403 if (XVECLEN (e1, i) != XVECLEN (e2, i))
404 return false;
405
406 for (j = 0; j < XVECLEN (e1, i); j++)
407 {
408 sub1 = XVECEXP (e1, i, j);
409 sub2 = XVECEXP (e2, i, j);
410
411 if (!invariant_expr_equal_p (insn1, sub1, insn2, sub2))
412 return false;
413 }
414 }
415 else if (fmt[i] == 'i' || fmt[i] == 'n')
416 {
417 if (XINT (e1, i) != XINT (e2, i))
418 return false;
419 }
420 /* Unhandled type of subexpression, we fail conservatively. */
421 else
422 return false;
423 }
424
425 return true;
426 }
427
428 /* Returns hash value for invariant expression entry E. */
429
430 static hashval_t
431 hash_invariant_expr (const void *e)
432 {
433 const struct invariant_expr_entry *const entry =
434 (const struct invariant_expr_entry *) e;
435
436 return entry->hash;
437 }
438
439 /* Compares invariant expression entries E1 and E2. */
440
441 static int
442 eq_invariant_expr (const void *e1, const void *e2)
443 {
444 const struct invariant_expr_entry *const entry1 =
445 (const struct invariant_expr_entry *) e1;
446 const struct invariant_expr_entry *const entry2 =
447 (const struct invariant_expr_entry *) e2;
448
449 if (entry1->mode != entry2->mode)
450 return 0;
451
452 return invariant_expr_equal_p (entry1->inv->insn, entry1->expr,
453 entry2->inv->insn, entry2->expr);
454 }
455
456 /* Checks whether invariant with value EXPR in machine mode MODE is
457 recorded in EQ. If this is the case, return the invariant. Otherwise
458 insert INV to the table for this expression and return INV. */
459
460 static struct invariant *
461 find_or_insert_inv (htab_t eq, rtx expr, enum machine_mode mode,
462 struct invariant *inv)
463 {
464 hashval_t hash = hash_invariant_expr_1 (inv->insn, expr);
465 struct invariant_expr_entry *entry;
466 struct invariant_expr_entry pentry;
467 PTR *slot;
468
469 pentry.expr = expr;
470 pentry.inv = inv;
471 pentry.mode = mode;
472 slot = htab_find_slot_with_hash (eq, &pentry, hash, INSERT);
473 entry = (struct invariant_expr_entry *) *slot;
474
475 if (entry)
476 return entry->inv;
477
478 entry = XNEW (struct invariant_expr_entry);
479 entry->inv = inv;
480 entry->expr = expr;
481 entry->mode = mode;
482 entry->hash = hash;
483 *slot = entry;
484
485 return inv;
486 }
487
488 /* Finds invariants identical to INV and records the equivalence. EQ is the
489 hash table of the invariants. */
490
491 static void
492 find_identical_invariants (htab_t eq, struct invariant *inv)
493 {
494 unsigned depno;
495 bitmap_iterator bi;
496 struct invariant *dep;
497 rtx expr, set;
498 enum machine_mode mode;
499
500 if (inv->eqto != ~0u)
501 return;
502
503 EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, depno, bi)
504 {
505 dep = invariants[depno];
506 find_identical_invariants (eq, dep);
507 }
508
509 set = single_set (inv->insn);
510 expr = SET_SRC (set);
511 mode = GET_MODE (expr);
512 if (mode == VOIDmode)
513 mode = GET_MODE (SET_DEST (set));
514 inv->eqto = find_or_insert_inv (eq, expr, mode, inv)->invno;
515
516 if (dump_file && inv->eqto != inv->invno)
517 fprintf (dump_file,
518 "Invariant %d is equivalent to invariant %d.\n",
519 inv->invno, inv->eqto);
520 }
521
522 /* Find invariants with the same value and record the equivalences. */
523
524 static void
525 merge_identical_invariants (void)
526 {
527 unsigned i;
528 struct invariant *inv;
529 htab_t eq = htab_create (invariants.length (),
530 hash_invariant_expr, eq_invariant_expr, free);
531
532 FOR_EACH_VEC_ELT (invariants, i, inv)
533 find_identical_invariants (eq, inv);
534
535 htab_delete (eq);
536 }
537
538 /* Determines the basic blocks inside LOOP that are always executed and
539 stores their bitmap to ALWAYS_REACHED. MAY_EXIT is a bitmap of
540 basic blocks that may either exit the loop, or contain the call that
541 does not have to return. BODY is body of the loop obtained by
542 get_loop_body_in_dom_order. */
543
544 static void
545 compute_always_reached (struct loop *loop, basic_block *body,
546 bitmap may_exit, bitmap always_reached)
547 {
548 unsigned i;
549
550 for (i = 0; i < loop->num_nodes; i++)
551 {
552 if (dominated_by_p (CDI_DOMINATORS, loop->latch, body[i]))
553 bitmap_set_bit (always_reached, i);
554
555 if (bitmap_bit_p (may_exit, i))
556 return;
557 }
558 }
559
560 /* Finds exits out of the LOOP with body BODY. Marks blocks in that we may
561 exit the loop by cfg edge to HAS_EXIT and MAY_EXIT. In MAY_EXIT
562 additionally mark blocks that may exit due to a call. */
563
564 static void
565 find_exits (struct loop *loop, basic_block *body,
566 bitmap may_exit, bitmap has_exit)
567 {
568 unsigned i;
569 edge_iterator ei;
570 edge e;
571 struct loop *outermost_exit = loop, *aexit;
572 bool has_call = false;
573 rtx insn;
574
575 for (i = 0; i < loop->num_nodes; i++)
576 {
577 if (body[i]->loop_father == loop)
578 {
579 FOR_BB_INSNS (body[i], insn)
580 {
581 if (CALL_P (insn)
582 && (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
583 || !RTL_CONST_OR_PURE_CALL_P (insn)))
584 {
585 has_call = true;
586 bitmap_set_bit (may_exit, i);
587 break;
588 }
589 }
590
591 FOR_EACH_EDGE (e, ei, body[i]->succs)
592 {
593 if (flow_bb_inside_loop_p (loop, e->dest))
594 continue;
595
596 bitmap_set_bit (may_exit, i);
597 bitmap_set_bit (has_exit, i);
598 outermost_exit = find_common_loop (outermost_exit,
599 e->dest->loop_father);
600 }
601 continue;
602 }
603
604 /* Use the data stored for the subloop to decide whether we may exit
605 through it. It is sufficient to do this for header of the loop,
606 as other basic blocks inside it must be dominated by it. */
607 if (body[i]->loop_father->header != body[i])
608 continue;
609
610 if (LOOP_DATA (body[i]->loop_father)->has_call)
611 {
612 has_call = true;
613 bitmap_set_bit (may_exit, i);
614 }
615 aexit = LOOP_DATA (body[i]->loop_father)->outermost_exit;
616 if (aexit != loop)
617 {
618 bitmap_set_bit (may_exit, i);
619 bitmap_set_bit (has_exit, i);
620
621 if (flow_loop_nested_p (aexit, outermost_exit))
622 outermost_exit = aexit;
623 }
624 }
625
626 if (loop->aux == NULL)
627 {
628 loop->aux = xcalloc (1, sizeof (struct loop_data));
629 bitmap_initialize (&LOOP_DATA (loop)->regs_ref, &reg_obstack);
630 bitmap_initialize (&LOOP_DATA (loop)->regs_live, &reg_obstack);
631 }
632 LOOP_DATA (loop)->outermost_exit = outermost_exit;
633 LOOP_DATA (loop)->has_call = has_call;
634 }
635
636 /* Check whether we may assign a value to X from a register. */
637
638 static bool
639 may_assign_reg_p (rtx x)
640 {
641 return (GET_MODE (x) != VOIDmode
642 && GET_MODE (x) != BLKmode
643 && can_copy_p (GET_MODE (x))
644 && (!REG_P (x)
645 || !HARD_REGISTER_P (x)
646 || REGNO_REG_CLASS (REGNO (x)) != NO_REGS));
647 }
648
649 /* Finds definitions that may correspond to invariants in LOOP with body
650 BODY. */
651
652 static void
653 find_defs (struct loop *loop, basic_block *body)
654 {
655 unsigned i;
656 bitmap blocks = BITMAP_ALLOC (NULL);
657
658 for (i = 0; i < loop->num_nodes; i++)
659 bitmap_set_bit (blocks, body[i]->index);
660
661 if (dump_file)
662 {
663 fprintf (dump_file,
664 "*****starting processing of loop %d ******\n",
665 loop->num);
666 }
667
668 df_remove_problem (df_chain);
669 df_process_deferred_rescans ();
670 df_chain_add_problem (DF_UD_CHAIN);
671 df_set_blocks (blocks);
672 df_set_flags (DF_RD_PRUNE_DEAD_DEFS);
673 df_analyze ();
674 check_invariant_table_size ();
675
676 if (dump_file)
677 {
678 df_dump_region (dump_file);
679 fprintf (dump_file,
680 "*****ending processing of loop %d ******\n",
681 loop->num);
682 }
683
684 BITMAP_FREE (blocks);
685 }
686
687 /* Creates a new invariant for definition DEF in INSN, depending on invariants
688 in DEPENDS_ON. ALWAYS_EXECUTED is true if the insn is always executed,
689 unless the program ends due to a function call. The newly created invariant
690 is returned. */
691
692 static struct invariant *
693 create_new_invariant (struct def *def, rtx insn, bitmap depends_on,
694 bool always_executed)
695 {
696 struct invariant *inv = XNEW (struct invariant);
697 rtx set = single_set (insn);
698 bool speed = optimize_bb_for_speed_p (BLOCK_FOR_INSN (insn));
699
700 inv->def = def;
701 inv->always_executed = always_executed;
702 inv->depends_on = depends_on;
703
704 /* If the set is simple, usually by moving it we move the whole store out of
705 the loop. Otherwise we save only cost of the computation. */
706 if (def)
707 {
708 inv->cost = set_rtx_cost (set, speed);
709 /* ??? Try to determine cheapness of address computation. Unfortunately
710 the address cost is only a relative measure, we can't really compare
711 it with any absolute number, but only with other address costs.
712 But here we don't have any other addresses, so compare with a magic
713 number anyway. It has to be large enough to not regress PR33928
714 (by avoiding to move reg+8,reg+16,reg+24 invariants), but small
715 enough to not regress 410.bwaves either (by still moving reg+reg
716 invariants).
717 See http://gcc.gnu.org/ml/gcc-patches/2009-10/msg01210.html . */
718 inv->cheap_address = address_cost (SET_SRC (set), word_mode,
719 ADDR_SPACE_GENERIC, speed) < 3;
720 }
721 else
722 {
723 inv->cost = set_src_cost (SET_SRC (set), speed);
724 inv->cheap_address = false;
725 }
726
727 inv->move = false;
728 inv->reg = NULL_RTX;
729 inv->orig_regno = -1;
730 inv->stamp = 0;
731 inv->insn = insn;
732
733 inv->invno = invariants.length ();
734 inv->eqto = ~0u;
735 if (def)
736 def->invno = inv->invno;
737 invariants.safe_push (inv);
738
739 if (dump_file)
740 {
741 fprintf (dump_file,
742 "Set in insn %d is invariant (%d), cost %d, depends on ",
743 INSN_UID (insn), inv->invno, inv->cost);
744 dump_bitmap (dump_file, inv->depends_on);
745 }
746
747 return inv;
748 }
749
750 /* Record USE at DEF. */
751
752 static void
753 record_use (struct def *def, df_ref use)
754 {
755 struct use *u = XNEW (struct use);
756
757 u->pos = DF_REF_REAL_LOC (use);
758 u->insn = DF_REF_INSN (use);
759 u->addr_use_p = (DF_REF_TYPE (use) == DF_REF_REG_MEM_LOAD
760 || DF_REF_TYPE (use) == DF_REF_REG_MEM_STORE);
761 u->next = def->uses;
762 def->uses = u;
763 def->n_uses++;
764 if (u->addr_use_p)
765 def->n_addr_uses++;
766 }
767
768 /* Finds the invariants USE depends on and store them to the DEPENDS_ON
769 bitmap. Returns true if all dependencies of USE are known to be
770 loop invariants, false otherwise. */
771
772 static bool
773 check_dependency (basic_block bb, df_ref use, bitmap depends_on)
774 {
775 df_ref def;
776 basic_block def_bb;
777 struct df_link *defs;
778 struct def *def_data;
779 struct invariant *inv;
780
781 if (DF_REF_FLAGS (use) & DF_REF_READ_WRITE)
782 return false;
783
784 defs = DF_REF_CHAIN (use);
785 if (!defs)
786 {
787 unsigned int regno = DF_REF_REGNO (use);
788
789 /* If this is the use of an uninitialized argument register that is
790 likely to be spilled, do not move it lest this might extend its
791 lifetime and cause reload to die. This can occur for a call to
792 a function taking complex number arguments and moving the insns
793 preparing the arguments without moving the call itself wouldn't
794 gain much in practice. */
795 if ((DF_REF_FLAGS (use) & DF_HARD_REG_LIVE)
796 && FUNCTION_ARG_REGNO_P (regno)
797 && targetm.class_likely_spilled_p (REGNO_REG_CLASS (regno)))
798 return false;
799
800 return true;
801 }
802
803 if (defs->next)
804 return false;
805
806 def = defs->ref;
807 check_invariant_table_size ();
808 inv = invariant_table[DF_REF_ID(def)];
809 if (!inv)
810 return false;
811
812 def_data = inv->def;
813 gcc_assert (def_data != NULL);
814
815 def_bb = DF_REF_BB (def);
816 /* Note that in case bb == def_bb, we know that the definition
817 dominates insn, because def has invariant_table[DF_REF_ID(def)]
818 defined and we process the insns in the basic block bb
819 sequentially. */
820 if (!dominated_by_p (CDI_DOMINATORS, bb, def_bb))
821 return false;
822
823 bitmap_set_bit (depends_on, def_data->invno);
824 return true;
825 }
826
827
828 /* Finds the invariants INSN depends on and store them to the DEPENDS_ON
829 bitmap. Returns true if all dependencies of INSN are known to be
830 loop invariants, false otherwise. */
831
832 static bool
833 check_dependencies (rtx insn, bitmap depends_on)
834 {
835 struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
836 df_ref *use_rec;
837 basic_block bb = BLOCK_FOR_INSN (insn);
838
839 for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++)
840 if (!check_dependency (bb, *use_rec, depends_on))
841 return false;
842 for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++)
843 if (!check_dependency (bb, *use_rec, depends_on))
844 return false;
845
846 return true;
847 }
848
849 /* Finds invariant in INSN. ALWAYS_REACHED is true if the insn is always
850 executed. ALWAYS_EXECUTED is true if the insn is always executed,
851 unless the program ends due to a function call. */
852
853 static void
854 find_invariant_insn (rtx insn, bool always_reached, bool always_executed)
855 {
856 df_ref ref;
857 struct def *def;
858 bitmap depends_on;
859 rtx set, dest;
860 bool simple = true;
861 struct invariant *inv;
862
863 #ifdef HAVE_cc0
864 /* We can't move a CC0 setter without the user. */
865 if (sets_cc0_p (insn))
866 return;
867 #endif
868
869 set = single_set (insn);
870 if (!set)
871 return;
872 dest = SET_DEST (set);
873
874 if (!REG_P (dest)
875 || HARD_REGISTER_P (dest))
876 simple = false;
877
878 if (!may_assign_reg_p (SET_DEST (set))
879 || !check_maybe_invariant (SET_SRC (set)))
880 return;
881
882 /* If the insn can throw exception, we cannot move it at all without changing
883 cfg. */
884 if (can_throw_internal (insn))
885 return;
886
887 /* We cannot make trapping insn executed, unless it was executed before. */
888 if (may_trap_or_fault_p (PATTERN (insn)) && !always_reached)
889 return;
890
891 depends_on = BITMAP_ALLOC (NULL);
892 if (!check_dependencies (insn, depends_on))
893 {
894 BITMAP_FREE (depends_on);
895 return;
896 }
897
898 if (simple)
899 def = XCNEW (struct def);
900 else
901 def = NULL;
902
903 inv = create_new_invariant (def, insn, depends_on, always_executed);
904
905 if (simple)
906 {
907 ref = df_find_def (insn, dest);
908 check_invariant_table_size ();
909 invariant_table[DF_REF_ID(ref)] = inv;
910 }
911 }
912
913 /* Record registers used in INSN that have a unique invariant definition. */
914
915 static void
916 record_uses (rtx insn)
917 {
918 struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
919 df_ref *use_rec;
920 struct invariant *inv;
921
922 for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++)
923 {
924 df_ref use = *use_rec;
925 inv = invariant_for_use (use);
926 if (inv)
927 record_use (inv->def, use);
928 }
929 for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++)
930 {
931 df_ref use = *use_rec;
932 inv = invariant_for_use (use);
933 if (inv)
934 record_use (inv->def, use);
935 }
936 }
937
938 /* Finds invariants in INSN. ALWAYS_REACHED is true if the insn is always
939 executed. ALWAYS_EXECUTED is true if the insn is always executed,
940 unless the program ends due to a function call. */
941
942 static void
943 find_invariants_insn (rtx insn, bool always_reached, bool always_executed)
944 {
945 find_invariant_insn (insn, always_reached, always_executed);
946 record_uses (insn);
947 }
948
949 /* Finds invariants in basic block BB. ALWAYS_REACHED is true if the
950 basic block is always executed. ALWAYS_EXECUTED is true if the basic
951 block is always executed, unless the program ends due to a function
952 call. */
953
954 static void
955 find_invariants_bb (basic_block bb, bool always_reached, bool always_executed)
956 {
957 rtx insn;
958
959 FOR_BB_INSNS (bb, insn)
960 {
961 if (!NONDEBUG_INSN_P (insn))
962 continue;
963
964 find_invariants_insn (insn, always_reached, always_executed);
965
966 if (always_reached
967 && CALL_P (insn)
968 && (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
969 || ! RTL_CONST_OR_PURE_CALL_P (insn)))
970 always_reached = false;
971 }
972 }
973
974 /* Finds invariants in LOOP with body BODY. ALWAYS_REACHED is the bitmap of
975 basic blocks in BODY that are always executed. ALWAYS_EXECUTED is the
976 bitmap of basic blocks in BODY that are always executed unless the program
977 ends due to a function call. */
978
979 static void
980 find_invariants_body (struct loop *loop, basic_block *body,
981 bitmap always_reached, bitmap always_executed)
982 {
983 unsigned i;
984
985 for (i = 0; i < loop->num_nodes; i++)
986 find_invariants_bb (body[i],
987 bitmap_bit_p (always_reached, i),
988 bitmap_bit_p (always_executed, i));
989 }
990
991 /* Finds invariants in LOOP. */
992
993 static void
994 find_invariants (struct loop *loop)
995 {
996 bitmap may_exit = BITMAP_ALLOC (NULL);
997 bitmap always_reached = BITMAP_ALLOC (NULL);
998 bitmap has_exit = BITMAP_ALLOC (NULL);
999 bitmap always_executed = BITMAP_ALLOC (NULL);
1000 basic_block *body = get_loop_body_in_dom_order (loop);
1001
1002 find_exits (loop, body, may_exit, has_exit);
1003 compute_always_reached (loop, body, may_exit, always_reached);
1004 compute_always_reached (loop, body, has_exit, always_executed);
1005
1006 find_defs (loop, body);
1007 find_invariants_body (loop, body, always_reached, always_executed);
1008 merge_identical_invariants ();
1009
1010 BITMAP_FREE (always_reached);
1011 BITMAP_FREE (always_executed);
1012 BITMAP_FREE (may_exit);
1013 BITMAP_FREE (has_exit);
1014 free (body);
1015 }
1016
1017 /* Frees a list of uses USE. */
1018
1019 static void
1020 free_use_list (struct use *use)
1021 {
1022 struct use *next;
1023
1024 for (; use; use = next)
1025 {
1026 next = use->next;
1027 free (use);
1028 }
1029 }
1030
1031 /* Return pressure class and number of hard registers (through *NREGS)
1032 for destination of INSN. */
1033 static enum reg_class
1034 get_pressure_class_and_nregs (rtx insn, int *nregs)
1035 {
1036 rtx reg;
1037 enum reg_class pressure_class;
1038 rtx set = single_set (insn);
1039
1040 /* Considered invariant insns have only one set. */
1041 gcc_assert (set != NULL_RTX);
1042 reg = SET_DEST (set);
1043 if (GET_CODE (reg) == SUBREG)
1044 reg = SUBREG_REG (reg);
1045 if (MEM_P (reg))
1046 {
1047 *nregs = 0;
1048 pressure_class = NO_REGS;
1049 }
1050 else
1051 {
1052 if (! REG_P (reg))
1053 reg = NULL_RTX;
1054 if (reg == NULL_RTX)
1055 pressure_class = GENERAL_REGS;
1056 else
1057 {
1058 pressure_class = reg_allocno_class (REGNO (reg));
1059 pressure_class = ira_pressure_class_translate[pressure_class];
1060 }
1061 *nregs
1062 = ira_reg_class_max_nregs[pressure_class][GET_MODE (SET_SRC (set))];
1063 }
1064 return pressure_class;
1065 }
1066
1067 /* Calculates cost and number of registers needed for moving invariant INV
1068 out of the loop and stores them to *COST and *REGS_NEEDED. */
1069
1070 static void
1071 get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed)
1072 {
1073 int i, acomp_cost;
1074 unsigned aregs_needed[N_REG_CLASSES];
1075 unsigned depno;
1076 struct invariant *dep;
1077 bitmap_iterator bi;
1078
1079 /* Find the representative of the class of the equivalent invariants. */
1080 inv = invariants[inv->eqto];
1081
1082 *comp_cost = 0;
1083 if (! flag_ira_loop_pressure)
1084 regs_needed[0] = 0;
1085 else
1086 {
1087 for (i = 0; i < ira_pressure_classes_num; i++)
1088 regs_needed[ira_pressure_classes[i]] = 0;
1089 }
1090
1091 if (inv->move
1092 || inv->stamp == actual_stamp)
1093 return;
1094 inv->stamp = actual_stamp;
1095
1096 if (! flag_ira_loop_pressure)
1097 regs_needed[0]++;
1098 else
1099 {
1100 int nregs;
1101 enum reg_class pressure_class;
1102
1103 pressure_class = get_pressure_class_and_nregs (inv->insn, &nregs);
1104 regs_needed[pressure_class] += nregs;
1105 }
1106
1107 if (!inv->cheap_address
1108 || inv->def->n_addr_uses < inv->def->n_uses)
1109 (*comp_cost) += inv->cost;
1110
1111 #ifdef STACK_REGS
1112 {
1113 /* Hoisting constant pool constants into stack regs may cost more than
1114 just single register. On x87, the balance is affected both by the
1115 small number of FP registers, and by its register stack organization,
1116 that forces us to add compensation code in and around the loop to
1117 shuffle the operands to the top of stack before use, and pop them
1118 from the stack after the loop finishes.
1119
1120 To model this effect, we increase the number of registers needed for
1121 stack registers by two: one register push, and one register pop.
1122 This usually has the effect that FP constant loads from the constant
1123 pool are not moved out of the loop.
1124
1125 Note that this also means that dependent invariants can not be moved.
1126 However, the primary purpose of this pass is to move loop invariant
1127 address arithmetic out of loops, and address arithmetic that depends
1128 on floating point constants is unlikely to ever occur. */
1129 rtx set = single_set (inv->insn);
1130 if (set
1131 && IS_STACK_MODE (GET_MODE (SET_SRC (set)))
1132 && constant_pool_constant_p (SET_SRC (set)))
1133 {
1134 if (flag_ira_loop_pressure)
1135 regs_needed[ira_stack_reg_pressure_class] += 2;
1136 else
1137 regs_needed[0] += 2;
1138 }
1139 }
1140 #endif
1141
1142 EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, depno, bi)
1143 {
1144 bool check_p;
1145
1146 dep = invariants[depno];
1147
1148 get_inv_cost (dep, &acomp_cost, aregs_needed);
1149
1150 if (! flag_ira_loop_pressure)
1151 check_p = aregs_needed[0] != 0;
1152 else
1153 {
1154 for (i = 0; i < ira_pressure_classes_num; i++)
1155 if (aregs_needed[ira_pressure_classes[i]] != 0)
1156 break;
1157 check_p = i < ira_pressure_classes_num;
1158 }
1159 if (check_p
1160 /* We need to check always_executed, since if the original value of
1161 the invariant may be preserved, we may need to keep it in a
1162 separate register. TODO check whether the register has an
1163 use outside of the loop. */
1164 && dep->always_executed
1165 && !dep->def->uses->next)
1166 {
1167 /* If this is a single use, after moving the dependency we will not
1168 need a new register. */
1169 if (! flag_ira_loop_pressure)
1170 aregs_needed[0]--;
1171 else
1172 {
1173 int nregs;
1174 enum reg_class pressure_class;
1175
1176 pressure_class = get_pressure_class_and_nregs (inv->insn, &nregs);
1177 aregs_needed[pressure_class] -= nregs;
1178 }
1179 }
1180
1181 if (! flag_ira_loop_pressure)
1182 regs_needed[0] += aregs_needed[0];
1183 else
1184 {
1185 for (i = 0; i < ira_pressure_classes_num; i++)
1186 regs_needed[ira_pressure_classes[i]]
1187 += aregs_needed[ira_pressure_classes[i]];
1188 }
1189 (*comp_cost) += acomp_cost;
1190 }
1191 }
1192
1193 /* Calculates gain for eliminating invariant INV. REGS_USED is the number
1194 of registers used in the loop, NEW_REGS is the number of new variables
1195 already added due to the invariant motion. The number of registers needed
1196 for it is stored in *REGS_NEEDED. SPEED and CALL_P are flags passed
1197 through to estimate_reg_pressure_cost. */
1198
1199 static int
1200 gain_for_invariant (struct invariant *inv, unsigned *regs_needed,
1201 unsigned *new_regs, unsigned regs_used,
1202 bool speed, bool call_p)
1203 {
1204 int comp_cost, size_cost;
1205
1206 actual_stamp++;
1207
1208 get_inv_cost (inv, &comp_cost, regs_needed);
1209
1210 if (! flag_ira_loop_pressure)
1211 {
1212 size_cost = (estimate_reg_pressure_cost (new_regs[0] + regs_needed[0],
1213 regs_used, speed, call_p)
1214 - estimate_reg_pressure_cost (new_regs[0],
1215 regs_used, speed, call_p));
1216 }
1217 else
1218 {
1219 int i;
1220 enum reg_class pressure_class;
1221
1222 for (i = 0; i < ira_pressure_classes_num; i++)
1223 {
1224 pressure_class = ira_pressure_classes[i];
1225 if ((int) new_regs[pressure_class]
1226 + (int) regs_needed[pressure_class]
1227 + LOOP_DATA (curr_loop)->max_reg_pressure[pressure_class]
1228 + IRA_LOOP_RESERVED_REGS
1229 > ira_class_hard_regs_num[pressure_class])
1230 break;
1231 }
1232 if (i < ira_pressure_classes_num)
1233 /* There will be register pressure excess and we want not to
1234 make this loop invariant motion. All loop invariants with
1235 non-positive gains will be rejected in function
1236 find_invariants_to_move. Therefore we return the negative
1237 number here.
1238
1239 One could think that this rejects also expensive loop
1240 invariant motions and this will hurt code performance.
1241 However numerous experiments with different heuristics
1242 taking invariant cost into account did not confirm this
1243 assumption. There are possible explanations for this
1244 result:
1245 o probably all expensive invariants were already moved out
1246 of the loop by PRE and gimple invariant motion pass.
1247 o expensive invariant execution will be hidden by insn
1248 scheduling or OOO processor hardware because usually such
1249 invariants have a lot of freedom to be executed
1250 out-of-order.
1251 Another reason for ignoring invariant cost vs spilling cost
1252 heuristics is also in difficulties to evaluate accurately
1253 spill cost at this stage. */
1254 return -1;
1255 else
1256 size_cost = 0;
1257 }
1258
1259 return comp_cost - size_cost;
1260 }
1261
1262 /* Finds invariant with best gain for moving. Returns the gain, stores
1263 the invariant in *BEST and number of registers needed for it to
1264 *REGS_NEEDED. REGS_USED is the number of registers used in the loop.
1265 NEW_REGS is the number of new variables already added due to invariant
1266 motion. */
1267
1268 static int
1269 best_gain_for_invariant (struct invariant **best, unsigned *regs_needed,
1270 unsigned *new_regs, unsigned regs_used,
1271 bool speed, bool call_p)
1272 {
1273 struct invariant *inv;
1274 int i, gain = 0, again;
1275 unsigned aregs_needed[N_REG_CLASSES], invno;
1276
1277 FOR_EACH_VEC_ELT (invariants, invno, inv)
1278 {
1279 if (inv->move)
1280 continue;
1281
1282 /* Only consider the "representatives" of equivalent invariants. */
1283 if (inv->eqto != inv->invno)
1284 continue;
1285
1286 again = gain_for_invariant (inv, aregs_needed, new_regs, regs_used,
1287 speed, call_p);
1288 if (again > gain)
1289 {
1290 gain = again;
1291 *best = inv;
1292 if (! flag_ira_loop_pressure)
1293 regs_needed[0] = aregs_needed[0];
1294 else
1295 {
1296 for (i = 0; i < ira_pressure_classes_num; i++)
1297 regs_needed[ira_pressure_classes[i]]
1298 = aregs_needed[ira_pressure_classes[i]];
1299 }
1300 }
1301 }
1302
1303 return gain;
1304 }
1305
1306 /* Marks invariant INVNO and all its dependencies for moving. */
1307
1308 static void
1309 set_move_mark (unsigned invno, int gain)
1310 {
1311 struct invariant *inv = invariants[invno];
1312 bitmap_iterator bi;
1313
1314 /* Find the representative of the class of the equivalent invariants. */
1315 inv = invariants[inv->eqto];
1316
1317 if (inv->move)
1318 return;
1319 inv->move = true;
1320
1321 if (dump_file)
1322 {
1323 if (gain >= 0)
1324 fprintf (dump_file, "Decided to move invariant %d -- gain %d\n",
1325 invno, gain);
1326 else
1327 fprintf (dump_file, "Decided to move dependent invariant %d\n",
1328 invno);
1329 };
1330
1331 EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, invno, bi)
1332 {
1333 set_move_mark (invno, -1);
1334 }
1335 }
1336
1337 /* Determines which invariants to move. */
1338
1339 static void
1340 find_invariants_to_move (bool speed, bool call_p)
1341 {
1342 int gain;
1343 unsigned i, regs_used, regs_needed[N_REG_CLASSES], new_regs[N_REG_CLASSES];
1344 struct invariant *inv = NULL;
1345
1346 if (!invariants.length ())
1347 return;
1348
1349 if (flag_ira_loop_pressure)
1350 /* REGS_USED is actually never used when the flag is on. */
1351 regs_used = 0;
1352 else
1353 /* We do not really do a good job in estimating number of
1354 registers used; we put some initial bound here to stand for
1355 induction variables etc. that we do not detect. */
1356 {
1357 unsigned int n_regs = DF_REG_SIZE (df);
1358
1359 regs_used = 2;
1360
1361 for (i = 0; i < n_regs; i++)
1362 {
1363 if (!DF_REGNO_FIRST_DEF (i) && DF_REGNO_LAST_USE (i))
1364 {
1365 /* This is a value that is used but not changed inside loop. */
1366 regs_used++;
1367 }
1368 }
1369 }
1370
1371 if (! flag_ira_loop_pressure)
1372 new_regs[0] = regs_needed[0] = 0;
1373 else
1374 {
1375 for (i = 0; (int) i < ira_pressure_classes_num; i++)
1376 new_regs[ira_pressure_classes[i]] = 0;
1377 }
1378 while ((gain = best_gain_for_invariant (&inv, regs_needed,
1379 new_regs, regs_used,
1380 speed, call_p)) > 0)
1381 {
1382 set_move_mark (inv->invno, gain);
1383 if (! flag_ira_loop_pressure)
1384 new_regs[0] += regs_needed[0];
1385 else
1386 {
1387 for (i = 0; (int) i < ira_pressure_classes_num; i++)
1388 new_regs[ira_pressure_classes[i]]
1389 += regs_needed[ira_pressure_classes[i]];
1390 }
1391 }
1392 }
1393
1394 /* Replace the uses, reached by the definition of invariant INV, by REG.
1395
1396 IN_GROUP is nonzero if this is part of a group of changes that must be
1397 performed as a group. In that case, the changes will be stored. The
1398 function `apply_change_group' will validate and apply the changes. */
1399
1400 static int
1401 replace_uses (struct invariant *inv, rtx reg, bool in_group)
1402 {
1403 /* Replace the uses we know to be dominated. It saves work for copy
1404 propagation, and also it is necessary so that dependent invariants
1405 are computed right. */
1406 if (inv->def)
1407 {
1408 struct use *use;
1409 for (use = inv->def->uses; use; use = use->next)
1410 validate_change (use->insn, use->pos, reg, true);
1411
1412 /* If we aren't part of a larger group, apply the changes now. */
1413 if (!in_group)
1414 return apply_change_group ();
1415 }
1416
1417 return 1;
1418 }
1419
1420 /* Move invariant INVNO out of the LOOP. Returns true if this succeeds, false
1421 otherwise. */
1422
1423 static bool
1424 move_invariant_reg (struct loop *loop, unsigned invno)
1425 {
1426 struct invariant *inv = invariants[invno];
1427 struct invariant *repr = invariants[inv->eqto];
1428 unsigned i;
1429 basic_block preheader = loop_preheader_edge (loop)->src;
1430 rtx reg, set, dest, note;
1431 bitmap_iterator bi;
1432 int regno = -1;
1433
1434 if (inv->reg)
1435 return true;
1436 if (!repr->move)
1437 return false;
1438
1439 /* If this is a representative of the class of equivalent invariants,
1440 really move the invariant. Otherwise just replace its use with
1441 the register used for the representative. */
1442 if (inv == repr)
1443 {
1444 if (inv->depends_on)
1445 {
1446 EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, i, bi)
1447 {
1448 if (!move_invariant_reg (loop, i))
1449 goto fail;
1450 }
1451 }
1452
1453 /* Move the set out of the loop. If the set is always executed (we could
1454 omit this condition if we know that the register is unused outside of
1455 the loop, but it does not seem worth finding out) and it has no uses
1456 that would not be dominated by it, we may just move it (TODO).
1457 Otherwise we need to create a temporary register. */
1458 set = single_set (inv->insn);
1459 reg = dest = SET_DEST (set);
1460 if (GET_CODE (reg) == SUBREG)
1461 reg = SUBREG_REG (reg);
1462 if (REG_P (reg))
1463 regno = REGNO (reg);
1464
1465 reg = gen_reg_rtx_and_attrs (dest);
1466
1467 /* Try replacing the destination by a new pseudoregister. */
1468 validate_change (inv->insn, &SET_DEST (set), reg, true);
1469
1470 /* As well as all the dominated uses. */
1471 replace_uses (inv, reg, true);
1472
1473 /* And validate all the changes. */
1474 if (!apply_change_group ())
1475 goto fail;
1476
1477 emit_insn_after (gen_move_insn (dest, reg), inv->insn);
1478 reorder_insns (inv->insn, inv->insn, BB_END (preheader));
1479
1480 /* If there is a REG_EQUAL note on the insn we just moved, and the
1481 insn is in a basic block that is not always executed or the note
1482 contains something for which we don't know the invariant status,
1483 the note may no longer be valid after we move the insn. Note that
1484 uses in REG_EQUAL notes are taken into account in the computation
1485 of invariants, so it is safe to retain the note even if it contains
1486 register references for which we know the invariant status. */
1487 if ((note = find_reg_note (inv->insn, REG_EQUAL, NULL_RTX))
1488 && (!inv->always_executed
1489 || !check_maybe_invariant (XEXP (note, 0))))
1490 remove_note (inv->insn, note);
1491 }
1492 else
1493 {
1494 if (!move_invariant_reg (loop, repr->invno))
1495 goto fail;
1496 reg = repr->reg;
1497 regno = repr->orig_regno;
1498 if (!replace_uses (inv, reg, false))
1499 goto fail;
1500 set = single_set (inv->insn);
1501 emit_insn_after (gen_move_insn (SET_DEST (set), reg), inv->insn);
1502 delete_insn (inv->insn);
1503 }
1504
1505 inv->reg = reg;
1506 inv->orig_regno = regno;
1507
1508 return true;
1509
1510 fail:
1511 /* If we failed, clear move flag, so that we do not try to move inv
1512 again. */
1513 if (dump_file)
1514 fprintf (dump_file, "Failed to move invariant %d\n", invno);
1515 inv->move = false;
1516 inv->reg = NULL_RTX;
1517 inv->orig_regno = -1;
1518
1519 return false;
1520 }
1521
1522 /* Move selected invariant out of the LOOP. Newly created regs are marked
1523 in TEMPORARY_REGS. */
1524
1525 static void
1526 move_invariants (struct loop *loop)
1527 {
1528 struct invariant *inv;
1529 unsigned i;
1530
1531 FOR_EACH_VEC_ELT (invariants, i, inv)
1532 move_invariant_reg (loop, i);
1533 if (flag_ira_loop_pressure && resize_reg_info ())
1534 {
1535 FOR_EACH_VEC_ELT (invariants, i, inv)
1536 if (inv->reg != NULL_RTX)
1537 {
1538 if (inv->orig_regno >= 0)
1539 setup_reg_classes (REGNO (inv->reg),
1540 reg_preferred_class (inv->orig_regno),
1541 reg_alternate_class (inv->orig_regno),
1542 reg_allocno_class (inv->orig_regno));
1543 else
1544 setup_reg_classes (REGNO (inv->reg),
1545 GENERAL_REGS, NO_REGS, GENERAL_REGS);
1546 }
1547 }
1548 }
1549
1550 /* Initializes invariant motion data. */
1551
1552 static void
1553 init_inv_motion_data (void)
1554 {
1555 actual_stamp = 1;
1556
1557 invariants.create (100);
1558 }
1559
1560 /* Frees the data allocated by invariant motion. */
1561
1562 static void
1563 free_inv_motion_data (void)
1564 {
1565 unsigned i;
1566 struct def *def;
1567 struct invariant *inv;
1568
1569 check_invariant_table_size ();
1570 for (i = 0; i < DF_DEFS_TABLE_SIZE (); i++)
1571 {
1572 inv = invariant_table[i];
1573 if (inv)
1574 {
1575 def = inv->def;
1576 gcc_assert (def != NULL);
1577
1578 free_use_list (def->uses);
1579 free (def);
1580 invariant_table[i] = NULL;
1581 }
1582 }
1583
1584 FOR_EACH_VEC_ELT (invariants, i, inv)
1585 {
1586 BITMAP_FREE (inv->depends_on);
1587 free (inv);
1588 }
1589 invariants.release ();
1590 }
1591
1592 /* Move the invariants out of the LOOP. */
1593
1594 static void
1595 move_single_loop_invariants (struct loop *loop)
1596 {
1597 init_inv_motion_data ();
1598
1599 find_invariants (loop);
1600 find_invariants_to_move (optimize_loop_for_speed_p (loop),
1601 LOOP_DATA (loop)->has_call);
1602 move_invariants (loop);
1603
1604 free_inv_motion_data ();
1605 }
1606
1607 /* Releases the auxiliary data for LOOP. */
1608
1609 static void
1610 free_loop_data (struct loop *loop)
1611 {
1612 struct loop_data *data = LOOP_DATA (loop);
1613 if (!data)
1614 return;
1615
1616 bitmap_clear (&LOOP_DATA (loop)->regs_ref);
1617 bitmap_clear (&LOOP_DATA (loop)->regs_live);
1618 free (data);
1619 loop->aux = NULL;
1620 }
1621
1622 \f
1623
1624 /* Registers currently living. */
1625 static bitmap_head curr_regs_live;
1626
1627 /* Current reg pressure for each pressure class. */
1628 static int curr_reg_pressure[N_REG_CLASSES];
1629
1630 /* Record all regs that are set in any one insn. Communication from
1631 mark_reg_{store,clobber} and global_conflicts. Asm can refer to
1632 all hard-registers. */
1633 static rtx regs_set[(FIRST_PSEUDO_REGISTER > MAX_RECOG_OPERANDS
1634 ? FIRST_PSEUDO_REGISTER : MAX_RECOG_OPERANDS) * 2];
1635 /* Number of regs stored in the previous array. */
1636 static int n_regs_set;
1637
1638 /* Return pressure class and number of needed hard registers (through
1639 *NREGS) of register REGNO. */
1640 static enum reg_class
1641 get_regno_pressure_class (int regno, int *nregs)
1642 {
1643 if (regno >= FIRST_PSEUDO_REGISTER)
1644 {
1645 enum reg_class pressure_class;
1646
1647 pressure_class = reg_allocno_class (regno);
1648 pressure_class = ira_pressure_class_translate[pressure_class];
1649 *nregs
1650 = ira_reg_class_max_nregs[pressure_class][PSEUDO_REGNO_MODE (regno)];
1651 return pressure_class;
1652 }
1653 else if (! TEST_HARD_REG_BIT (ira_no_alloc_regs, regno)
1654 && ! TEST_HARD_REG_BIT (eliminable_regset, regno))
1655 {
1656 *nregs = 1;
1657 return ira_pressure_class_translate[REGNO_REG_CLASS (regno)];
1658 }
1659 else
1660 {
1661 *nregs = 0;
1662 return NO_REGS;
1663 }
1664 }
1665
1666 /* Increase (if INCR_P) or decrease current register pressure for
1667 register REGNO. */
1668 static void
1669 change_pressure (int regno, bool incr_p)
1670 {
1671 int nregs;
1672 enum reg_class pressure_class;
1673
1674 pressure_class = get_regno_pressure_class (regno, &nregs);
1675 if (! incr_p)
1676 curr_reg_pressure[pressure_class] -= nregs;
1677 else
1678 {
1679 curr_reg_pressure[pressure_class] += nregs;
1680 if (LOOP_DATA (curr_loop)->max_reg_pressure[pressure_class]
1681 < curr_reg_pressure[pressure_class])
1682 LOOP_DATA (curr_loop)->max_reg_pressure[pressure_class]
1683 = curr_reg_pressure[pressure_class];
1684 }
1685 }
1686
1687 /* Mark REGNO birth. */
1688 static void
1689 mark_regno_live (int regno)
1690 {
1691 struct loop *loop;
1692
1693 for (loop = curr_loop;
1694 loop != current_loops->tree_root;
1695 loop = loop_outer (loop))
1696 bitmap_set_bit (&LOOP_DATA (loop)->regs_live, regno);
1697 if (!bitmap_set_bit (&curr_regs_live, regno))
1698 return;
1699 change_pressure (regno, true);
1700 }
1701
1702 /* Mark REGNO death. */
1703 static void
1704 mark_regno_death (int regno)
1705 {
1706 if (! bitmap_clear_bit (&curr_regs_live, regno))
1707 return;
1708 change_pressure (regno, false);
1709 }
1710
1711 /* Mark setting register REG. */
1712 static void
1713 mark_reg_store (rtx reg, const_rtx setter ATTRIBUTE_UNUSED,
1714 void *data ATTRIBUTE_UNUSED)
1715 {
1716 int regno;
1717
1718 if (GET_CODE (reg) == SUBREG)
1719 reg = SUBREG_REG (reg);
1720
1721 if (! REG_P (reg))
1722 return;
1723
1724 regs_set[n_regs_set++] = reg;
1725
1726 regno = REGNO (reg);
1727
1728 if (regno >= FIRST_PSEUDO_REGISTER)
1729 mark_regno_live (regno);
1730 else
1731 {
1732 int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
1733
1734 while (regno < last)
1735 {
1736 mark_regno_live (regno);
1737 regno++;
1738 }
1739 }
1740 }
1741
1742 /* Mark clobbering register REG. */
1743 static void
1744 mark_reg_clobber (rtx reg, const_rtx setter, void *data)
1745 {
1746 if (GET_CODE (setter) == CLOBBER)
1747 mark_reg_store (reg, setter, data);
1748 }
1749
1750 /* Mark register REG death. */
1751 static void
1752 mark_reg_death (rtx reg)
1753 {
1754 int regno = REGNO (reg);
1755
1756 if (regno >= FIRST_PSEUDO_REGISTER)
1757 mark_regno_death (regno);
1758 else
1759 {
1760 int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
1761
1762 while (regno < last)
1763 {
1764 mark_regno_death (regno);
1765 regno++;
1766 }
1767 }
1768 }
1769
1770 /* Mark occurrence of registers in X for the current loop. */
1771 static void
1772 mark_ref_regs (rtx x)
1773 {
1774 RTX_CODE code;
1775 int i;
1776 const char *fmt;
1777
1778 if (!x)
1779 return;
1780
1781 code = GET_CODE (x);
1782 if (code == REG)
1783 {
1784 struct loop *loop;
1785
1786 for (loop = curr_loop;
1787 loop != current_loops->tree_root;
1788 loop = loop_outer (loop))
1789 bitmap_set_bit (&LOOP_DATA (loop)->regs_ref, REGNO (x));
1790 return;
1791 }
1792
1793 fmt = GET_RTX_FORMAT (code);
1794 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1795 if (fmt[i] == 'e')
1796 mark_ref_regs (XEXP (x, i));
1797 else if (fmt[i] == 'E')
1798 {
1799 int j;
1800
1801 for (j = 0; j < XVECLEN (x, i); j++)
1802 mark_ref_regs (XVECEXP (x, i, j));
1803 }
1804 }
1805
1806 /* Calculate register pressure in the loops. */
1807 static void
1808 calculate_loop_reg_pressure (void)
1809 {
1810 int i;
1811 unsigned int j;
1812 bitmap_iterator bi;
1813 basic_block bb;
1814 rtx insn, link;
1815 struct loop *loop, *parent;
1816 loop_iterator li;
1817
1818 FOR_EACH_LOOP (li, loop, 0)
1819 if (loop->aux == NULL)
1820 {
1821 loop->aux = xcalloc (1, sizeof (struct loop_data));
1822 bitmap_initialize (&LOOP_DATA (loop)->regs_ref, &reg_obstack);
1823 bitmap_initialize (&LOOP_DATA (loop)->regs_live, &reg_obstack);
1824 }
1825 ira_setup_eliminable_regset (false);
1826 bitmap_initialize (&curr_regs_live, &reg_obstack);
1827 FOR_EACH_BB (bb)
1828 {
1829 curr_loop = bb->loop_father;
1830 if (curr_loop == current_loops->tree_root)
1831 continue;
1832
1833 for (loop = curr_loop;
1834 loop != current_loops->tree_root;
1835 loop = loop_outer (loop))
1836 bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (bb));
1837
1838 bitmap_copy (&curr_regs_live, DF_LR_IN (bb));
1839 for (i = 0; i < ira_pressure_classes_num; i++)
1840 curr_reg_pressure[ira_pressure_classes[i]] = 0;
1841 EXECUTE_IF_SET_IN_BITMAP (&curr_regs_live, 0, j, bi)
1842 change_pressure (j, true);
1843
1844 FOR_BB_INSNS (bb, insn)
1845 {
1846 if (! NONDEBUG_INSN_P (insn))
1847 continue;
1848
1849 mark_ref_regs (PATTERN (insn));
1850 n_regs_set = 0;
1851 note_stores (PATTERN (insn), mark_reg_clobber, NULL);
1852
1853 /* Mark any registers dead after INSN as dead now. */
1854
1855 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
1856 if (REG_NOTE_KIND (link) == REG_DEAD)
1857 mark_reg_death (XEXP (link, 0));
1858
1859 /* Mark any registers set in INSN as live,
1860 and mark them as conflicting with all other live regs.
1861 Clobbers are processed again, so they conflict with
1862 the registers that are set. */
1863
1864 note_stores (PATTERN (insn), mark_reg_store, NULL);
1865
1866 #ifdef AUTO_INC_DEC
1867 for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
1868 if (REG_NOTE_KIND (link) == REG_INC)
1869 mark_reg_store (XEXP (link, 0), NULL_RTX, NULL);
1870 #endif
1871 while (n_regs_set-- > 0)
1872 {
1873 rtx note = find_regno_note (insn, REG_UNUSED,
1874 REGNO (regs_set[n_regs_set]));
1875 if (! note)
1876 continue;
1877
1878 mark_reg_death (XEXP (note, 0));
1879 }
1880 }
1881 }
1882 bitmap_clear (&curr_regs_live);
1883 if (flag_ira_region == IRA_REGION_MIXED
1884 || flag_ira_region == IRA_REGION_ALL)
1885 FOR_EACH_LOOP (li, loop, 0)
1886 {
1887 EXECUTE_IF_SET_IN_BITMAP (&LOOP_DATA (loop)->regs_live, 0, j, bi)
1888 if (! bitmap_bit_p (&LOOP_DATA (loop)->regs_ref, j))
1889 {
1890 enum reg_class pressure_class;
1891 int nregs;
1892
1893 pressure_class = get_regno_pressure_class (j, &nregs);
1894 LOOP_DATA (loop)->max_reg_pressure[pressure_class] -= nregs;
1895 }
1896 }
1897 if (dump_file == NULL)
1898 return;
1899 FOR_EACH_LOOP (li, loop, 0)
1900 {
1901 parent = loop_outer (loop);
1902 fprintf (dump_file, "\n Loop %d (parent %d, header bb%d, depth %d)\n",
1903 loop->num, (parent == NULL ? -1 : parent->num),
1904 loop->header->index, loop_depth (loop));
1905 fprintf (dump_file, "\n ref. regnos:");
1906 EXECUTE_IF_SET_IN_BITMAP (&LOOP_DATA (loop)->regs_ref, 0, j, bi)
1907 fprintf (dump_file, " %d", j);
1908 fprintf (dump_file, "\n live regnos:");
1909 EXECUTE_IF_SET_IN_BITMAP (&LOOP_DATA (loop)->regs_live, 0, j, bi)
1910 fprintf (dump_file, " %d", j);
1911 fprintf (dump_file, "\n Pressure:");
1912 for (i = 0; (int) i < ira_pressure_classes_num; i++)
1913 {
1914 enum reg_class pressure_class;
1915
1916 pressure_class = ira_pressure_classes[i];
1917 if (LOOP_DATA (loop)->max_reg_pressure[pressure_class] == 0)
1918 continue;
1919 fprintf (dump_file, " %s=%d", reg_class_names[pressure_class],
1920 LOOP_DATA (loop)->max_reg_pressure[pressure_class]);
1921 }
1922 fprintf (dump_file, "\n");
1923 }
1924 }
1925
1926 \f
1927
1928 /* Move the invariants out of the loops. */
1929
1930 void
1931 move_loop_invariants (void)
1932 {
1933 struct loop *loop;
1934 loop_iterator li;
1935
1936 if (flag_ira_loop_pressure)
1937 {
1938 df_analyze ();
1939 regstat_init_n_sets_and_refs ();
1940 ira_set_pseudo_classes (true, dump_file);
1941 calculate_loop_reg_pressure ();
1942 regstat_free_n_sets_and_refs ();
1943 }
1944 df_set_flags (DF_EQ_NOTES + DF_DEFER_INSN_RESCAN);
1945 /* Process the loops, innermost first. */
1946 FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
1947 {
1948 curr_loop = loop;
1949 /* move_single_loop_invariants for very large loops
1950 is time consuming and might need a lot of memory. */
1951 if (loop->num_nodes <= (unsigned) LOOP_INVARIANT_MAX_BBS_IN_LOOP)
1952 move_single_loop_invariants (loop);
1953 }
1954
1955 FOR_EACH_LOOP (li, loop, 0)
1956 {
1957 free_loop_data (loop);
1958 }
1959
1960 if (flag_ira_loop_pressure)
1961 /* There is no sense to keep this info because it was most
1962 probably outdated by subsequent passes. */
1963 free_reg_info ();
1964 free (invariant_table);
1965 invariant_table = NULL;
1966 invariant_table_size = 0;
1967
1968 #ifdef ENABLE_CHECKING
1969 verify_flow_info ();
1970 #endif
1971 }