OSDN Git Service

(memop_valid): Memory indirection now valid.
[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           /* Delete (in effect) any obvious no-op moves.  */
1000           else if (GET_CODE (PATTERN (insn)) == SET
1001               && GET_CODE (SET_DEST (PATTERN (insn))) == SUBREG
1002               && GET_CODE (SUBREG_REG (SET_DEST (PATTERN (insn)))) == REG
1003               && GET_CODE (SET_SRC (PATTERN (insn))) == SUBREG
1004               && GET_CODE (SUBREG_REG (SET_SRC (PATTERN (insn)))) == REG
1005               && REGNO (SUBREG_REG (SET_DEST (PATTERN (insn)))) ==
1006                         REGNO (SUBREG_REG (SET_SRC (PATTERN (insn))))
1007               && SUBREG_WORD (SET_DEST (PATTERN (insn))) ==
1008                               SUBREG_WORD (SET_SRC (PATTERN (insn)))
1009               /* Insns carrying these notes are useful later on.  */
1010               && ! find_reg_note (insn, REG_EQUAL, NULL_RTX))
1011             {
1012               PUT_CODE (insn, NOTE);
1013               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1014               NOTE_SOURCE_FILE (insn) = 0;
1015             }
1016           else if (GET_CODE (PATTERN (insn)) == PARALLEL)
1017             {
1018               /* If nothing but SETs of registers to themselves,
1019                  this insn can also be deleted.  */
1020               for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
1021                 {
1022                   rtx tem = XVECEXP (PATTERN (insn), 0, i);
1023
1024                   if (GET_CODE (tem) == USE
1025                       || GET_CODE (tem) == CLOBBER)
1026                     continue;
1027                     
1028                   if (GET_CODE (tem) != SET
1029                       || GET_CODE (SET_DEST (tem)) != REG
1030                       || GET_CODE (SET_SRC (tem)) != REG
1031                       || REGNO (SET_DEST (tem)) != REGNO (SET_SRC (tem)))
1032                     break;
1033                 }
1034                 
1035               if (i == XVECLEN (PATTERN (insn), 0)
1036                   /* Insns carrying these notes are useful later on.  */
1037                   && ! find_reg_note (insn, REG_EQUAL, NULL_RTX))
1038                 {
1039                   PUT_CODE (insn, NOTE);
1040                   NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1041                   NOTE_SOURCE_FILE (insn) = 0;
1042                 }
1043               else
1044                 INSN_VOLATILE (insn) = volatile_refs_p (PATTERN (insn));
1045             }
1046           else if (GET_CODE (PATTERN (insn)) != USE)
1047             INSN_VOLATILE (insn) = volatile_refs_p (PATTERN (insn));
1048           /* A SET that makes space on the stack cannot be dead.
1049              (Such SETs occur only for allocating variable-size data,
1050              so they will always have a PLUS or MINUS according to the
1051              direction of stack growth.)
1052              Even if this function never uses this stack pointer value,
1053              signal handlers do!  */
1054           else if (code1 == INSN && GET_CODE (PATTERN (insn)) == SET
1055                    && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
1056 #ifdef STACK_GROWS_DOWNWARD
1057                    && GET_CODE (SET_SRC (PATTERN (insn))) == MINUS
1058 #else
1059                    && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
1060 #endif
1061                    && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx)
1062             INSN_VOLATILE (insn) = 1;
1063         }
1064     }
1065
1066   if (n_basic_blocks > 0)
1067 #ifdef EXIT_IGNORE_STACK
1068     if (! EXIT_IGNORE_STACK
1069         || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
1070 #endif
1071       {
1072         /* If exiting needs the right stack value,
1073            consider the stack pointer live at the end of the function.  */
1074         basic_block_live_at_end[n_basic_blocks - 1]
1075           [STACK_POINTER_REGNUM / REGSET_ELT_BITS]
1076             |= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
1077         basic_block_new_live_at_end[n_basic_blocks - 1]
1078           [STACK_POINTER_REGNUM / REGSET_ELT_BITS]
1079             |= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
1080       }
1081
1082   /* Mark the frame pointer is needed at the end of the function.  If
1083      we end up eliminating it, it will be removed from the live list
1084      of each basic block by reload.  */
1085
1086   if (n_basic_blocks > 0)
1087     {
1088       basic_block_live_at_end[n_basic_blocks - 1]
1089         [FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
1090           |= (REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS);
1091       basic_block_new_live_at_end[n_basic_blocks - 1]
1092         [FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
1093           |= (REGSET_ELT_TYPE) 1 << (FRAME_POINTER_REGNUM % REGSET_ELT_BITS);
1094 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1095       /* If they are different, also mark the hard frame pointer as live */
1096       basic_block_live_at_end[n_basic_blocks - 1]
1097         [HARD_FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
1098           |= (REGSET_ELT_TYPE) 1 << (HARD_FRAME_POINTER_REGNUM
1099                                      % REGSET_ELT_BITS);
1100       basic_block_new_live_at_end[n_basic_blocks - 1]
1101         [HARD_FRAME_POINTER_REGNUM / REGSET_ELT_BITS]
1102           |= (REGSET_ELT_TYPE) 1 << (HARD_FRAME_POINTER_REGNUM
1103                                      % REGSET_ELT_BITS);
1104 #endif      
1105       }
1106
1107   /* Mark all global registers and all registers used by the epilogue
1108      as being live at the end of the function since they may be
1109      referenced by our caller.  */
1110
1111   if (n_basic_blocks > 0)
1112     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1113       if (global_regs[i]
1114 #ifdef EPILOGUE_USES
1115           || EPILOGUE_USES (i)
1116 #endif
1117           )
1118         {
1119           basic_block_live_at_end[n_basic_blocks - 1]
1120             [i / REGSET_ELT_BITS]
1121               |= (REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS);
1122           basic_block_new_live_at_end[n_basic_blocks - 1]
1123             [i / REGSET_ELT_BITS]
1124               |= (REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS);
1125         }
1126
1127   /* Propagate life info through the basic blocks
1128      around the graph of basic blocks.
1129
1130      This is a relaxation process: each time a new register
1131      is live at the end of the basic block, we must scan the block
1132      to determine which registers are, as a consequence, live at the beginning
1133      of that block.  These registers must then be marked live at the ends
1134      of all the blocks that can transfer control to that block.
1135      The process continues until it reaches a fixed point.  */
1136
1137   first_pass = 1;
1138   changed = 1;
1139   while (changed)
1140     {
1141       changed = 0;
1142       for (i = n_basic_blocks - 1; i >= 0; i--)
1143         {
1144           int consider = first_pass;
1145           int must_rescan = first_pass;
1146           register int j;
1147
1148           if (!first_pass)
1149             {
1150               /* Set CONSIDER if this block needs thinking about at all
1151                  (that is, if the regs live now at the end of it
1152                  are not the same as were live at the end of it when
1153                  we last thought about it).
1154                  Set must_rescan if it needs to be thought about
1155                  instruction by instruction (that is, if any additional
1156                  reg that is live at the end now but was not live there before
1157                  is one of the significant regs of this basic block).  */
1158
1159               for (j = 0; j < regset_size; j++)
1160                 {
1161                   register REGSET_ELT_TYPE x
1162                     = (basic_block_new_live_at_end[i][j]
1163                        & ~basic_block_live_at_end[i][j]);
1164                   if (x)
1165                     consider = 1;
1166                   if (x & basic_block_significant[i][j])
1167                     {
1168                       must_rescan = 1;
1169                       consider = 1;
1170                       break;
1171                     }
1172                 }
1173
1174               if (! consider)
1175                 continue;
1176             }
1177
1178           /* The live_at_start of this block may be changing,
1179              so another pass will be required after this one.  */
1180           changed = 1;
1181
1182           if (! must_rescan)
1183             {
1184               /* No complete rescan needed;
1185                  just record those variables newly known live at end
1186                  as live at start as well.  */
1187               for (j = 0; j < regset_size; j++)
1188                 {
1189                   register REGSET_ELT_TYPE x
1190                     = (basic_block_new_live_at_end[i][j]
1191                        & ~basic_block_live_at_end[i][j]);
1192                   basic_block_live_at_start[i][j] |= x;
1193                   basic_block_live_at_end[i][j] |= x;
1194                 }
1195             }
1196           else
1197             {
1198               /* Update the basic_block_live_at_start
1199                  by propagation backwards through the block.  */
1200               bcopy ((char *) basic_block_new_live_at_end[i],
1201                      (char *) basic_block_live_at_end[i], regset_bytes);
1202               bcopy ((char *) basic_block_live_at_end[i],
1203                      (char *) basic_block_live_at_start[i], regset_bytes);
1204               propagate_block (basic_block_live_at_start[i],
1205                                basic_block_head[i], basic_block_end[i], 0,
1206                                first_pass ? basic_block_significant[i]
1207                                : (regset) 0,
1208                                i);
1209             }
1210
1211           {
1212             register rtx jump, head;
1213
1214             /* Update the basic_block_new_live_at_end's of the block
1215                that falls through into this one (if any).  */
1216             head = basic_block_head[i];
1217             if (basic_block_drops_in[i])
1218               {
1219                 register int j;
1220                 for (j = 0; j < regset_size; j++)
1221                   basic_block_new_live_at_end[i-1][j]
1222                     |= basic_block_live_at_start[i][j];
1223               }
1224
1225             /* Update the basic_block_new_live_at_end's of
1226                all the blocks that jump to this one.  */
1227             if (GET_CODE (head) == CODE_LABEL)
1228               for (jump = LABEL_REFS (head);
1229                    jump != head;
1230                    jump = LABEL_NEXTREF (jump))
1231                 {
1232                   register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
1233                   register int j;
1234                   for (j = 0; j < regset_size; j++)
1235                     basic_block_new_live_at_end[from_block][j]
1236                       |= basic_block_live_at_start[i][j];
1237                 }
1238           }
1239 #ifdef USE_C_ALLOCA
1240           alloca (0);
1241 #endif
1242         }
1243       first_pass = 0;
1244     }
1245
1246   /* The only pseudos that are live at the beginning of the function are
1247      those that were not set anywhere in the function.  local-alloc doesn't
1248      know how to handle these correctly, so mark them as not local to any
1249      one basic block.  */
1250
1251   if (n_basic_blocks > 0)
1252     for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
1253       if (basic_block_live_at_start[0][i / REGSET_ELT_BITS]
1254           & ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS)))
1255         reg_basic_block[i] = REG_BLOCK_GLOBAL;
1256
1257   /* Now the life information is accurate.
1258      Make one more pass over each basic block
1259      to delete dead stores, create autoincrement addressing
1260      and record how many times each register is used, is set, or dies.
1261
1262      To save time, we operate directly in basic_block_live_at_end[i],
1263      thus destroying it (in fact, converting it into a copy of
1264      basic_block_live_at_start[i]).  This is ok now because
1265      basic_block_live_at_end[i] is no longer used past this point.  */
1266
1267   max_scratch = 0;
1268
1269   for (i = 0; i < n_basic_blocks; i++)
1270     {
1271       propagate_block (basic_block_live_at_end[i],
1272                        basic_block_head[i], basic_block_end[i], 1,
1273                        (regset) 0, i);
1274 #ifdef USE_C_ALLOCA
1275       alloca (0);
1276 #endif
1277     }
1278
1279 #if 0
1280   /* Something live during a setjmp should not be put in a register
1281      on certain machines which restore regs from stack frames
1282      rather than from the jmpbuf.
1283      But we don't need to do this for the user's variables, since
1284      ANSI says only volatile variables need this.  */
1285 #ifdef LONGJMP_RESTORE_FROM_STACK
1286   for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1287     if (regs_live_at_setjmp[i / REGSET_ELT_BITS]
1288         & ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS))
1289         && regno_reg_rtx[i] != 0 && ! REG_USERVAR_P (regno_reg_rtx[i]))
1290       {
1291         reg_live_length[i] = -1;
1292         reg_basic_block[i] = -1;
1293       }
1294 #endif
1295 #endif
1296
1297   /* We have a problem with any pseudoreg that
1298      lives across the setjmp.  ANSI says that if a
1299      user variable does not change in value
1300      between the setjmp and the longjmp, then the longjmp preserves it.
1301      This includes longjmp from a place where the pseudo appears dead.
1302      (In principle, the value still exists if it is in scope.)
1303      If the pseudo goes in a hard reg, some other value may occupy
1304      that hard reg where this pseudo is dead, thus clobbering the pseudo.
1305      Conclusion: such a pseudo must not go in a hard reg.  */
1306   for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1307     if ((regs_live_at_setjmp[i / REGSET_ELT_BITS]
1308          & ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS)))
1309         && regno_reg_rtx[i] != 0)
1310       {
1311         reg_live_length[i] = -1;
1312         reg_basic_block[i] = -1;
1313       }
1314
1315   obstack_free (&flow_obstack, NULL_PTR);
1316 }
1317 \f
1318 /* Subroutines of life analysis.  */
1319
1320 /* Allocate the permanent data structures that represent the results
1321    of life analysis.  Not static since used also for stupid life analysis.  */
1322
1323 void
1324 allocate_for_life_analysis ()
1325 {
1326   register int i;
1327   register regset tem;
1328
1329   regset_size = ((max_regno + REGSET_ELT_BITS - 1) / REGSET_ELT_BITS);
1330   regset_bytes = regset_size * sizeof (*(regset) 0);
1331
1332   reg_n_refs = (int *) oballoc (max_regno * sizeof (int));
1333   bzero ((char *) reg_n_refs, max_regno * sizeof (int));
1334
1335   reg_n_sets = (short *) oballoc (max_regno * sizeof (short));
1336   bzero ((char *) reg_n_sets, max_regno * sizeof (short));
1337
1338   reg_n_deaths = (short *) oballoc (max_regno * sizeof (short));
1339   bzero ((char *) reg_n_deaths, max_regno * sizeof (short));
1340
1341   reg_changes_size = (char *) oballoc (max_regno * sizeof (char));
1342   bzero (reg_changes_size, max_regno * sizeof (char));;
1343
1344   reg_live_length = (int *) oballoc (max_regno * sizeof (int));
1345   bzero ((char *) reg_live_length, max_regno * sizeof (int));
1346
1347   reg_n_calls_crossed = (int *) oballoc (max_regno * sizeof (int));
1348   bzero ((char *) reg_n_calls_crossed, max_regno * sizeof (int));
1349
1350   reg_basic_block = (int *) oballoc (max_regno * sizeof (int));
1351   for (i = 0; i < max_regno; i++)
1352     reg_basic_block[i] = REG_BLOCK_UNKNOWN;
1353
1354   basic_block_live_at_start
1355     = (regset *) oballoc (n_basic_blocks * sizeof (regset));
1356   tem = (regset) oballoc (n_basic_blocks * regset_bytes);
1357   bzero ((char *) tem, n_basic_blocks * regset_bytes);
1358   init_regset_vector (basic_block_live_at_start, tem,
1359                       n_basic_blocks, regset_bytes);
1360
1361   regs_live_at_setjmp = (regset) oballoc (regset_bytes);
1362   bzero ((char *) regs_live_at_setjmp, regset_bytes);
1363 }
1364
1365 /* Make each element of VECTOR point at a regset,
1366    taking the space for all those regsets from SPACE.
1367    SPACE is of type regset, but it is really as long as NELTS regsets.
1368    BYTES_PER_ELT is the number of bytes in one regset.  */
1369
1370 static void
1371 init_regset_vector (vector, space, nelts, bytes_per_elt)
1372      regset *vector;
1373      regset space;
1374      int nelts;
1375      int bytes_per_elt;
1376 {
1377   register int i;
1378   register regset p = space;
1379
1380   for (i = 0; i < nelts; i++)
1381     {
1382       vector[i] = p;
1383       p += bytes_per_elt / sizeof (*p);
1384     }
1385 }
1386
1387 /* Compute the registers live at the beginning of a basic block
1388    from those live at the end.
1389
1390    When called, OLD contains those live at the end.
1391    On return, it contains those live at the beginning.
1392    FIRST and LAST are the first and last insns of the basic block.
1393
1394    FINAL is nonzero if we are doing the final pass which is not
1395    for computing the life info (since that has already been done)
1396    but for acting on it.  On this pass, we delete dead stores,
1397    set up the logical links and dead-variables lists of instructions,
1398    and merge instructions for autoincrement and autodecrement addresses.
1399
1400    SIGNIFICANT is nonzero only the first time for each basic block.
1401    If it is nonzero, it points to a regset in which we store
1402    a 1 for each register that is set within the block.
1403
1404    BNUM is the number of the basic block.  */
1405
1406 static void
1407 propagate_block (old, first, last, final, significant, bnum)
1408      register regset old;
1409      rtx first;
1410      rtx last;
1411      int final;
1412      regset significant;
1413      int bnum;
1414 {
1415   register rtx insn;
1416   rtx prev;
1417   regset live;
1418   regset dead;
1419
1420   /* The following variables are used only if FINAL is nonzero.  */
1421   /* This vector gets one element for each reg that has been live
1422      at any point in the basic block that has been scanned so far.
1423      SOMETIMES_MAX says how many elements are in use so far.
1424      In each element, OFFSET is the byte-number within a regset
1425      for the register described by the element, and BIT is a mask
1426      for that register's bit within the byte.  */
1427   register struct sometimes { short offset; short bit; } *regs_sometimes_live;
1428   int sometimes_max = 0;
1429   /* This regset has 1 for each reg that we have seen live so far.
1430      It and REGS_SOMETIMES_LIVE are updated together.  */
1431   regset maxlive;
1432
1433   /* The loop depth may change in the middle of a basic block.  Since we
1434      scan from end to beginning, we start with the depth at the end of the
1435      current basic block, and adjust as we pass ends and starts of loops.  */
1436   loop_depth = basic_block_loop_depth[bnum];
1437
1438   dead = (regset) alloca (regset_bytes);
1439   live = (regset) alloca (regset_bytes);
1440
1441   cc0_live = 0;
1442   last_mem_set = 0;
1443
1444   /* Include any notes at the end of the block in the scan.
1445      This is in case the block ends with a call to setjmp.  */
1446
1447   while (NEXT_INSN (last) != 0 && GET_CODE (NEXT_INSN (last)) == NOTE)
1448     {
1449       /* Look for loop boundaries, we are going forward here.  */
1450       last = NEXT_INSN (last);
1451       if (NOTE_LINE_NUMBER (last) == NOTE_INSN_LOOP_BEG)
1452         loop_depth++;
1453       else if (NOTE_LINE_NUMBER (last) == NOTE_INSN_LOOP_END)
1454         loop_depth--;
1455     }
1456
1457   if (final)
1458     {
1459       register int i, offset;
1460       REGSET_ELT_TYPE bit;
1461
1462       num_scratch = 0;
1463       maxlive = (regset) alloca (regset_bytes);
1464       bcopy ((char *) old, (char *) maxlive, regset_bytes);
1465       regs_sometimes_live
1466         = (struct sometimes *) alloca (max_regno * sizeof (struct sometimes));
1467
1468       /* Process the regs live at the end of the block.
1469          Enter them in MAXLIVE and REGS_SOMETIMES_LIVE.
1470          Also mark them as not local to any one basic block.  */
1471
1472       for (offset = 0, i = 0; offset < regset_size; offset++)
1473         for (bit = 1; bit; bit <<= 1, i++)
1474           {
1475             if (i == max_regno)
1476               break;
1477             if (old[offset] & bit)
1478               {
1479                 reg_basic_block[i] = REG_BLOCK_GLOBAL;
1480                 regs_sometimes_live[sometimes_max].offset = offset;
1481                 regs_sometimes_live[sometimes_max].bit = i % REGSET_ELT_BITS;
1482                 sometimes_max++;
1483               }
1484           }
1485     }
1486
1487   /* Scan the block an insn at a time from end to beginning.  */
1488
1489   for (insn = last; ; insn = prev)
1490     {
1491       prev = PREV_INSN (insn);
1492
1493       if (GET_CODE (insn) == NOTE)
1494         {
1495           /* Look for loop boundaries, remembering that we are going
1496              backwards.  */
1497           if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
1498             loop_depth++;
1499           else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
1500             loop_depth--;
1501
1502           /* If we have LOOP_DEPTH == 0, there has been a bookkeeping error. 
1503              Abort now rather than setting register status incorrectly.  */
1504           if (loop_depth == 0)
1505             abort ();
1506
1507           /* If this is a call to `setjmp' et al,
1508              warn if any non-volatile datum is live.  */
1509
1510           if (final && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
1511             {
1512               int i;
1513               for (i = 0; i < regset_size; i++)
1514                 regs_live_at_setjmp[i] |= old[i];
1515             }
1516         }
1517
1518       /* Update the life-status of regs for this insn.
1519          First DEAD gets which regs are set in this insn
1520          then LIVE gets which regs are used in this insn.
1521          Then the regs live before the insn
1522          are those live after, with DEAD regs turned off,
1523          and then LIVE regs turned on.  */
1524
1525       else if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1526         {
1527           register int i;
1528           rtx note = find_reg_note (insn, REG_RETVAL, NULL_RTX);
1529           int insn_is_dead
1530             = (insn_dead_p (PATTERN (insn), old, 0)
1531                /* Don't delete something that refers to volatile storage!  */
1532                && ! INSN_VOLATILE (insn));
1533           int libcall_is_dead 
1534             = (insn_is_dead && note != 0
1535                && libcall_dead_p (PATTERN (insn), old, note, insn));
1536
1537           /* If an instruction consists of just dead store(s) on final pass,
1538              "delete" it by turning it into a NOTE of type NOTE_INSN_DELETED.
1539              We could really delete it with delete_insn, but that
1540              can cause trouble for first or last insn in a basic block.  */
1541           if (final && insn_is_dead)
1542             {
1543               PUT_CODE (insn, NOTE);
1544               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1545               NOTE_SOURCE_FILE (insn) = 0;
1546
1547               /* CC0 is now known to be dead.  Either this insn used it,
1548                  in which case it doesn't anymore, or clobbered it,
1549                  so the next insn can't use it.  */
1550               cc0_live = 0;
1551
1552               /* If this insn is copying the return value from a library call,
1553                  delete the entire library call.  */
1554               if (libcall_is_dead)
1555                 {
1556                   rtx first = XEXP (note, 0);
1557                   rtx p = insn;
1558                   while (INSN_DELETED_P (first))
1559                     first = NEXT_INSN (first);
1560                   while (p != first)
1561                     {
1562                       p = PREV_INSN (p);
1563                       PUT_CODE (p, NOTE);
1564                       NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED;
1565                       NOTE_SOURCE_FILE (p) = 0;
1566                     }
1567                 }
1568               goto flushed;
1569             }
1570
1571           for (i = 0; i < regset_size; i++)
1572             {
1573               dead[i] = 0;      /* Faster than bzero here */
1574               live[i] = 0;      /* since regset_size is usually small */
1575             }
1576
1577           /* See if this is an increment or decrement that can be
1578              merged into a following memory address.  */
1579 #ifdef AUTO_INC_DEC
1580           {
1581             register rtx x = PATTERN (insn);
1582             /* Does this instruction increment or decrement a register?  */
1583             if (final && GET_CODE (x) == SET
1584                 && GET_CODE (SET_DEST (x)) == REG
1585                 && (GET_CODE (SET_SRC (x)) == PLUS
1586                     || GET_CODE (SET_SRC (x)) == MINUS)
1587                 && XEXP (SET_SRC (x), 0) == SET_DEST (x)
1588                 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1589                 /* Ok, look for a following memory ref we can combine with.
1590                    If one is found, change the memory ref to a PRE_INC
1591                    or PRE_DEC, cancel this insn, and return 1.
1592                    Return 0 if nothing has been done.  */
1593                 && try_pre_increment_1 (insn))
1594               goto flushed;
1595           }
1596 #endif /* AUTO_INC_DEC */
1597
1598           /* If this is not the final pass, and this insn is copying the
1599              value of a library call and it's dead, don't scan the
1600              insns that perform the library call, so that the call's
1601              arguments are not marked live.  */
1602           if (libcall_is_dead)
1603             {
1604               /* Mark the dest reg as `significant'.  */
1605               mark_set_regs (old, dead, PATTERN (insn), NULL_RTX, significant);
1606
1607               insn = XEXP (note, 0);
1608               prev = PREV_INSN (insn);
1609             }
1610           else if (GET_CODE (PATTERN (insn)) == SET
1611                    && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
1612                    && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
1613                    && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
1614                    && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
1615             /* We have an insn to pop a constant amount off the stack.
1616                (Such insns use PLUS regardless of the direction of the stack,
1617                and any insn to adjust the stack by a constant is always a pop.)
1618                These insns, if not dead stores, have no effect on life.  */
1619             ;
1620           else
1621             {
1622               /* LIVE gets the regs used in INSN;
1623                  DEAD gets those set by it.  Dead insns don't make anything
1624                  live.  */
1625
1626               mark_set_regs (old, dead, PATTERN (insn),
1627                              final ? insn : NULL_RTX, significant);
1628
1629               /* If an insn doesn't use CC0, it becomes dead since we 
1630                  assume that every insn clobbers it.  So show it dead here;
1631                  mark_used_regs will set it live if it is referenced.  */
1632               cc0_live = 0;
1633
1634               if (! insn_is_dead)
1635                 mark_used_regs (old, live, PATTERN (insn), final, insn);
1636
1637               /* Sometimes we may have inserted something before INSN (such as
1638                  a move) when we make an auto-inc.  So ensure we will scan
1639                  those insns.  */
1640 #ifdef AUTO_INC_DEC
1641               prev = PREV_INSN (insn);
1642 #endif
1643
1644               if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
1645                 {
1646                   register int i;
1647
1648                   rtx note;
1649
1650                   for (note = CALL_INSN_FUNCTION_USAGE (insn);
1651                        note;
1652                        note = XEXP (note, 1))
1653                     if (GET_CODE (XEXP (note, 0)) == USE)
1654                       mark_used_regs (old, live, SET_DEST (XEXP (note, 0)),
1655                                       final, insn);
1656
1657                   /* Each call clobbers all call-clobbered regs that are not
1658                      global or fixed.  Note that the function-value reg is a
1659                      call-clobbered reg, and mark_set_regs has already had
1660                      a chance to handle it.  */
1661
1662                   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1663                     if (call_used_regs[i] && ! global_regs[i]
1664                         && ! fixed_regs[i])
1665                       dead[i / REGSET_ELT_BITS]
1666                         |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
1667
1668                   /* The stack ptr is used (honorarily) by a CALL insn.  */
1669                   live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
1670                     |= ((REGSET_ELT_TYPE) 1
1671                         << (STACK_POINTER_REGNUM % REGSET_ELT_BITS));
1672
1673                   /* Calls may also reference any of the global registers,
1674                      so they are made live.  */
1675                   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1676                     if (global_regs[i])
1677                       mark_used_regs (old, live,
1678                                       gen_rtx (REG, reg_raw_mode[i], i),
1679                                       final, insn);
1680
1681                   /* Calls also clobber memory.  */
1682                   last_mem_set = 0;
1683                 }
1684
1685               /* Update OLD for the registers used or set.  */
1686               for (i = 0; i < regset_size; i++)
1687                 {
1688                   old[i] &= ~dead[i];
1689                   old[i] |= live[i];
1690                 }
1691
1692               if (GET_CODE (insn) == CALL_INSN && final)
1693                 {
1694                   /* Any regs live at the time of a call instruction
1695                      must not go in a register clobbered by calls.
1696                      Find all regs now live and record this for them.  */
1697
1698                   register struct sometimes *p = regs_sometimes_live;
1699
1700                   for (i = 0; i < sometimes_max; i++, p++)
1701                     if (old[p->offset] & ((REGSET_ELT_TYPE) 1 << p->bit))
1702                       reg_n_calls_crossed[p->offset * REGSET_ELT_BITS + p->bit]+= 1;
1703                 }
1704             }
1705
1706           /* On final pass, add any additional sometimes-live regs
1707              into MAXLIVE and REGS_SOMETIMES_LIVE.
1708              Also update counts of how many insns each reg is live at.  */
1709
1710           if (final)
1711             {
1712               for (i = 0; i < regset_size; i++)
1713                 {
1714                   register REGSET_ELT_TYPE diff = live[i] & ~maxlive[i];
1715
1716                   if (diff)
1717                     {
1718                       register int regno;
1719                       maxlive[i] |= diff;
1720                       for (regno = 0; diff && regno < REGSET_ELT_BITS; regno++)
1721                         if (diff & ((REGSET_ELT_TYPE) 1 << regno))
1722                           {
1723                             regs_sometimes_live[sometimes_max].offset = i;
1724                             regs_sometimes_live[sometimes_max].bit = regno;
1725                             diff &= ~ ((REGSET_ELT_TYPE) 1 << regno);
1726                             sometimes_max++;
1727                           }
1728                     }
1729                 }
1730
1731               {
1732                 register struct sometimes *p = regs_sometimes_live;
1733                 for (i = 0; i < sometimes_max; i++, p++)
1734                   {
1735                     if (old[p->offset] & ((REGSET_ELT_TYPE) 1 << p->bit))
1736                       reg_live_length[p->offset * REGSET_ELT_BITS + p->bit]++;
1737                   }
1738               }
1739             }
1740         }
1741     flushed: ;
1742       if (insn == first)
1743         break;
1744     }
1745
1746   if (num_scratch > max_scratch)
1747     max_scratch = num_scratch;
1748 }
1749 \f
1750 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
1751    (SET expressions whose destinations are registers dead after the insn).
1752    NEEDED is the regset that says which regs are alive after the insn.
1753
1754    Unless CALL_OK is non-zero, an insn is needed if it contains a CALL.  */
1755
1756 static int
1757 insn_dead_p (x, needed, call_ok)
1758      rtx x;
1759      regset needed;
1760      int call_ok;
1761 {
1762   register RTX_CODE code = GET_CODE (x);
1763   /* If setting something that's a reg or part of one,
1764      see if that register's altered value will be live.  */
1765
1766   if (code == SET)
1767     {
1768       register rtx r = SET_DEST (x);
1769       /* A SET that is a subroutine call cannot be dead.  */
1770       if (! call_ok && GET_CODE (SET_SRC (x)) == CALL)
1771         return 0;
1772
1773 #ifdef HAVE_cc0
1774       if (GET_CODE (r) == CC0)
1775         return ! cc0_live;
1776 #endif
1777       
1778       if (GET_CODE (r) == MEM && last_mem_set && ! MEM_VOLATILE_P (r)
1779           && rtx_equal_p (r, last_mem_set))
1780         return 1;
1781
1782       while (GET_CODE (r) == SUBREG
1783              || GET_CODE (r) == STRICT_LOW_PART
1784              || GET_CODE (r) == ZERO_EXTRACT
1785              || GET_CODE (r) == SIGN_EXTRACT)
1786         r = SUBREG_REG (r);
1787
1788       if (GET_CODE (r) == REG)
1789         {
1790           register int regno = REGNO (r);
1791           register int offset = regno / REGSET_ELT_BITS;
1792           register REGSET_ELT_TYPE bit
1793             = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
1794
1795           /* Don't delete insns to set global regs.  */
1796           if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1797               /* Make sure insns to set frame pointer aren't deleted.  */
1798               || regno == FRAME_POINTER_REGNUM
1799 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1800               || regno == HARD_FRAME_POINTER_REGNUM
1801 #endif
1802 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1803               /* Make sure insns to set arg pointer are never deleted
1804                  (if the arg pointer isn't fixed, there will be a USE for
1805                  it, so we can treat it normally).  */
1806               || (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
1807 #endif
1808               || (needed[offset] & bit) != 0)
1809             return 0;
1810
1811           /* If this is a hard register, verify that subsequent words are
1812              not needed.  */
1813           if (regno < FIRST_PSEUDO_REGISTER)
1814             {
1815               int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
1816
1817               while (--n > 0)
1818                 if ((needed[(regno + n) / REGSET_ELT_BITS]
1819                      & ((REGSET_ELT_TYPE) 1
1820                         << ((regno + n) % REGSET_ELT_BITS))) != 0)
1821                   return 0;
1822             }
1823
1824           return 1;
1825         }
1826     }
1827   /* If performing several activities,
1828      insn is dead if each activity is individually dead.
1829      Also, CLOBBERs and USEs can be ignored; a CLOBBER or USE
1830      that's inside a PARALLEL doesn't make the insn worth keeping.  */
1831   else if (code == PARALLEL)
1832     {
1833       register int i = XVECLEN (x, 0);
1834       for (i--; i >= 0; i--)
1835         {
1836           rtx elt = XVECEXP (x, 0, i);
1837           if (!insn_dead_p (elt, needed, call_ok)
1838               && GET_CODE (elt) != CLOBBER
1839               && GET_CODE (elt) != USE)
1840             return 0;
1841         }
1842       return 1;
1843     }
1844   /* We do not check CLOBBER or USE here.
1845      An insn consisting of just a CLOBBER or just a USE
1846      should not be deleted.  */
1847   return 0;
1848 }
1849
1850 /* If X is the pattern of the last insn in a libcall, and assuming X is dead,
1851    return 1 if the entire library call is dead.
1852    This is true if X copies a register (hard or pseudo)
1853    and if the hard return  reg of the call insn is dead.
1854    (The caller should have tested the destination of X already for death.)
1855
1856    If this insn doesn't just copy a register, then we don't
1857    have an ordinary libcall.  In that case, cse could not have
1858    managed to substitute the source for the dest later on,
1859    so we can assume the libcall is dead.
1860
1861    NEEDED is the bit vector of pseudoregs live before this insn.
1862    NOTE is the REG_RETVAL note of the insn.  INSN is the insn itself.  */
1863
1864 static int
1865 libcall_dead_p (x, needed, note, insn)
1866      rtx x;
1867      regset needed;
1868      rtx note;
1869      rtx insn;
1870 {
1871   register RTX_CODE code = GET_CODE (x);
1872
1873   if (code == SET)
1874     {
1875       register rtx r = SET_SRC (x);
1876       if (GET_CODE (r) == REG)
1877         {
1878           rtx call = XEXP (note, 0);
1879           register int i;
1880
1881           /* Find the call insn.  */
1882           while (call != insn && GET_CODE (call) != CALL_INSN)
1883             call = NEXT_INSN (call);
1884
1885           /* If there is none, do nothing special,
1886              since ordinary death handling can understand these insns.  */
1887           if (call == insn)
1888             return 0;
1889
1890           /* See if the hard reg holding the value is dead.
1891              If this is a PARALLEL, find the call within it.  */
1892           call = PATTERN (call);
1893           if (GET_CODE (call) == PARALLEL)
1894             {
1895               for (i = XVECLEN (call, 0) - 1; i >= 0; i--)
1896                 if (GET_CODE (XVECEXP (call, 0, i)) == SET
1897                     && GET_CODE (SET_SRC (XVECEXP (call, 0, i))) == CALL)
1898                   break;
1899
1900               /* This may be a library call that is returning a value
1901                  via invisible pointer.  Do nothing special, since
1902                  ordinary death handling can understand these insns.  */
1903               if (i < 0)
1904                 return 0;
1905
1906               call = XVECEXP (call, 0, i);
1907             }
1908
1909           return insn_dead_p (call, needed, 1);
1910         }
1911     }
1912   return 1;
1913 }
1914
1915 /* Return 1 if register REGNO was used before it was set.
1916    In other words, if it is live at function entry.
1917    Don't count global register variables or variables in registers
1918    that can be used for function arg passing, though.  */
1919
1920 int
1921 regno_uninitialized (regno)
1922      int regno;
1923 {
1924   if (n_basic_blocks == 0
1925       || (regno < FIRST_PSEUDO_REGISTER
1926           && (global_regs[regno] || FUNCTION_ARG_REGNO_P (regno))))
1927     return 0;
1928
1929   return (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1930           & ((REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS)));
1931 }
1932
1933 /* 1 if register REGNO was alive at a place where `setjmp' was called
1934    and was set more than once or is an argument.
1935    Such regs may be clobbered by `longjmp'.  */
1936
1937 int
1938 regno_clobbered_at_setjmp (regno)
1939      int regno;
1940 {
1941   if (n_basic_blocks == 0)
1942     return 0;
1943
1944   return ((reg_n_sets[regno] > 1
1945            || (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1946                & ((REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS))))
1947           && (regs_live_at_setjmp[regno / REGSET_ELT_BITS]
1948               & ((REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS))));
1949 }
1950 \f
1951 /* Process the registers that are set within X.
1952    Their bits are set to 1 in the regset DEAD,
1953    because they are dead prior to this insn.
1954
1955    If INSN is nonzero, it is the insn being processed
1956    and the fact that it is nonzero implies this is the FINAL pass
1957    in propagate_block.  In this case, various info about register
1958    usage is stored, LOG_LINKS fields of insns are set up.  */
1959
1960 static void
1961 mark_set_regs (needed, dead, x, insn, significant)
1962      regset needed;
1963      regset dead;
1964      rtx x;
1965      rtx insn;
1966      regset significant;
1967 {
1968   register RTX_CODE code = GET_CODE (x);
1969
1970   if (code == SET || code == CLOBBER)
1971     mark_set_1 (needed, dead, x, insn, significant);
1972   else if (code == PARALLEL)
1973     {
1974       register int i;
1975       for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
1976         {
1977           code = GET_CODE (XVECEXP (x, 0, i));
1978           if (code == SET || code == CLOBBER)
1979             mark_set_1 (needed, dead, XVECEXP (x, 0, i), insn, significant);
1980         }
1981     }
1982 }
1983
1984 /* Process a single SET rtx, X.  */
1985
1986 static void
1987 mark_set_1 (needed, dead, x, insn, significant)
1988      regset needed;
1989      regset dead;
1990      rtx x;
1991      rtx insn;
1992      regset significant;
1993 {
1994   register int regno;
1995   register rtx reg = SET_DEST (x);
1996
1997   /* Modifying just one hardware register of a multi-reg value
1998      or just a byte field of a register
1999      does not mean the value from before this insn is now dead.
2000      But it does mean liveness of that register at the end of the block
2001      is significant.
2002
2003      Within mark_set_1, however, we treat it as if the register is
2004      indeed modified.  mark_used_regs will, however, also treat this
2005      register as being used.  Thus, we treat these insns as setting a
2006      new value for the register as a function of its old value.  This
2007      cases LOG_LINKS to be made appropriately and this will help combine.  */
2008
2009   while (GET_CODE (reg) == SUBREG || GET_CODE (reg) == ZERO_EXTRACT
2010          || GET_CODE (reg) == SIGN_EXTRACT
2011          || GET_CODE (reg) == STRICT_LOW_PART)
2012     reg = XEXP (reg, 0);
2013
2014   /* If we are writing into memory or into a register mentioned in the
2015      address of the last thing stored into memory, show we don't know
2016      what the last store was.  If we are writing memory, save the address
2017      unless it is volatile.  */
2018   if (GET_CODE (reg) == MEM
2019       || (GET_CODE (reg) == REG
2020           && last_mem_set != 0 && reg_overlap_mentioned_p (reg, last_mem_set)))
2021     last_mem_set = 0;
2022     
2023   if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
2024       /* There are no REG_INC notes for SP, so we can't assume we'll see 
2025          everything that invalidates it.  To be safe, don't eliminate any
2026          stores though SP; none of them should be redundant anyway.  */
2027       && ! reg_mentioned_p (stack_pointer_rtx, reg))
2028     last_mem_set = reg;
2029
2030   if (GET_CODE (reg) == REG
2031       && (regno = REGNO (reg), regno != FRAME_POINTER_REGNUM)
2032 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2033       && regno != HARD_FRAME_POINTER_REGNUM
2034 #endif
2035 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2036       && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2037 #endif
2038       && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
2039     /* && regno != STACK_POINTER_REGNUM) -- let's try without this.  */
2040     {
2041       register int offset = regno / REGSET_ELT_BITS;
2042       register REGSET_ELT_TYPE bit
2043         = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
2044       REGSET_ELT_TYPE some_needed = (needed[offset] & bit);
2045       REGSET_ELT_TYPE some_not_needed = (~ needed[offset]) & bit;
2046
2047       /* Mark it as a significant register for this basic block.  */
2048       if (significant)
2049         significant[offset] |= bit;
2050
2051       /* Mark it as as dead before this insn.  */
2052       dead[offset] |= bit;
2053
2054       /* A hard reg in a wide mode may really be multiple registers.
2055          If so, mark all of them just like the first.  */
2056       if (regno < FIRST_PSEUDO_REGISTER)
2057         {
2058           int n;
2059
2060           /* Nothing below is needed for the stack pointer; get out asap.
2061              Eg, log links aren't needed, since combine won't use them.  */
2062           if (regno == STACK_POINTER_REGNUM)
2063             return;
2064
2065           n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
2066           while (--n > 0)
2067             {
2068               REGSET_ELT_TYPE n_bit
2069                 = (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
2070
2071               if (significant)
2072                 significant[(regno + n) / REGSET_ELT_BITS] |= n_bit;
2073
2074               dead[(regno + n) / REGSET_ELT_BITS] |= n_bit;
2075               some_needed
2076                 |= (needed[(regno + n) / REGSET_ELT_BITS] & n_bit);
2077               some_not_needed
2078                 |= ((~ needed[(regno + n) / REGSET_ELT_BITS]) & n_bit);
2079             }
2080         }
2081       /* Additional data to record if this is the final pass.  */
2082       if (insn)
2083         {
2084           register rtx y = reg_next_use[regno];
2085           register int blocknum = BLOCK_NUM (insn);
2086
2087           /* If this is a hard reg, record this function uses the reg.  */
2088
2089           if (regno < FIRST_PSEUDO_REGISTER)
2090             {
2091               register int i;
2092               int endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
2093
2094               for (i = regno; i < endregno; i++)
2095                 {
2096                   /* The next use is no longer "next", since a store
2097                      intervenes.  */
2098                   reg_next_use[i] = 0;
2099
2100                   regs_ever_live[i] = 1;
2101                   reg_n_sets[i]++;
2102                 }
2103             }
2104           else
2105             {
2106               /* The next use is no longer "next", since a store
2107                  intervenes.  */
2108               reg_next_use[regno] = 0;
2109
2110               /* Keep track of which basic blocks each reg appears in.  */
2111
2112               if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
2113                 reg_basic_block[regno] = blocknum;
2114               else if (reg_basic_block[regno] != blocknum)
2115                 reg_basic_block[regno] = REG_BLOCK_GLOBAL;
2116
2117               /* Count (weighted) references, stores, etc.  This counts a
2118                  register twice if it is modified, but that is correct.  */
2119               reg_n_sets[regno]++;
2120
2121               reg_n_refs[regno] += loop_depth;
2122                   
2123               /* The insns where a reg is live are normally counted
2124                  elsewhere, but we want the count to include the insn
2125                  where the reg is set, and the normal counting mechanism
2126                  would not count it.  */
2127               reg_live_length[regno]++;
2128             }
2129
2130           if (! some_not_needed)
2131             {
2132               /* Make a logical link from the next following insn
2133                  that uses this register, back to this insn.
2134                  The following insns have already been processed.
2135
2136                  We don't build a LOG_LINK for hard registers containing
2137                  in ASM_OPERANDs.  If these registers get replaced,
2138                  we might wind up changing the semantics of the insn,
2139                  even if reload can make what appear to be valid assignments
2140                  later.  */
2141               if (y && (BLOCK_NUM (y) == blocknum)
2142                   && (regno >= FIRST_PSEUDO_REGISTER
2143                       || asm_noperands (PATTERN (y)) < 0))
2144                 LOG_LINKS (y)
2145                   = gen_rtx (INSN_LIST, VOIDmode, insn, LOG_LINKS (y));
2146             }
2147           else if (! some_needed)
2148             {
2149               /* Note that dead stores have already been deleted when possible
2150                  If we get here, we have found a dead store that cannot
2151                  be eliminated (because the same insn does something useful).
2152                  Indicate this by marking the reg being set as dying here.  */
2153               REG_NOTES (insn)
2154                 = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
2155               reg_n_deaths[REGNO (reg)]++;
2156             }
2157           else
2158             {
2159               /* This is a case where we have a multi-word hard register
2160                  and some, but not all, of the words of the register are
2161                  needed in subsequent insns.  Write REG_UNUSED notes
2162                  for those parts that were not needed.  This case should
2163                  be rare.  */
2164
2165               int i;
2166
2167               for (i = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1;
2168                    i >= 0; i--)
2169                 if ((needed[(regno + i) / REGSET_ELT_BITS]
2170                      & ((REGSET_ELT_TYPE) 1
2171                         << ((regno + i) % REGSET_ELT_BITS))) == 0)
2172                   REG_NOTES (insn)
2173                     = gen_rtx (EXPR_LIST, REG_UNUSED,
2174                                gen_rtx (REG, reg_raw_mode[regno + i],
2175                                         regno + i),
2176                                REG_NOTES (insn));
2177             }
2178         }
2179     }
2180   else if (GET_CODE (reg) == REG)
2181     reg_next_use[regno] = 0;
2182
2183   /* If this is the last pass and this is a SCRATCH, show it will be dying
2184      here and count it.  */
2185   else if (GET_CODE (reg) == SCRATCH && insn != 0)
2186     {
2187       REG_NOTES (insn)
2188         = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
2189       num_scratch++;
2190     }
2191 }
2192 \f
2193 #ifdef AUTO_INC_DEC
2194
2195 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
2196    reference.  */
2197
2198 static void
2199 find_auto_inc (needed, x, insn)
2200      regset needed;
2201      rtx x;
2202      rtx insn;
2203 {
2204   rtx addr = XEXP (x, 0);
2205   HOST_WIDE_INT offset = 0;
2206   rtx set;
2207
2208   /* Here we detect use of an index register which might be good for
2209      postincrement, postdecrement, preincrement, or predecrement.  */
2210
2211   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
2212     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
2213
2214   if (GET_CODE (addr) == REG)
2215     {
2216       register rtx y;
2217       register int size = GET_MODE_SIZE (GET_MODE (x));
2218       rtx use;
2219       rtx incr;
2220       int regno = REGNO (addr);
2221
2222       /* Is the next use an increment that might make auto-increment? */
2223       if ((incr = reg_next_use[regno]) != 0
2224           && (set = single_set (incr)) != 0
2225           && GET_CODE (set) == SET
2226           && BLOCK_NUM (incr) == BLOCK_NUM (insn)
2227           /* Can't add side effects to jumps; if reg is spilled and
2228              reloaded, there's no way to store back the altered value.  */
2229           && GET_CODE (insn) != JUMP_INSN
2230           && (y = SET_SRC (set), GET_CODE (y) == PLUS)
2231           && XEXP (y, 0) == addr
2232           && GET_CODE (XEXP (y, 1)) == CONST_INT
2233           && (0
2234 #ifdef HAVE_POST_INCREMENT
2235               || (INTVAL (XEXP (y, 1)) == size && offset == 0)
2236 #endif
2237 #ifdef HAVE_POST_DECREMENT
2238               || (INTVAL (XEXP (y, 1)) == - size && offset == 0)
2239 #endif
2240 #ifdef HAVE_PRE_INCREMENT
2241               || (INTVAL (XEXP (y, 1)) == size && offset == size)
2242 #endif
2243 #ifdef HAVE_PRE_DECREMENT
2244               || (INTVAL (XEXP (y, 1)) == - size && offset == - size)
2245 #endif
2246               )
2247           /* Make sure this reg appears only once in this insn.  */
2248           && (use = find_use_as_address (PATTERN (insn), addr, offset),
2249               use != 0 && use != (rtx) 1))
2250         {
2251           rtx q = SET_DEST (set);
2252           enum rtx_code inc_code = (INTVAL (XEXP (y, 1)) == size
2253                                     ? (offset ? PRE_INC : POST_INC)
2254                                     : (offset ? PRE_DEC : POST_DEC));
2255
2256           if (dead_or_set_p (incr, addr))
2257             {
2258               /* This is the simple case.  Try to make the auto-inc.  If
2259                  we can't, we are done.  Otherwise, we will do any
2260                  needed updates below.  */
2261               if (! validate_change (insn, &XEXP (x, 0),
2262                                      gen_rtx (inc_code, Pmode, addr),
2263                                      0))
2264                 return;
2265             }
2266           else if (GET_CODE (q) == REG
2267                    /* PREV_INSN used here to check the semi-open interval
2268                       [insn,incr).  */
2269                    && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
2270                    /* We must also check for sets of q as q may be
2271                       a call clobbered hard register and there may
2272                       be a call between PREV_INSN (insn) and incr.  */
2273                    && ! reg_set_between_p (q,  PREV_INSN (insn), incr))
2274             {
2275               /* We have *p followed sometime later by q = p+size.
2276                  Both p and q must be live afterward,
2277                  and q is not used between INSN and it's assignment.
2278                  Change it to q = p, ...*q..., q = q+size.
2279                  Then fall into the usual case.  */
2280               rtx insns, temp;
2281
2282               start_sequence ();
2283               emit_move_insn (q, addr);
2284               insns = get_insns ();
2285               end_sequence ();
2286
2287               /* If anything in INSNS have UID's that don't fit within the
2288                  extra space we allocate earlier, we can't make this auto-inc.
2289                  This should never happen.  */
2290               for (temp = insns; temp; temp = NEXT_INSN (temp))
2291                 {
2292                   if (INSN_UID (temp) > max_uid_for_flow)
2293                     return;
2294                   BLOCK_NUM (temp) = BLOCK_NUM (insn);
2295                 }
2296
2297               /* If we can't make the auto-inc, or can't make the
2298                  replacement into Y, exit.  There's no point in making
2299                  the change below if we can't do the auto-inc and doing
2300                  so is not correct in the pre-inc case.  */
2301
2302               validate_change (insn, &XEXP (x, 0),
2303                                gen_rtx (inc_code, Pmode, q),
2304                                1);
2305               validate_change (incr, &XEXP (y, 0), q, 1);
2306               if (! apply_change_group ())
2307                 return;
2308
2309               /* We now know we'll be doing this change, so emit the
2310                  new insn(s) and do the updates.  */
2311               emit_insns_before (insns, insn);
2312
2313               if (basic_block_head[BLOCK_NUM (insn)] == insn)
2314                 basic_block_head[BLOCK_NUM (insn)] = insns;
2315
2316               /* INCR will become a NOTE and INSN won't contain a
2317                  use of ADDR.  If a use of ADDR was just placed in
2318                  the insn before INSN, make that the next use. 
2319                  Otherwise, invalidate it.  */
2320               if (GET_CODE (PREV_INSN (insn)) == INSN
2321                   && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
2322                   && SET_SRC (PATTERN (PREV_INSN (insn))) == addr)
2323                 reg_next_use[regno] = PREV_INSN (insn);
2324               else
2325                 reg_next_use[regno] = 0;
2326
2327               addr = q;
2328               regno = REGNO (q);
2329
2330               /* REGNO is now used in INCR which is below INSN, but
2331                  it previously wasn't live here.  If we don't mark
2332                  it as needed, we'll put a REG_DEAD note for it
2333                  on this insn, which is incorrect.  */
2334               needed[regno / REGSET_ELT_BITS]
2335                 |= (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
2336
2337               /* If there are any calls between INSN and INCR, show
2338                  that REGNO now crosses them.  */
2339               for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
2340                 if (GET_CODE (temp) == CALL_INSN)
2341                   reg_n_calls_crossed[regno]++;
2342             }
2343           else
2344             return;
2345
2346           /* If we haven't returned, it means we were able to make the
2347              auto-inc, so update the status.  First, record that this insn
2348              has an implicit side effect.  */
2349
2350           REG_NOTES (insn)
2351             = gen_rtx (EXPR_LIST, REG_INC, addr, REG_NOTES (insn));
2352
2353           /* Modify the old increment-insn to simply copy
2354              the already-incremented value of our register.  */
2355           if (! validate_change (incr, &SET_SRC (set), addr, 0))
2356             abort ();
2357
2358           /* If that makes it a no-op (copying the register into itself) delete
2359              it so it won't appear to be a "use" and a "set" of this
2360              register.  */
2361           if (SET_DEST (set) == addr)
2362             {
2363               PUT_CODE (incr, NOTE);
2364               NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
2365               NOTE_SOURCE_FILE (incr) = 0;
2366             }
2367
2368           if (regno >= FIRST_PSEUDO_REGISTER)
2369             {
2370               /* Count an extra reference to the reg.  When a reg is
2371                  incremented, spilling it is worse, so we want to make
2372                  that less likely.  */
2373               reg_n_refs[regno] += loop_depth;
2374
2375               /* Count the increment as a setting of the register,
2376                  even though it isn't a SET in rtl.  */
2377               reg_n_sets[regno]++;
2378             }
2379         }
2380     }
2381 }
2382 #endif /* AUTO_INC_DEC */
2383 \f
2384 /* Scan expression X and store a 1-bit in LIVE for each reg it uses.
2385    This is done assuming the registers needed from X
2386    are those that have 1-bits in NEEDED.
2387
2388    On the final pass, FINAL is 1.  This means try for autoincrement
2389    and count the uses and deaths of each pseudo-reg.
2390
2391    INSN is the containing instruction.  If INSN is dead, this function is not
2392    called.  */
2393
2394 static void
2395 mark_used_regs (needed, live, x, final, insn)
2396      regset needed;
2397      regset live;
2398      rtx x;
2399      int final;
2400      rtx insn;
2401 {
2402   register RTX_CODE code;
2403   register int regno;
2404   int i;
2405
2406  retry:
2407   code = GET_CODE (x);
2408   switch (code)
2409     {
2410     case LABEL_REF:
2411     case SYMBOL_REF:
2412     case CONST_INT:
2413     case CONST:
2414     case CONST_DOUBLE:
2415     case PC:
2416     case ADDR_VEC:
2417     case ADDR_DIFF_VEC:
2418     case ASM_INPUT:
2419       return;
2420
2421 #ifdef HAVE_cc0
2422     case CC0:
2423       cc0_live = 1;
2424       return;
2425 #endif
2426
2427     case CLOBBER:
2428       /* If we are clobbering a MEM, mark any registers inside the address
2429          as being used.  */
2430       if (GET_CODE (XEXP (x, 0)) == MEM)
2431         mark_used_regs (needed, live, XEXP (XEXP (x, 0), 0), final, insn);
2432       return;
2433
2434     case MEM:
2435       /* Invalidate the data for the last MEM stored.  We could do this only
2436          if the addresses conflict, but this doesn't seem worthwhile.  */
2437       last_mem_set = 0;
2438
2439 #ifdef AUTO_INC_DEC
2440       if (final)
2441         find_auto_inc (needed, x, insn);
2442 #endif
2443       break;
2444
2445     case SUBREG:
2446       if (GET_CODE (SUBREG_REG (x)) == REG
2447           && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER
2448           && (GET_MODE_SIZE (GET_MODE (x))
2449               != GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
2450         reg_changes_size[REGNO (SUBREG_REG (x))] = 1;
2451
2452       /* While we're here, optimize this case.  */
2453       x = SUBREG_REG (x);
2454
2455       /* In case the SUBREG is not of a register, don't optimize */
2456       if (GET_CODE (x) != REG)
2457         {
2458           mark_used_regs (needed, live, x, final, insn);
2459           return;
2460         }
2461
2462       /* ... fall through ...  */
2463
2464     case REG:
2465       /* See a register other than being set
2466          => mark it as needed.  */
2467
2468       regno = REGNO (x);
2469       {
2470         register int offset = regno / REGSET_ELT_BITS;
2471         register REGSET_ELT_TYPE bit
2472           = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
2473         REGSET_ELT_TYPE some_needed = needed[offset] & bit;
2474         REGSET_ELT_TYPE some_not_needed = (~ needed[offset]) & bit;
2475
2476         live[offset] |= bit;
2477
2478         /* A hard reg in a wide mode may really be multiple registers.
2479            If so, mark all of them just like the first.  */
2480         if (regno < FIRST_PSEUDO_REGISTER)
2481           {
2482             int n;
2483
2484             /* For stack ptr or fixed arg pointer,
2485                nothing below can be necessary, so waste no more time.  */
2486             if (regno == STACK_POINTER_REGNUM
2487 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2488                 || regno == HARD_FRAME_POINTER_REGNUM
2489 #endif
2490 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2491                 || (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2492 #endif
2493                 || regno == FRAME_POINTER_REGNUM)
2494               {
2495                 /* If this is a register we are going to try to eliminate,
2496                    don't mark it live here.  If we are successful in
2497                    eliminating it, it need not be live unless it is used for
2498                    pseudos, in which case it will have been set live when
2499                    it was allocated to the pseudos.  If the register will not
2500                    be eliminated, reload will set it live at that point.  */
2501
2502                 if (! TEST_HARD_REG_BIT (elim_reg_set, regno))
2503                   regs_ever_live[regno] = 1;
2504                 return;
2505               }
2506             /* No death notes for global register variables;
2507                their values are live after this function exits.  */
2508             if (global_regs[regno])
2509               {
2510                 if (final)
2511                   reg_next_use[regno] = insn;
2512                 return;
2513               }
2514
2515             n = HARD_REGNO_NREGS (regno, GET_MODE (x));
2516             while (--n > 0)
2517               {
2518                 REGSET_ELT_TYPE n_bit
2519                   = (REGSET_ELT_TYPE) 1 << ((regno + n) % REGSET_ELT_BITS);
2520
2521                 live[(regno + n) / REGSET_ELT_BITS] |= n_bit;
2522                 some_needed |= (needed[(regno + n) / REGSET_ELT_BITS] & n_bit);
2523                 some_not_needed
2524                   |= ((~ needed[(regno + n) / REGSET_ELT_BITS]) & n_bit);
2525               }
2526           }
2527         if (final)
2528           {
2529             /* Record where each reg is used, so when the reg
2530                is set we know the next insn that uses it.  */
2531
2532             reg_next_use[regno] = insn;
2533
2534             if (regno < FIRST_PSEUDO_REGISTER)
2535               {
2536                 /* If a hard reg is being used,
2537                    record that this function does use it.  */
2538
2539                 i = HARD_REGNO_NREGS (regno, GET_MODE (x));
2540                 if (i == 0)
2541                   i = 1;
2542                 do
2543                   regs_ever_live[regno + --i] = 1;
2544                 while (i > 0);
2545               }
2546             else
2547               {
2548                 /* Keep track of which basic block each reg appears in.  */
2549
2550                 register int blocknum = BLOCK_NUM (insn);
2551
2552                 if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
2553                   reg_basic_block[regno] = blocknum;
2554                 else if (reg_basic_block[regno] != blocknum)
2555                   reg_basic_block[regno] = REG_BLOCK_GLOBAL;
2556
2557                 /* Count (weighted) number of uses of each reg.  */
2558
2559                 reg_n_refs[regno] += loop_depth;
2560               }
2561
2562             /* Record and count the insns in which a reg dies.
2563                If it is used in this insn and was dead below the insn
2564                then it dies in this insn.  If it was set in this insn,
2565                we do not make a REG_DEAD note; likewise if we already
2566                made such a note.  */
2567
2568             if (some_not_needed
2569                 && ! dead_or_set_p (insn, x)
2570 #if 0
2571                 && (regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
2572 #endif
2573                 )
2574               {
2575                 /* Check for the case where the register dying partially
2576                    overlaps the register set by this insn.  */
2577                 if (regno < FIRST_PSEUDO_REGISTER
2578                     && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
2579                   {
2580                     int n = HARD_REGNO_NREGS (regno, GET_MODE (x));
2581                     while (--n >= 0)
2582                       some_needed |= dead_or_set_regno_p (insn, regno + n);
2583                   }
2584
2585                 /* If none of the words in X is needed, make a REG_DEAD
2586                    note.  Otherwise, we must make partial REG_DEAD notes.  */
2587                 if (! some_needed)
2588                   {
2589                     REG_NOTES (insn)
2590                       = gen_rtx (EXPR_LIST, REG_DEAD, x, REG_NOTES (insn));
2591                     reg_n_deaths[regno]++;
2592                   }
2593                 else
2594                   {
2595                     int i;
2596
2597                     /* Don't make a REG_DEAD note for a part of a register
2598                        that is set in the insn.  */
2599
2600                     for (i = HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1;
2601                          i >= 0; i--)
2602                       if ((needed[(regno + i) / REGSET_ELT_BITS]
2603                            & ((REGSET_ELT_TYPE) 1
2604                               << ((regno + i) % REGSET_ELT_BITS))) == 0
2605                           && ! dead_or_set_regno_p (insn, regno + i))
2606                         REG_NOTES (insn)
2607                           = gen_rtx (EXPR_LIST, REG_DEAD,
2608                                      gen_rtx (REG, reg_raw_mode[regno + i],
2609                                               regno + i),
2610                                      REG_NOTES (insn));
2611                   }
2612               }
2613           }
2614       }
2615       return;
2616
2617     case SET:
2618       {
2619         register rtx testreg = SET_DEST (x);
2620         int mark_dest = 0;
2621
2622         /* If storing into MEM, don't show it as being used.  But do
2623            show the address as being used.  */
2624         if (GET_CODE (testreg) == MEM)
2625           {
2626 #ifdef AUTO_INC_DEC
2627             if (final)
2628               find_auto_inc (needed, testreg, insn);
2629 #endif
2630             mark_used_regs (needed, live, XEXP (testreg, 0), final, insn);
2631             mark_used_regs (needed, live, SET_SRC (x), final, insn);
2632             return;
2633           }
2634             
2635         /* Storing in STRICT_LOW_PART is like storing in a reg
2636            in that this SET might be dead, so ignore it in TESTREG.
2637            but in some other ways it is like using the reg.
2638
2639            Storing in a SUBREG or a bit field is like storing the entire
2640            register in that if the register's value is not used
2641            then this SET is not needed.  */
2642         while (GET_CODE (testreg) == STRICT_LOW_PART
2643                || GET_CODE (testreg) == ZERO_EXTRACT
2644                || GET_CODE (testreg) == SIGN_EXTRACT
2645                || GET_CODE (testreg) == SUBREG)
2646           {
2647             if (GET_CODE (testreg) == SUBREG
2648                 && GET_CODE (SUBREG_REG (testreg)) == REG
2649                 && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER
2650                 && (GET_MODE_SIZE (GET_MODE (testreg))
2651                     != GET_MODE_SIZE (GET_MODE (SUBREG_REG (testreg)))))
2652               reg_changes_size[REGNO (SUBREG_REG (testreg))] = 1;
2653
2654             /* Modifying a single register in an alternate mode
2655                does not use any of the old value.  But these other
2656                ways of storing in a register do use the old value.  */
2657             if (GET_CODE (testreg) == SUBREG
2658                 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
2659               ;
2660             else
2661               mark_dest = 1;
2662
2663             testreg = XEXP (testreg, 0);
2664           }
2665
2666         /* If this is a store into a register,
2667            recursively scan the value being stored.  */
2668
2669         if (GET_CODE (testreg) == REG
2670             && (regno = REGNO (testreg), regno != FRAME_POINTER_REGNUM)
2671 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2672             && regno != HARD_FRAME_POINTER_REGNUM
2673 #endif
2674 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2675             && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2676 #endif
2677             )
2678           /* We used to exclude global_regs here, but that seems wrong.
2679              Storing in them is like storing in mem.  */
2680           {
2681             mark_used_regs (needed, live, SET_SRC (x), final, insn);
2682             if (mark_dest)
2683               mark_used_regs (needed, live, SET_DEST (x), final, insn);
2684             return;
2685           }
2686       }
2687       break;
2688
2689     case RETURN:
2690       /* If exiting needs the right stack value, consider this insn as
2691          using the stack pointer.  In any event, consider it as using
2692          all global registers and all registers used by return.  */
2693
2694 #ifdef EXIT_IGNORE_STACK
2695       if (! EXIT_IGNORE_STACK
2696           || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
2697 #endif
2698         live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
2699           |= (REGSET_ELT_TYPE) 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
2700
2701       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2702         if (global_regs[i]
2703 #ifdef EPILOGUE_USES
2704             || EPILOGUE_USES (i)
2705 #endif
2706             )
2707           live[i / REGSET_ELT_BITS]
2708             |= (REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS);
2709       break;
2710     }
2711
2712   /* Recursively scan the operands of this expression.  */
2713
2714   {
2715     register char *fmt = GET_RTX_FORMAT (code);
2716     register int i;
2717     
2718     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2719       {
2720         if (fmt[i] == 'e')
2721           {
2722             /* Tail recursive case: save a function call level.  */
2723             if (i == 0)
2724               {
2725                 x = XEXP (x, 0);
2726                 goto retry;
2727               }
2728             mark_used_regs (needed, live, XEXP (x, i), final, insn);
2729           }
2730         else if (fmt[i] == 'E')
2731           {
2732             register int j;
2733             for (j = 0; j < XVECLEN (x, i); j++)
2734               mark_used_regs (needed, live, XVECEXP (x, i, j), final, insn);
2735           }
2736       }
2737   }
2738 }
2739 \f
2740 #ifdef AUTO_INC_DEC
2741
2742 static int
2743 try_pre_increment_1 (insn)
2744      rtx insn;
2745 {
2746   /* Find the next use of this reg.  If in same basic block,
2747      make it do pre-increment or pre-decrement if appropriate.  */
2748   rtx x = PATTERN (insn);
2749   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
2750                 * INTVAL (XEXP (SET_SRC (x), 1)));
2751   int regno = REGNO (SET_DEST (x));
2752   rtx y = reg_next_use[regno];
2753   if (y != 0
2754       && BLOCK_NUM (y) == BLOCK_NUM (insn)
2755       /* Don't do this if the reg dies, or gets set in y; a standard addressing
2756          mode would be better.  */
2757       && ! dead_or_set_p (y, SET_DEST (x))
2758       && try_pre_increment (y, SET_DEST (PATTERN (insn)),
2759                             amount))
2760     {
2761       /* We have found a suitable auto-increment
2762          and already changed insn Y to do it.
2763          So flush this increment-instruction.  */
2764       PUT_CODE (insn, NOTE);
2765       NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
2766       NOTE_SOURCE_FILE (insn) = 0;
2767       /* Count a reference to this reg for the increment
2768          insn we are deleting.  When a reg is incremented.
2769          spilling it is worse, so we want to make that
2770          less likely.  */
2771       if (regno >= FIRST_PSEUDO_REGISTER)
2772         {
2773           reg_n_refs[regno] += loop_depth;
2774           reg_n_sets[regno]++;
2775         }
2776       return 1;
2777     }
2778   return 0;
2779 }
2780
2781 /* Try to change INSN so that it does pre-increment or pre-decrement
2782    addressing on register REG in order to add AMOUNT to REG.
2783    AMOUNT is negative for pre-decrement.
2784    Returns 1 if the change could be made.
2785    This checks all about the validity of the result of modifying INSN.  */
2786
2787 static int
2788 try_pre_increment (insn, reg, amount)
2789      rtx insn, reg;
2790      HOST_WIDE_INT amount;
2791 {
2792   register rtx use;
2793
2794   /* Nonzero if we can try to make a pre-increment or pre-decrement.
2795      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
2796   int pre_ok = 0;
2797   /* Nonzero if we can try to make a post-increment or post-decrement.
2798      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
2799      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
2800      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
2801   int post_ok = 0;
2802
2803   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
2804   int do_post = 0;
2805
2806   /* From the sign of increment, see which possibilities are conceivable
2807      on this target machine.  */
2808 #ifdef HAVE_PRE_INCREMENT
2809   if (amount > 0)
2810     pre_ok = 1;
2811 #endif
2812 #ifdef HAVE_POST_INCREMENT
2813   if (amount > 0)
2814     post_ok = 1;
2815 #endif
2816
2817 #ifdef HAVE_PRE_DECREMENT
2818   if (amount < 0)
2819     pre_ok = 1;
2820 #endif
2821 #ifdef HAVE_POST_DECREMENT
2822   if (amount < 0)
2823     post_ok = 1;
2824 #endif
2825
2826   if (! (pre_ok || post_ok))
2827     return 0;
2828
2829   /* It is not safe to add a side effect to a jump insn
2830      because if the incremented register is spilled and must be reloaded
2831      there would be no way to store the incremented value back in memory.  */
2832
2833   if (GET_CODE (insn) == JUMP_INSN)
2834     return 0;
2835
2836   use = 0;
2837   if (pre_ok)
2838     use = find_use_as_address (PATTERN (insn), reg, 0);
2839   if (post_ok && (use == 0 || use == (rtx) 1))
2840     {
2841       use = find_use_as_address (PATTERN (insn), reg, -amount);
2842       do_post = 1;
2843     }
2844
2845   if (use == 0 || use == (rtx) 1)
2846     return 0;
2847
2848   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
2849     return 0;
2850
2851   /* See if this combination of instruction and addressing mode exists.  */
2852   if (! validate_change (insn, &XEXP (use, 0),
2853                          gen_rtx (amount > 0
2854                                   ? (do_post ? POST_INC : PRE_INC)
2855                                   : (do_post ? POST_DEC : PRE_DEC),
2856                                   Pmode, reg), 0))
2857     return 0;
2858
2859   /* Record that this insn now has an implicit side effect on X.  */
2860   REG_NOTES (insn) = gen_rtx (EXPR_LIST, REG_INC, reg, REG_NOTES (insn));
2861   return 1;
2862 }
2863
2864 #endif /* AUTO_INC_DEC */
2865 \f
2866 /* Find the place in the rtx X where REG is used as a memory address.
2867    Return the MEM rtx that so uses it.
2868    If PLUSCONST is nonzero, search instead for a memory address equivalent to
2869    (plus REG (const_int PLUSCONST)).
2870
2871    If such an address does not appear, return 0.
2872    If REG appears more than once, or is used other than in such an address,
2873    return (rtx)1.  */
2874
2875 static rtx
2876 find_use_as_address (x, reg, plusconst)
2877      register rtx x;
2878      rtx reg;
2879      HOST_WIDE_INT plusconst;
2880 {
2881   enum rtx_code code = GET_CODE (x);
2882   char *fmt = GET_RTX_FORMAT (code);
2883   register int i;
2884   register rtx value = 0;
2885   register rtx tem;
2886
2887   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
2888     return x;
2889
2890   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
2891       && XEXP (XEXP (x, 0), 0) == reg
2892       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
2893       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
2894     return x;
2895
2896   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
2897     {
2898       /* If REG occurs inside a MEM used in a bit-field reference,
2899          that is unacceptable.  */
2900       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
2901         return (rtx) (HOST_WIDE_INT) 1;
2902     }
2903
2904   if (x == reg)
2905     return (rtx) (HOST_WIDE_INT) 1;
2906
2907   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2908     {
2909       if (fmt[i] == 'e')
2910         {
2911           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
2912           if (value == 0)
2913             value = tem;
2914           else if (tem != 0)
2915             return (rtx) (HOST_WIDE_INT) 1;
2916         }
2917       if (fmt[i] == 'E')
2918         {
2919           register int j;
2920           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2921             {
2922               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
2923               if (value == 0)
2924                 value = tem;
2925               else if (tem != 0)
2926                 return (rtx) (HOST_WIDE_INT) 1;
2927             }
2928         }
2929     }
2930
2931   return value;
2932 }
2933 \f
2934 /* Write information about registers and basic blocks into FILE.
2935    This is part of making a debugging dump.  */
2936
2937 void
2938 dump_flow_info (file)
2939      FILE *file;
2940 {
2941   register int i;
2942   static char *reg_class_names[] = REG_CLASS_NAMES;
2943
2944   fprintf (file, "%d registers.\n", max_regno);
2945
2946   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2947     if (reg_n_refs[i])
2948       {
2949         enum reg_class class, altclass;
2950         fprintf (file, "\nRegister %d used %d times across %d insns",
2951                  i, reg_n_refs[i], reg_live_length[i]);
2952         if (reg_basic_block[i] >= 0)
2953           fprintf (file, " in block %d", reg_basic_block[i]);
2954         if (reg_n_deaths[i] != 1)
2955           fprintf (file, "; dies in %d places", reg_n_deaths[i]);
2956         if (reg_n_calls_crossed[i] == 1)
2957           fprintf (file, "; crosses 1 call");
2958         else if (reg_n_calls_crossed[i])
2959           fprintf (file, "; crosses %d calls", reg_n_calls_crossed[i]);
2960         if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
2961           fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
2962         class = reg_preferred_class (i);
2963         altclass = reg_alternate_class (i);
2964         if (class != GENERAL_REGS || altclass != ALL_REGS)
2965           {
2966             if (altclass == ALL_REGS || class == ALL_REGS)
2967               fprintf (file, "; pref %s", reg_class_names[(int) class]);
2968             else if (altclass == NO_REGS)
2969               fprintf (file, "; %s or none", reg_class_names[(int) class]);
2970             else
2971               fprintf (file, "; pref %s, else %s",
2972                        reg_class_names[(int) class],
2973                        reg_class_names[(int) altclass]);
2974           }
2975         if (REGNO_POINTER_FLAG (i))
2976           fprintf (file, "; pointer");
2977         fprintf (file, ".\n");
2978       }
2979   fprintf (file, "\n%d basic blocks.\n", n_basic_blocks);
2980   for (i = 0; i < n_basic_blocks; i++)
2981     {
2982       register rtx head, jump;
2983       register int regno;
2984       fprintf (file, "\nBasic block %d: first insn %d, last %d.\n",
2985                i,
2986                INSN_UID (basic_block_head[i]),
2987                INSN_UID (basic_block_end[i]));
2988       /* The control flow graph's storage is freed
2989          now when flow_analysis returns.
2990          Don't try to print it if it is gone.  */
2991       if (basic_block_drops_in)
2992         {
2993           fprintf (file, "Reached from blocks: ");
2994           head = basic_block_head[i];
2995           if (GET_CODE (head) == CODE_LABEL)
2996             for (jump = LABEL_REFS (head);
2997                  jump != head;
2998                  jump = LABEL_NEXTREF (jump))
2999               {
3000                 register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
3001                 fprintf (file, " %d", from_block);
3002               }
3003           if (basic_block_drops_in[i])
3004             fprintf (file, " previous");
3005         }
3006       fprintf (file, "\nRegisters live at start:");
3007       for (regno = 0; regno < max_regno; regno++)
3008         {
3009           register int offset = regno / REGSET_ELT_BITS;
3010           register REGSET_ELT_TYPE bit
3011             = (REGSET_ELT_TYPE) 1 << (regno % REGSET_ELT_BITS);
3012           if (basic_block_live_at_start[i][offset] & bit)
3013               fprintf (file, " %d", regno);
3014         }
3015       fprintf (file, "\n");
3016     }
3017   fprintf (file, "\n");
3018 }