OSDN Git Service

Cast pointer operands to bzero, bcopy, and bcmp to (char *).
[pf3gnuchains/gcc-fork.git] / gcc / flow.c
1 /* Data flow analysis for GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20
21 /* This file contains the data flow analysis pass of the compiler.
22    It computes data flow information
23    which tells combine_instructions which insns to consider combining
24    and controls register allocation.
25
26    Additional data flow information that is too bulky to record
27    is generated during the analysis, and is used at that time to
28    create autoincrement and autodecrement addressing.
29
30    The first step is dividing the function into basic blocks.
31    find_basic_blocks does this.  Then life_analysis determines
32    where each register is live and where it is dead.
33
34    ** find_basic_blocks **
35
36    find_basic_blocks divides the current function's rtl
37    into basic blocks.  It records the beginnings and ends of the
38    basic blocks in the vectors basic_block_head and basic_block_end,
39    and the number of blocks in n_basic_blocks.
40
41    find_basic_blocks also finds any unreachable loops
42    and deletes them.
43
44    ** life_analysis **
45
46    life_analysis is called immediately after find_basic_blocks.
47    It uses the basic block information to determine where each
48    hard or pseudo register is live.
49
50    ** live-register info **
51
52    The information about where each register is live is in two parts:
53    the REG_NOTES of insns, and the vector basic_block_live_at_start.
54
55    basic_block_live_at_start has an element for each basic block,
56    and the element is a bit-vector with a bit for each hard or pseudo
57    register.  The bit is 1 if the register is live at the beginning
58    of the basic block.
59
60    Two types of elements can be added to an insn's REG_NOTES.  
61    A REG_DEAD note is added to an insn's REG_NOTES for any register
62    that meets both of two conditions:  The value in the register is not
63    needed in subsequent insns and the insn does not replace the value in
64    the register (in the case of multi-word hard registers, the value in
65    each register must be replaced by the insn to avoid a REG_DEAD note).
66
67    In the vast majority of cases, an object in a REG_DEAD note will be
68    used somewhere in the insn.  The (rare) exception to this is if an
69    insn uses a multi-word hard register and only some of the registers are
70    needed in subsequent insns.  In that case, REG_DEAD notes will be
71    provided for those hard registers that are not subsequently needed.
72    Partial REG_DEAD notes of this type do not occur when an insn sets
73    only some of the hard registers used in such a multi-word operand;
74    omitting REG_DEAD notes for objects stored in an insn is optional and
75    the desire to do so does not justify the complexity of the partial
76    REG_DEAD notes.
77
78    REG_UNUSED notes are added for each register that is set by the insn
79    but is unused subsequently (if every register set by the insn is unused
80    and the insn does not reference memory or have some other side-effect,
81    the insn is deleted instead).  If only part of a multi-word hard
82    register is used in a subsequent insn, REG_UNUSED notes are made for
83    the parts that will not be used.
84
85    To determine which registers are live after any insn, one can
86    start from the beginning of the basic block and scan insns, noting
87    which registers are set by each insn and which die there.
88
89    ** Other actions of life_analysis **
90
91    life_analysis sets up the LOG_LINKS fields of insns because the
92    information needed to do so is readily available.
93
94    life_analysis deletes insns whose only effect is to store a value
95    that is never used.
96
97    life_analysis notices cases where a reference to a register as
98    a memory address can be combined with a preceding or following
99    incrementation or decrementation of the register.  The separate
100    instruction to increment or decrement is deleted and the address
101    is changed to a POST_INC or similar rtx.
102
103    Each time an incrementing or decrementing address is created,
104    a REG_INC element is added to the insn's REG_NOTES list.
105
106    life_analysis fills in certain vectors containing information about
107    register usage: reg_n_refs, reg_n_deaths, reg_n_sets, reg_live_length,
108    reg_n_calls_crosses and reg_basic_block.  */
109 \f
110 #include <stdio.h>
111 #include "config.h"
112 #include "rtl.h"
113 #include "basic-block.h"
114 #include "insn-config.h"
115 #include "regs.h"
116 #include "hard-reg-set.h"
117 #include "flags.h"
118 #include "output.h"
119
120 #include "obstack.h"
121 #define obstack_chunk_alloc xmalloc
122 #define obstack_chunk_free free
123
124 /* List of labels that must never be deleted.  */
125 extern rtx forced_labels;
126
127 /* Get the basic block number of an insn.
128    This info should not be expected to remain available
129    after the end of life_analysis.  */
130
131 /* This is the limit of the allocated space in the following two arrays.  */
132
133 static int max_uid_for_flow;
134
135 #define BLOCK_NUM(INSN)  uid_block_number[INSN_UID (INSN)]
136
137 /* This is where the BLOCK_NUM values are really stored.
138    This is set up by find_basic_blocks and used there and in life_analysis,
139    and then freed.  */
140
141 static int *uid_block_number;
142
143 /* INSN_VOLATILE (insn) is 1 if the insn refers to anything volatile.  */
144
145 #define INSN_VOLATILE(INSN) uid_volatile[INSN_UID (INSN)]
146 static char *uid_volatile;
147
148 /* Number of basic blocks in the current function.  */
149
150 int n_basic_blocks;
151
152 /* Maximum register number used in this function, plus one.  */
153
154 int max_regno;
155
156 /* Maximum number of SCRATCH rtx's used in any basic block of this function. */
157
158 int max_scratch;
159
160 /* Number of SCRATCH rtx's in the current block.  */
161
162 static int num_scratch;
163
164 /* Indexed by n, gives number of basic block that  (REG n) is used in.
165    If the value is REG_BLOCK_GLOBAL (-2),
166    it means (REG n) is used in more than one basic block.
167    REG_BLOCK_UNKNOWN (-1) means it hasn't been seen yet so we don't know.
168    This information remains valid for the rest of the compilation
169    of the current function; it is used to control register allocation.  */
170
171 int *reg_basic_block;
172
173 /* Indexed by n, gives number of times (REG n) is used or set, each
174    weighted by its loop-depth.
175    This information remains valid for the rest of the compilation
176    of the current function; it is used to control register allocation.  */
177
178 int *reg_n_refs;
179
180 /* Indexed by N, gives number of places register N dies.
181    This information remains valid for the rest of the compilation
182    of the current function; it is used to control register allocation.  */
183
184 short *reg_n_deaths;
185
186 /* Indexed by N, gives 1 if that reg is live across any CALL_INSNs.
187    This information remains valid for the rest of the compilation
188    of the current function; it is used to control register allocation.  */
189
190 int *reg_n_calls_crossed;
191
192 /* Total number of instructions at which (REG n) is live.
193    The larger this is, the less priority (REG n) gets for
194    allocation in a real register.
195    This information remains valid for the rest of the compilation
196    of the current function; it is used to control register allocation.
197
198    local-alloc.c may alter this number to change the priority.
199
200    Negative values are special.
201    -1 is used to mark a pseudo reg which has a constant or memory equivalent
202    and is used infrequently enough that it should not get a hard register.
203    -2 is used to mark a pseudo reg for a parameter, when a frame pointer
204    is not required.  global.c makes an allocno for this but does
205    not try to assign a hard register to it.  */
206
207 int *reg_live_length;
208
209 /* Element N is the next insn that uses (hard or pseudo) register number N
210    within the current basic block; or zero, if there is no such insn.
211    This is valid only during the final backward scan in propagate_block.  */
212
213 static rtx *reg_next_use;
214
215 /* Size of a regset for the current function,
216    in (1) bytes and (2) elements.  */
217
218 int regset_bytes;
219 int regset_size;
220
221 /* Element N is first insn in basic block N.
222    This info lasts until we finish compiling the function.  */
223
224 rtx *basic_block_head;
225
226 /* Element N is last insn in basic block N.
227    This info lasts until we finish compiling the function.  */
228
229 rtx *basic_block_end;
230
231 /* Element N is a regset describing the registers live
232    at the start of basic block N.
233    This info lasts until we finish compiling the function.  */
234
235 regset *basic_block_live_at_start;
236
237 /* Regset of regs live when calls to `setjmp'-like functions happen.  */
238
239 regset regs_live_at_setjmp;
240
241 /* List made of EXPR_LIST rtx's which gives pairs of pseudo registers
242    that have to go in the same hard reg.
243    The first two regs in the list are a pair, and the next two
244    are another pair, etc.  */
245 rtx regs_may_share;
246
247 /* Element N is nonzero if control can drop into basic block N
248    from the preceding basic block.  Freed after life_analysis.  */
249
250 static char *basic_block_drops_in;
251
252 /* Element N is depth within loops of the last insn in basic block number N.
253    Freed after life_analysis.  */
254
255 static short *basic_block_loop_depth;
256
257 /* Element N nonzero if basic block N can actually be reached.
258    Vector exists only during find_basic_blocks.  */
259
260 static char *block_live_static;
261
262 /* Depth within loops of basic block being scanned for lifetime analysis,
263    plus one.  This is the weight attached to references to registers.  */
264
265 static int loop_depth;
266
267 /* During propagate_block, this is non-zero if the value of CC0 is live.  */
268
269 static int cc0_live;
270
271 /* During propagate_block, this contains the last MEM stored into.  It
272    is used to eliminate consecutive stores to the same location.  */
273
274 static rtx last_mem_set;
275
276 /* Set of registers that may be eliminable.  These are handled specially
277    in updating regs_ever_live.  */
278
279 static HARD_REG_SET elim_reg_set;
280
281 /* Forward declarations */
282 static void find_basic_blocks           PROTO((rtx, rtx));
283 static int uses_reg_or_mem              PROTO((rtx));
284 static void mark_label_ref              PROTO((rtx, rtx, int));
285 static void life_analysis               PROTO((rtx, int));
286 void allocate_for_life_analysis         PROTO((void));
287 static void init_regset_vector          PROTO((regset *, regset, int, int));
288 static void propagate_block             PROTO((regset, rtx, rtx, int, 
289                                                regset, int));
290 static int insn_dead_p                  PROTO((rtx, regset, int));
291 static int libcall_dead_p               PROTO((rtx, regset, rtx, rtx));
292 static void mark_set_regs               PROTO((regset, regset, rtx,
293                                                rtx, regset));
294 static void mark_set_1                  PROTO((regset, regset, rtx,
295                                                rtx, regset));
296 static void find_auto_inc               PROTO((regset, rtx, rtx));
297 static void mark_used_regs              PROTO((regset, regset, rtx, int, rtx));
298 static int try_pre_increment_1          PROTO((rtx));
299 static int try_pre_increment            PROTO((rtx, rtx, HOST_WIDE_INT));
300 static rtx find_use_as_address          PROTO((rtx, rtx, HOST_WIDE_INT));
301 void dump_flow_info                     PROTO((FILE *));
302 \f
303 /* Find basic blocks of the current function and perform data flow analysis.
304    F is the first insn of the function and NREGS the number of register numbers
305    in use.  */
306
307 void
308 flow_analysis (f, nregs, file)
309      rtx f;
310      int nregs;
311      FILE *file;
312 {
313   register rtx insn;
314   register int i;
315   rtx nonlocal_label_list = nonlocal_label_rtx_list ();
316
317 #ifdef ELIMINABLE_REGS
318   static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
319 #endif
320
321   /* Record which registers will be eliminated.  We use this in
322      mark_used_regs. */
323
324   CLEAR_HARD_REG_SET (elim_reg_set);
325
326 #ifdef ELIMINABLE_REGS
327   for (i = 0; i < sizeof eliminables / sizeof eliminables[0]; i++)
328     SET_HARD_REG_BIT (elim_reg_set, eliminables[i].from);
329 #else
330   SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
331 #endif
332
333   /* Count the basic blocks.  Also find maximum insn uid value used.  */
334
335   {
336     register RTX_CODE prev_code = JUMP_INSN;
337     register RTX_CODE code;
338
339     max_uid_for_flow = 0;
340
341     for (insn = f, i = 0; insn; insn = NEXT_INSN (insn))
342       {
343         code = GET_CODE (insn);
344         if (INSN_UID (insn) > max_uid_for_flow)
345           max_uid_for_flow = INSN_UID (insn);
346         if (code == CODE_LABEL
347             || (GET_RTX_CLASS (code) == 'i'
348                 && (prev_code == JUMP_INSN
349                     || (prev_code == CALL_INSN
350                         && nonlocal_label_list != 0)
351                     || prev_code == BARRIER)))
352           i++;
353         if (code != NOTE)
354           prev_code = code;
355       }
356   }
357
358 #ifdef AUTO_INC_DEC
359   /* Leave space for insns we make in some cases for auto-inc.  These cases
360      are rare, so we don't need too much space.  */
361   max_uid_for_flow += max_uid_for_flow / 10;
362 #endif
363
364   /* Allocate some tables that last till end of compiling this function
365      and some needed only in find_basic_blocks and life_analysis.  */
366
367   n_basic_blocks = i;
368   basic_block_head = (rtx *) oballoc (n_basic_blocks * sizeof (rtx));
369   basic_block_end = (rtx *) oballoc (n_basic_blocks * sizeof (rtx));
370   basic_block_drops_in = (char *) alloca (n_basic_blocks);
371   basic_block_loop_depth = (short *) alloca (n_basic_blocks * sizeof (short));
372   uid_block_number
373     = (int *) alloca ((max_uid_for_flow + 1) * sizeof (int));
374   uid_volatile = (char *) alloca (max_uid_for_flow + 1);
375   bzero (uid_volatile, max_uid_for_flow + 1);
376
377   find_basic_blocks (f, nonlocal_label_list);
378   life_analysis (f, nregs);
379   if (file)
380     dump_flow_info (file);
381
382   basic_block_drops_in = 0;
383   uid_block_number = 0;
384   basic_block_loop_depth = 0;
385 }
386 \f
387 /* Find all basic blocks of the function whose first insn is F.
388    Store the correct data in the tables that describe the basic blocks,
389    set up the chains of references for each CODE_LABEL, and
390    delete any entire basic blocks that cannot be reached.
391
392    NONLOCAL_LABEL_LIST is the same local variable from flow_analysis.  */
393
394 static void
395 find_basic_blocks (f, nonlocal_label_list)
396      rtx f, nonlocal_label_list;
397 {
398   register rtx insn;
399   register int i;
400   register char *block_live = (char *) alloca (n_basic_blocks);
401   register char *block_marked = (char *) alloca (n_basic_blocks);
402   /* List of label_refs to all labels whose addresses are taken
403      and used as data.  */
404   rtx label_value_list = 0;
405   rtx x, note;
406   enum rtx_code prev_code, code;
407   int depth;
408
409   block_live_static = block_live;
410   bzero (block_live, n_basic_blocks);
411   bzero (block_marked, n_basic_blocks);
412
413   /* Initialize with just block 0 reachable and no blocks marked.  */
414   if (n_basic_blocks > 0)
415     block_live[0] = 1;
416
417   /* Initialize the ref chain of each label to 0.  Record where all the
418      blocks start and end and their depth in loops.  For each insn, record
419      the block it is in.   Also mark as reachable any blocks headed by labels
420      that must not be deleted.  */
421
422   for (insn = f, i = -1, prev_code = JUMP_INSN, depth = 1;
423        insn; insn = NEXT_INSN (insn))
424     {
425       code = GET_CODE (insn);
426       if (code == NOTE)
427         {
428           if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
429             depth++;
430           else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
431             depth--;
432         }
433
434       /* A basic block starts at label, or after something that can jump.  */
435       else if (code == CODE_LABEL
436                || (GET_RTX_CLASS (code) == 'i'
437                    && (prev_code == JUMP_INSN
438                        || (prev_code == CALL_INSN
439                            && nonlocal_label_list != 0)
440                        || prev_code == BARRIER)))
441         {
442           basic_block_head[++i] = insn;
443           basic_block_end[i] = insn;
444           basic_block_loop_depth[i] = depth;
445
446           if (code == CODE_LABEL)
447             {
448                 LABEL_REFS (insn) = insn;
449                 /* Any label that cannot be deleted
450                    is considered to start a reachable block.  */
451                 if (LABEL_PRESERVE_P (insn))
452                   block_live[i] = 1;
453               }
454         }
455
456       else if (GET_RTX_CLASS (code) == 'i')
457         {
458           basic_block_end[i] = insn;
459           basic_block_loop_depth[i] = depth;
460         }
461
462       if (GET_RTX_CLASS (code) == 'i')
463         {
464           /* Make a list of all labels referred to other than by jumps.  */
465           for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
466             if (REG_NOTE_KIND (note) == REG_LABEL)
467               label_value_list = gen_rtx (EXPR_LIST, VOIDmode, XEXP (note, 0),
468                                           label_value_list);
469         }
470
471       BLOCK_NUM (insn) = i;
472
473       if (code != NOTE)
474         prev_code = code;
475     }
476
477   if (i + 1 != n_basic_blocks)
478     abort ();
479
480   /* Don't delete the labels (in this function)
481      that are referenced by non-jump instructions.  */
482
483   for (x = label_value_list; x; x = XEXP (x, 1))
484     if (! LABEL_REF_NONLOCAL_P (x))
485       block_live[BLOCK_NUM (XEXP (x, 0))] = 1;
486
487   for (x = forced_labels; x; x = XEXP (x, 1))
488     if (! LABEL_REF_NONLOCAL_P (x))
489       block_live[BLOCK_NUM (XEXP (x, 0))] = 1;
490
491   /* Record which basic blocks control can drop in to.  */
492
493   for (i = 0; i < n_basic_blocks; i++)
494     {
495       for (insn = PREV_INSN (basic_block_head[i]);
496            insn && GET_CODE (insn) == NOTE; insn = PREV_INSN (insn))
497         ;
498
499       basic_block_drops_in[i] = insn && GET_CODE (insn) != BARRIER;
500     }
501
502   /* Now find which basic blocks can actually be reached
503      and put all jump insns' LABEL_REFS onto the ref-chains
504      of their target labels.  */
505
506   if (n_basic_blocks > 0)
507     {
508       int something_marked = 1;
509
510       /* Find all indirect jump insns and mark them as possibly jumping to all
511          the labels whose addresses are explicitly used.  This is because,
512          when there are computed gotos, we can't tell which labels they jump
513          to, of all the possibilities.
514
515          Tablejumps and casesi insns are OK and we can recognize them by
516          a (use (label_ref)).  */
517
518       for (insn = f; insn; insn = NEXT_INSN (insn))
519         if (GET_CODE (insn) == JUMP_INSN)
520           {
521             rtx pat = PATTERN (insn);
522             int computed_jump = 0;
523
524             if (GET_CODE (pat) == PARALLEL)
525               {
526                 int len = XVECLEN (pat, 0);
527                 int has_use_labelref = 0;
528
529                 for (i = len - 1; i >= 0; i--)
530                   if (GET_CODE (XVECEXP (pat, 0, i)) == USE
531                       && (GET_CODE (XEXP (XVECEXP (pat, 0, i), 0))
532                           == LABEL_REF))
533                     has_use_labelref = 1;
534
535                 if (! has_use_labelref)
536                   for (i = len - 1; i >= 0; i--)
537                     if (GET_CODE (XVECEXP (pat, 0, i)) == SET
538                         && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
539                         && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
540                       computed_jump = 1;
541               }
542             else if (GET_CODE (pat) == SET
543                      && SET_DEST (pat) == pc_rtx
544                      && uses_reg_or_mem (SET_SRC (pat)))
545               computed_jump = 1;
546                     
547             if (computed_jump)
548               {
549                 for (x = label_value_list; x; x = XEXP (x, 1))
550                   mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
551                                   insn, 0);
552
553                 for (x = forced_labels; x; x = XEXP (x, 1))
554                   mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
555                               insn, 0);
556               }
557           }
558
559       /* Find all call insns and mark them as possibly jumping
560          to all the nonlocal goto handler labels.  */
561
562       for (insn = f; insn; insn = NEXT_INSN (insn))
563         if (GET_CODE (insn) == CALL_INSN)
564           {
565             for (x = nonlocal_label_list; x; x = XEXP (x, 1))
566               /* Don't try marking labels that
567                  were deleted as unreferenced.  */
568               if (GET_CODE (XEXP (x, 0)) == CODE_LABEL)
569                 mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
570                                 insn, 0);
571
572             /* ??? This could be made smarter:
573                in some cases it's possible to tell that certain
574                calls will not do a nonlocal goto.
575
576                For example, if the nested functions that do the
577                nonlocal gotos do not have their addresses taken, then
578                only calls to those functions or to other nested
579                functions that use them could possibly do nonlocal
580                gotos.  */
581           }
582
583       /* Pass over all blocks, marking each block that is reachable
584          and has not yet been marked.
585          Keep doing this until, in one pass, no blocks have been marked.
586          Then blocks_live and blocks_marked are identical and correct.
587          In addition, all jumps actually reachable have been marked.  */
588
589       while (something_marked)
590         {
591           something_marked = 0;
592           for (i = 0; i < n_basic_blocks; i++)
593             if (block_live[i] && !block_marked[i])
594               {
595                 block_marked[i] = 1;
596                 something_marked = 1;
597                 if (i + 1 < n_basic_blocks && basic_block_drops_in[i + 1])
598                   block_live[i + 1] = 1;
599                 insn = basic_block_end[i];
600                 if (GET_CODE (insn) == JUMP_INSN)
601                   mark_label_ref (PATTERN (insn), insn, 0);
602               }
603         }
604
605       /* Now delete the code for any basic blocks that can't be reached.
606          They can occur because jump_optimize does not recognize
607          unreachable loops as unreachable.  */
608
609       for (i = 0; i < n_basic_blocks; i++)
610         if (!block_live[i])
611           {
612             insn = basic_block_head[i];
613             while (1)
614               {
615                 if (GET_CODE (insn) == BARRIER)
616                   abort ();
617                 if (GET_CODE (insn) != NOTE)
618                   {
619                     PUT_CODE (insn, NOTE);
620                     NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
621                     NOTE_SOURCE_FILE (insn) = 0;
622                   }
623                 if (insn == basic_block_end[i])
624                   {
625                     /* BARRIERs are between basic blocks, not part of one.
626                        Delete a BARRIER if the preceding jump is deleted.
627                        We cannot alter a BARRIER into a NOTE
628                        because it is too short; but we can really delete
629                        it because it is not part of a basic block.  */
630                     if (NEXT_INSN (insn) != 0
631                         && GET_CODE (NEXT_INSN (insn)) == BARRIER)
632                       delete_insn (NEXT_INSN (insn));
633                     break;
634                   }
635                 insn = NEXT_INSN (insn);
636               }
637             /* Each time we delete some basic blocks,
638                see if there is a jump around them that is
639                being turned into a no-op.  If so, delete it.  */
640
641             if (block_live[i - 1])
642               {
643                 register int j;
644                 for (j = i; j < n_basic_blocks; j++)
645                   if (block_live[j])
646                     {
647                       rtx label;
648                       insn = basic_block_end[i - 1];
649                       if (GET_CODE (insn) == JUMP_INSN
650                           /* An unconditional jump is the only possibility
651                              we must check for, since a conditional one
652                              would make these blocks live.  */
653                           && simplejump_p (insn)
654                           && (label = XEXP (SET_SRC (PATTERN (insn)), 0), 1)
655                           && INSN_UID (label) != 0
656                           && BLOCK_NUM (label) == j)
657                         {
658                           PUT_CODE (insn, NOTE);
659                           NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
660                           NOTE_SOURCE_FILE (insn) = 0;
661                           if (GET_CODE (NEXT_INSN (insn)) != BARRIER)
662                             abort ();
663                           delete_insn (NEXT_INSN (insn));
664                         }
665                       break;
666                     }
667               }
668           }
669     }
670 }
671 \f
672 /* Return 1 if X contain a REG or MEM that is not in the constant pool.  */
673
674 static int
675 uses_reg_or_mem (x)
676      rtx x;
677 {
678   enum rtx_code code = GET_CODE (x);
679   int i, j;
680   char *fmt;
681
682   if (code == REG
683       || (code == MEM
684           && ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
685                 && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))))
686     return 1;
687
688   fmt = GET_RTX_FORMAT (code);
689   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
690     {
691       if (fmt[i] == 'e'
692           && uses_reg_or_mem (XEXP (x, i)))
693         return 1;
694
695       if (fmt[i] == 'E')
696         for (j = 0; j < XVECLEN (x, i); j++)
697           if (uses_reg_or_mem (XVECEXP (x, i, j)))
698             return 1;
699     }
700
701   return 0;
702 }
703 \f
704 /* Check expression X for label references;
705    if one is found, add INSN to the label's chain of references.
706
707    CHECKDUP means check for and avoid creating duplicate references
708    from the same insn.  Such duplicates do no serious harm but
709    can slow life analysis.  CHECKDUP is set only when duplicates
710    are likely.  */
711
712 static void
713 mark_label_ref (x, insn, checkdup)
714      rtx x, insn;
715      int checkdup;
716 {
717   register RTX_CODE code;
718   register int i;
719   register char *fmt;
720
721   /* We can be called with NULL when scanning label_value_list.  */
722   if (x == 0)
723     return;
724
725   code = GET_CODE (x);
726   if (code == LABEL_REF)
727     {
728       register rtx label = XEXP (x, 0);
729       register rtx y;
730       if (GET_CODE (label) != CODE_LABEL)
731         abort ();
732       /* If the label was never emitted, this insn is junk,
733          but avoid a crash trying to refer to BLOCK_NUM (label).
734          This can happen as a result of a syntax error
735          and a diagnostic has already been printed.  */
736       if (INSN_UID (label) == 0)
737         return;
738       CONTAINING_INSN (x) = insn;
739       /* if CHECKDUP is set, check for duplicate ref from same insn
740          and don't insert.  */
741       if (checkdup)
742         for (y = LABEL_REFS (label); y != label; y = LABEL_NEXTREF (y))
743           if (CONTAINING_INSN (y) == insn)
744             return;
745       LABEL_NEXTREF (x) = LABEL_REFS (label);
746       LABEL_REFS (label) = x;
747       block_live_static[BLOCK_NUM (label)] = 1;
748       return;
749     }
750
751   fmt = GET_RTX_FORMAT (code);
752   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
753     {
754       if (fmt[i] == 'e')
755         mark_label_ref (XEXP (x, i), insn, 0);
756       if (fmt[i] == 'E')
757         {
758           register int j;
759           for (j = 0; j < XVECLEN (x, i); j++)
760             mark_label_ref (XVECEXP (x, i, j), insn, 1);
761         }
762     }
763 }
764 \f
765 /* Determine which registers are live at the start of each
766    basic block of the function whose first insn is F.
767    NREGS is the number of registers used in F.
768    We allocate the vector basic_block_live_at_start
769    and the regsets that it points to, and fill them with the data.
770    regset_size and regset_bytes are also set here.  */
771
772 static void
773 life_analysis (f, nregs)
774      rtx f;
775      int nregs;
776 {
777   register regset tem;
778   int first_pass;
779   int changed;
780   /* For each basic block, a bitmask of regs
781      live on exit from the block.  */
782   regset *basic_block_live_at_end;
783   /* For each basic block, a bitmask of regs
784      live on entry to a successor-block of this block.
785      If this does not match basic_block_live_at_end,
786      that must be updated, and the block must be rescanned.  */
787   regset *basic_block_new_live_at_end;
788   /* For each basic block, a bitmask of regs
789      whose liveness at the end of the basic block
790      can make a difference in which regs are live on entry to the block.
791      These are the regs that are set within the basic block,
792      possibly excluding those that are used after they are set.  */
793   regset *basic_block_significant;
794   register int i;
795   rtx insn;
796
797   struct obstack flow_obstack;
798
799   gcc_obstack_init (&flow_obstack);
800
801   max_regno = nregs;
802
803   bzero (regs_ever_live, sizeof regs_ever_live);
804
805   /* Allocate and zero out many data structures
806      that will record the data from lifetime analysis.  */
807
808   allocate_for_life_analysis ();
809
810   reg_next_use = (rtx *) alloca (nregs * sizeof (rtx));
811   bzero ((char *) reg_next_use, nregs * sizeof (rtx));
812
813   /* Set up several regset-vectors used internally within this function.
814      Their meanings are documented above, with their declarations.  */
815
816   basic_block_live_at_end
817     = (regset *) alloca (n_basic_blocks * sizeof (regset));
818
819   /* Don't use alloca since that leads to a crash rather than an error message
820      if there isn't enough space.
821      Don't use oballoc since we may need to allocate other things during
822      this function on the temporary obstack.  */
823   tem = (regset) obstack_alloc (&flow_obstack, n_basic_blocks * regset_bytes);
824   bzero ((char *) tem, n_basic_blocks * regset_bytes);
825   init_regset_vector (basic_block_live_at_end, tem,
826                       n_basic_blocks, regset_bytes);
827
828   basic_block_new_live_at_end
829     = (regset *) alloca (n_basic_blocks * sizeof (regset));
830   tem = (regset) obstack_alloc (&flow_obstack, n_basic_blocks * regset_bytes);
831   bzero ((char *) tem, n_basic_blocks * regset_bytes);
832   init_regset_vector (basic_block_new_live_at_end, tem,
833                       n_basic_blocks, regset_bytes);
834
835   basic_block_significant
836     = (regset *) alloca (n_basic_blocks * sizeof (regset));
837   tem = (regset) obstack_alloc (&flow_obstack, n_basic_blocks * regset_bytes);
838   bzero ((char *) tem, n_basic_blocks * regset_bytes);
839   init_regset_vector (basic_block_significant, tem,
840                       n_basic_blocks, regset_bytes);
841
842   /* Record which insns refer to any volatile memory
843      or for any reason can't be deleted just because they are dead stores.
844      Also, delete any insns that copy a register to itself. */
845
846   for (insn = f; insn; insn = NEXT_INSN (insn))
847     {
848       enum rtx_code code1 = GET_CODE (insn);
849       if (code1 == CALL_INSN)
850         INSN_VOLATILE (insn) = 1;
851       else if (code1 == INSN || code1 == JUMP_INSN)
852         {
853           /* Delete (in effect) any obvious no-op moves.  */
854           if (GET_CODE (PATTERN (insn)) == SET
855               && GET_CODE (SET_DEST (PATTERN (insn))) == REG
856               && GET_CODE (SET_SRC (PATTERN (insn))) == REG
857               && REGNO (SET_DEST (PATTERN (insn))) ==
858                         REGNO (SET_SRC (PATTERN (insn)))
859               /* Insns carrying these notes are useful later on.  */
860               && ! find_reg_note (insn, REG_EQUAL, NULL_RTX))
861             {
862               PUT_CODE (insn, NOTE);
863               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
864               NOTE_SOURCE_FILE (insn) = 0;
865             }
866           else if (GET_CODE (PATTERN (insn)) == PARALLEL)
867             {
868               /* If nothing but SETs of registers to themselves,
869                  this insn can also be deleted.  */
870               for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
871                 {
872                   rtx tem = XVECEXP (PATTERN (insn), 0, i);
873
874                   if (GET_CODE (tem) == USE
875                       || GET_CODE (tem) == CLOBBER)
876                     continue;
877                     
878                   if (GET_CODE (tem) != SET
879                       || GET_CODE (SET_DEST (tem)) != REG
880                       || GET_CODE (SET_SRC (tem)) != REG
881                       || REGNO (SET_DEST (tem)) != REGNO (SET_SRC (tem)))
882                     break;
883                 }
884                 
885               if (i == XVECLEN (PATTERN (insn), 0)
886                   /* Insns carrying these notes are useful later on.  */
887                   && ! find_reg_note (insn, REG_EQUAL, NULL_RTX))
888                 {
889                   PUT_CODE (insn, NOTE);
890                   NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
891                   NOTE_SOURCE_FILE (insn) = 0;
892                 }
893               else
894                 INSN_VOLATILE (insn) = volatile_refs_p (PATTERN (insn));
895             }
896           else if (GET_CODE (PATTERN (insn)) != USE)
897             INSN_VOLATILE (insn) = volatile_refs_p (PATTERN (insn));
898           /* A SET that makes space on the stack cannot be dead.
899              (Such SETs occur only for allocating variable-size data,
900              so they will always have a PLUS or MINUS according to the
901              direction of stack growth.)
902              Even if this function never uses this stack pointer value,
903              signal handlers do!  */
904           else if (code1 == INSN && GET_CODE (PATTERN (insn)) == SET
905                    && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
906 #ifdef STACK_GROWS_DOWNWARD
907                    && GET_CODE (SET_SRC (PATTERN (insn))) == MINUS
908 #else
909                    && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
910 #endif
911                    && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx)
912             INSN_VOLATILE (insn) = 1;
913         }
914     }
915
916   if (n_basic_blocks > 0)
917 #ifdef EXIT_IGNORE_STACK
918     if (! EXIT_IGNORE_STACK
919         || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
920 #endif
921       {
922         /* If exiting needs the right stack value,
923            consider the stack pointer live at the end of the function.  */
924         basic_block_live_at_end[n_basic_blocks - 1]
925           [STACK_POINTER_REGNUM / REGSET_ELT_BITS]
926             |= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
927         basic_block_new_live_at_end[n_basic_blocks - 1]
928           [STACK_POINTER_REGNUM / REGSET_ELT_BITS]
929             |= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
930       }
931
932   /* Mark the frame pointer is needed at the end of the function.  If
933      we end up eliminating it, it will be removed from the live list
934      of each basic block by reload.  */
935
936   if (n_basic_blocks > 0)
937     {
938       basic_block_live_at_end[n_basic_blocks - 1]
939         [FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
940           |= (REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS);
941       basic_block_new_live_at_end[n_basic_blocks - 1]
942         [FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
943           |= (REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS);
944 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
945       /* If they are different, also mark the hard frame pointer as live */
946       basic_block_live_at_end[n_basic_blocks - 1]
947         [HARD_FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
948           |= (REGSET_ELT_TYPE) 1 << (HARD_FRAME_POINTER_REGNUM
949                                      % REGSET_ELT_BITS);
950       basic_block_new_live_at_end[n_basic_blocks - 1]
951         [HARD_FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
952           |= (REGSET_ELT_TYPE) 1 << (HARD_FRAME_POINTER_REGNUM
953                                      % REGSET_ELT_BITS);
954 #endif      
955       }
956
957   /* Mark all global registers as being live at the end of the function
958      since they may be referenced by our caller.  */
959
960   if (n_basic_blocks > 0)
961     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
962       if (global_regs[i])
963         {
964           basic_block_live_at_end[n_basic_blocks - 1]
965             [i / REGSET_ELT_BITS]
966               |= (REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS);
967           basic_block_new_live_at_end[n_basic_blocks - 1]
968             [i / REGSET_ELT_BITS]
969               |= (REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS);
970         }
971
972   /* Propagate life info through the basic blocks
973      around the graph of basic blocks.
974
975      This is a relaxation process: each time a new register
976      is live at the end of the basic block, we must scan the block
977      to determine which registers are, as a consequence, live at the beginning
978      of that block.  These registers must then be marked live at the ends
979      of all the blocks that can transfer control to that block.
980      The process continues until it reaches a fixed point.  */
981
982   first_pass = 1;
983   changed = 1;
984   while (changed)
985     {
986       changed = 0;
987       for (i = n_basic_blocks - 1; i >= 0; i--)
988         {
989           int consider = first_pass;
990           int must_rescan = first_pass;
991           register int j;
992
993           if (!first_pass)
994             {
995               /* Set CONSIDER if this block needs thinking about at all
996                  (that is, if the regs live now at the end of it
997                  are not the same as were live at the end of it when
998                  we last thought about it).
999                  Set must_rescan if it needs to be thought about
1000                  instruction by instruction (that is, if any additional
1001                  reg that is live at the end now but was not live there before
1002                  is one of the significant regs of this basic block).  */
1003
1004               for (j = 0; j < regset_size; j++)
1005                 {
1006                   register REGSET_ELT_TYPE x
1007                     = (basic_block_new_live_at_end[i][j]
1008                        & ~basic_block_live_at_end[i][j]);
1009                   if (x)
1010                     consider = 1;
1011                   if (x & basic_block_significant[i][j])
1012                     {
1013                       must_rescan = 1;
1014                       consider = 1;
1015                       break;
1016                     }
1017                 }
1018
1019               if (! consider)
1020                 continue;
1021             }
1022
1023           /* The live_at_start of this block may be changing,
1024              so another pass will be required after this one.  */
1025           changed = 1;
1026
1027           if (! must_rescan)
1028             {
1029               /* No complete rescan needed;
1030                  just record those variables newly known live at end
1031                  as live at start as well.  */
1032               for (j = 0; j < regset_size; j++)
1033                 {
1034                   register REGSET_ELT_TYPE x
1035                     = (basic_block_new_live_at_end[i][j]
1036                        & ~basic_block_live_at_end[i][j]);
1037                   basic_block_live_at_start[i][j] |= x;
1038                   basic_block_live_at_end[i][j] |= x;
1039                 }
1040             }
1041           else
1042             {
1043               /* Update the basic_block_live_at_start
1044                  by propagation backwards through the block.  */
1045               bcopy ((char *) basic_block_new_live_at_end[i],
1046                      (char *) basic_block_live_at_end[i], regset_bytes);
1047               bcopy ((char *) basic_block_live_at_end[i],
1048                      (char *) basic_block_live_at_start[i], regset_bytes);
1049               propagate_block (basic_block_live_at_start[i],
1050                                basic_block_head[i], basic_block_end[i], 0,
1051                                first_pass ? basic_block_significant[i]
1052                                : (regset) 0,
1053                                i);
1054             }
1055
1056           {
1057             register rtx jump, head;
1058             /* Update the basic_block_new_live_at_end's of the block
1059                that falls through into this one (if any).  */
1060             head = basic_block_head[i];
1061             jump = PREV_INSN (head);
1062             if (basic_block_drops_in[i])
1063               {
1064                 register int from_block = BLOCK_NUM (jump);
1065                 register int j;
1066                 for (j = 0; j < regset_size; j++)
1067                   basic_block_new_live_at_end[from_block][j]
1068                     |= basic_block_live_at_start[i][j];
1069               }
1070             /* Update the basic_block_new_live_at_end's of
1071                all the blocks that jump to this one.  */
1072             if (GET_CODE (head) == CODE_LABEL)
1073               for (jump = LABEL_REFS (head);
1074                    jump != head;
1075                    jump = LABEL_NEXTREF (jump))
1076                 {
1077                   register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
1078                   register int j;
1079                   for (j = 0; j < regset_size; j++)
1080                     basic_block_new_live_at_end[from_block][j]
1081                       |= basic_block_live_at_start[i][j];
1082                 }
1083           }
1084 #ifdef USE_C_ALLOCA
1085           alloca (0);
1086 #endif
1087         }
1088       first_pass = 0;
1089     }
1090
1091   /* The only pseudos that are live at the beginning of the function are
1092      those that were not set anywhere in the function.  local-alloc doesn't
1093      know how to handle these correctly, so mark them as not local to any
1094      one basic block.  */
1095
1096   if (n_basic_blocks > 0)
1097     for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1098       if (basic_block_live_at_start[0][i / REGSET_ELT_BITS]
1099           & ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS)))
1100         reg_basic_block[i] = REG_BLOCK_GLOBAL;
1101
1102   /* Now the life information is accurate.
1103      Make one more pass over each basic block
1104      to delete dead stores, create autoincrement addressing
1105      and record how many times each register is used, is set, or dies.
1106
1107      To save time, we operate directly in basic_block_live_at_end[i],
1108      thus destroying it (in fact, converting it into a copy of
1109      basic_block_live_at_start[i]).  This is ok now because
1110      basic_block_live_at_end[i] is no longer used past this point.  */
1111
1112   max_scratch = 0;
1113
1114   for (i = 0; i < n_basic_blocks; i++)
1115     {
1116       propagate_block (basic_block_live_at_end[i],
1117                        basic_block_head[i], basic_block_end[i], 1,
1118                        (regset) 0, i);
1119 #ifdef USE_C_ALLOCA
1120       alloca (0);
1121 #endif
1122     }
1123
1124 #if 0
1125   /* Something live during a setjmp should not be put in a register
1126      on certain machines which restore regs from stack frames
1127      rather than from the jmpbuf.
1128      But we don't need to do this for the user's variables, since
1129      ANSI says only volatile variables need this.  */
1130 #ifdef LONGJMP_RESTORE_FROM_STACK
1131   for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1132     if (regs_live_at_setjmp[i / REGSET_ELT_BITS]
1133         & ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS))
1134         && regno_reg_rtx[i] != 0 && ! REG_USERVAR_P (regno_reg_rtx[i]))
1135       {
1136         reg_live_length[i] = -1;
1137         reg_basic_block[i] = -1;
1138       }
1139 #endif
1140 #endif
1141
1142   /* We have a problem with any pseudoreg that
1143      lives across the setjmp.  ANSI says that if a
1144      user variable does not change in value
1145      between the setjmp and the longjmp, then the longjmp preserves it.
1146      This includes longjmp from a place where the pseudo appears dead.
1147      (In principle, the value still exists if it is in scope.)
1148      If the pseudo goes in a hard reg, some other value may occupy
1149      that hard reg where this pseudo is dead, thus clobbering the pseudo.
1150      Conclusion: such a pseudo must not go in a hard reg.  */
1151   for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1152     if ((regs_live_at_setjmp[i / REGSET_ELT_BITS]
1153          & ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS)))
1154         && regno_reg_rtx[i] != 0)
1155       {
1156         reg_live_length[i] = -1;
1157         reg_basic_block[i] = -1;
1158       }
1159
1160   obstack_free (&flow_obstack, NULL_PTR);
1161 }
1162 \f
1163 /* Subroutines of life analysis.  */
1164
1165 /* Allocate the permanent data structures that represent the results
1166    of life analysis.  Not static since used also for stupid life analysis.  */
1167
1168 void
1169 allocate_for_life_analysis ()
1170 {
1171   register int i;
1172   register regset tem;
1173
1174   regset_size = ((max_regno + REGSET_ELT_BITS - 1) / REGSET_ELT_BITS);
1175   regset_bytes = regset_size * sizeof (*(regset)0);
1176
1177   reg_n_refs = (int *) oballoc (max_regno * sizeof (int));
1178   bzero ((char *) reg_n_refs, max_regno * sizeof (int));
1179
1180   reg_n_sets = (short *) oballoc (max_regno * sizeof (short));
1181   bzero ((char *) reg_n_sets, max_regno * sizeof (short));
1182
1183   reg_n_deaths = (short *) oballoc (max_regno * sizeof (short));
1184   bzero ((char *) reg_n_deaths, max_regno * sizeof (short));
1185
1186   reg_live_length = (int *) oballoc (max_regno * sizeof (int));
1187   bzero ((char *) reg_live_length, max_regno * sizeof (int));
1188
1189   reg_n_calls_crossed = (int *) oballoc (max_regno * sizeof (int));
1190   bzero ((char *) reg_n_calls_crossed, max_regno * sizeof (int));
1191
1192   reg_basic_block = (int *) oballoc (max_regno * sizeof (int));
1193   for (i = 0; i < max_regno; i++)
1194     reg_basic_block[i] = REG_BLOCK_UNKNOWN;
1195
1196   basic_block_live_at_start
1197     = (regset *) oballoc (n_basic_blocks * sizeof (regset));
1198   tem = (regset) oballoc (n_basic_blocks * regset_bytes);
1199   bzero ((char *) tem, n_basic_blocks * regset_bytes);
1200   init_regset_vector (basic_block_live_at_start, tem,
1201                       n_basic_blocks, regset_bytes);
1202
1203   regs_live_at_setjmp = (regset) oballoc (regset_bytes);
1204   bzero ((char *) regs_live_at_setjmp, regset_bytes);
1205 }
1206
1207 /* Make each element of VECTOR point at a regset,
1208    taking the space for all those regsets from SPACE.
1209    SPACE is of type regset, but it is really as long as NELTS regsets.
1210    BYTES_PER_ELT is the number of bytes in one regset.  */
1211
1212 static void
1213 init_regset_vector (vector, space, nelts, bytes_per_elt)
1214      regset *vector;
1215      regset space;
1216      int nelts;
1217      int bytes_per_elt;
1218 {
1219   register int i;
1220   register regset p = space;
1221
1222   for (i = 0; i < nelts; i++)
1223     {
1224       vector[i] = p;
1225       p += bytes_per_elt / sizeof (*p);
1226     }
1227 }
1228
1229 /* Compute the registers live at the beginning of a basic block
1230    from those live at the end.
1231
1232    When called, OLD contains those live at the end.
1233    On return, it contains those live at the beginning.
1234    FIRST and LAST are the first and last insns of the basic block.
1235
1236    FINAL is nonzero if we are doing the final pass which is not
1237    for computing the life info (since that has already been done)
1238    but for acting on it.  On this pass, we delete dead stores,
1239    set up the logical links and dead-variables lists of instructions,
1240    and merge instructions for autoincrement and autodecrement addresses.
1241
1242    SIGNIFICANT is nonzero only the first time for each basic block.
1243    If it is nonzero, it points to a regset in which we store
1244    a 1 for each register that is set within the block.
1245
1246    BNUM is the number of the basic block.  */
1247
1248 static void
1249 propagate_block (old, first, last, final, significant, bnum)
1250      register regset old;
1251      rtx first;
1252      rtx last;
1253      int final;
1254      regset significant;
1255      int bnum;
1256 {
1257   register rtx insn;
1258   rtx prev;
1259   regset live;
1260   regset dead;
1261
1262   /* The following variables are used only if FINAL is nonzero.  */
1263   /* This vector gets one element for each reg that has been live
1264      at any point in the basic block that has been scanned so far.
1265      SOMETIMES_MAX says how many elements are in use so far.
1266      In each element, OFFSET is the byte-number within a regset
1267      for the register described by the element, and BIT is a mask
1268      for that register's bit within the byte.  */
1269   register struct sometimes { short offset; short bit; } *regs_sometimes_live;
1270   int sometimes_max = 0;
1271   /* This regset has 1 for each reg that we have seen live so far.
1272      It and REGS_SOMETIMES_LIVE are updated together.  */
1273   regset maxlive;
1274
1275   /* The loop depth may change in the middle of a basic block.  Since we
1276      scan from end to beginning, we start with the depth at the end of the
1277      current basic block, and adjust as we pass ends and starts of loops.  */
1278   loop_depth = basic_block_loop_depth[bnum];
1279
1280   dead = (regset) alloca (regset_bytes);
1281   live = (regset) alloca (regset_bytes);
1282
1283   cc0_live = 0;
1284   last_mem_set = 0;
1285
1286   /* Include any notes at the end of the block in the scan.
1287      This is in case the block ends with a call to setjmp.  */
1288
1289   while (NEXT_INSN (last) != 0 && GET_CODE (NEXT_INSN (last)) == NOTE)
1290     {
1291       /* Look for loop boundaries, we are going forward here.  */
1292       last = NEXT_INSN (last);
1293       if (NOTE_LINE_NUMBER (last) == NOTE_INSN_LOOP_BEG)
1294         loop_depth++;
1295       else if (NOTE_LINE_NUMBER (last) == NOTE_INSN_LOOP_END)
1296         loop_depth--;
1297     }
1298
1299   if (final)
1300     {
1301       register int i, offset;
1302       REGSET_ELT_TYPE bit;
1303
1304       num_scratch = 0;
1305       maxlive = (regset) alloca (regset_bytes);
1306       bcopy ((char *) old, (char *) maxlive, regset_bytes);
1307       regs_sometimes_live
1308         = (struct sometimes *) alloca (max_regno * sizeof (struct sometimes));
1309
1310       /* Process the regs live at the end of the block.
1311          Enter them in MAXLIVE and REGS_SOMETIMES_LIVE.
1312          Also mark them as not local to any one basic block.  */
1313
1314       for (offset = 0, i = 0; offset < regset_size; offset++)
1315         for (bit = 1; bit; bit <<= 1, i++)
1316           {
1317             if (i == max_regno)
1318               break;
1319             if (old[offset] & bit)
1320               {
1321                 reg_basic_block[i] = REG_BLOCK_GLOBAL;
1322                 regs_sometimes_live[sometimes_max].offset = offset;
1323                 regs_sometimes_live[sometimes_max].bit = i % REGSET_ELT_BITS;
1324                 sometimes_max++;
1325               }
1326           }
1327     }
1328
1329   /* Scan the block an insn at a time from end to beginning.  */
1330
1331   for (insn = last; ; insn = prev)
1332     {
1333       prev = PREV_INSN (insn);
1334
1335       /* Look for loop boundaries, remembering that we are going backwards.  */
1336       if (GET_CODE (insn) == NOTE
1337           && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
1338         loop_depth++;
1339       else if (GET_CODE (insn) == NOTE
1340                && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
1341         loop_depth--;
1342
1343       /* If we have LOOP_DEPTH == 0, there has been a bookkeeping error. 
1344          Abort now rather than setting register status incorrectly.  */
1345       if (loop_depth == 0)
1346         abort ();
1347
1348       /* If this is a call to `setjmp' et al,
1349          warn if any non-volatile datum is live.  */
1350
1351       if (final && GET_CODE (insn) == NOTE
1352           && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
1353         {
1354           int i;
1355           for (i = 0; i < regset_size; i++)
1356             regs_live_at_setjmp[i] |= old[i];
1357         }
1358
1359       /* Update the life-status of regs for this insn.
1360          First DEAD gets which regs are set in this insn
1361          then LIVE gets which regs are used in this insn.
1362          Then the regs live before the insn
1363          are those live after, with DEAD regs turned off,
1364          and then LIVE regs turned on.  */
1365
1366       if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1367         {
1368           register int i;
1369           rtx note = find_reg_note (insn, REG_RETVAL, NULL_RTX);
1370           int insn_is_dead
1371             = (insn_dead_p (PATTERN (insn), old, 0)
1372                /* Don't delete something that refers to volatile storage!  */
1373                && ! INSN_VOLATILE (insn));
1374           int libcall_is_dead 
1375             = (insn_is_dead && note != 0
1376                && libcall_dead_p (PATTERN (insn), old, note, insn));
1377
1378           /* If an instruction consists of just dead store(s) on final pass,
1379              "delete" it by turning it into a NOTE of type NOTE_INSN_DELETED.
1380              We could really delete it with delete_insn, but that
1381              can cause trouble for first or last insn in a basic block.  */
1382           if (final && insn_is_dead)
1383             {
1384               PUT_CODE (insn, NOTE);
1385               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1386               NOTE_SOURCE_FILE (insn) = 0;
1387
1388               /* CC0 is now known to be dead.  Either this insn used it,
1389                  in which case it doesn't anymore, or clobbered it,
1390                  so the next insn can't use it.  */
1391               cc0_live = 0;
1392
1393               /* If this insn is copying the return value from a library call,
1394                  delete the entire library call.  */
1395               if (libcall_is_dead)
1396                 {
1397                   rtx first = XEXP (note, 0);
1398                   rtx p = insn;
1399                   while (INSN_DELETED_P (first))
1400                     first = NEXT_INSN (first);
1401                   while (p != first)
1402                     {
1403                       p = PREV_INSN (p);
1404                       PUT_CODE (p, NOTE);
1405                       NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED;
1406                       NOTE_SOURCE_FILE (p) = 0;
1407                     }
1408                 }
1409               goto flushed;
1410             }
1411
1412           for (i = 0; i < regset_size; i++)
1413             {
1414               dead[i] = 0;      /* Faster than bzero here */
1415               live[i] = 0;      /* since regset_size is usually small */
1416             }
1417
1418           /* See if this is an increment or decrement that can be
1419              merged into a following memory address.  */
1420 #ifdef AUTO_INC_DEC
1421           {
1422             register rtx x = PATTERN (insn);
1423             /* Does this instruction increment or decrement a register?  */
1424             if (final && GET_CODE (x) == SET
1425                 && GET_CODE (SET_DEST (x)) == REG
1426                 && (GET_CODE (SET_SRC (x)) == PLUS
1427                     || GET_CODE (SET_SRC (x)) == MINUS)
1428                 && XEXP (SET_SRC (x), 0) == SET_DEST (x)
1429                 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1430                 /* Ok, look for a following memory ref we can combine with.
1431                    If one is found, change the memory ref to a PRE_INC
1432                    or PRE_DEC, cancel this insn, and return 1.
1433                    Return 0 if nothing has been done.  */
1434                 && try_pre_increment_1 (insn))
1435               goto flushed;
1436           }
1437 #endif /* AUTO_INC_DEC */
1438
1439           /* If this is not the final pass, and this insn is copying the
1440              value of a library call and it's dead, don't scan the
1441              insns that perform the library call, so that the call's
1442              arguments are not marked live.  */
1443           if (libcall_is_dead)
1444             {
1445               /* Mark the dest reg as `significant'.  */
1446               mark_set_regs (old, dead, PATTERN (insn), NULL_RTX, significant);
1447
1448               insn = XEXP (note, 0);
1449               prev = PREV_INSN (insn);
1450             }
1451           else if (GET_CODE (PATTERN (insn)) == SET
1452                    && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
1453                    && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
1454                    && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
1455                    && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
1456             /* We have an insn to pop a constant amount off the stack.
1457                (Such insns use PLUS regardless of the direction of the stack,
1458                and any insn to adjust the stack by a constant is always a pop.)
1459                These insns, if not dead stores, have no effect on life.  */
1460             ;
1461           else
1462             {
1463               /* LIVE gets the regs used in INSN;
1464                  DEAD gets those set by it.  Dead insns don't make anything
1465                  live.  */
1466
1467               mark_set_regs (old, dead, PATTERN (insn),
1468                              final ? insn : NULL_RTX, significant);
1469
1470               /* If an insn doesn't use CC0, it becomes dead since we 
1471                  assume that every insn clobbers it.  So show it dead here;
1472                  mark_used_regs will set it live if it is referenced.  */
1473               cc0_live = 0;
1474
1475               if (! insn_is_dead)
1476                 mark_used_regs (old, live, PATTERN (insn), final, insn);
1477
1478               /* Sometimes we may have inserted something before INSN (such as
1479                  a move) when we make an auto-inc.  So ensure we will scan
1480                  those insns.  */
1481 #ifdef AUTO_INC_DEC
1482               prev = PREV_INSN (insn);
1483 #endif
1484
1485               if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
1486                 {
1487                   register int i;
1488
1489                   rtx note;
1490
1491                   for (note = CALL_INSN_FUNCTION_USAGE (insn);
1492                        note;
1493                        note = XEXP (note, 1))
1494                     if (GET_CODE (XEXP (note, 0)) == USE)
1495                       mark_used_regs (old, live, SET_DEST (XEXP (note, 0)),
1496                                       final, insn);
1497
1498                   /* Each call clobbers all call-clobbered regs that are not
1499                      global.  Note that the function-value reg is a
1500                      call-clobbered reg, and mark_set_regs has already had
1501                      a chance to handle it.  */
1502
1503                   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1504                     if (call_used_regs[i] && ! global_regs[i])
1505                       dead[i / REGSET_ELT_BITS]
1506                         |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
1507
1508                   /* The stack ptr is used (honorarily) by a CALL insn.  */
1509                   live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
1510                     |= ((REGSET_ELT_TYPE) 1
1511                         << (STACK_POINTER_REGNUM % REGSET_ELT_BITS));
1512
1513                   /* Calls may also reference any of the global registers,
1514                      so they are made live.  */
1515
1516                   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1517                     if (global_regs[i])
1518                       live[i / REGSET_ELT_BITS]
1519                         |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
1520
1521                   /* Calls also clobber memory.  */
1522                   last_mem_set = 0;
1523                 }
1524
1525               /* Update OLD for the registers used or set.  */
1526               for (i = 0; i < regset_size; i++)
1527                 {
1528                   old[i] &= ~dead[i];
1529                   old[i] |= live[i];
1530                 }
1531
1532               if (GET_CODE (insn) == CALL_INSN && final)
1533                 {
1534                   /* Any regs live at the time of a call instruction
1535                      must not go in a register clobbered by calls.
1536                      Find all regs now live and record this for them.  */
1537
1538                   register struct sometimes *p = regs_sometimes_live;
1539
1540                   for (i = 0; i < sometimes_max; i++, p++)
1541                     if (old[p->offset] & ((REGSET_ELT_TYPE) 1 << p->bit))
1542                       reg_n_calls_crossed[p->offset * REGSET_ELT_BITS + p->bit]+= 1;
1543                 }
1544             }
1545
1546           /* On final pass, add any additional sometimes-live regs
1547              into MAXLIVE and REGS_SOMETIMES_LIVE.
1548              Also update counts of how many insns each reg is live at.  */
1549
1550           if (final)
1551             {
1552               for (i = 0; i < regset_size; i++)
1553                 {
1554                   register REGSET_ELT_TYPE diff = live[i] & ~maxlive[i];
1555
1556                   if (diff)
1557                     {
1558                       register int regno;
1559                       maxlive[i] |= diff;
1560                       for (regno = 0; diff && regno < REGSET_ELT_BITS; regno++)
1561                         if (diff & ((REGSET_ELT_TYPE) 1 << regno))
1562                           {
1563                             regs_sometimes_live[sometimes_max].offset = i;
1564                             regs_sometimes_live[sometimes_max].bit = regno;
1565                             diff &= ~ ((REGSET_ELT_TYPE) 1 << regno);
1566                             sometimes_max++;
1567                           }
1568                     }
1569                 }
1570
1571               {
1572                 register struct sometimes *p = regs_sometimes_live;
1573                 for (i = 0; i < sometimes_max; i++, p++)
1574                   {
1575                     if (old[p->offset] & ((REGSET_ELT_TYPE) 1 << p->bit))
1576                       reg_live_length[p->offset * REGSET_ELT_BITS + p->bit]++;
1577                   }
1578               }
1579             }
1580         }
1581     flushed: ;
1582       if (insn == first)
1583         break;
1584     }
1585
1586   if (num_scratch > max_scratch)
1587     max_scratch = num_scratch;
1588 }
1589 \f
1590 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
1591    (SET expressions whose destinations are registers dead after the insn).
1592    NEEDED is the regset that says which regs are alive after the insn.
1593
1594    Unless CALL_OK is non-zero, an insn is needed if it contains a CALL.  */
1595
1596 static int
1597 insn_dead_p (x, needed, call_ok)
1598      rtx x;
1599      regset needed;
1600      int call_ok;
1601 {
1602   register RTX_CODE code = GET_CODE (x);
1603   /* If setting something that's a reg or part of one,
1604      see if that register's altered value will be live.  */
1605
1606   if (code == SET)
1607     {
1608       register rtx r = SET_DEST (x);
1609       /* A SET that is a subroutine call cannot be dead.  */
1610       if (! call_ok && GET_CODE (SET_SRC (x)) == CALL)
1611         return 0;
1612
1613 #ifdef HAVE_cc0
1614       if (GET_CODE (r) == CC0)
1615         return ! cc0_live;
1616 #endif
1617       
1618       if (GET_CODE (r) == MEM && last_mem_set && ! MEM_VOLATILE_P (r)
1619           && rtx_equal_p (r, last_mem_set))
1620         return 1;
1621
1622       while (GET_CODE (r) == SUBREG
1623              || GET_CODE (r) == STRICT_LOW_PART
1624              || GET_CODE (r) == ZERO_EXTRACT
1625              || GET_CODE (r) == SIGN_EXTRACT)
1626         r = SUBREG_REG (r);
1627
1628       if (GET_CODE (r) == REG)
1629         {
1630           register int regno = REGNO (r);
1631           register int offset = regno / REGSET_ELT_BITS;
1632           register REGSET_ELT_TYPE bit
1633             = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
1634
1635           /* Don't delete insns to set global regs.  */
1636           if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1637               /* Make sure insns to set frame pointer aren't deleted.  */
1638               || regno == FRAME_POINTER_REGNUM
1639 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1640               || regno == HARD_FRAME_POINTER_REGNUM
1641 #endif
1642 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1643               /* Make sure insns to set arg pointer are never deleted
1644                  (if the arg pointer isn't fixed, there will be a USE for
1645                  it, so we can treat it normally). */
1646               || (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
1647 #endif
1648               || (needed[offset] & bit) != 0)
1649             return 0;
1650
1651           /* If this is a hard register, verify that subsequent words are
1652              not needed.  */
1653           if (regno < FIRST_PSEUDO_REGISTER)
1654             {
1655               int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
1656
1657               while (--n > 0)
1658                 if ((needed[(regno + n) / REGSET_ELT_BITS]
1659                      & ((REGSET_ELT_TYPE) 1
1660                         << ((regno + n) % REGSET_ELT_BITS))) != 0)
1661                   return 0;
1662             }
1663
1664           return 1;
1665         }
1666     }
1667   /* If performing several activities,
1668      insn is dead if each activity is individually dead.
1669      Also, CLOBBERs and USEs can be ignored; a CLOBBER or USE
1670      that's inside a PARALLEL doesn't make the insn worth keeping.  */
1671   else if (code == PARALLEL)
1672     {
1673       register int i = XVECLEN (x, 0);
1674       for (i--; i >= 0; i--)
1675         {
1676           rtx elt = XVECEXP (x, 0, i);
1677           if (!insn_dead_p (elt, needed, call_ok)
1678               && GET_CODE (elt) != CLOBBER
1679               && GET_CODE (elt) != USE)
1680             return 0;
1681         }
1682       return 1;
1683     }
1684   /* We do not check CLOBBER or USE here.
1685      An insn consisting of just a CLOBBER or just a USE
1686      should not be deleted.  */
1687   return 0;
1688 }
1689
1690 /* If X is the pattern of the last insn in a libcall, and assuming X is dead,
1691    return 1 if the entire library call is dead.
1692    This is true if X copies a register (hard or pseudo)
1693    and if the hard return  reg of the call insn is dead.
1694    (The caller should have tested the destination of X already for death.)
1695
1696    If this insn doesn't just copy a register, then we don't
1697    have an ordinary libcall.  In that case, cse could not have
1698    managed to substitute the source for the dest later on,
1699    so we can assume the libcall is dead.
1700
1701    NEEDED is the bit vector of pseudoregs live before this insn.
1702    NOTE is the REG_RETVAL note of the insn.  INSN is the insn itself.  */
1703
1704 static int
1705 libcall_dead_p (x, needed, note, insn)
1706      rtx x;
1707      regset needed;
1708      rtx note;
1709      rtx insn;
1710 {
1711   register RTX_CODE code = GET_CODE (x);
1712
1713   if (code == SET)
1714     {
1715       register rtx r = SET_SRC (x);
1716       if (GET_CODE (r) == REG)
1717         {
1718           rtx call = XEXP (note, 0);
1719           register int i;
1720
1721           /* Find the call insn.  */
1722           while (call != insn && GET_CODE (call) != CALL_INSN)
1723             call = NEXT_INSN (call);
1724
1725           /* If there is none, do nothing special,
1726              since ordinary death handling can understand these insns.  */
1727           if (call == insn)
1728             return 0;
1729
1730           /* See if the hard reg holding the value is dead.
1731              If this is a PARALLEL, find the call within it.  */
1732           call = PATTERN (call);
1733           if (GET_CODE (call) == PARALLEL)
1734             {
1735               for (i = XVECLEN (call, 0) - 1; i >= 0; i--)
1736                 if (GET_CODE (XVECEXP (call, 0, i)) == SET
1737                     && GET_CODE (SET_SRC (XVECEXP (call, 0, i))) == CALL)
1738                   break;
1739
1740               /* This may be a library call that is returning a value
1741                  via invisible pointer.  Do nothing special, since
1742                  ordinary death handling can understand these insns.  */
1743               if (i < 0)
1744                 return 0;
1745
1746               call = XVECEXP (call, 0, i);
1747             }
1748
1749           return insn_dead_p (call, needed, 1);
1750         }
1751     }
1752   return 1;
1753 }
1754
1755 /* Return 1 if register REGNO was used before it was set.
1756    In other words, if it is live at function entry.
1757    Don't count global regster variables, though.  */
1758
1759 int
1760 regno_uninitialized (regno)
1761      int regno;
1762 {
1763   if (n_basic_blocks == 0
1764       || (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
1765     return 0;
1766
1767   return (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1768           & ((REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS)));
1769 }
1770
1771 /* 1 if register REGNO was alive at a place where `setjmp' was called
1772    and was set more than once or is an argument.
1773    Such regs may be clobbered by `longjmp'.  */
1774
1775 int
1776 regno_clobbered_at_setjmp (regno)
1777      int regno;
1778 {
1779   if (n_basic_blocks == 0)
1780     return 0;
1781
1782   return ((reg_n_sets[regno] > 1
1783            || (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1784                & ((REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS))))
1785           && (regs_live_at_setjmp[regno / REGSET_ELT_BITS]
1786               & ((REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS))));
1787 }
1788 \f
1789 /* Process the registers that are set within X.
1790    Their bits are set to 1 in the regset DEAD,
1791    because they are dead prior to this insn.
1792
1793    If INSN is nonzero, it is the insn being processed
1794    and the fact that it is nonzero implies this is the FINAL pass
1795    in propagate_block.  In this case, various info about register
1796    usage is stored, LOG_LINKS fields of insns are set up.  */
1797
1798 static void
1799 mark_set_regs (needed, dead, x, insn, significant)
1800      regset needed;
1801      regset dead;
1802      rtx x;
1803      rtx insn;
1804      regset significant;
1805 {
1806   register RTX_CODE code = GET_CODE (x);
1807
1808   if (code == SET || code == CLOBBER)
1809     mark_set_1 (needed, dead, x, insn, significant);
1810   else if (code == PARALLEL)
1811     {
1812       register int i;
1813       for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
1814         {
1815           code = GET_CODE (XVECEXP (x, 0, i));
1816           if (code == SET || code == CLOBBER)
1817             mark_set_1 (needed, dead, XVECEXP (x, 0, i), insn, significant);
1818         }
1819     }
1820 }
1821
1822 /* Process a single SET rtx, X.  */
1823
1824 static void
1825 mark_set_1 (needed, dead, x, insn, significant)
1826      regset needed;
1827      regset dead;
1828      rtx x;
1829      rtx insn;
1830      regset significant;
1831 {
1832   register int regno;
1833   register rtx reg = SET_DEST (x);
1834
1835   /* Modifying just one hardware register of a multi-reg value
1836      or just a byte field of a register
1837      does not mean the value from before this insn is now dead.
1838      But it does mean liveness of that register at the end of the block
1839      is significant.
1840
1841      Within mark_set_1, however, we treat it as if the register is
1842      indeed modified.  mark_used_regs will, however, also treat this
1843      register as being used.  Thus, we treat these insns as setting a
1844      new value for the register as a function of its old value.  This
1845      cases LOG_LINKS to be made appropriately and this will help combine.  */
1846
1847   while (GET_CODE (reg) == SUBREG || GET_CODE (reg) == ZERO_EXTRACT
1848          || GET_CODE (reg) == SIGN_EXTRACT
1849          || GET_CODE (reg) == STRICT_LOW_PART)
1850     reg = XEXP (reg, 0);
1851
1852   /* If we are writing into memory or into a register mentioned in the
1853      address of the last thing stored into memory, show we don't know
1854      what the last store was.  If we are writing memory, save the address
1855      unless it is volatile.  */
1856   if (GET_CODE (reg) == MEM
1857       || (GET_CODE (reg) == REG
1858           && last_mem_set != 0 && reg_overlap_mentioned_p (reg, last_mem_set)))
1859     last_mem_set = 0;
1860     
1861   if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
1862       /* There are no REG_INC notes for SP, so we can't assume we'll see 
1863          everything that invalidates it.  To be safe, don't eliminate any
1864          stores though SP; none of them should be redundant anyway.  */
1865       && ! reg_mentioned_p (stack_pointer_rtx, reg))
1866     last_mem_set = reg;
1867
1868   if (GET_CODE (reg) == REG
1869       && (regno = REGNO (reg), regno != FRAME_POINTER_REGNUM)
1870 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1871       && regno != HARD_FRAME_POINTER_REGNUM
1872 #endif
1873 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1874       && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
1875 #endif
1876       && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
1877     /* && regno != STACK_POINTER_REGNUM) -- let's try without this.  */
1878     {
1879       register int offset = regno / REGSET_ELT_BITS;
1880       register REGSET_ELT_TYPE bit
1881         = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
1882       REGSET_ELT_TYPE all_needed = (needed[offset] & bit);
1883       REGSET_ELT_TYPE some_needed = (needed[offset] & bit);
1884
1885       /* Mark it as a significant register for this basic block.  */
1886       if (significant)
1887         significant[offset] |= bit;
1888
1889       /* Mark it as as dead before this insn.  */
1890       dead[offset] |= bit;
1891
1892       /* A hard reg in a wide mode may really be multiple registers.
1893          If so, mark all of them just like the first.  */
1894       if (regno < FIRST_PSEUDO_REGISTER)
1895         {
1896           int n;
1897
1898           /* Nothing below is needed for the stack pointer; get out asap.
1899              Eg, log links aren't needed, since combine won't use them.  */
1900           if (regno == STACK_POINTER_REGNUM)
1901             return;
1902
1903           n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
1904           while (--n > 0)
1905             {
1906               if (significant)
1907                 significant[(regno + n) / REGSET_ELT_BITS]
1908                   |= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
1909               dead[(regno + n) / REGSET_ELT_BITS]
1910                 |= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
1911               some_needed
1912                 |= (needed[(regno + n) / REGSET_ELT_BITS]
1913                     & (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
1914               all_needed
1915                 &= (needed[(regno + n) / REGSET_ELT_BITS]
1916                     & (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
1917             }
1918         }
1919       /* Additional data to record if this is the final pass.  */
1920       if (insn)
1921         {
1922           register rtx y = reg_next_use[regno];
1923           register int blocknum = BLOCK_NUM (insn);
1924
1925           /* The next use is no longer "next", since a store intervenes.  */
1926           reg_next_use[regno] = 0;
1927
1928           /* If this is a hard reg, record this function uses the reg.  */
1929
1930           if (regno < FIRST_PSEUDO_REGISTER)
1931             {
1932               register int i;
1933               int endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
1934
1935               for (i = regno; i < endregno; i++)
1936                 {
1937                   regs_ever_live[i] = 1;
1938                   reg_n_sets[i]++;
1939                 }
1940             }
1941           else
1942             {
1943               /* Keep track of which basic blocks each reg appears in.  */
1944
1945               if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
1946                 reg_basic_block[regno] = blocknum;
1947               else if (reg_basic_block[regno] != blocknum)
1948                 reg_basic_block[regno] = REG_BLOCK_GLOBAL;
1949
1950               /* Count (weighted) references, stores, etc.  This counts a
1951                  register twice if it is modified, but that is correct.  */
1952               reg_n_sets[regno]++;
1953
1954               reg_n_refs[regno] += loop_depth;
1955                   
1956               /* The insns where a reg is live are normally counted
1957                  elsewhere, but we want the count to include the insn
1958                  where the reg is set, and the normal counting mechanism
1959                  would not count it.  */
1960               reg_live_length[regno]++;
1961             }
1962
1963           if (all_needed)
1964             {
1965               /* Make a logical link from the next following insn
1966                  that uses this register, back to this insn.
1967                  The following insns have already been processed.
1968
1969                  We don't build a LOG_LINK for hard registers containing
1970                  in ASM_OPERANDs.  If these registers get replaced,
1971                  we might wind up changing the semantics of the insn,
1972                  even if reload can make what appear to be valid assignments
1973                  later.  */
1974               if (y && (BLOCK_NUM (y) == blocknum)
1975                   && (regno >= FIRST_PSEUDO_REGISTER
1976                       || asm_noperands (PATTERN (y)) < 0))
1977                 LOG_LINKS (y)
1978                   = gen_rtx (INSN_LIST, VOIDmode, insn, LOG_LINKS (y));
1979             }
1980           else if (! some_needed)
1981             {
1982               /* Note that dead stores have already been deleted when possible
1983                  If we get here, we have found a dead store that cannot
1984                  be eliminated (because the same insn does something useful).
1985                  Indicate this by marking the reg being set as dying here.  */
1986               REG_NOTES (insn)
1987                 = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
1988               reg_n_deaths[REGNO (reg)]++;
1989             }
1990           else
1991             {
1992               /* This is a case where we have a multi-word hard register
1993                  and some, but not all, of the words of the register are
1994                  needed in subsequent insns.  Write REG_UNUSED notes
1995                  for those parts that were not needed.  This case should
1996                  be rare.  */
1997
1998               int i;
1999
2000               for (i = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1;
2001                    i >= 0; i--)
2002                 if ((needed[(regno + i) / REGSET_ELT_BITS]
2003                      & ((REGSET_ELT_TYPE) 1
2004                         << ((regno + i) % REGSET_ELT_BITS))) == 0)
2005                   REG_NOTES (insn)
2006                     = gen_rtx (EXPR_LIST, REG_UNUSED,
2007                                gen_rtx (REG, word_mode, regno + i),
2008                                REG_NOTES (insn));
2009             }
2010         }
2011     }
2012   else if (GET_CODE (reg) == REG)
2013     reg_next_use[regno] = 0;
2014
2015   /* If this is the last pass and this is a SCRATCH, show it will be dying
2016      here and count it.  */
2017   else if (GET_CODE (reg) == SCRATCH && insn != 0)
2018     {
2019       REG_NOTES (insn)
2020         = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
2021       num_scratch++;
2022     }
2023 }
2024 \f
2025 #ifdef AUTO_INC_DEC
2026
2027 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
2028    reference.  */
2029
2030 static void
2031 find_auto_inc (needed, x, insn)
2032      regset needed;
2033      rtx x;
2034      rtx insn;
2035 {
2036   rtx addr = XEXP (x, 0);
2037   HOST_WIDE_INT offset = 0;
2038   rtx set;
2039
2040   /* Here we detect use of an index register which might be good for
2041      postincrement, postdecrement, preincrement, or predecrement.  */
2042
2043   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
2044     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
2045
2046   if (GET_CODE (addr) == REG)
2047     {
2048       register rtx y;
2049       register int size = GET_MODE_SIZE (GET_MODE (x));
2050       rtx use;
2051       rtx incr;
2052       int regno = REGNO (addr);
2053
2054       /* Is the next use an increment that might make auto-increment? */
2055       if ((incr = reg_next_use[regno]) != 0
2056           && (set = single_set (incr)) != 0
2057           && GET_CODE (set) == SET
2058           && BLOCK_NUM (incr) == BLOCK_NUM (insn)
2059           /* Can't add side effects to jumps; if reg is spilled and
2060              reloaded, there's no way to store back the altered value.  */
2061           && GET_CODE (insn) != JUMP_INSN
2062           && (y = SET_SRC (set), GET_CODE (y) == PLUS)
2063           && XEXP (y, 0) == addr
2064           && GET_CODE (XEXP (y, 1)) == CONST_INT
2065           && (0
2066 #ifdef HAVE_POST_INCREMENT
2067               || (INTVAL (XEXP (y, 1)) == size && offset == 0)
2068 #endif
2069 #ifdef HAVE_POST_DECREMENT
2070               || (INTVAL (XEXP (y, 1)) == - size && offset == 0)
2071 #endif
2072 #ifdef HAVE_PRE_INCREMENT
2073               || (INTVAL (XEXP (y, 1)) == size && offset == size)
2074 #endif
2075 #ifdef HAVE_PRE_DECREMENT
2076               || (INTVAL (XEXP (y, 1)) == - size && offset == - size)
2077 #endif
2078               )
2079           /* Make sure this reg appears only once in this insn.  */
2080           && (use = find_use_as_address (PATTERN (insn), addr, offset),
2081               use != 0 && use != (rtx) 1))
2082         {
2083           int win = 0;
2084           rtx q = SET_DEST (set);
2085
2086           if (dead_or_set_p (incr, addr))
2087             win = 1;
2088           else if (GET_CODE (q) == REG
2089                    /* PREV_INSN used here to check the semi-open interval
2090                       [insn,incr).  */
2091                    && ! reg_used_between_p (q,  PREV_INSN (insn), incr))
2092             {
2093               /* We have *p followed sometime later by q = p+size.
2094                  Both p and q must be live afterward,
2095                  and q is not used between INSN and it's assignment.
2096                  Change it to q = p, ...*q..., q = q+size.
2097                  Then fall into the usual case.  */
2098               rtx insns, temp;
2099
2100               start_sequence ();
2101               emit_move_insn (q, addr);
2102               insns = get_insns ();
2103               end_sequence ();
2104
2105               /* If anything in INSNS have UID's that don't fit within the
2106                  extra space we allocate earlier, we can't make this auto-inc.
2107                  This should never happen.  */
2108               for (temp = insns; temp; temp = NEXT_INSN (temp))
2109                 {
2110                   if (INSN_UID (temp) > max_uid_for_flow)
2111                     return;
2112                   BLOCK_NUM (temp) = BLOCK_NUM (insn);
2113                 }
2114
2115               emit_insns_before (insns, insn);
2116
2117               if (basic_block_head[BLOCK_NUM (insn)] == insn)
2118                 basic_block_head[BLOCK_NUM (insn)] = insns;
2119
2120               XEXP (x, 0) = q;
2121               XEXP (y, 0) = q;
2122
2123               /* INCR will become a NOTE and INSN won't contain a
2124                  use of ADDR.  If a use of ADDR was just placed in
2125                  the insn before INSN, make that the next use. 
2126                  Otherwise, invalidate it.  */
2127               if (GET_CODE (PREV_INSN (insn)) == INSN
2128                   && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
2129                   && SET_SRC (PATTERN (PREV_INSN (insn))) == addr)
2130                 reg_next_use[regno] = PREV_INSN (insn);
2131               else
2132                 reg_next_use[regno] = 0;
2133
2134               addr = q;
2135               regno = REGNO (q);
2136               win = 1;
2137
2138               /* REGNO is now used in INCR which is below INSN, but
2139                  it previously wasn't live here.  If we don't mark
2140                  it as needed, we'll put a REG_DEAD note for it
2141                  on this insn, which is incorrect.  */
2142               needed[regno / REGSET_ELT_BITS]
2143                 |= (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
2144
2145               /* If there are any calls between INSN and INCR, show
2146                  that REGNO now crosses them.  */
2147               for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
2148                 if (GET_CODE (temp) == CALL_INSN)
2149                   reg_n_calls_crossed[regno]++;
2150             }
2151
2152           if (win
2153               /* If we have found a suitable auto-increment, do
2154                  POST_INC around the register here, and patch out the
2155                  increment instruction that follows. */
2156               && validate_change (insn, &XEXP (x, 0),
2157                                   gen_rtx ((INTVAL (XEXP (y, 1)) == size
2158                                             ? (offset ? PRE_INC : POST_INC)
2159                                             : (offset ? PRE_DEC : POST_DEC)),
2160                                            Pmode, addr), 0))
2161             {
2162               /* Record that this insn has an implicit side effect.  */
2163               REG_NOTES (insn)
2164                 = gen_rtx (EXPR_LIST, REG_INC, addr, REG_NOTES (insn));
2165
2166               /* Modify the old increment-insn to simply copy
2167                  the already-incremented value of our register.  */
2168               SET_SRC (set) = addr;
2169               /* Indicate insn must be re-recognized.  */
2170               INSN_CODE (incr) = -1;
2171
2172               /* If that makes it a no-op (copying the register into itself)
2173                  then delete it so it won't appear to be a "use" and a "set"
2174                  of this register.  */
2175               if (SET_DEST (set) == addr)
2176                 {
2177                   PUT_CODE (incr, NOTE);
2178                   NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
2179                   NOTE_SOURCE_FILE (incr) = 0;
2180                 }
2181
2182               if (regno >= FIRST_PSEUDO_REGISTER)
2183                 {
2184                   /* Count an extra reference to the reg.  When a reg is
2185                      incremented, spilling it is worse, so we want to make
2186                      that less likely.  */
2187                   reg_n_refs[regno] += loop_depth;
2188                   /* Count the increment as a setting of the register,
2189                      even though it isn't a SET in rtl.  */
2190                   reg_n_sets[regno]++;
2191                 }
2192             }
2193         }
2194     }
2195 }
2196 #endif /* AUTO_INC_DEC */
2197 \f
2198 /* Scan expression X and store a 1-bit in LIVE for each reg it uses.
2199    This is done assuming the registers needed from X
2200    are those that have 1-bits in NEEDED.
2201
2202    On the final pass, FINAL is 1.  This means try for autoincrement
2203    and count the uses and deaths of each pseudo-reg.
2204
2205    INSN is the containing instruction.  If INSN is dead, this function is not
2206    called.  */
2207
2208 static void
2209 mark_used_regs (needed, live, x, final, insn)
2210      regset needed;
2211      regset live;
2212      rtx x;
2213      int final;
2214      rtx insn;
2215 {
2216   register RTX_CODE code;
2217   register int regno;
2218   int i;
2219
2220  retry:
2221   code = GET_CODE (x);
2222   switch (code)
2223     {
2224     case LABEL_REF:
2225     case SYMBOL_REF:
2226     case CONST_INT:
2227     case CONST:
2228     case CONST_DOUBLE:
2229     case PC:
2230     case ADDR_VEC:
2231     case ADDR_DIFF_VEC:
2232     case ASM_INPUT:
2233       return;
2234
2235 #ifdef HAVE_cc0
2236     case CC0:
2237       cc0_live = 1;
2238       return;
2239 #endif
2240
2241     case CLOBBER:
2242       /* If we are clobbering a MEM, mark any registers inside the address
2243          as being used.  */
2244       if (GET_CODE (XEXP (x, 0)) == MEM)
2245         mark_used_regs (needed, live, XEXP (XEXP (x, 0), 0), final, insn);
2246       return;
2247
2248     case MEM:
2249       /* Invalidate the data for the last MEM stored.  We could do this only
2250          if the addresses conflict, but this doesn't seem worthwhile.  */
2251       last_mem_set = 0;
2252
2253 #ifdef AUTO_INC_DEC
2254       if (final)
2255         find_auto_inc (needed, x, insn);
2256 #endif
2257       break;
2258
2259     case REG:
2260       /* See a register other than being set
2261          => mark it as needed.  */
2262
2263       regno = REGNO (x);
2264       {
2265         register int offset = regno / REGSET_ELT_BITS;
2266         register REGSET_ELT_TYPE bit
2267           = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
2268         REGSET_ELT_TYPE all_needed = needed[offset] & bit;
2269         REGSET_ELT_TYPE some_needed = needed[offset] & bit;
2270
2271         live[offset] |= bit;
2272         /* A hard reg in a wide mode may really be multiple registers.
2273            If so, mark all of them just like the first.  */
2274         if (regno < FIRST_PSEUDO_REGISTER)
2275           {
2276             int n;
2277
2278             /* For stack ptr or fixed arg pointer,
2279                nothing below can be necessary, so waste no more time.  */
2280             if (regno == STACK_POINTER_REGNUM
2281 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2282                 || regno == HARD_FRAME_POINTER_REGNUM
2283 #endif
2284 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2285                 || (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2286 #endif
2287                 || regno == FRAME_POINTER_REGNUM)
2288               {
2289                 /* If this is a register we are going to try to eliminate,
2290                    don't mark it live here.  If we are successful in
2291                    eliminating it, it need not be live unless it is used for
2292                    pseudos, in which case it will have been set live when
2293                    it was allocated to the pseudos.  If the register will not
2294                    be eliminated, reload will set it live at that point.  */
2295
2296                 if (! TEST_HARD_REG_BIT (elim_reg_set, regno))
2297                   regs_ever_live[regno] = 1;
2298                 return;
2299               }
2300             /* No death notes for global register variables;
2301                their values are live after this function exits.  */
2302             if (global_regs[regno])
2303               {
2304                 if (final)
2305                   reg_next_use[regno] = insn;
2306                 return;
2307               }
2308
2309             n = HARD_REGNO_NREGS (regno, GET_MODE (x));
2310             while (--n > 0)
2311               {
2312                 live[(regno + n) / REGSET_ELT_BITS]
2313                   |= (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
2314                 some_needed
2315                   |= (needed[(regno + n) / REGSET_ELT_BITS]
2316                       & (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
2317                 all_needed
2318                   &= (needed[(regno + n) / REGSET_ELT_BITS]
2319                       & (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS));
2320               }
2321           }
2322         if (final)
2323           {
2324             /* Record where each reg is used, so when the reg
2325                is set we know the next insn that uses it.  */
2326
2327             reg_next_use[regno] = insn;
2328
2329             if (regno < FIRST_PSEUDO_REGISTER)
2330               {
2331                 /* If a hard reg is being used,
2332                    record that this function does use it.  */
2333
2334                 i = HARD_REGNO_NREGS (regno, GET_MODE (x));
2335                 if (i == 0)
2336                   i = 1;
2337                 do
2338                   regs_ever_live[regno + --i] = 1;
2339                 while (i > 0);
2340               }
2341             else
2342               {
2343                 /* Keep track of which basic block each reg appears in.  */
2344
2345                 register int blocknum = BLOCK_NUM (insn);
2346
2347                 if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
2348                   reg_basic_block[regno] = blocknum;
2349                 else if (reg_basic_block[regno] != blocknum)
2350                   reg_basic_block[regno] = REG_BLOCK_GLOBAL;
2351
2352                 /* Count (weighted) number of uses of each reg.  */
2353
2354                 reg_n_refs[regno] += loop_depth;
2355               }
2356
2357             /* Record and count the insns in which a reg dies.
2358                If it is used in this insn and was dead below the insn
2359                then it dies in this insn.  If it was set in this insn,
2360                we do not make a REG_DEAD note; likewise if we already
2361                made such a note.  */
2362
2363             if (! all_needed
2364                 && ! dead_or_set_p (insn, x)
2365 #if 0
2366                 && (regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
2367 #endif
2368                 )
2369               {
2370                 /* If none of the words in X is needed, make a REG_DEAD
2371                    note.  Otherwise, we must make partial REG_DEAD notes.  */
2372                 if (! some_needed)
2373                   {
2374                     REG_NOTES (insn)
2375                       = gen_rtx (EXPR_LIST, REG_DEAD, x, REG_NOTES (insn));
2376                     reg_n_deaths[regno]++;
2377                   }
2378                 else
2379                   {
2380                     int i;
2381
2382                     /* Don't make a REG_DEAD note for a part of a register
2383                        that is set in the insn.  */
2384
2385                     for (i = HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1;
2386                          i >= 0; i--)
2387                       if ((needed[(regno + i) / REGSET_ELT_BITS]
2388                            & ((REGSET_ELT_TYPE) 1
2389                               << ((regno + i) % REGSET_ELT_BITS))) == 0
2390                           && ! dead_or_set_regno_p (insn, regno + i))
2391                         REG_NOTES (insn)
2392                           = gen_rtx (EXPR_LIST, REG_DEAD,
2393                                      gen_rtx (REG, word_mode, regno + i),
2394                                      REG_NOTES (insn));
2395                   }
2396               }
2397           }
2398       }
2399       return;
2400
2401     case SET:
2402       {
2403         register rtx testreg = SET_DEST (x);
2404         int mark_dest = 0;
2405
2406         /* If storing into MEM, don't show it as being used.  But do
2407            show the address as being used.  */
2408         if (GET_CODE (testreg) == MEM)
2409           {
2410 #ifdef AUTO_INC_DEC
2411             if (final)
2412               find_auto_inc (needed, testreg, insn);
2413 #endif
2414             mark_used_regs (needed, live, XEXP (testreg, 0), final, insn);
2415             mark_used_regs (needed, live, SET_SRC (x), final, insn);
2416             return;
2417           }
2418             
2419         /* Storing in STRICT_LOW_PART is like storing in a reg
2420            in that this SET might be dead, so ignore it in TESTREG.
2421            but in some other ways it is like using the reg.
2422
2423            Storing in a SUBREG or a bit field is like storing the entire
2424            register in that if the register's value is not used
2425            then this SET is not needed.  */
2426         while (GET_CODE (testreg) == STRICT_LOW_PART
2427                || GET_CODE (testreg) == ZERO_EXTRACT
2428                || GET_CODE (testreg) == SIGN_EXTRACT
2429                || GET_CODE (testreg) == SUBREG)
2430           {
2431             /* Modifying a single register in an alternate mode
2432                does not use any of the old value.  But these other
2433                ways of storing in a register do use the old value.  */
2434             if (GET_CODE (testreg) == SUBREG
2435                 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
2436               ;
2437             else
2438               mark_dest = 1;
2439
2440             testreg = XEXP (testreg, 0);
2441           }
2442
2443         /* If this is a store into a register,
2444            recursively scan the value being stored.  */
2445
2446         if (GET_CODE (testreg) == REG
2447             && (regno = REGNO (testreg), regno != FRAME_POINTER_REGNUM)
2448 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2449             && regno != HARD_FRAME_POINTER_REGNUM
2450 #endif
2451 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2452             && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2453 #endif
2454             )
2455           /* We used to exclude global_regs here, but that seems wrong.
2456              Storing in them is like storing in mem.  */
2457           {
2458             mark_used_regs (needed, live, SET_SRC (x), final, insn);
2459             if (mark_dest)
2460               mark_used_regs (needed, live, SET_DEST (x), final, insn);
2461             return;
2462           }
2463       }
2464       break;
2465
2466     case RETURN:
2467       /* If exiting needs the right stack value, consider this insn as
2468          using the stack pointer.  In any event, consider it as using
2469          all global registers.  */
2470
2471 #ifdef EXIT_IGNORE_STACK
2472       if (! EXIT_IGNORE_STACK
2473           || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
2474 #endif
2475         live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
2476           |= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
2477
2478       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2479         if (global_regs[i])
2480           live[i / REGSET_ELT_BITS]
2481             |= (REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS);
2482       break;
2483     }
2484
2485   /* Recursively scan the operands of this expression.  */
2486
2487   {
2488     register char *fmt = GET_RTX_FORMAT (code);
2489     register int i;
2490     
2491     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2492       {
2493         if (fmt[i] == 'e')
2494           {
2495             /* Tail recursive case: save a function call level.  */
2496             if (i == 0)
2497               {
2498                 x = XEXP (x, 0);
2499                 goto retry;
2500               }
2501             mark_used_regs (needed, live, XEXP (x, i), final, insn);
2502           }
2503         else if (fmt[i] == 'E')
2504           {
2505             register int j;
2506             for (j = 0; j < XVECLEN (x, i); j++)
2507               mark_used_regs (needed, live, XVECEXP (x, i, j), final, insn);
2508           }
2509       }
2510   }
2511 }
2512 \f
2513 #ifdef AUTO_INC_DEC
2514
2515 static int
2516 try_pre_increment_1 (insn)
2517      rtx insn;
2518 {
2519   /* Find the next use of this reg.  If in same basic block,
2520      make it do pre-increment or pre-decrement if appropriate.  */
2521   rtx x = PATTERN (insn);
2522   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
2523                 * INTVAL (XEXP (SET_SRC (x), 1)));
2524   int regno = REGNO (SET_DEST (x));
2525   rtx y = reg_next_use[regno];
2526   if (y != 0
2527       && BLOCK_NUM (y) == BLOCK_NUM (insn)
2528       /* Don't do this if the reg dies, or gets set in y; a standard addressing
2529          mode would be better. */
2530       && ! dead_or_set_p (y, SET_DEST (x))
2531       && try_pre_increment (y, SET_DEST (PATTERN (insn)),
2532                             amount))
2533     {
2534       /* We have found a suitable auto-increment
2535          and already changed insn Y to do it.
2536          So flush this increment-instruction.  */
2537       PUT_CODE (insn, NOTE);
2538       NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
2539       NOTE_SOURCE_FILE (insn) = 0;
2540       /* Count a reference to this reg for the increment
2541          insn we are deleting.  When a reg is incremented.
2542          spilling it is worse, so we want to make that
2543          less likely.  */
2544       if (regno >= FIRST_PSEUDO_REGISTER)
2545         {
2546           reg_n_refs[regno] += loop_depth;
2547           reg_n_sets[regno]++;
2548         }
2549       return 1;
2550     }
2551   return 0;
2552 }
2553
2554 /* Try to change INSN so that it does pre-increment or pre-decrement
2555    addressing on register REG in order to add AMOUNT to REG.
2556    AMOUNT is negative for pre-decrement.
2557    Returns 1 if the change could be made.
2558    This checks all about the validity of the result of modifying INSN.  */
2559
2560 static int
2561 try_pre_increment (insn, reg, amount)
2562      rtx insn, reg;
2563      HOST_WIDE_INT amount;
2564 {
2565   register rtx use;
2566
2567   /* Nonzero if we can try to make a pre-increment or pre-decrement.
2568      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
2569   int pre_ok = 0;
2570   /* Nonzero if we can try to make a post-increment or post-decrement.
2571      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
2572      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
2573      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
2574   int post_ok = 0;
2575
2576   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
2577   int do_post = 0;
2578
2579   /* From the sign of increment, see which possibilities are conceivable
2580      on this target machine.  */
2581 #ifdef HAVE_PRE_INCREMENT
2582   if (amount > 0)
2583     pre_ok = 1;
2584 #endif
2585 #ifdef HAVE_POST_INCREMENT
2586   if (amount > 0)
2587     post_ok = 1;
2588 #endif
2589
2590 #ifdef HAVE_PRE_DECREMENT
2591   if (amount < 0)
2592     pre_ok = 1;
2593 #endif
2594 #ifdef HAVE_POST_DECREMENT
2595   if (amount < 0)
2596     post_ok = 1;
2597 #endif
2598
2599   if (! (pre_ok || post_ok))
2600     return 0;
2601
2602   /* It is not safe to add a side effect to a jump insn
2603      because if the incremented register is spilled and must be reloaded
2604      there would be no way to store the incremented value back in memory.  */
2605
2606   if (GET_CODE (insn) == JUMP_INSN)
2607     return 0;
2608
2609   use = 0;
2610   if (pre_ok)
2611     use = find_use_as_address (PATTERN (insn), reg, 0);
2612   if (post_ok && (use == 0 || use == (rtx) 1))
2613     {
2614       use = find_use_as_address (PATTERN (insn), reg, -amount);
2615       do_post = 1;
2616     }
2617
2618   if (use == 0 || use == (rtx) 1)
2619     return 0;
2620
2621   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
2622     return 0;
2623
2624   /* See if this combination of instruction and addressing mode exists.  */
2625   if (! validate_change (insn, &XEXP (use, 0),
2626                          gen_rtx (amount > 0
2627                                   ? (do_post ? POST_INC : PRE_INC)
2628                                   : (do_post ? POST_DEC : PRE_DEC),
2629                                   Pmode, reg), 0))
2630     return 0;
2631
2632   /* Record that this insn now has an implicit side effect on X.  */
2633   REG_NOTES (insn) = gen_rtx (EXPR_LIST, REG_INC, reg, REG_NOTES (insn));
2634   return 1;
2635 }
2636
2637 #endif /* AUTO_INC_DEC */
2638 \f
2639 /* Find the place in the rtx X where REG is used as a memory address.
2640    Return the MEM rtx that so uses it.
2641    If PLUSCONST is nonzero, search instead for a memory address equivalent to
2642    (plus REG (const_int PLUSCONST)).
2643
2644    If such an address does not appear, return 0.
2645    If REG appears more than once, or is used other than in such an address,
2646    return (rtx)1.  */
2647
2648 static rtx
2649 find_use_as_address (x, reg, plusconst)
2650      register rtx x;
2651      rtx reg;
2652      HOST_WIDE_INT plusconst;
2653 {
2654   enum rtx_code code = GET_CODE (x);
2655   char *fmt = GET_RTX_FORMAT (code);
2656   register int i;
2657   register rtx value = 0;
2658   register rtx tem;
2659
2660   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
2661     return x;
2662
2663   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
2664       && XEXP (XEXP (x, 0), 0) == reg
2665       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
2666       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
2667     return x;
2668
2669   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
2670     {
2671       /* If REG occurs inside a MEM used in a bit-field reference,
2672          that is unacceptable.  */
2673       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
2674         return (rtx) (HOST_WIDE_INT) 1;
2675     }
2676
2677   if (x == reg)
2678     return (rtx) (HOST_WIDE_INT) 1;
2679
2680   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2681     {
2682       if (fmt[i] == 'e')
2683         {
2684           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
2685           if (value == 0)
2686             value = tem;
2687           else if (tem != 0)
2688             return (rtx) (HOST_WIDE_INT) 1;
2689         }
2690       if (fmt[i] == 'E')
2691         {
2692           register int j;
2693           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2694             {
2695               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
2696               if (value == 0)
2697                 value = tem;
2698               else if (tem != 0)
2699                 return (rtx) (HOST_WIDE_INT) 1;
2700             }
2701         }
2702     }
2703
2704   return value;
2705 }
2706 \f
2707 /* Write information about registers and basic blocks into FILE.
2708    This is part of making a debugging dump.  */
2709
2710 void
2711 dump_flow_info (file)
2712      FILE *file;
2713 {
2714   register int i;
2715   static char *reg_class_names[] = REG_CLASS_NAMES;
2716
2717   fprintf (file, "%d registers.\n", max_regno);
2718
2719   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2720     if (reg_n_refs[i])
2721       {
2722         enum reg_class class, altclass;
2723         fprintf (file, "\nRegister %d used %d times across %d insns",
2724                  i, reg_n_refs[i], reg_live_length[i]);
2725         if (reg_basic_block[i] >= 0)
2726           fprintf (file, " in block %d", reg_basic_block[i]);
2727         if (reg_n_deaths[i] != 1)
2728           fprintf (file, "; dies in %d places", reg_n_deaths[i]);
2729         if (reg_n_calls_crossed[i] == 1)
2730           fprintf (file, "; crosses 1 call");
2731         else if (reg_n_calls_crossed[i])
2732           fprintf (file, "; crosses %d calls", reg_n_calls_crossed[i]);
2733         if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
2734           fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
2735         class = reg_preferred_class (i);
2736         altclass = reg_alternate_class (i);
2737         if (class != GENERAL_REGS || altclass != ALL_REGS)
2738           {
2739             if (altclass == ALL_REGS || class == ALL_REGS)
2740               fprintf (file, "; pref %s", reg_class_names[(int) class]);
2741             else if (altclass == NO_REGS)
2742               fprintf (file, "; %s or none", reg_class_names[(int) class]);
2743             else
2744               fprintf (file, "; pref %s, else %s",
2745                        reg_class_names[(int) class],
2746                        reg_class_names[(int) altclass]);
2747           }
2748         if (REGNO_POINTER_FLAG (i))
2749           fprintf (file, "; pointer");
2750         fprintf (file, ".\n");
2751       }
2752   fprintf (file, "\n%d basic blocks.\n", n_basic_blocks);
2753   for (i = 0; i < n_basic_blocks; i++)
2754     {
2755       register rtx head, jump;
2756       register int regno;
2757       fprintf (file, "\nBasic block %d: first insn %d, last %d.\n",
2758                i,
2759                INSN_UID (basic_block_head[i]),
2760                INSN_UID (basic_block_end[i]));
2761       /* The control flow graph's storage is freed
2762          now when flow_analysis returns.
2763          Don't try to print it if it is gone.  */
2764       if (basic_block_drops_in)
2765         {
2766           fprintf (file, "Reached from blocks: ");
2767           head = basic_block_head[i];
2768           if (GET_CODE (head) == CODE_LABEL)
2769             for (jump = LABEL_REFS (head);
2770                  jump != head;
2771                  jump = LABEL_NEXTREF (jump))
2772               {
2773                 register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
2774                 fprintf (file, " %d", from_block);
2775               }
2776           if (basic_block_drops_in[i])
2777             fprintf (file, " previous");
2778         }
2779       fprintf (file, "\nRegisters live at start:");
2780       for (regno = 0; regno < max_regno; regno++)
2781         {
2782           register int offset = regno / REGSET_ELT_BITS;
2783           register REGSET_ELT_TYPE bit
2784             = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
2785           if (basic_block_live_at_start[i][offset] & bit)
2786               fprintf (file, " %d", regno);
2787         }
2788       fprintf (file, "\n");
2789     }
2790   fprintf (file, "\n");
2791 }