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