OSDN Git Service

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