]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/gcc/local-alloc.c
This commit was generated by cvs2svn to compensate for changes in r131543,
[FreeBSD/FreeBSD.git] / contrib / gcc / local-alloc.c
1 /* Allocate registers within a basic block, for GNU compiler.
2    Copyright (C) 1987, 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 /* Allocation of hard register numbers to pseudo registers is done in
23    two passes.  In this pass we consider only regs that are born and
24    die once within one basic block.  We do this one basic block at a
25    time.  Then the next pass allocates the registers that remain.
26    Two passes are used because this pass uses methods that work only
27    on linear code, but that do a better job than the general methods
28    used in global_alloc, and more quickly too.
29
30    The assignments made are recorded in the vector reg_renumber
31    whose space is allocated here.  The rtl code itself is not altered.
32
33    We assign each instruction in the basic block a number
34    which is its order from the beginning of the block.
35    Then we can represent the lifetime of a pseudo register with
36    a pair of numbers, and check for conflicts easily.
37    We can record the availability of hard registers with a
38    HARD_REG_SET for each instruction.  The HARD_REG_SET
39    contains 0 or 1 for each hard reg.
40
41    To avoid register shuffling, we tie registers together when one
42    dies by being copied into another, or dies in an instruction that
43    does arithmetic to produce another.  The tied registers are
44    allocated as one.  Registers with different reg class preferences
45    can never be tied unless the class preferred by one is a subclass
46    of the one preferred by the other.
47
48    Tying is represented with "quantity numbers".
49    A non-tied register is given a new quantity number.
50    Tied registers have the same quantity number.
51
52    We have provision to exempt registers, even when they are contained
53    within the block, that can be tied to others that are not contained in it.
54    This is so that global_alloc could process them both and tie them then.
55    But this is currently disabled since tying in global_alloc is not
56    yet implemented.  */
57
58 /* Pseudos allocated here can be reallocated by global.c if the hard register
59    is used as a spill register.  Currently we don't allocate such pseudos
60    here if their preferred class is likely to be used by spills.  */
61
62 #include "config.h"
63 #include "system.h"
64 #include "hard-reg-set.h"
65 #include "rtl.h"
66 #include "tm_p.h"
67 #include "flags.h"
68 #include "basic-block.h"
69 #include "regs.h"
70 #include "function.h"
71 #include "insn-config.h"
72 #include "insn-attr.h"
73 #include "recog.h"
74 #include "output.h"
75 #include "toplev.h"
76 #include "except.h"
77 #include "integrate.h"
78 \f
79 /* Next quantity number available for allocation.  */
80
81 static int next_qty;
82
83 /* Information we maintain about each quantity.  */
84 struct qty
85 {
86   /* The number of refs to quantity Q.  */
87
88   int n_refs;
89
90   /* The frequency of uses of quantity Q.  */
91
92   int freq;
93
94   /* Insn number (counting from head of basic block)
95      where quantity Q was born.  -1 if birth has not been recorded.  */
96
97   int birth;
98
99   /* Insn number (counting from head of basic block)
100      where given quantity died.  Due to the way tying is done,
101      and the fact that we consider in this pass only regs that die but once,
102      a quantity can die only once.  Each quantity's life span
103      is a set of consecutive insns.  -1 if death has not been recorded.  */
104
105   int death;
106
107   /* Number of words needed to hold the data in given quantity.
108      This depends on its machine mode.  It is used for these purposes:
109      1. It is used in computing the relative importances of qtys,
110         which determines the order in which we look for regs for them.
111      2. It is used in rules that prevent tying several registers of
112         different sizes in a way that is geometrically impossible
113         (see combine_regs).  */
114
115   int size;
116
117   /* Number of times a reg tied to given qty lives across a CALL_INSN.  */
118
119   int n_calls_crossed;
120
121   /* The register number of one pseudo register whose reg_qty value is Q.
122      This register should be the head of the chain
123      maintained in reg_next_in_qty.  */
124
125   int first_reg;
126
127   /* Reg class contained in (smaller than) the preferred classes of all
128      the pseudo regs that are tied in given quantity.
129      This is the preferred class for allocating that quantity.  */
130
131   enum reg_class min_class;
132
133   /* Register class within which we allocate given qty if we can't get
134      its preferred class.  */
135
136   enum reg_class alternate_class;
137
138   /* This holds the mode of the registers that are tied to given qty,
139      or VOIDmode if registers with differing modes are tied together.  */
140
141   enum machine_mode mode;
142
143   /* the hard reg number chosen for given quantity,
144      or -1 if none was found.  */
145
146   short phys_reg;
147 };
148
149 static struct qty *qty;
150
151 /* These fields are kept separately to speedup their clearing.  */
152
153 /* We maintain two hard register sets that indicate suggested hard registers
154    for each quantity.  The first, phys_copy_sugg, contains hard registers
155    that are tied to the quantity by a simple copy.  The second contains all
156    hard registers that are tied to the quantity via an arithmetic operation.
157
158    The former register set is given priority for allocation.  This tends to
159    eliminate copy insns.  */
160
161 /* Element Q is a set of hard registers that are suggested for quantity Q by
162    copy insns.  */
163
164 static HARD_REG_SET *qty_phys_copy_sugg;
165
166 /* Element Q is a set of hard registers that are suggested for quantity Q by
167    arithmetic insns.  */
168
169 static HARD_REG_SET *qty_phys_sugg;
170
171 /* Element Q is the number of suggested registers in qty_phys_copy_sugg.  */
172
173 static short *qty_phys_num_copy_sugg;
174
175 /* Element Q is the number of suggested registers in qty_phys_sugg.  */
176
177 static short *qty_phys_num_sugg;
178
179 /* If (REG N) has been assigned a quantity number, is a register number
180    of another register assigned the same quantity number, or -1 for the
181    end of the chain.  qty->first_reg point to the head of this chain.  */
182
183 static int *reg_next_in_qty;
184
185 /* reg_qty[N] (where N is a pseudo reg number) is the qty number of that reg
186    if it is >= 0,
187    of -1 if this register cannot be allocated by local-alloc,
188    or -2 if not known yet.
189
190    Note that if we see a use or death of pseudo register N with
191    reg_qty[N] == -2, register N must be local to the current block.  If
192    it were used in more than one block, we would have reg_qty[N] == -1.
193    This relies on the fact that if reg_basic_block[N] is >= 0, register N
194    will not appear in any other block.  We save a considerable number of
195    tests by exploiting this.
196
197    If N is < FIRST_PSEUDO_REGISTER, reg_qty[N] is undefined and should not
198    be referenced.  */
199
200 static int *reg_qty;
201
202 /* The offset (in words) of register N within its quantity.
203    This can be nonzero if register N is SImode, and has been tied
204    to a subreg of a DImode register.  */
205
206 static char *reg_offset;
207
208 /* Vector of substitutions of register numbers,
209    used to map pseudo regs into hardware regs.
210    This is set up as a result of register allocation.
211    Element N is the hard reg assigned to pseudo reg N,
212    or is -1 if no hard reg was assigned.
213    If N is a hard reg number, element N is N.  */
214
215 short *reg_renumber;
216
217 /* Set of hard registers live at the current point in the scan
218    of the instructions in a basic block.  */
219
220 static HARD_REG_SET regs_live;
221
222 /* Each set of hard registers indicates registers live at a particular
223    point in the basic block.  For N even, regs_live_at[N] says which
224    hard registers are needed *after* insn N/2 (i.e., they may not
225    conflict with the outputs of insn N/2 or the inputs of insn N/2 + 1.
226
227    If an object is to conflict with the inputs of insn J but not the
228    outputs of insn J + 1, we say it is born at index J*2 - 1.  Similarly,
229    if it is to conflict with the outputs of insn J but not the inputs of
230    insn J + 1, it is said to die at index J*2 + 1.  */
231
232 static HARD_REG_SET *regs_live_at;
233
234 /* Communicate local vars `insn_number' and `insn'
235    from `block_alloc' to `reg_is_set', `wipe_dead_reg', and `alloc_qty'.  */
236 static int this_insn_number;
237 static rtx this_insn;
238
239 struct equivalence
240 {
241   /* Set when an attempt should be made to replace a register
242      with the associated src_p entry.  */
243
244   char replace;
245
246   /* Set when a REG_EQUIV note is found or created.  Use to
247      keep track of what memory accesses might be created later,
248      e.g. by reload.  */
249
250   rtx replacement;
251
252   rtx *src_p;
253
254   /* Loop depth is used to recognize equivalences which appear
255      to be present within the same loop (or in an inner loop).  */
256
257   int loop_depth;
258
259   /* The list of each instruction which initializes this register.  */
260
261   rtx init_insns;
262 };
263
264 /* reg_equiv[N] (where N is a pseudo reg number) is the equivalence
265    structure for that register.  */
266
267 static struct equivalence *reg_equiv;
268
269 /* Nonzero if we recorded an equivalence for a LABEL_REF.  */
270 static int recorded_label_ref;
271
272 static void alloc_qty           PARAMS ((int, enum machine_mode, int, int));
273 static void validate_equiv_mem_from_store PARAMS ((rtx, rtx, void *));
274 static int validate_equiv_mem   PARAMS ((rtx, rtx, rtx));
275 static int equiv_init_varies_p  PARAMS ((rtx));
276 static int equiv_init_movable_p PARAMS ((rtx, int));
277 static int contains_replace_regs PARAMS ((rtx));
278 static int memref_referenced_p  PARAMS ((rtx, rtx));
279 static int memref_used_between_p PARAMS ((rtx, rtx, rtx));
280 static void update_equiv_regs   PARAMS ((void));
281 static void no_equiv            PARAMS ((rtx, rtx, void *));
282 static void block_alloc         PARAMS ((int));
283 static int qty_sugg_compare     PARAMS ((int, int));
284 static int qty_sugg_compare_1   PARAMS ((const PTR, const PTR));
285 static int qty_compare          PARAMS ((int, int));
286 static int qty_compare_1        PARAMS ((const PTR, const PTR));
287 static int combine_regs         PARAMS ((rtx, rtx, int, int, rtx, int));
288 static int reg_meets_class_p    PARAMS ((int, enum reg_class));
289 static void update_qty_class    PARAMS ((int, int));
290 static void reg_is_set          PARAMS ((rtx, rtx, void *));
291 static void reg_is_born         PARAMS ((rtx, int));
292 static void wipe_dead_reg       PARAMS ((rtx, int));
293 static int find_free_reg        PARAMS ((enum reg_class, enum machine_mode,
294                                        int, int, int, int, int));
295 static void mark_life           PARAMS ((int, enum machine_mode, int));
296 static void post_mark_life      PARAMS ((int, enum machine_mode, int, int, int));
297 static int no_conflict_p        PARAMS ((rtx, rtx, rtx));
298 static int requires_inout       PARAMS ((const char *));
299 \f
300 /* Allocate a new quantity (new within current basic block)
301    for register number REGNO which is born at index BIRTH
302    within the block.  MODE and SIZE are info on reg REGNO.  */
303
304 static void
305 alloc_qty (regno, mode, size, birth)
306      int regno;
307      enum machine_mode mode;
308      int size, birth;
309 {
310   int qtyno = next_qty++;
311
312   reg_qty[regno] = qtyno;
313   reg_offset[regno] = 0;
314   reg_next_in_qty[regno] = -1;
315
316   qty[qtyno].first_reg = regno;
317   qty[qtyno].size = size;
318   qty[qtyno].mode = mode;
319   qty[qtyno].birth = birth;
320   qty[qtyno].n_calls_crossed = REG_N_CALLS_CROSSED (regno);
321   qty[qtyno].min_class = reg_preferred_class (regno);
322   qty[qtyno].alternate_class = reg_alternate_class (regno);
323   qty[qtyno].n_refs = REG_N_REFS (regno);
324   qty[qtyno].freq = REG_FREQ (regno);
325 }
326 \f
327 /* Main entry point of this file.  */
328
329 int
330 local_alloc ()
331 {
332   int i;
333   int max_qty;
334   basic_block b;
335
336   /* We need to keep track of whether or not we recorded a LABEL_REF so
337      that we know if the jump optimizer needs to be rerun.  */
338   recorded_label_ref = 0;
339
340   /* Leaf functions and non-leaf functions have different needs.
341      If defined, let the machine say what kind of ordering we
342      should use.  */
343 #ifdef ORDER_REGS_FOR_LOCAL_ALLOC
344   ORDER_REGS_FOR_LOCAL_ALLOC;
345 #endif
346
347   /* Promote REG_EQUAL notes to REG_EQUIV notes and adjust status of affected
348      registers.  */
349   if (optimize)
350     update_equiv_regs ();
351
352   /* This sets the maximum number of quantities we can have.  Quantity
353      numbers start at zero and we can have one for each pseudo.  */
354   max_qty = (max_regno - FIRST_PSEUDO_REGISTER);
355
356   /* Allocate vectors of temporary data.
357      See the declarations of these variables, above,
358      for what they mean.  */
359
360   qty = (struct qty *) xmalloc (max_qty * sizeof (struct qty));
361   qty_phys_copy_sugg
362     = (HARD_REG_SET *) xmalloc (max_qty * sizeof (HARD_REG_SET));
363   qty_phys_num_copy_sugg = (short *) xmalloc (max_qty * sizeof (short));
364   qty_phys_sugg = (HARD_REG_SET *) xmalloc (max_qty * sizeof (HARD_REG_SET));
365   qty_phys_num_sugg = (short *) xmalloc (max_qty * sizeof (short));
366
367   reg_qty = (int *) xmalloc (max_regno * sizeof (int));
368   reg_offset = (char *) xmalloc (max_regno * sizeof (char));
369   reg_next_in_qty = (int *) xmalloc (max_regno * sizeof (int));
370
371   /* Determine which pseudo-registers can be allocated by local-alloc.
372      In general, these are the registers used only in a single block and
373      which only die once.
374
375      We need not be concerned with which block actually uses the register
376      since we will never see it outside that block.  */
377
378   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
379     {
380       if (REG_BASIC_BLOCK (i) >= 0 && REG_N_DEATHS (i) == 1)
381         reg_qty[i] = -2;
382       else
383         reg_qty[i] = -1;
384     }
385
386   /* Force loop below to initialize entire quantity array.  */
387   next_qty = max_qty;
388
389   /* Allocate each block's local registers, block by block.  */
390
391   FOR_EACH_BB (b)
392     {
393       /* NEXT_QTY indicates which elements of the `qty_...'
394          vectors might need to be initialized because they were used
395          for the previous block; it is set to the entire array before
396          block 0.  Initialize those, with explicit loop if there are few,
397          else with bzero and bcopy.  Do not initialize vectors that are
398          explicit set by `alloc_qty'.  */
399
400       if (next_qty < 6)
401         {
402           for (i = 0; i < next_qty; i++)
403             {
404               CLEAR_HARD_REG_SET (qty_phys_copy_sugg[i]);
405               qty_phys_num_copy_sugg[i] = 0;
406               CLEAR_HARD_REG_SET (qty_phys_sugg[i]);
407               qty_phys_num_sugg[i] = 0;
408             }
409         }
410       else
411         {
412 #define CLEAR(vector)  \
413           memset ((char *) (vector), 0, (sizeof (*(vector))) * next_qty);
414
415           CLEAR (qty_phys_copy_sugg);
416           CLEAR (qty_phys_num_copy_sugg);
417           CLEAR (qty_phys_sugg);
418           CLEAR (qty_phys_num_sugg);
419         }
420
421       next_qty = 0;
422
423       block_alloc (b->index);
424     }
425
426   free (qty);
427   free (qty_phys_copy_sugg);
428   free (qty_phys_num_copy_sugg);
429   free (qty_phys_sugg);
430   free (qty_phys_num_sugg);
431
432   free (reg_qty);
433   free (reg_offset);
434   free (reg_next_in_qty);
435
436   return recorded_label_ref;
437 }
438 \f
439 /* Used for communication between the following two functions: contains
440    a MEM that we wish to ensure remains unchanged.  */
441 static rtx equiv_mem;
442
443 /* Set nonzero if EQUIV_MEM is modified.  */
444 static int equiv_mem_modified;
445
446 /* If EQUIV_MEM is modified by modifying DEST, indicate that it is modified.
447    Called via note_stores.  */
448
449 static void
450 validate_equiv_mem_from_store (dest, set, data)
451      rtx dest;
452      rtx set ATTRIBUTE_UNUSED;
453      void *data ATTRIBUTE_UNUSED;
454 {
455   if ((GET_CODE (dest) == REG
456        && reg_overlap_mentioned_p (dest, equiv_mem))
457       || (GET_CODE (dest) == MEM
458           && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p)))
459     equiv_mem_modified = 1;
460 }
461
462 /* Verify that no store between START and the death of REG invalidates
463    MEMREF.  MEMREF is invalidated by modifying a register used in MEMREF,
464    by storing into an overlapping memory location, or with a non-const
465    CALL_INSN.
466
467    Return 1 if MEMREF remains valid.  */
468
469 static int
470 validate_equiv_mem (start, reg, memref)
471      rtx start;
472      rtx reg;
473      rtx memref;
474 {
475   rtx insn;
476   rtx note;
477
478   equiv_mem = memref;
479   equiv_mem_modified = 0;
480
481   /* If the memory reference has side effects or is volatile, it isn't a
482      valid equivalence.  */
483   if (side_effects_p (memref))
484     return 0;
485
486   for (insn = start; insn && ! equiv_mem_modified; insn = NEXT_INSN (insn))
487     {
488       if (! INSN_P (insn))
489         continue;
490
491       if (find_reg_note (insn, REG_DEAD, reg))
492         return 1;
493
494       if (GET_CODE (insn) == CALL_INSN && ! RTX_UNCHANGING_P (memref)
495           && ! CONST_OR_PURE_CALL_P (insn))
496         return 0;
497
498       note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL);
499
500       /* If a register mentioned in MEMREF is modified via an
501          auto-increment, we lose the equivalence.  Do the same if one
502          dies; although we could extend the life, it doesn't seem worth
503          the trouble.  */
504
505       for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
506         if ((REG_NOTE_KIND (note) == REG_INC
507              || REG_NOTE_KIND (note) == REG_DEAD)
508             && GET_CODE (XEXP (note, 0)) == REG
509             && reg_overlap_mentioned_p (XEXP (note, 0), memref))
510           return 0;
511     }
512
513   return 0;
514 }
515
516 /* Returns zero if X is known to be invariant.  */
517
518 static int
519 equiv_init_varies_p (x)
520      rtx x;
521 {
522   RTX_CODE code = GET_CODE (x);
523   int i;
524   const char *fmt;
525
526   switch (code)
527     {
528     case MEM:
529       return ! RTX_UNCHANGING_P (x) || equiv_init_varies_p (XEXP (x, 0));
530
531     case QUEUED:
532       return 1;
533
534     case CONST:
535     case CONST_INT:
536     case CONST_DOUBLE:
537     case CONST_VECTOR:
538     case SYMBOL_REF:
539     case LABEL_REF:
540       return 0;
541
542     case REG:
543       return reg_equiv[REGNO (x)].replace == 0 && rtx_varies_p (x, 0);
544
545     case ASM_OPERANDS:
546       if (MEM_VOLATILE_P (x))
547         return 1;
548
549       /* FALLTHROUGH */
550
551     default:
552       break;
553     }
554
555   fmt = GET_RTX_FORMAT (code);
556   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
557     if (fmt[i] == 'e')
558       {
559         if (equiv_init_varies_p (XEXP (x, i)))
560           return 1;
561       }
562     else if (fmt[i] == 'E')
563       {
564         int j;
565         for (j = 0; j < XVECLEN (x, i); j++)
566           if (equiv_init_varies_p (XVECEXP (x, i, j)))
567             return 1;
568       }
569
570   return 0;
571 }
572
573 /* Returns nonzero if X (used to initialize register REGNO) is movable.
574    X is only movable if the registers it uses have equivalent initializations
575    which appear to be within the same loop (or in an inner loop) and movable
576    or if they are not candidates for local_alloc and don't vary.  */
577
578 static int
579 equiv_init_movable_p (x, regno)
580      rtx x;
581      int regno;
582 {
583   int i, j;
584   const char *fmt;
585   enum rtx_code code = GET_CODE (x);
586
587   switch (code)
588     {
589     case SET:
590       return equiv_init_movable_p (SET_SRC (x), regno);
591
592     case CC0:
593     case CLOBBER:
594       return 0;
595
596     case PRE_INC:
597     case PRE_DEC:
598     case POST_INC:
599     case POST_DEC:
600     case PRE_MODIFY:
601     case POST_MODIFY:
602       return 0;
603
604     case REG:
605       return (reg_equiv[REGNO (x)].loop_depth >= reg_equiv[regno].loop_depth
606               && reg_equiv[REGNO (x)].replace)
607              || (REG_BASIC_BLOCK (REGNO (x)) < 0 && ! rtx_varies_p (x, 0));
608
609     case UNSPEC_VOLATILE:
610       return 0;
611
612     case ASM_OPERANDS:
613       if (MEM_VOLATILE_P (x))
614         return 0;
615
616       /* FALLTHROUGH */
617
618     default:
619       break;
620     }
621
622   fmt = GET_RTX_FORMAT (code);
623   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
624     switch (fmt[i])
625       {
626       case 'e':
627         if (! equiv_init_movable_p (XEXP (x, i), regno))
628           return 0;
629         break;
630       case 'E':
631         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
632           if (! equiv_init_movable_p (XVECEXP (x, i, j), regno))
633             return 0;
634         break;
635       }
636
637   return 1;
638 }
639
640 /* TRUE if X uses any registers for which reg_equiv[REGNO].replace is true.  */
641
642 static int
643 contains_replace_regs (x)
644      rtx x;
645 {
646   int i, j;
647   const char *fmt;
648   enum rtx_code code = GET_CODE (x);
649
650   switch (code)
651     {
652     case CONST_INT:
653     case CONST:
654     case LABEL_REF:
655     case SYMBOL_REF:
656     case CONST_DOUBLE:
657     case CONST_VECTOR:
658     case PC:
659     case CC0:
660     case HIGH:
661       return 0;
662
663     case REG:
664       return reg_equiv[REGNO (x)].replace;
665
666     default:
667       break;
668     }
669
670   fmt = GET_RTX_FORMAT (code);
671   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
672     switch (fmt[i])
673       {
674       case 'e':
675         if (contains_replace_regs (XEXP (x, i)))
676           return 1;
677         break;
678       case 'E':
679         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
680           if (contains_replace_regs (XVECEXP (x, i, j)))
681             return 1;
682         break;
683       }
684
685   return 0;
686 }
687 \f
688 /* TRUE if X references a memory location that would be affected by a store
689    to MEMREF.  */
690
691 static int
692 memref_referenced_p (memref, x)
693      rtx x;
694      rtx memref;
695 {
696   int i, j;
697   const char *fmt;
698   enum rtx_code code = GET_CODE (x);
699
700   switch (code)
701     {
702     case CONST_INT:
703     case CONST:
704     case LABEL_REF:
705     case SYMBOL_REF:
706     case CONST_DOUBLE:
707     case CONST_VECTOR:
708     case PC:
709     case CC0:
710     case HIGH:
711     case LO_SUM:
712       return 0;
713
714     case REG:
715       return (reg_equiv[REGNO (x)].replacement
716               && memref_referenced_p (memref,
717                                       reg_equiv[REGNO (x)].replacement));
718
719     case MEM:
720       if (true_dependence (memref, VOIDmode, x, rtx_varies_p))
721         return 1;
722       break;
723
724     case SET:
725       /* If we are setting a MEM, it doesn't count (its address does), but any
726          other SET_DEST that has a MEM in it is referencing the MEM.  */
727       if (GET_CODE (SET_DEST (x)) == MEM)
728         {
729           if (memref_referenced_p (memref, XEXP (SET_DEST (x), 0)))
730             return 1;
731         }
732       else if (memref_referenced_p (memref, SET_DEST (x)))
733         return 1;
734
735       return memref_referenced_p (memref, SET_SRC (x));
736
737     default:
738       break;
739     }
740
741   fmt = GET_RTX_FORMAT (code);
742   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
743     switch (fmt[i])
744       {
745       case 'e':
746         if (memref_referenced_p (memref, XEXP (x, i)))
747           return 1;
748         break;
749       case 'E':
750         for (j = XVECLEN (x, i) - 1; j >= 0; j--)
751           if (memref_referenced_p (memref, XVECEXP (x, i, j)))
752             return 1;
753         break;
754       }
755
756   return 0;
757 }
758
759 /* TRUE if some insn in the range (START, END] references a memory location
760    that would be affected by a store to MEMREF.  */
761
762 static int
763 memref_used_between_p (memref, start, end)
764      rtx memref;
765      rtx start;
766      rtx end;
767 {
768   rtx insn;
769
770   for (insn = NEXT_INSN (start); insn != NEXT_INSN (end);
771        insn = NEXT_INSN (insn))
772     if (INSN_P (insn) && memref_referenced_p (memref, PATTERN (insn)))
773       return 1;
774
775   return 0;
776 }
777 \f
778 /* Return nonzero if the rtx X is invariant over the current function.  */
779 /* ??? Actually, the places this is used in reload expect exactly what
780    is tested here, and not everything that is function invariant.  In
781    particular, the frame pointer and arg pointer are special cased;
782    pic_offset_table_rtx is not, and this will cause aborts when we
783    go to spill these things to memory.  */
784
785 int
786 function_invariant_p (x)
787      rtx x;
788 {
789   if (CONSTANT_P (x))
790     return 1;
791   if (x == frame_pointer_rtx || x == arg_pointer_rtx)
792     return 1;
793   if (GET_CODE (x) == PLUS
794       && (XEXP (x, 0) == frame_pointer_rtx || XEXP (x, 0) == arg_pointer_rtx)
795       && CONSTANT_P (XEXP (x, 1)))
796     return 1;
797   return 0;
798 }
799
800 /* Find registers that are equivalent to a single value throughout the
801    compilation (either because they can be referenced in memory or are set once
802    from a single constant).  Lower their priority for a register.
803
804    If such a register is only referenced once, try substituting its value
805    into the using insn.  If it succeeds, we can eliminate the register
806    completely.  */
807
808 static void
809 update_equiv_regs ()
810 {
811   rtx insn;
812   basic_block bb;
813   int loop_depth;
814   regset_head cleared_regs;
815   int clear_regnos = 0;
816
817   reg_equiv = (struct equivalence *) xcalloc (max_regno, sizeof *reg_equiv);
818   INIT_REG_SET (&cleared_regs);
819
820   init_alias_analysis ();
821
822   /* Scan the insns and find which registers have equivalences.  Do this
823      in a separate scan of the insns because (due to -fcse-follow-jumps)
824      a register can be set below its use.  */
825   FOR_EACH_BB (bb)
826     {
827       loop_depth = bb->loop_depth;
828
829       for (insn = bb->head; insn != NEXT_INSN (bb->end); insn = NEXT_INSN (insn))
830         {
831           rtx note;
832           rtx set;
833           rtx dest, src;
834           int regno;
835
836           if (! INSN_P (insn))
837             continue;
838
839           for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
840             if (REG_NOTE_KIND (note) == REG_INC)
841               no_equiv (XEXP (note, 0), note, NULL);
842
843           set = single_set (insn);
844
845           /* If this insn contains more (or less) than a single SET,
846              only mark all destinations as having no known equivalence.  */
847           if (set == 0)
848             {
849               note_stores (PATTERN (insn), no_equiv, NULL);
850               continue;
851             }
852           else if (GET_CODE (PATTERN (insn)) == PARALLEL)
853             {
854               int i;
855
856               for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
857                 {
858                   rtx part = XVECEXP (PATTERN (insn), 0, i);
859                   if (part != set)
860                     note_stores (part, no_equiv, NULL);
861                 }
862             }
863
864           dest = SET_DEST (set);
865           src = SET_SRC (set);
866
867           /* If this sets a MEM to the contents of a REG that is only used
868              in a single basic block, see if the register is always equivalent
869              to that memory location and if moving the store from INSN to the
870              insn that set REG is safe.  If so, put a REG_EQUIV note on the
871              initializing insn.
872
873              Don't add a REG_EQUIV note if the insn already has one.  The existing
874              REG_EQUIV is likely more useful than the one we are adding.
875
876              If one of the regs in the address has reg_equiv[REGNO].replace set,
877              then we can't add this REG_EQUIV note.  The reg_equiv[REGNO].replace
878              optimization may move the set of this register immediately before
879              insn, which puts it after reg_equiv[REGNO].init_insns, and hence
880              the mention in the REG_EQUIV note would be to an uninitialized
881              pseudo.  */
882           /* ????? This test isn't good enough; we might see a MEM with a use of
883              a pseudo register before we see its setting insn that will cause
884              reg_equiv[].replace for that pseudo to be set.
885              Equivalences to MEMs should be made in another pass, after the
886              reg_equiv[].replace information has been gathered.  */
887
888           if (GET_CODE (dest) == MEM && GET_CODE (src) == REG
889               && (regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER
890               && REG_BASIC_BLOCK (regno) >= 0
891               && REG_N_SETS (regno) == 1
892               && reg_equiv[regno].init_insns != 0
893               && reg_equiv[regno].init_insns != const0_rtx
894               && ! find_reg_note (XEXP (reg_equiv[regno].init_insns, 0),
895                                   REG_EQUIV, NULL_RTX)
896               && ! contains_replace_regs (XEXP (dest, 0)))
897             {
898               rtx init_insn = XEXP (reg_equiv[regno].init_insns, 0);
899               if (validate_equiv_mem (init_insn, src, dest)
900                   && ! memref_used_between_p (dest, init_insn, insn))
901                 REG_NOTES (init_insn)
902                   = gen_rtx_EXPR_LIST (REG_EQUIV, dest, REG_NOTES (init_insn));
903             }
904
905           /* We only handle the case of a pseudo register being set
906              once, or always to the same value.  */
907           /* ??? The mn10200 port breaks if we add equivalences for
908              values that need an ADDRESS_REGS register and set them equivalent
909              to a MEM of a pseudo.  The actual problem is in the over-conservative
910              handling of INPADDR_ADDRESS / INPUT_ADDRESS / INPUT triples in
911              calculate_needs, but we traditionally work around this problem
912              here by rejecting equivalences when the destination is in a register
913              that's likely spilled.  This is fragile, of course, since the
914              preferred class of a pseudo depends on all instructions that set
915              or use it.  */
916
917           if (GET_CODE (dest) != REG
918               || (regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER
919               || reg_equiv[regno].init_insns == const0_rtx
920               || (CLASS_LIKELY_SPILLED_P (reg_preferred_class (regno))
921                   && GET_CODE (src) == MEM))
922             {
923               /* This might be seting a SUBREG of a pseudo, a pseudo that is
924                  also set somewhere else to a constant.  */
925               note_stores (set, no_equiv, NULL);
926               continue;
927             }
928
929           note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
930
931           /* cse sometimes generates function invariants, but doesn't put a
932              REG_EQUAL note on the insn.  Since this note would be redundant,
933              there's no point creating it earlier than here.  */
934           if (! note && ! rtx_varies_p (src, 0))
935             note = set_unique_reg_note (insn, REG_EQUAL, src);
936
937           /* Don't bother considering a REG_EQUAL note containing an EXPR_LIST
938              since it represents a function call */
939           if (note && GET_CODE (XEXP (note, 0)) == EXPR_LIST)
940             note = NULL_RTX;
941
942           if (REG_N_SETS (regno) != 1
943               && (! note
944                   || rtx_varies_p (XEXP (note, 0), 0)
945                   || (reg_equiv[regno].replacement
946                       && ! rtx_equal_p (XEXP (note, 0),
947                                         reg_equiv[regno].replacement))))
948             {
949               no_equiv (dest, set, NULL);
950               continue;
951             }
952           /* Record this insn as initializing this register.  */
953           reg_equiv[regno].init_insns
954             = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv[regno].init_insns);
955
956           /* If this register is known to be equal to a constant, record that
957              it is always equivalent to the constant.  */
958           if (note && ! rtx_varies_p (XEXP (note, 0), 0))
959             PUT_MODE (note, (enum machine_mode) REG_EQUIV);
960
961           /* If this insn introduces a "constant" register, decrease the priority
962              of that register.  Record this insn if the register is only used once
963              more and the equivalence value is the same as our source.
964
965              The latter condition is checked for two reasons:  First, it is an
966              indication that it may be more efficient to actually emit the insn
967              as written (if no registers are available, reload will substitute
968              the equivalence).  Secondly, it avoids problems with any registers
969              dying in this insn whose death notes would be missed.
970
971              If we don't have a REG_EQUIV note, see if this insn is loading
972              a register used only in one basic block from a MEM.  If so, and the
973              MEM remains unchanged for the life of the register, add a REG_EQUIV
974              note.  */
975
976           note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
977
978           if (note == 0 && REG_BASIC_BLOCK (regno) >= 0
979               && GET_CODE (SET_SRC (set)) == MEM
980               && validate_equiv_mem (insn, dest, SET_SRC (set)))
981             REG_NOTES (insn) = note = gen_rtx_EXPR_LIST (REG_EQUIV, SET_SRC (set),
982                                                          REG_NOTES (insn));
983
984           if (note)
985             {
986               int regno = REGNO (dest);
987
988               /* Record whether or not we created a REG_EQUIV note for a LABEL_REF.
989                  We might end up substituting the LABEL_REF for uses of the
990                  pseudo here or later.  That kind of transformation may turn an
991                  indirect jump into a direct jump, in which case we must rerun the
992                  jump optimizer to ensure that the JUMP_LABEL fields are valid.  */
993               if (GET_CODE (XEXP (note, 0)) == LABEL_REF
994                   || (GET_CODE (XEXP (note, 0)) == CONST
995                       && GET_CODE (XEXP (XEXP (note, 0), 0)) == PLUS
996                       && (GET_CODE (XEXP (XEXP (XEXP (note, 0), 0), 0))
997                           == LABEL_REF)))
998                 recorded_label_ref = 1;
999
1000               reg_equiv[regno].replacement = XEXP (note, 0);
1001               reg_equiv[regno].src_p = &SET_SRC (set);
1002               reg_equiv[regno].loop_depth = loop_depth;
1003
1004               /* Don't mess with things live during setjmp.  */
1005               if (REG_LIVE_LENGTH (regno) >= 0 && optimize)
1006                 {
1007                   /* Note that the statement below does not affect the priority
1008                      in local-alloc!  */
1009                   REG_LIVE_LENGTH (regno) *= 2;
1010
1011
1012                   /* If the register is referenced exactly twice, meaning it is
1013                      set once and used once, indicate that the reference may be
1014                      replaced by the equivalence we computed above.  Do this
1015                      even if the register is only used in one block so that
1016                      dependencies can be handled where the last register is
1017                      used in a different block (i.e. HIGH / LO_SUM sequences)
1018                      and to reduce the number of registers alive across
1019                      calls.  */
1020
1021                     if (REG_N_REFS (regno) == 2
1022                         && (rtx_equal_p (XEXP (note, 0), src)
1023                             || ! equiv_init_varies_p (src))
1024                         && GET_CODE (insn) == INSN
1025                         && equiv_init_movable_p (PATTERN (insn), regno))
1026                       reg_equiv[regno].replace = 1;
1027                 }
1028             }
1029         }
1030     }
1031
1032   /* Now scan all regs killed in an insn to see if any of them are
1033      registers only used that once.  If so, see if we can replace the
1034      reference with the equivalent from.  If we can, delete the
1035      initializing reference and this register will go away.  If we
1036      can't replace the reference, and the initialzing reference is
1037      within the same loop (or in an inner loop), then move the register
1038      initialization just before the use, so that they are in the same
1039      basic block.  */
1040   FOR_EACH_BB_REVERSE (bb)
1041     {
1042       loop_depth = bb->loop_depth;
1043       for (insn = bb->end; insn != PREV_INSN (bb->head); insn = PREV_INSN (insn))
1044         {
1045           rtx link;
1046
1047           if (! INSN_P (insn))
1048             continue;
1049
1050           for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
1051             {
1052               if (REG_NOTE_KIND (link) == REG_DEAD
1053                   /* Make sure this insn still refers to the register.  */
1054                   && reg_mentioned_p (XEXP (link, 0), PATTERN (insn)))
1055                 {
1056                   int regno = REGNO (XEXP (link, 0));
1057                   rtx equiv_insn;
1058
1059                   if (! reg_equiv[regno].replace
1060                       || reg_equiv[regno].loop_depth < loop_depth)
1061                     continue;
1062
1063                   /* reg_equiv[REGNO].replace gets set only when
1064                      REG_N_REFS[REGNO] is 2, i.e. the register is set
1065                      once and used once.  (If it were only set, but not used,
1066                      flow would have deleted the setting insns.)  Hence
1067                      there can only be one insn in reg_equiv[REGNO].init_insns.  */
1068                   if (reg_equiv[regno].init_insns == NULL_RTX
1069                       || XEXP (reg_equiv[regno].init_insns, 1) != NULL_RTX)
1070                     abort ();
1071                   equiv_insn = XEXP (reg_equiv[regno].init_insns, 0);
1072
1073                   /* We may not move instructions that can throw, since
1074                      that changes basic block boundaries and we are not
1075                      prepared to adjust the CFG to match.  */
1076                   if (can_throw_internal (equiv_insn))
1077                     continue;
1078
1079                   if (asm_noperands (PATTERN (equiv_insn)) < 0
1080                       && validate_replace_rtx (regno_reg_rtx[regno],
1081                                                *(reg_equiv[regno].src_p), insn))
1082                     {
1083                       rtx equiv_link;
1084                       rtx last_link;
1085                       rtx note;
1086
1087                       /* Find the last note.  */
1088                       for (last_link = link; XEXP (last_link, 1);
1089                            last_link = XEXP (last_link, 1))
1090                         ;
1091
1092                       /* Append the REG_DEAD notes from equiv_insn.  */
1093                       equiv_link = REG_NOTES (equiv_insn);
1094                       while (equiv_link)
1095                         {
1096                           note = equiv_link;
1097                           equiv_link = XEXP (equiv_link, 1);
1098                           if (REG_NOTE_KIND (note) == REG_DEAD)
1099                             {
1100                               remove_note (equiv_insn, note);
1101                               XEXP (last_link, 1) = note;
1102                               XEXP (note, 1) = NULL_RTX;
1103                               last_link = note;
1104                             }
1105                         }
1106
1107                       remove_death (regno, insn);
1108                       REG_N_REFS (regno) = 0;
1109                       REG_FREQ (regno) = 0;
1110                       delete_insn (equiv_insn);
1111
1112                       reg_equiv[regno].init_insns
1113                         = XEXP (reg_equiv[regno].init_insns, 1);
1114                     }
1115                   /* Move the initialization of the register to just before
1116                      INSN.  Update the flow information.  */
1117                   else if (PREV_INSN (insn) != equiv_insn)
1118                     {
1119                       rtx new_insn;
1120
1121                       new_insn = emit_insn_before (PATTERN (equiv_insn), insn);
1122                       REG_NOTES (new_insn) = REG_NOTES (equiv_insn);
1123                       REG_NOTES (equiv_insn) = 0;
1124
1125                       /* Make sure this insn is recognized before reload begins,
1126                          otherwise eliminate_regs_in_insn will abort.  */
1127                       INSN_CODE (new_insn) = INSN_CODE (equiv_insn);
1128
1129                       delete_insn (equiv_insn);
1130
1131                       XEXP (reg_equiv[regno].init_insns, 0) = new_insn;
1132
1133                       REG_BASIC_BLOCK (regno) = bb->index;
1134                       REG_N_CALLS_CROSSED (regno) = 0;
1135                       REG_LIVE_LENGTH (regno) = 2;
1136
1137                       if (insn == bb->head)
1138                         bb->head = PREV_INSN (insn);
1139
1140                       /* Remember to clear REGNO from all basic block's live
1141                          info.  */
1142                       SET_REGNO_REG_SET (&cleared_regs, regno);
1143                       clear_regnos++;
1144                     }
1145                 }
1146             }
1147         }
1148     }
1149
1150   /* Clear all dead REGNOs from all basic block's live info.  */
1151   if (clear_regnos)
1152     {
1153       int j;
1154       if (clear_regnos > 8)
1155         {
1156           FOR_EACH_BB (bb)
1157             {
1158               AND_COMPL_REG_SET (bb->global_live_at_start, &cleared_regs);
1159               AND_COMPL_REG_SET (bb->global_live_at_end, &cleared_regs);
1160             }
1161         }
1162       else
1163         EXECUTE_IF_SET_IN_REG_SET (&cleared_regs, 0, j,
1164           {
1165             FOR_EACH_BB (bb)
1166               {
1167                 CLEAR_REGNO_REG_SET (bb->global_live_at_start, j);
1168                 CLEAR_REGNO_REG_SET (bb->global_live_at_end, j);
1169               }
1170           });
1171     }
1172
1173   /* Clean up.  */
1174   end_alias_analysis ();
1175   CLEAR_REG_SET (&cleared_regs);
1176   free (reg_equiv);
1177 }
1178
1179 /* Mark REG as having no known equivalence.
1180    Some instructions might have been proceessed before and furnished
1181    with REG_EQUIV notes for this register; these notes will have to be
1182    removed.
1183    STORE is the piece of RTL that does the non-constant / conflicting
1184    assignment - a SET, CLOBBER or REG_INC note.  It is currently not used,
1185    but needs to be there because this function is called from note_stores.  */
1186 static void
1187 no_equiv (reg, store, data)
1188      rtx reg, store ATTRIBUTE_UNUSED;
1189      void *data ATTRIBUTE_UNUSED;
1190 {
1191   int regno;
1192   rtx list;
1193
1194   if (GET_CODE (reg) != REG)
1195     return;
1196   regno = REGNO (reg);
1197   list = reg_equiv[regno].init_insns;
1198   if (list == const0_rtx)
1199     return;
1200   for (; list; list =  XEXP (list, 1))
1201     {
1202       rtx insn = XEXP (list, 0);
1203       remove_note (insn, find_reg_note (insn, REG_EQUIV, NULL_RTX));
1204     }
1205   reg_equiv[regno].init_insns = const0_rtx;
1206   reg_equiv[regno].replacement = NULL_RTX;
1207 }
1208 \f
1209 /* Allocate hard regs to the pseudo regs used only within block number B.
1210    Only the pseudos that die but once can be handled.  */
1211
1212 static void
1213 block_alloc (b)
1214      int b;
1215 {
1216   int i, q;
1217   rtx insn;
1218   rtx note, hard_reg;
1219   int insn_number = 0;
1220   int insn_count = 0;
1221   int max_uid = get_max_uid ();
1222   int *qty_order;
1223   int no_conflict_combined_regno = -1;
1224
1225   /* Count the instructions in the basic block.  */
1226
1227   insn = BLOCK_END (b);
1228   while (1)
1229     {
1230       if (GET_CODE (insn) != NOTE)
1231         if (++insn_count > max_uid)
1232           abort ();
1233       if (insn == BLOCK_HEAD (b))
1234         break;
1235       insn = PREV_INSN (insn);
1236     }
1237
1238   /* +2 to leave room for a post_mark_life at the last insn and for
1239      the birth of a CLOBBER in the first insn.  */
1240   regs_live_at = (HARD_REG_SET *) xcalloc ((2 * insn_count + 2),
1241                                            sizeof (HARD_REG_SET));
1242
1243   /* Initialize table of hardware registers currently live.  */
1244
1245   REG_SET_TO_HARD_REG_SET (regs_live, BASIC_BLOCK (b)->global_live_at_start);
1246
1247   /* This loop scans the instructions of the basic block
1248      and assigns quantities to registers.
1249      It computes which registers to tie.  */
1250
1251   insn = BLOCK_HEAD (b);
1252   while (1)
1253     {
1254       if (GET_CODE (insn) != NOTE)
1255         insn_number++;
1256
1257       if (INSN_P (insn))
1258         {
1259           rtx link, set;
1260           int win = 0;
1261           rtx r0, r1 = NULL_RTX;
1262           int combined_regno = -1;
1263           int i;
1264
1265           this_insn_number = insn_number;
1266           this_insn = insn;
1267
1268           extract_insn (insn);
1269           which_alternative = -1;
1270
1271           /* Is this insn suitable for tying two registers?
1272              If so, try doing that.
1273              Suitable insns are those with at least two operands and where
1274              operand 0 is an output that is a register that is not
1275              earlyclobber.
1276
1277              We can tie operand 0 with some operand that dies in this insn.
1278              First look for operands that are required to be in the same
1279              register as operand 0.  If we find such, only try tying that
1280              operand or one that can be put into that operand if the
1281              operation is commutative.  If we don't find an operand
1282              that is required to be in the same register as operand 0,
1283              we can tie with any operand.
1284
1285              Subregs in place of regs are also ok.
1286
1287              If tying is done, WIN is set nonzero.  */
1288
1289           if (optimize
1290               && recog_data.n_operands > 1
1291               && recog_data.constraints[0][0] == '='
1292               && recog_data.constraints[0][1] != '&')
1293             {
1294               /* If non-negative, is an operand that must match operand 0.  */
1295               int must_match_0 = -1;
1296               /* Counts number of alternatives that require a match with
1297                  operand 0.  */
1298               int n_matching_alts = 0;
1299
1300               for (i = 1; i < recog_data.n_operands; i++)
1301                 {
1302                   const char *p = recog_data.constraints[i];
1303                   int this_match = requires_inout (p);
1304
1305                   n_matching_alts += this_match;
1306                   if (this_match == recog_data.n_alternatives)
1307                     must_match_0 = i;
1308                 }
1309
1310               r0 = recog_data.operand[0];
1311               for (i = 1; i < recog_data.n_operands; i++)
1312                 {
1313                   /* Skip this operand if we found an operand that
1314                      must match operand 0 and this operand isn't it
1315                      and can't be made to be it by commutativity.  */
1316
1317                   if (must_match_0 >= 0 && i != must_match_0
1318                       && ! (i == must_match_0 + 1
1319                             && recog_data.constraints[i-1][0] == '%')
1320                       && ! (i == must_match_0 - 1
1321                             && recog_data.constraints[i][0] == '%'))
1322                     continue;
1323
1324                   /* Likewise if each alternative has some operand that
1325                      must match operand zero.  In that case, skip any
1326                      operand that doesn't list operand 0 since we know that
1327                      the operand always conflicts with operand 0.  We
1328                      ignore commutatity in this case to keep things simple.  */
1329                   if (n_matching_alts == recog_data.n_alternatives
1330                       && 0 == requires_inout (recog_data.constraints[i]))
1331                     continue;
1332
1333                   r1 = recog_data.operand[i];
1334
1335                   /* If the operand is an address, find a register in it.
1336                      There may be more than one register, but we only try one
1337                      of them.  */
1338                   if (recog_data.constraints[i][0] == 'p'
1339                       || EXTRA_ADDRESS_CONSTRAINT (recog_data.constraints[i][0]))
1340                     while (GET_CODE (r1) == PLUS || GET_CODE (r1) == MULT)
1341                       r1 = XEXP (r1, 0);
1342
1343                   /* Avoid making a call-saved register unnecessarily
1344                      clobbered.  */
1345                   hard_reg = get_hard_reg_initial_reg (cfun, r1);
1346                   if (hard_reg != NULL_RTX)
1347                     {
1348                       if (GET_CODE (hard_reg) == REG
1349                           && IN_RANGE (REGNO (hard_reg),
1350                                        0, FIRST_PSEUDO_REGISTER - 1)
1351                           && ! call_used_regs[REGNO (hard_reg)])
1352                         continue;
1353                     }
1354
1355                   if (GET_CODE (r0) == REG || GET_CODE (r0) == SUBREG)
1356                     {
1357                       /* We have two priorities for hard register preferences.
1358                          If we have a move insn or an insn whose first input
1359                          can only be in the same register as the output, give
1360                          priority to an equivalence found from that insn.  */
1361                       int may_save_copy
1362                         = (r1 == recog_data.operand[i] && must_match_0 >= 0);
1363
1364                       if (GET_CODE (r1) == REG || GET_CODE (r1) == SUBREG)
1365                         win = combine_regs (r1, r0, may_save_copy,
1366                                             insn_number, insn, 0);
1367                     }
1368                   if (win)
1369                     break;
1370                 }
1371             }
1372
1373           /* Recognize an insn sequence with an ultimate result
1374              which can safely overlap one of the inputs.
1375              The sequence begins with a CLOBBER of its result,
1376              and ends with an insn that copies the result to itself
1377              and has a REG_EQUAL note for an equivalent formula.
1378              That note indicates what the inputs are.
1379              The result and the input can overlap if each insn in
1380              the sequence either doesn't mention the input
1381              or has a REG_NO_CONFLICT note to inhibit the conflict.
1382
1383              We do the combining test at the CLOBBER so that the
1384              destination register won't have had a quantity number
1385              assigned, since that would prevent combining.  */
1386
1387           if (optimize
1388               && GET_CODE (PATTERN (insn)) == CLOBBER
1389               && (r0 = XEXP (PATTERN (insn), 0),
1390                   GET_CODE (r0) == REG)
1391               && (link = find_reg_note (insn, REG_LIBCALL, NULL_RTX)) != 0
1392               && XEXP (link, 0) != 0
1393               && GET_CODE (XEXP (link, 0)) == INSN
1394               && (set = single_set (XEXP (link, 0))) != 0
1395               && SET_DEST (set) == r0 && SET_SRC (set) == r0
1396               && (note = find_reg_note (XEXP (link, 0), REG_EQUAL,
1397                                         NULL_RTX)) != 0)
1398             {
1399               if (r1 = XEXP (note, 0), GET_CODE (r1) == REG
1400                   /* Check that we have such a sequence.  */
1401                   && no_conflict_p (insn, r0, r1))
1402                 win = combine_regs (r1, r0, 1, insn_number, insn, 1);
1403               else if (GET_RTX_FORMAT (GET_CODE (XEXP (note, 0)))[0] == 'e'
1404                        && (r1 = XEXP (XEXP (note, 0), 0),
1405                            GET_CODE (r1) == REG || GET_CODE (r1) == SUBREG)
1406                        && no_conflict_p (insn, r0, r1))
1407                 win = combine_regs (r1, r0, 0, insn_number, insn, 1);
1408
1409               /* Here we care if the operation to be computed is
1410                  commutative.  */
1411               else if ((GET_CODE (XEXP (note, 0)) == EQ
1412                         || GET_CODE (XEXP (note, 0)) == NE
1413                         || GET_RTX_CLASS (GET_CODE (XEXP (note, 0))) == 'c')
1414                        && (r1 = XEXP (XEXP (note, 0), 1),
1415                            (GET_CODE (r1) == REG || GET_CODE (r1) == SUBREG))
1416                        && no_conflict_p (insn, r0, r1))
1417                 win = combine_regs (r1, r0, 0, insn_number, insn, 1);
1418
1419               /* If we did combine something, show the register number
1420                  in question so that we know to ignore its death.  */
1421               if (win)
1422                 no_conflict_combined_regno = REGNO (r1);
1423             }
1424
1425           /* If registers were just tied, set COMBINED_REGNO
1426              to the number of the register used in this insn
1427              that was tied to the register set in this insn.
1428              This register's qty should not be "killed".  */
1429
1430           if (win)
1431             {
1432               while (GET_CODE (r1) == SUBREG)
1433                 r1 = SUBREG_REG (r1);
1434               combined_regno = REGNO (r1);
1435             }
1436
1437           /* Mark the death of everything that dies in this instruction,
1438              except for anything that was just combined.  */
1439
1440           for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
1441             if (REG_NOTE_KIND (link) == REG_DEAD
1442                 && GET_CODE (XEXP (link, 0)) == REG
1443                 && combined_regno != (int) REGNO (XEXP (link, 0))
1444                 && (no_conflict_combined_regno != (int) REGNO (XEXP (link, 0))
1445                     || ! find_reg_note (insn, REG_NO_CONFLICT,
1446                                         XEXP (link, 0))))
1447               wipe_dead_reg (XEXP (link, 0), 0);
1448
1449           /* Allocate qty numbers for all registers local to this block
1450              that are born (set) in this instruction.
1451              A pseudo that already has a qty is not changed.  */
1452
1453           note_stores (PATTERN (insn), reg_is_set, NULL);
1454
1455           /* If anything is set in this insn and then unused, mark it as dying
1456              after this insn, so it will conflict with our outputs.  This
1457              can't match with something that combined, and it doesn't matter
1458              if it did.  Do this after the calls to reg_is_set since these
1459              die after, not during, the current insn.  */
1460
1461           for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
1462             if (REG_NOTE_KIND (link) == REG_UNUSED
1463                 && GET_CODE (XEXP (link, 0)) == REG)
1464               wipe_dead_reg (XEXP (link, 0), 1);
1465
1466           /* If this is an insn that has a REG_RETVAL note pointing at a
1467              CLOBBER insn, we have reached the end of a REG_NO_CONFLICT
1468              block, so clear any register number that combined within it.  */
1469           if ((note = find_reg_note (insn, REG_RETVAL, NULL_RTX)) != 0
1470               && GET_CODE (XEXP (note, 0)) == INSN
1471               && GET_CODE (PATTERN (XEXP (note, 0))) == CLOBBER)
1472             no_conflict_combined_regno = -1;
1473         }
1474
1475       /* Set the registers live after INSN_NUMBER.  Note that we never
1476          record the registers live before the block's first insn, since no
1477          pseudos we care about are live before that insn.  */
1478
1479       IOR_HARD_REG_SET (regs_live_at[2 * insn_number], regs_live);
1480       IOR_HARD_REG_SET (regs_live_at[2 * insn_number + 1], regs_live);
1481
1482       if (insn == BLOCK_END (b))
1483         break;
1484
1485       insn = NEXT_INSN (insn);
1486     }
1487
1488   /* Now every register that is local to this basic block
1489      should have been given a quantity, or else -1 meaning ignore it.
1490      Every quantity should have a known birth and death.
1491
1492      Order the qtys so we assign them registers in order of the
1493      number of suggested registers they need so we allocate those with
1494      the most restrictive needs first.  */
1495
1496   qty_order = (int *) xmalloc (next_qty * sizeof (int));
1497   for (i = 0; i < next_qty; i++)
1498     qty_order[i] = i;
1499
1500 #define EXCHANGE(I1, I2)  \
1501   { i = qty_order[I1]; qty_order[I1] = qty_order[I2]; qty_order[I2] = i; }
1502
1503   switch (next_qty)
1504     {
1505     case 3:
1506       /* Make qty_order[2] be the one to allocate last.  */
1507       if (qty_sugg_compare (0, 1) > 0)
1508         EXCHANGE (0, 1);
1509       if (qty_sugg_compare (1, 2) > 0)
1510         EXCHANGE (2, 1);
1511
1512       /* ... Fall through ...  */
1513     case 2:
1514       /* Put the best one to allocate in qty_order[0].  */
1515       if (qty_sugg_compare (0, 1) > 0)
1516         EXCHANGE (0, 1);
1517
1518       /* ... Fall through ...  */
1519
1520     case 1:
1521     case 0:
1522       /* Nothing to do here.  */
1523       break;
1524
1525     default:
1526       qsort (qty_order, next_qty, sizeof (int), qty_sugg_compare_1);
1527     }
1528
1529   /* Try to put each quantity in a suggested physical register, if it has one.
1530      This may cause registers to be allocated that otherwise wouldn't be, but
1531      this seems acceptable in local allocation (unlike global allocation).  */
1532   for (i = 0; i < next_qty; i++)
1533     {
1534       q = qty_order[i];
1535       if (qty_phys_num_sugg[q] != 0 || qty_phys_num_copy_sugg[q] != 0)
1536         qty[q].phys_reg = find_free_reg (qty[q].min_class, qty[q].mode, q,
1537                                          0, 1, qty[q].birth, qty[q].death);
1538       else
1539         qty[q].phys_reg = -1;
1540     }
1541
1542   /* Order the qtys so we assign them registers in order of
1543      decreasing length of life.  Normally call qsort, but if we
1544      have only a very small number of quantities, sort them ourselves.  */
1545
1546   for (i = 0; i < next_qty; i++)
1547     qty_order[i] = i;
1548
1549 #define EXCHANGE(I1, I2)  \
1550   { i = qty_order[I1]; qty_order[I1] = qty_order[I2]; qty_order[I2] = i; }
1551
1552   switch (next_qty)
1553     {
1554     case 3:
1555       /* Make qty_order[2] be the one to allocate last.  */
1556       if (qty_compare (0, 1) > 0)
1557         EXCHANGE (0, 1);
1558       if (qty_compare (1, 2) > 0)
1559         EXCHANGE (2, 1);
1560
1561       /* ... Fall through ...  */
1562     case 2:
1563       /* Put the best one to allocate in qty_order[0].  */
1564       if (qty_compare (0, 1) > 0)
1565         EXCHANGE (0, 1);
1566
1567       /* ... Fall through ...  */
1568
1569     case 1:
1570     case 0:
1571       /* Nothing to do here.  */
1572       break;
1573
1574     default:
1575       qsort (qty_order, next_qty, sizeof (int), qty_compare_1);
1576     }
1577
1578   /* Now for each qty that is not a hardware register,
1579      look for a hardware register to put it in.
1580      First try the register class that is cheapest for this qty,
1581      if there is more than one class.  */
1582
1583   for (i = 0; i < next_qty; i++)
1584     {
1585       q = qty_order[i];
1586       if (qty[q].phys_reg < 0)
1587         {
1588 #ifdef INSN_SCHEDULING
1589           /* These values represent the adjusted lifetime of a qty so
1590              that it conflicts with qtys which appear near the start/end
1591              of this qty's lifetime.
1592
1593              The purpose behind extending the lifetime of this qty is to
1594              discourage the register allocator from creating false
1595              dependencies.
1596
1597              The adjustment value is chosen to indicate that this qty
1598              conflicts with all the qtys in the instructions immediately
1599              before and after the lifetime of this qty.
1600
1601              Experiments have shown that higher values tend to hurt
1602              overall code performance.
1603
1604              If allocation using the extended lifetime fails we will try
1605              again with the qty's unadjusted lifetime.  */
1606           int fake_birth = MAX (0, qty[q].birth - 2 + qty[q].birth % 2);
1607           int fake_death = MIN (insn_number * 2 + 1,
1608                                 qty[q].death + 2 - qty[q].death % 2);
1609 #endif
1610
1611           if (N_REG_CLASSES > 1)
1612             {
1613 #ifdef INSN_SCHEDULING
1614               /* We try to avoid using hard registers allocated to qtys which
1615                  are born immediately after this qty or die immediately before
1616                  this qty.
1617
1618                  This optimization is only appropriate when we will run
1619                  a scheduling pass after reload and we are not optimizing
1620                  for code size.  */
1621               if (flag_schedule_insns_after_reload
1622                   && !optimize_size
1623                   && !SMALL_REGISTER_CLASSES)
1624                 {
1625                   qty[q].phys_reg = find_free_reg (qty[q].min_class,
1626                                                    qty[q].mode, q, 0, 0,
1627                                                    fake_birth, fake_death);
1628                   if (qty[q].phys_reg >= 0)
1629                     continue;
1630                 }
1631 #endif
1632               qty[q].phys_reg = find_free_reg (qty[q].min_class,
1633                                                qty[q].mode, q, 0, 0,
1634                                                qty[q].birth, qty[q].death);
1635               if (qty[q].phys_reg >= 0)
1636                 continue;
1637             }
1638
1639 #ifdef INSN_SCHEDULING
1640           /* Similarly, avoid false dependencies.  */
1641           if (flag_schedule_insns_after_reload
1642               && !optimize_size
1643               && !SMALL_REGISTER_CLASSES
1644               && qty[q].alternate_class != NO_REGS)
1645             qty[q].phys_reg = find_free_reg (qty[q].alternate_class,
1646                                              qty[q].mode, q, 0, 0,
1647                                              fake_birth, fake_death);
1648 #endif
1649           if (qty[q].alternate_class != NO_REGS)
1650             qty[q].phys_reg = find_free_reg (qty[q].alternate_class,
1651                                              qty[q].mode, q, 0, 0,
1652                                              qty[q].birth, qty[q].death);
1653         }
1654     }
1655
1656   /* Now propagate the register assignments
1657      to the pseudo regs belonging to the qtys.  */
1658
1659   for (q = 0; q < next_qty; q++)
1660     if (qty[q].phys_reg >= 0)
1661       {
1662         for (i = qty[q].first_reg; i >= 0; i = reg_next_in_qty[i])
1663           reg_renumber[i] = qty[q].phys_reg + reg_offset[i];
1664       }
1665
1666   /* Clean up.  */
1667   free (regs_live_at);
1668   free (qty_order);
1669 }
1670 \f
1671 /* Compare two quantities' priority for getting real registers.
1672    We give shorter-lived quantities higher priority.
1673    Quantities with more references are also preferred, as are quantities that
1674    require multiple registers.  This is the identical prioritization as
1675    done by global-alloc.
1676
1677    We used to give preference to registers with *longer* lives, but using
1678    the same algorithm in both local- and global-alloc can speed up execution
1679    of some programs by as much as a factor of three!  */
1680
1681 /* Note that the quotient will never be bigger than
1682    the value of floor_log2 times the maximum number of
1683    times a register can occur in one insn (surely less than 100)
1684    weighted by frequency (max REG_FREQ_MAX).
1685    Multiplying this by 10000/REG_FREQ_MAX can't overflow.
1686    QTY_CMP_PRI is also used by qty_sugg_compare.  */
1687
1688 #define QTY_CMP_PRI(q)          \
1689   ((int) (((double) (floor_log2 (qty[q].n_refs) * qty[q].freq * qty[q].size) \
1690           / (qty[q].death - qty[q].birth)) * (10000 / REG_FREQ_MAX)))
1691
1692 static int
1693 qty_compare (q1, q2)
1694      int q1, q2;
1695 {
1696   return QTY_CMP_PRI (q2) - QTY_CMP_PRI (q1);
1697 }
1698
1699 static int
1700 qty_compare_1 (q1p, q2p)
1701      const PTR q1p;
1702      const PTR q2p;
1703 {
1704   int q1 = *(const int *) q1p, q2 = *(const int *) q2p;
1705   int tem = QTY_CMP_PRI (q2) - QTY_CMP_PRI (q1);
1706
1707   if (tem != 0)
1708     return tem;
1709
1710   /* If qtys are equally good, sort by qty number,
1711      so that the results of qsort leave nothing to chance.  */
1712   return q1 - q2;
1713 }
1714 \f
1715 /* Compare two quantities' priority for getting real registers.  This version
1716    is called for quantities that have suggested hard registers.  First priority
1717    goes to quantities that have copy preferences, then to those that have
1718    normal preferences.  Within those groups, quantities with the lower
1719    number of preferences have the highest priority.  Of those, we use the same
1720    algorithm as above.  */
1721
1722 #define QTY_CMP_SUGG(q)         \
1723   (qty_phys_num_copy_sugg[q]            \
1724     ? qty_phys_num_copy_sugg[q] \
1725     : qty_phys_num_sugg[q] * FIRST_PSEUDO_REGISTER)
1726
1727 static int
1728 qty_sugg_compare (q1, q2)
1729      int q1, q2;
1730 {
1731   int tem = QTY_CMP_SUGG (q1) - QTY_CMP_SUGG (q2);
1732
1733   if (tem != 0)
1734     return tem;
1735
1736   return QTY_CMP_PRI (q2) - QTY_CMP_PRI (q1);
1737 }
1738
1739 static int
1740 qty_sugg_compare_1 (q1p, q2p)
1741      const PTR q1p;
1742      const PTR q2p;
1743 {
1744   int q1 = *(const int *) q1p, q2 = *(const int *) q2p;
1745   int tem = QTY_CMP_SUGG (q1) - QTY_CMP_SUGG (q2);
1746
1747   if (tem != 0)
1748     return tem;
1749
1750   tem = QTY_CMP_PRI (q2) - QTY_CMP_PRI (q1);
1751   if (tem != 0)
1752     return tem;
1753
1754   /* If qtys are equally good, sort by qty number,
1755      so that the results of qsort leave nothing to chance.  */
1756   return q1 - q2;
1757 }
1758
1759 #undef QTY_CMP_SUGG
1760 #undef QTY_CMP_PRI
1761 \f
1762 /* Attempt to combine the two registers (rtx's) USEDREG and SETREG.
1763    Returns 1 if have done so, or 0 if cannot.
1764
1765    Combining registers means marking them as having the same quantity
1766    and adjusting the offsets within the quantity if either of
1767    them is a SUBREG).
1768
1769    We don't actually combine a hard reg with a pseudo; instead
1770    we just record the hard reg as the suggestion for the pseudo's quantity.
1771    If we really combined them, we could lose if the pseudo lives
1772    across an insn that clobbers the hard reg (eg, movstr).
1773
1774    ALREADY_DEAD is nonzero if USEDREG is known to be dead even though
1775    there is no REG_DEAD note on INSN.  This occurs during the processing
1776    of REG_NO_CONFLICT blocks.
1777
1778    MAY_SAVE_COPYCOPY is nonzero if this insn is simply copying USEDREG to
1779    SETREG or if the input and output must share a register.
1780    In that case, we record a hard reg suggestion in QTY_PHYS_COPY_SUGG.
1781
1782    There are elaborate checks for the validity of combining.  */
1783
1784 static int
1785 combine_regs (usedreg, setreg, may_save_copy, insn_number, insn, already_dead)
1786      rtx usedreg, setreg;
1787      int may_save_copy;
1788      int insn_number;
1789      rtx insn;
1790      int already_dead;
1791 {
1792   int ureg, sreg;
1793   int offset = 0;
1794   int usize, ssize;
1795   int sqty;
1796
1797   /* Determine the numbers and sizes of registers being used.  If a subreg
1798      is present that does not change the entire register, don't consider
1799      this a copy insn.  */
1800
1801   while (GET_CODE (usedreg) == SUBREG)
1802     {
1803       rtx subreg = SUBREG_REG (usedreg);
1804
1805       if (GET_CODE (subreg) == REG)
1806         {
1807           if (GET_MODE_SIZE (GET_MODE (subreg)) > UNITS_PER_WORD)
1808             may_save_copy = 0;
1809
1810           if (REGNO (subreg) < FIRST_PSEUDO_REGISTER)
1811             offset += subreg_regno_offset (REGNO (subreg),
1812                                            GET_MODE (subreg),
1813                                            SUBREG_BYTE (usedreg),
1814                                            GET_MODE (usedreg));
1815           else
1816             offset += (SUBREG_BYTE (usedreg)
1817                       / REGMODE_NATURAL_SIZE (GET_MODE (usedreg)));
1818         }
1819
1820       usedreg = subreg;
1821     }
1822
1823   if (GET_CODE (usedreg) != REG)
1824     return 0;
1825
1826   ureg = REGNO (usedreg);
1827   if (ureg < FIRST_PSEUDO_REGISTER)
1828     usize = HARD_REGNO_NREGS (ureg, GET_MODE (usedreg));
1829   else
1830     usize = ((GET_MODE_SIZE (GET_MODE (usedreg))
1831               + (REGMODE_NATURAL_SIZE (GET_MODE (usedreg)) - 1))
1832              / REGMODE_NATURAL_SIZE (GET_MODE (usedreg)));
1833
1834   while (GET_CODE (setreg) == SUBREG)
1835     {
1836       rtx subreg = SUBREG_REG (setreg);
1837
1838       if (GET_CODE (subreg) == REG)
1839         {
1840           if (GET_MODE_SIZE (GET_MODE (subreg)) > UNITS_PER_WORD)
1841             may_save_copy = 0;
1842
1843           if (REGNO (subreg) < FIRST_PSEUDO_REGISTER)
1844             offset -= subreg_regno_offset (REGNO (subreg),
1845                                            GET_MODE (subreg),
1846                                            SUBREG_BYTE (setreg),
1847                                            GET_MODE (setreg));
1848           else
1849             offset -= (SUBREG_BYTE (setreg)
1850                       / REGMODE_NATURAL_SIZE (GET_MODE (setreg)));
1851         }
1852
1853       setreg = subreg;
1854     }
1855
1856   if (GET_CODE (setreg) != REG)
1857     return 0;
1858
1859   sreg = REGNO (setreg);
1860   if (sreg < FIRST_PSEUDO_REGISTER)
1861     ssize = HARD_REGNO_NREGS (sreg, GET_MODE (setreg));
1862   else
1863     ssize = ((GET_MODE_SIZE (GET_MODE (setreg))
1864               + (REGMODE_NATURAL_SIZE (GET_MODE (setreg)) - 1))
1865              / REGMODE_NATURAL_SIZE (GET_MODE (setreg)));
1866
1867   /* If UREG is a pseudo-register that hasn't already been assigned a
1868      quantity number, it means that it is not local to this block or dies
1869      more than once.  In either event, we can't do anything with it.  */
1870   if ((ureg >= FIRST_PSEUDO_REGISTER && reg_qty[ureg] < 0)
1871       /* Do not combine registers unless one fits within the other.  */
1872       || (offset > 0 && usize + offset > ssize)
1873       || (offset < 0 && usize + offset < ssize)
1874       /* Do not combine with a smaller already-assigned object
1875          if that smaller object is already combined with something bigger.  */
1876       || (ssize > usize && ureg >= FIRST_PSEUDO_REGISTER
1877           && usize < qty[reg_qty[ureg]].size)
1878       /* Can't combine if SREG is not a register we can allocate.  */
1879       || (sreg >= FIRST_PSEUDO_REGISTER && reg_qty[sreg] == -1)
1880       /* Don't combine with a pseudo mentioned in a REG_NO_CONFLICT note.
1881          These have already been taken care of.  This probably wouldn't
1882          combine anyway, but don't take any chances.  */
1883       || (ureg >= FIRST_PSEUDO_REGISTER
1884           && find_reg_note (insn, REG_NO_CONFLICT, usedreg))
1885       /* Don't tie something to itself.  In most cases it would make no
1886          difference, but it would screw up if the reg being tied to itself
1887          also dies in this insn.  */
1888       || ureg == sreg
1889       /* Don't try to connect two different hardware registers.  */
1890       || (ureg < FIRST_PSEUDO_REGISTER && sreg < FIRST_PSEUDO_REGISTER)
1891       /* Don't connect two different machine modes if they have different
1892          implications as to which registers may be used.  */
1893       || !MODES_TIEABLE_P (GET_MODE (usedreg), GET_MODE (setreg)))
1894     return 0;
1895
1896   /* Now, if UREG is a hard reg and SREG is a pseudo, record the hard reg in
1897      qty_phys_sugg for the pseudo instead of tying them.
1898
1899      Return "failure" so that the lifespan of UREG is terminated here;
1900      that way the two lifespans will be disjoint and nothing will prevent
1901      the pseudo reg from being given this hard reg.  */
1902
1903   if (ureg < FIRST_PSEUDO_REGISTER)
1904     {
1905       /* Allocate a quantity number so we have a place to put our
1906          suggestions.  */
1907       if (reg_qty[sreg] == -2)
1908         reg_is_born (setreg, 2 * insn_number);
1909
1910       if (reg_qty[sreg] >= 0)
1911         {
1912           if (may_save_copy
1913               && ! TEST_HARD_REG_BIT (qty_phys_copy_sugg[reg_qty[sreg]], ureg))
1914             {
1915               SET_HARD_REG_BIT (qty_phys_copy_sugg[reg_qty[sreg]], ureg);
1916               qty_phys_num_copy_sugg[reg_qty[sreg]]++;
1917             }
1918           else if (! TEST_HARD_REG_BIT (qty_phys_sugg[reg_qty[sreg]], ureg))
1919             {
1920               SET_HARD_REG_BIT (qty_phys_sugg[reg_qty[sreg]], ureg);
1921               qty_phys_num_sugg[reg_qty[sreg]]++;
1922             }
1923         }
1924       return 0;
1925     }
1926
1927   /* Similarly for SREG a hard register and UREG a pseudo register.  */
1928
1929   if (sreg < FIRST_PSEUDO_REGISTER)
1930     {
1931       if (may_save_copy
1932           && ! TEST_HARD_REG_BIT (qty_phys_copy_sugg[reg_qty[ureg]], sreg))
1933         {
1934           SET_HARD_REG_BIT (qty_phys_copy_sugg[reg_qty[ureg]], sreg);
1935           qty_phys_num_copy_sugg[reg_qty[ureg]]++;
1936         }
1937       else if (! TEST_HARD_REG_BIT (qty_phys_sugg[reg_qty[ureg]], sreg))
1938         {
1939           SET_HARD_REG_BIT (qty_phys_sugg[reg_qty[ureg]], sreg);
1940           qty_phys_num_sugg[reg_qty[ureg]]++;
1941         }
1942       return 0;
1943     }
1944
1945   /* At this point we know that SREG and UREG are both pseudos.
1946      Do nothing if SREG already has a quantity or is a register that we
1947      don't allocate.  */
1948   if (reg_qty[sreg] >= -1
1949       /* If we are not going to let any regs live across calls,
1950          don't tie a call-crossing reg to a non-call-crossing reg.  */
1951       || (current_function_has_nonlocal_label
1952           && ((REG_N_CALLS_CROSSED (ureg) > 0)
1953               != (REG_N_CALLS_CROSSED (sreg) > 0))))
1954     return 0;
1955
1956   /* We don't already know about SREG, so tie it to UREG
1957      if this is the last use of UREG, provided the classes they want
1958      are compatible.  */
1959
1960   if ((already_dead || find_regno_note (insn, REG_DEAD, ureg))
1961       && reg_meets_class_p (sreg, qty[reg_qty[ureg]].min_class))
1962     {
1963       /* Add SREG to UREG's quantity.  */
1964       sqty = reg_qty[ureg];
1965       reg_qty[sreg] = sqty;
1966       reg_offset[sreg] = reg_offset[ureg] + offset;
1967       reg_next_in_qty[sreg] = qty[sqty].first_reg;
1968       qty[sqty].first_reg = sreg;
1969
1970       /* If SREG's reg class is smaller, set qty[SQTY].min_class.  */
1971       update_qty_class (sqty, sreg);
1972
1973       /* Update info about quantity SQTY.  */
1974       qty[sqty].n_calls_crossed += REG_N_CALLS_CROSSED (sreg);
1975       qty[sqty].n_refs += REG_N_REFS (sreg);
1976       qty[sqty].freq += REG_FREQ (sreg);
1977       if (usize < ssize)
1978         {
1979           int i;
1980
1981           for (i = qty[sqty].first_reg; i >= 0; i = reg_next_in_qty[i])
1982             reg_offset[i] -= offset;
1983
1984           qty[sqty].size = ssize;
1985           qty[sqty].mode = GET_MODE (setreg);
1986         }
1987     }
1988   else
1989     return 0;
1990
1991   return 1;
1992 }
1993 \f
1994 /* Return 1 if the preferred class of REG allows it to be tied
1995    to a quantity or register whose class is CLASS.
1996    True if REG's reg class either contains or is contained in CLASS.  */
1997
1998 static int
1999 reg_meets_class_p (reg, class)
2000      int reg;
2001      enum reg_class class;
2002 {
2003   enum reg_class rclass = reg_preferred_class (reg);
2004   return (reg_class_subset_p (rclass, class)
2005           || reg_class_subset_p (class, rclass));
2006 }
2007
2008 /* Update the class of QTYNO assuming that REG is being tied to it.  */
2009
2010 static void
2011 update_qty_class (qtyno, reg)
2012      int qtyno;
2013      int reg;
2014 {
2015   enum reg_class rclass = reg_preferred_class (reg);
2016   if (reg_class_subset_p (rclass, qty[qtyno].min_class))
2017     qty[qtyno].min_class = rclass;
2018
2019   rclass = reg_alternate_class (reg);
2020   if (reg_class_subset_p (rclass, qty[qtyno].alternate_class))
2021     qty[qtyno].alternate_class = rclass;
2022 }
2023 \f
2024 /* Handle something which alters the value of an rtx REG.
2025
2026    REG is whatever is set or clobbered.  SETTER is the rtx that
2027    is modifying the register.
2028
2029    If it is not really a register, we do nothing.
2030    The file-global variables `this_insn' and `this_insn_number'
2031    carry info from `block_alloc'.  */
2032
2033 static void
2034 reg_is_set (reg, setter, data)
2035      rtx reg;
2036      rtx setter;
2037      void *data ATTRIBUTE_UNUSED;
2038 {
2039   /* Note that note_stores will only pass us a SUBREG if it is a SUBREG of
2040      a hard register.  These may actually not exist any more.  */
2041
2042   if (GET_CODE (reg) != SUBREG
2043       && GET_CODE (reg) != REG)
2044     return;
2045
2046   /* Mark this register as being born.  If it is used in a CLOBBER, mark
2047      it as being born halfway between the previous insn and this insn so that
2048      it conflicts with our inputs but not the outputs of the previous insn.  */
2049
2050   reg_is_born (reg, 2 * this_insn_number - (GET_CODE (setter) == CLOBBER));
2051 }
2052 \f
2053 /* Handle beginning of the life of register REG.
2054    BIRTH is the index at which this is happening.  */
2055
2056 static void
2057 reg_is_born (reg, birth)
2058      rtx reg;
2059      int birth;
2060 {
2061   int regno;
2062
2063   if (GET_CODE (reg) == SUBREG)
2064     {
2065       regno = REGNO (SUBREG_REG (reg));
2066       if (regno < FIRST_PSEUDO_REGISTER)
2067         regno = subreg_hard_regno (reg, 1);
2068     }
2069   else
2070     regno = REGNO (reg);
2071
2072   if (regno < FIRST_PSEUDO_REGISTER)
2073     {
2074       mark_life (regno, GET_MODE (reg), 1);
2075
2076       /* If the register was to have been born earlier that the present
2077          insn, mark it as live where it is actually born.  */
2078       if (birth < 2 * this_insn_number)
2079         post_mark_life (regno, GET_MODE (reg), 1, birth, 2 * this_insn_number);
2080     }
2081   else
2082     {
2083       if (reg_qty[regno] == -2)
2084         alloc_qty (regno, GET_MODE (reg), PSEUDO_REGNO_SIZE (regno), birth);
2085
2086       /* If this register has a quantity number, show that it isn't dead.  */
2087       if (reg_qty[regno] >= 0)
2088         qty[reg_qty[regno]].death = -1;
2089     }
2090 }
2091
2092 /* Record the death of REG in the current insn.  If OUTPUT_P is nonzero,
2093    REG is an output that is dying (i.e., it is never used), otherwise it
2094    is an input (the normal case).
2095    If OUTPUT_P is 1, then we extend the life past the end of this insn.  */
2096
2097 static void
2098 wipe_dead_reg (reg, output_p)
2099      rtx reg;
2100      int output_p;
2101 {
2102   int regno = REGNO (reg);
2103
2104   /* If this insn has multiple results,
2105      and the dead reg is used in one of the results,
2106      extend its life to after this insn,
2107      so it won't get allocated together with any other result of this insn.
2108
2109      It is unsafe to use !single_set here since it will ignore an unused
2110      output.  Just because an output is unused does not mean the compiler
2111      can assume the side effect will not occur.   Consider if REG appears
2112      in the address of an output and we reload the output.  If we allocate
2113      REG to the same hard register as an unused output we could set the hard
2114      register before the output reload insn.  */
2115   if (GET_CODE (PATTERN (this_insn)) == PARALLEL
2116       && multiple_sets (this_insn))
2117     {
2118       int i;
2119       for (i = XVECLEN (PATTERN (this_insn), 0) - 1; i >= 0; i--)
2120         {
2121           rtx set = XVECEXP (PATTERN (this_insn), 0, i);
2122           if (GET_CODE (set) == SET
2123               && GET_CODE (SET_DEST (set)) != REG
2124               && !rtx_equal_p (reg, SET_DEST (set))
2125               && reg_overlap_mentioned_p (reg, SET_DEST (set)))
2126             output_p = 1;
2127         }
2128     }
2129
2130   /* If this register is used in an auto-increment address, then extend its
2131      life to after this insn, so that it won't get allocated together with
2132      the result of this insn.  */
2133   if (! output_p && find_regno_note (this_insn, REG_INC, regno))
2134     output_p = 1;
2135
2136   if (regno < FIRST_PSEUDO_REGISTER)
2137     {
2138       mark_life (regno, GET_MODE (reg), 0);
2139
2140       /* If a hard register is dying as an output, mark it as in use at
2141          the beginning of this insn (the above statement would cause this
2142          not to happen).  */
2143       if (output_p)
2144         post_mark_life (regno, GET_MODE (reg), 1,
2145                         2 * this_insn_number, 2 * this_insn_number + 1);
2146     }
2147
2148   else if (reg_qty[regno] >= 0)
2149     qty[reg_qty[regno]].death = 2 * this_insn_number + output_p;
2150 }
2151 \f
2152 /* Find a block of SIZE words of hard regs in reg_class CLASS
2153    that can hold something of machine-mode MODE
2154      (but actually we test only the first of the block for holding MODE)
2155    and still free between insn BORN_INDEX and insn DEAD_INDEX,
2156    and return the number of the first of them.
2157    Return -1 if such a block cannot be found.
2158    If QTYNO crosses calls, insist on a register preserved by calls,
2159    unless ACCEPT_CALL_CLOBBERED is nonzero.
2160
2161    If JUST_TRY_SUGGESTED is nonzero, only try to see if the suggested
2162    register is available.  If not, return -1.  */
2163
2164 static int
2165 find_free_reg (class, mode, qtyno, accept_call_clobbered, just_try_suggested,
2166                born_index, dead_index)
2167      enum reg_class class;
2168      enum machine_mode mode;
2169      int qtyno;
2170      int accept_call_clobbered;
2171      int just_try_suggested;
2172      int born_index, dead_index;
2173 {
2174   int i, ins;
2175   HARD_REG_SET first_used, used;
2176 #ifdef ELIMINABLE_REGS
2177   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
2178 #endif
2179
2180   /* Validate our parameters.  */
2181   if (born_index < 0 || born_index > dead_index)
2182     abort ();
2183
2184   /* Don't let a pseudo live in a reg across a function call
2185      if we might get a nonlocal goto.  */
2186   if (current_function_has_nonlocal_label
2187       && qty[qtyno].n_calls_crossed > 0)
2188     return -1;
2189
2190   if (accept_call_clobbered)
2191     COPY_HARD_REG_SET (used, call_fixed_reg_set);
2192   else if (qty[qtyno].n_calls_crossed == 0)
2193     COPY_HARD_REG_SET (used, fixed_reg_set);
2194   else
2195     COPY_HARD_REG_SET (used, call_used_reg_set);
2196
2197   if (accept_call_clobbered)
2198     IOR_HARD_REG_SET (used, losing_caller_save_reg_set);
2199
2200   for (ins = born_index; ins < dead_index; ins++)
2201     IOR_HARD_REG_SET (used, regs_live_at[ins]);
2202
2203   IOR_COMPL_HARD_REG_SET (used, reg_class_contents[(int) class]);
2204
2205   /* Don't use the frame pointer reg in local-alloc even if
2206      we may omit the frame pointer, because if we do that and then we
2207      need a frame pointer, reload won't know how to move the pseudo
2208      to another hard reg.  It can move only regs made by global-alloc.
2209
2210      This is true of any register that can be eliminated.  */
2211 #ifdef ELIMINABLE_REGS
2212   for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
2213     SET_HARD_REG_BIT (used, eliminables[i].from);
2214 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2215   /* If FRAME_POINTER_REGNUM is not a real register, then protect the one
2216      that it might be eliminated into.  */
2217   SET_HARD_REG_BIT (used, HARD_FRAME_POINTER_REGNUM);
2218 #endif
2219 #else
2220   SET_HARD_REG_BIT (used, FRAME_POINTER_REGNUM);
2221 #endif
2222
2223 #ifdef CANNOT_CHANGE_MODE_CLASS
2224   cannot_change_mode_set_regs (&used, mode, qty[qtyno].first_reg);
2225 #endif
2226
2227   /* Normally, the registers that can be used for the first register in
2228      a multi-register quantity are the same as those that can be used for
2229      subsequent registers.  However, if just trying suggested registers,
2230      restrict our consideration to them.  If there are copy-suggested
2231      register, try them.  Otherwise, try the arithmetic-suggested
2232      registers.  */
2233   COPY_HARD_REG_SET (first_used, used);
2234
2235   if (just_try_suggested)
2236     {
2237       if (qty_phys_num_copy_sugg[qtyno] != 0)
2238         IOR_COMPL_HARD_REG_SET (first_used, qty_phys_copy_sugg[qtyno]);
2239       else
2240         IOR_COMPL_HARD_REG_SET (first_used, qty_phys_sugg[qtyno]);
2241     }
2242
2243   /* If all registers are excluded, we can't do anything.  */
2244   GO_IF_HARD_REG_SUBSET (reg_class_contents[(int) ALL_REGS], first_used, fail);
2245
2246   /* If at least one would be suitable, test each hard reg.  */
2247
2248   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2249     {
2250 #ifdef REG_ALLOC_ORDER
2251       int regno = reg_alloc_order[i];
2252 #else
2253       int regno = i;
2254 #endif
2255       if (! TEST_HARD_REG_BIT (first_used, regno)
2256           && HARD_REGNO_MODE_OK (regno, mode)
2257           && (qty[qtyno].n_calls_crossed == 0
2258               || accept_call_clobbered
2259               || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
2260         {
2261           int j;
2262           int size1 = HARD_REGNO_NREGS (regno, mode);
2263           for (j = 1; j < size1 && ! TEST_HARD_REG_BIT (used, regno + j); j++);
2264           if (j == size1)
2265             {
2266               /* Mark that this register is in use between its birth and death
2267                  insns.  */
2268               post_mark_life (regno, mode, 1, born_index, dead_index);
2269               return regno;
2270             }
2271 #ifndef REG_ALLOC_ORDER
2272           /* Skip starting points we know will lose.  */
2273           i += j;
2274 #endif
2275         }
2276     }
2277
2278  fail:
2279   /* If we are just trying suggested register, we have just tried copy-
2280      suggested registers, and there are arithmetic-suggested registers,
2281      try them.  */
2282
2283   /* If it would be profitable to allocate a call-clobbered register
2284      and save and restore it around calls, do that.  */
2285   if (just_try_suggested && qty_phys_num_copy_sugg[qtyno] != 0
2286       && qty_phys_num_sugg[qtyno] != 0)
2287     {
2288       /* Don't try the copy-suggested regs again.  */
2289       qty_phys_num_copy_sugg[qtyno] = 0;
2290       return find_free_reg (class, mode, qtyno, accept_call_clobbered, 1,
2291                             born_index, dead_index);
2292     }
2293
2294   /* We need not check to see if the current function has nonlocal
2295      labels because we don't put any pseudos that are live over calls in
2296      registers in that case.  */
2297
2298   if (! accept_call_clobbered
2299       && flag_caller_saves
2300       && ! just_try_suggested
2301       && qty[qtyno].n_calls_crossed != 0
2302       && CALLER_SAVE_PROFITABLE (qty[qtyno].n_refs,
2303                                  qty[qtyno].n_calls_crossed))
2304     {
2305       i = find_free_reg (class, mode, qtyno, 1, 0, born_index, dead_index);
2306       if (i >= 0)
2307         caller_save_needed = 1;
2308       return i;
2309     }
2310   return -1;
2311 }
2312 \f
2313 /* Mark that REGNO with machine-mode MODE is live starting from the current
2314    insn (if LIFE is nonzero) or dead starting at the current insn (if LIFE
2315    is zero).  */
2316
2317 static void
2318 mark_life (regno, mode, life)
2319      int regno;
2320      enum machine_mode mode;
2321      int life;
2322 {
2323   int j = HARD_REGNO_NREGS (regno, mode);
2324   if (life)
2325     while (--j >= 0)
2326       SET_HARD_REG_BIT (regs_live, regno + j);
2327   else
2328     while (--j >= 0)
2329       CLEAR_HARD_REG_BIT (regs_live, regno + j);
2330 }
2331
2332 /* Mark register number REGNO (with machine-mode MODE) as live (if LIFE
2333    is nonzero) or dead (if LIFE is zero) from insn number BIRTH (inclusive)
2334    to insn number DEATH (exclusive).  */
2335
2336 static void
2337 post_mark_life (regno, mode, life, birth, death)
2338      int regno;
2339      enum machine_mode mode;
2340      int life, birth, death;
2341 {
2342   int j = HARD_REGNO_NREGS (regno, mode);
2343 #ifdef HARD_REG_SET
2344   /* Declare it register if it's a scalar.  */
2345   register
2346 #endif
2347     HARD_REG_SET this_reg;
2348
2349   CLEAR_HARD_REG_SET (this_reg);
2350   while (--j >= 0)
2351     SET_HARD_REG_BIT (this_reg, regno + j);
2352
2353   if (life)
2354     while (birth < death)
2355       {
2356         IOR_HARD_REG_SET (regs_live_at[birth], this_reg);
2357         birth++;
2358       }
2359   else
2360     while (birth < death)
2361       {
2362         AND_COMPL_HARD_REG_SET (regs_live_at[birth], this_reg);
2363         birth++;
2364       }
2365 }
2366 \f
2367 /* INSN is the CLOBBER insn that starts a REG_NO_NOCONFLICT block, R0
2368    is the register being clobbered, and R1 is a register being used in
2369    the equivalent expression.
2370
2371    If R1 dies in the block and has a REG_NO_CONFLICT note on every insn
2372    in which it is used, return 1.
2373
2374    Otherwise, return 0.  */
2375
2376 static int
2377 no_conflict_p (insn, r0, r1)
2378      rtx insn, r0 ATTRIBUTE_UNUSED, r1;
2379 {
2380   int ok = 0;
2381   rtx note = find_reg_note (insn, REG_LIBCALL, NULL_RTX);
2382   rtx p, last;
2383
2384   /* If R1 is a hard register, return 0 since we handle this case
2385      when we scan the insns that actually use it.  */
2386
2387   if (note == 0
2388       || (GET_CODE (r1) == REG && REGNO (r1) < FIRST_PSEUDO_REGISTER)
2389       || (GET_CODE (r1) == SUBREG && GET_CODE (SUBREG_REG (r1)) == REG
2390           && REGNO (SUBREG_REG (r1)) < FIRST_PSEUDO_REGISTER))
2391     return 0;
2392
2393   last = XEXP (note, 0);
2394
2395   for (p = NEXT_INSN (insn); p && p != last; p = NEXT_INSN (p))
2396     if (INSN_P (p))
2397       {
2398         if (find_reg_note (p, REG_DEAD, r1))
2399           ok = 1;
2400
2401         /* There must be a REG_NO_CONFLICT note on every insn, otherwise
2402            some earlier optimization pass has inserted instructions into
2403            the sequence, and it is not safe to perform this optimization.
2404            Note that emit_no_conflict_block always ensures that this is
2405            true when these sequences are created.  */
2406         if (! find_reg_note (p, REG_NO_CONFLICT, r1))
2407           return 0;
2408       }
2409
2410   return ok;
2411 }
2412 \f
2413 /* Return the number of alternatives for which the constraint string P
2414    indicates that the operand must be equal to operand 0 and that no register
2415    is acceptable.  */
2416
2417 static int
2418 requires_inout (p)
2419      const char *p;
2420 {
2421   char c;
2422   int found_zero = 0;
2423   int reg_allowed = 0;
2424   int num_matching_alts = 0;
2425
2426   while ((c = *p++))
2427     switch (c)
2428       {
2429       case '=':  case '+':  case '?':
2430       case '#':  case '&':  case '!':
2431       case '*':  case '%':
2432       case 'm':  case '<':  case '>':  case 'V':  case 'o':
2433       case 'E':  case 'F':  case 'G':  case 'H':
2434       case 's':  case 'i':  case 'n':
2435       case 'I':  case 'J':  case 'K':  case 'L':
2436       case 'M':  case 'N':  case 'O':  case 'P':
2437       case 'X':
2438         /* These don't say anything we care about.  */
2439         break;
2440
2441       case ',':
2442         if (found_zero && ! reg_allowed)
2443           num_matching_alts++;
2444
2445         found_zero = reg_allowed = 0;
2446         break;
2447
2448       case '0':
2449         found_zero = 1;
2450         break;
2451
2452       case '1':  case '2':  case '3':  case '4': case '5':
2453       case '6':  case '7':  case '8':  case '9':
2454         /* Skip the balance of the matching constraint.  */
2455         while (ISDIGIT (*p))
2456           p++;
2457         break;
2458
2459       default:
2460         if (REG_CLASS_FROM_LETTER (c) == NO_REGS
2461             && !EXTRA_ADDRESS_CONSTRAINT (c))
2462           break;
2463         /* FALLTHRU */
2464       case 'p':
2465       case 'g': case 'r':
2466         reg_allowed = 1;
2467         break;
2468       }
2469
2470   if (found_zero && ! reg_allowed)
2471     num_matching_alts++;
2472
2473   return num_matching_alts;
2474 }
2475 \f
2476 void
2477 dump_local_alloc (file)
2478      FILE *file;
2479 {
2480   int i;
2481   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2482     if (reg_renumber[i] != -1)
2483       fprintf (file, ";; Register %d in %d.\n", i, reg_renumber[i]);
2484 }