OSDN Git Service

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