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