OSDN Git Service

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