OSDN Git Service

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