source: trunk/third/gcc/local-alloc.c @ 11288

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