xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/loop-invariant.c (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
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 
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 
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 }
1971