OSDN Git Service

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