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
1633 int
1634 regno_uninitialized (regno)
1635      int regno;
1636 {
1637   if (n_basic_blocks == 0)
1638     return 0;
1639
1640   return (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1641           & (1 << (regno % REGSET_ELT_BITS)));
1642 }
1643
1644 /* 1 if register REGNO was alive at a place where `setjmp' was called
1645    and was set more than once or is an argument.
1646    Such regs may be clobbered by `longjmp'.  */
1647
1648 int
1649 regno_clobbered_at_setjmp (regno)
1650      int regno;
1651 {
1652   if (n_basic_blocks == 0)
1653     return 0;
1654
1655   return ((reg_n_sets[regno] > 1
1656            || (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1657                & (1 << (regno % REGSET_ELT_BITS))))
1658           && (regs_live_at_setjmp[regno / REGSET_ELT_BITS]
1659               & (1 << (regno % REGSET_ELT_BITS))));
1660 }
1661 \f
1662 /* Process the registers that are set within X.
1663    Their bits are set to 1 in the regset DEAD,
1664    because they are dead prior to this insn.
1665
1666    If INSN is nonzero, it is the insn being processed
1667    and the fact that it is nonzero implies this is the FINAL pass
1668    in propagate_block.  In this case, various info about register
1669    usage is stored, LOG_LINKS fields of insns are set up.  */
1670
1671 static void mark_set_1 ();
1672
1673 static void
1674 mark_set_regs (needed, dead, x, insn, significant)
1675      regset needed;
1676      regset dead;
1677      rtx x;
1678      rtx insn;
1679      regset significant;
1680 {
1681   register RTX_CODE code = GET_CODE (x);
1682
1683   if (code == SET || code == CLOBBER)
1684     mark_set_1 (needed, dead, x, insn, significant);
1685   else if (code == PARALLEL)
1686     {
1687       register int i;
1688       for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
1689         {
1690           code = GET_CODE (XVECEXP (x, 0, i));
1691           if (code == SET || code == CLOBBER)
1692             mark_set_1 (needed, dead, XVECEXP (x, 0, i), insn, significant);
1693         }
1694     }
1695 }
1696
1697 /* Process a single SET rtx, X.  */
1698
1699 static void
1700 mark_set_1 (needed, dead, x, insn, significant)
1701      regset needed;
1702      regset dead;
1703      rtx x;
1704      rtx insn;
1705      regset significant;
1706 {
1707   register int regno;
1708   register rtx reg = SET_DEST (x);
1709
1710   /* Modifying just one hardware register of a multi-reg value
1711      or just a byte field of a register
1712      does not mean the value from before this insn is now dead.
1713      But it does mean liveness of that register at the end of the block
1714      is significant.
1715
1716      Within mark_set_1, however, we treat it as if the register is
1717      indeed modified.  mark_used_regs will, however, also treat this
1718      register as being used.  Thus, we treat these insns as setting a
1719      new value for the register as a function of its old value.  This
1720      cases LOG_LINKS to be made appropriately and this will help combine.  */
1721
1722   while (GET_CODE (reg) == SUBREG || GET_CODE (reg) == ZERO_EXTRACT
1723          || GET_CODE (reg) == SIGN_EXTRACT
1724          || GET_CODE (reg) == STRICT_LOW_PART)
1725     reg = XEXP (reg, 0);
1726
1727   /* If we are writing into memory or into a register mentioned in the
1728      address of the last thing stored into memory, show we don't know
1729      what the last store was.  If we are writing memory, save the address
1730      unless it is volatile.  */
1731   if (GET_CODE (reg) == MEM
1732       || (GET_CODE (reg) == REG
1733           && last_mem_set != 0 && reg_overlap_mentioned_p (reg, last_mem_set)))
1734     last_mem_set = 0;
1735     
1736   if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
1737       /* There are no REG_INC notes for SP, so we can't assume we'll see 
1738          everything that invalidates it.  To be safe, don't eliminate any
1739          stores though SP; none of them should be redundant anyway.  */
1740       && ! reg_mentioned_p (stack_pointer_rtx, reg))
1741     last_mem_set = reg;
1742
1743   if (GET_CODE (reg) == REG
1744       && (regno = REGNO (reg), regno != FRAME_POINTER_REGNUM)
1745 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1746       && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
1747 #endif
1748       && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
1749     /* && regno != STACK_POINTER_REGNUM) -- let's try without this.  */
1750     {
1751       register int offset = regno / REGSET_ELT_BITS;
1752       register int bit = 1 << (regno % REGSET_ELT_BITS);
1753       int all_needed = (needed[offset] & bit) != 0;
1754       int some_needed = (needed[offset] & bit) != 0;
1755
1756       /* Mark it as a significant register for this basic block.  */
1757       if (significant)
1758         significant[offset] |= bit;
1759
1760       /* Mark it as as dead before this insn.  */
1761       dead[offset] |= bit;
1762
1763       /* A hard reg in a wide mode may really be multiple registers.
1764          If so, mark all of them just like the first.  */
1765       if (regno < FIRST_PSEUDO_REGISTER)
1766         {
1767           int n;
1768
1769           /* Nothing below is needed for the stack pointer; get out asap.
1770              Eg, log links aren't needed, since combine won't use them.  */
1771           if (regno == STACK_POINTER_REGNUM)
1772             return;
1773
1774           n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
1775           while (--n > 0)
1776             {
1777               if (significant)
1778                 significant[(regno + n) / REGSET_ELT_BITS]
1779                   |= 1 << ((regno + n) % REGSET_ELT_BITS);
1780               dead[(regno + n) / REGSET_ELT_BITS]
1781                 |= 1 << ((regno + n) % REGSET_ELT_BITS);
1782               some_needed |= (needed[(regno + n) / REGSET_ELT_BITS]
1783                               & 1 << ((regno + n) % REGSET_ELT_BITS));
1784               all_needed &= (needed[(regno + n) / REGSET_ELT_BITS]
1785                              & 1 << ((regno + n) % REGSET_ELT_BITS));
1786             }
1787         }
1788       /* Additional data to record if this is the final pass.  */
1789       if (insn)
1790         {
1791           register rtx y = reg_next_use[regno];
1792           register int blocknum = BLOCK_NUM (insn);
1793
1794           /* If this is a hard reg, record this function uses the reg.  */
1795
1796           if (regno < FIRST_PSEUDO_REGISTER)
1797             {
1798               register int i;
1799               int endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
1800
1801               for (i = regno; i < endregno; i++)
1802                 {
1803                   regs_ever_live[i] = 1;
1804                   reg_n_sets[i]++;
1805                 }
1806             }
1807           else
1808             {
1809               /* Keep track of which basic blocks each reg appears in.  */
1810
1811               if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
1812                 reg_basic_block[regno] = blocknum;
1813               else if (reg_basic_block[regno] != blocknum)
1814                 reg_basic_block[regno] = REG_BLOCK_GLOBAL;
1815
1816               /* Count (weighted) references, stores, etc.  This counts a
1817                  register twice if it is modified, but that is correct.  */
1818               reg_n_sets[regno]++;
1819
1820               reg_n_refs[regno] += loop_depth;
1821                   
1822               /* The insns where a reg is live are normally counted
1823                  elsewhere, but we want the count to include the insn
1824                  where the reg is set, and the normal counting mechanism
1825                  would not count it.  */
1826               reg_live_length[regno]++;
1827             }
1828
1829           /* The next use is no longer "next", since a store intervenes.  */
1830           reg_next_use[regno] = 0;
1831
1832           if (all_needed)
1833             {
1834               /* Make a logical link from the next following insn
1835                  that uses this register, back to this insn.
1836                  The following insns have already been processed.
1837
1838                  We don't build a LOG_LINK for hard registers containing
1839                  in ASM_OPERANDs.  If these registers get replaced,
1840                  we might wind up changing the semantics of the insn,
1841                  even if reload can make what appear to be valid assignments
1842                  later.  */
1843               if (y && (BLOCK_NUM (y) == blocknum)
1844                   && (regno >= FIRST_PSEUDO_REGISTER
1845                       || asm_noperands (PATTERN (y)) < 0))
1846                 LOG_LINKS (y)
1847                   = gen_rtx (INSN_LIST, VOIDmode, insn, LOG_LINKS (y));
1848             }
1849           else if (! some_needed)
1850             {
1851               /* Note that dead stores have already been deleted when possible
1852                  If we get here, we have found a dead store that cannot
1853                  be eliminated (because the same insn does something useful).
1854                  Indicate this by marking the reg being set as dying here.  */
1855               REG_NOTES (insn)
1856                 = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
1857               reg_n_deaths[REGNO (reg)]++;
1858             }
1859           else
1860             {
1861               /* This is a case where we have a multi-word hard register
1862                  and some, but not all, of the words of the register are
1863                  needed in subsequent insns.  Write REG_UNUSED notes
1864                  for those parts that were not needed.  This case should
1865                  be rare.  */
1866
1867               int i;
1868
1869               for (i = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1;
1870                    i >= 0; i--)
1871                 if ((needed[(regno + i) / REGSET_ELT_BITS]
1872                      & 1 << ((regno + i) % REGSET_ELT_BITS)) == 0)
1873                   REG_NOTES (insn)
1874                     = gen_rtx (EXPR_LIST, REG_UNUSED,
1875                                gen_rtx (REG, word_mode, regno + i),
1876                                REG_NOTES (insn));
1877             }
1878         }
1879     }
1880
1881   /* If this is the last pass and this is a SCRATCH, show it will be dying
1882      here and count it.  */
1883   else if (GET_CODE (reg) == SCRATCH && insn != 0)
1884     {
1885       REG_NOTES (insn)
1886         = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
1887       num_scratch++;
1888     }
1889 }
1890 \f
1891 #ifdef AUTO_INC_DEC
1892
1893 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
1894    reference.  */
1895
1896 static void
1897 find_auto_inc (needed, x, insn)
1898      regset needed;
1899      rtx x;
1900      rtx insn;
1901 {
1902   rtx addr = XEXP (x, 0);
1903   int offset = 0;
1904
1905   /* Here we detect use of an index register which might be good for
1906      postincrement, postdecrement, preincrement, or predecrement.  */
1907
1908   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
1909     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
1910
1911   if (GET_CODE (addr) == REG)
1912     {
1913       register rtx y;
1914       register int size = GET_MODE_SIZE (GET_MODE (x));
1915       rtx use;
1916       rtx incr;
1917       int regno = REGNO (addr);
1918
1919       /* Is the next use an increment that might make auto-increment? */
1920       incr = reg_next_use[regno];
1921       if (incr && GET_CODE (PATTERN (incr)) == SET
1922           && BLOCK_NUM (incr) == BLOCK_NUM (insn)
1923           /* Can't add side effects to jumps; if reg is spilled and
1924              reloaded, there's no way to store back the altered value.  */
1925           && GET_CODE (insn) != JUMP_INSN
1926           && (y = SET_SRC (PATTERN (incr)), GET_CODE (y) == PLUS)
1927           && XEXP (y, 0) == addr
1928           && GET_CODE (XEXP (y, 1)) == CONST_INT
1929           && (0
1930 #ifdef HAVE_POST_INCREMENT
1931               || (INTVAL (XEXP (y, 1)) == size && offset == 0)
1932 #endif
1933 #ifdef HAVE_POST_DECREMENT
1934               || (INTVAL (XEXP (y, 1)) == - size && offset == 0)
1935 #endif
1936 #ifdef HAVE_PRE_INCREMENT
1937               || (INTVAL (XEXP (y, 1)) == size && offset == size)
1938 #endif
1939 #ifdef HAVE_PRE_DECREMENT
1940               || (INTVAL (XEXP (y, 1)) == - size && offset == - size)
1941 #endif
1942               )
1943           /* Make sure this reg appears only once in this insn.  */
1944           && (use = find_use_as_address (PATTERN (insn), addr, offset),
1945               use != 0 && use != (rtx) 1))
1946         {
1947           int win = 0;
1948           rtx q = SET_DEST (PATTERN (incr));
1949
1950           if (dead_or_set_p (incr, addr))
1951             win = 1;
1952           else if (GET_CODE (q) == REG && ! reg_used_between_p (q, insn, incr))
1953             {
1954               /* We have *p followed by q = p+size.
1955                  Both p and q must be live afterward,
1956                  and q must be dead before.
1957                  Change it to q = p, ...*q..., q = q+size.
1958                  Then fall into the usual case.  */
1959               rtx insns, temp;
1960
1961               start_sequence ();
1962               emit_move_insn (q, addr);
1963               insns = get_insns ();
1964               end_sequence ();
1965
1966               /* If anything in INSNS have UID's that don't fit within the
1967                  extra space we allocate earlier, we can't make this auto-inc.
1968                  This should never happen.  */
1969               for (temp = insns; temp; temp = NEXT_INSN (temp))
1970                 {
1971                   if (INSN_UID (temp) > max_uid_for_flow)
1972                     return;
1973                   BLOCK_NUM (temp) = BLOCK_NUM (insn);
1974                 }
1975
1976               emit_insns_before (insns, insn);
1977
1978               if (basic_block_head[BLOCK_NUM (insn)] == insn)
1979                 basic_block_head[BLOCK_NUM (insn)] = insns;
1980
1981               XEXP (x, 0) = q;
1982               XEXP (y, 0) = q;
1983
1984               /* INCR will become a NOTE and INSN won't contain a
1985                  use of ADDR.  If a use of ADDR was just placed in
1986                  the insn before INSN, make that the next use. 
1987                  Otherwise, invalidate it.  */
1988               if (GET_CODE (PREV_INSN (insn)) == INSN
1989                   && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
1990                   && SET_SRC (PATTERN (PREV_INSN (insn))) == addr)
1991                 reg_next_use[regno] = PREV_INSN (insn);
1992               else
1993                 reg_next_use[regno] = 0;
1994
1995               addr = q;
1996               regno = REGNO (q);
1997               win = 1;
1998
1999               /* REGNO is now used in INCR which is below INSN, but
2000                  it previously wasn't live here.  If we don't mark
2001                  it as needed, we'll put a REG_DEAD note for it
2002                  on this insn, which is incorrect.  */
2003               needed[regno / REGSET_ELT_BITS]
2004                 |= 1 << (regno % REGSET_ELT_BITS);
2005
2006               /* If there are any calls between INSN and INCR, show
2007                  that REGNO now crosses them.  */
2008               for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
2009                 if (GET_CODE (temp) == CALL_INSN)
2010                   reg_n_calls_crossed[regno]++;
2011             }
2012
2013           if (win)
2014             {
2015               /* We have found a suitable auto-increment: do POST_INC around
2016                  the register here, and patch out the increment instruction 
2017                  that follows. */
2018               XEXP (x, 0) = gen_rtx ((INTVAL (XEXP (y, 1)) == size
2019                                       ? (offset ? PRE_INC : POST_INC)
2020                                       : (offset ? PRE_DEC : POST_DEC)),
2021                                      Pmode, addr);
2022
2023               /* Record that this insn has an implicit side effect.  */
2024               REG_NOTES (insn)
2025                 = gen_rtx (EXPR_LIST, REG_INC, addr, REG_NOTES (insn));
2026
2027               /* Modify the old increment-insn to simply copy
2028                  the already-incremented value of our register.  */
2029               SET_SRC (PATTERN (incr)) = addr;
2030               /* Indicate insn must be re-recognized.  */
2031               INSN_CODE (incr) = -1;
2032
2033               /* If that makes it a no-op (copying the register into itself)
2034                  then delete it so it won't appear to be a "use" and a "set"
2035                  of this register.  */
2036               if (SET_DEST (PATTERN (incr)) == addr)
2037                 {
2038                   PUT_CODE (incr, NOTE);
2039                   NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
2040                   NOTE_SOURCE_FILE (incr) = 0;
2041                 }
2042
2043               if (regno >= FIRST_PSEUDO_REGISTER)
2044                 {
2045                   /* Count an extra reference to the reg.  When a reg is
2046                      incremented, spilling it is worse, so we want to make
2047                      that less likely.  */
2048                   reg_n_refs[regno] += loop_depth;
2049                   /* Count the increment as a setting of the register,
2050                      even though it isn't a SET in rtl.  */
2051                   reg_n_sets[regno]++;
2052                 }
2053             }
2054         }
2055     }
2056 }
2057 #endif /* AUTO_INC_DEC */
2058 \f
2059 /* Scan expression X and store a 1-bit in LIVE for each reg it uses.
2060    This is done assuming the registers needed from X
2061    are those that have 1-bits in NEEDED.
2062
2063    On the final pass, FINAL is 1.  This means try for autoincrement
2064    and count the uses and deaths of each pseudo-reg.
2065
2066    INSN is the containing instruction.  If INSN is dead, this function is not
2067    called.  */
2068
2069 static void
2070 mark_used_regs (needed, live, x, final, insn)
2071      regset needed;
2072      regset live;
2073      rtx x;
2074      rtx insn;
2075      int final;
2076 {
2077   register RTX_CODE code;
2078   register int regno;
2079   int i;
2080
2081  retry:
2082   code = GET_CODE (x);
2083   switch (code)
2084     {
2085     case LABEL_REF:
2086     case SYMBOL_REF:
2087     case CONST_INT:
2088     case CONST:
2089     case CONST_DOUBLE:
2090     case PC:
2091     case CLOBBER:
2092     case ADDR_VEC:
2093     case ADDR_DIFF_VEC:
2094     case ASM_INPUT:
2095       return;
2096
2097 #ifdef HAVE_cc0
2098     case CC0:
2099       cc0_live = 1;
2100       return;
2101 #endif
2102
2103     case MEM:
2104       /* Invalidate the data for the last MEM stored.  We could do this only
2105          if the addresses conflict, but this doesn't seem worthwhile.  */
2106       last_mem_set = 0;
2107
2108 #ifdef AUTO_INC_DEC
2109       if (final)
2110         find_auto_inc (needed, x, insn);
2111 #endif
2112       break;
2113
2114     case REG:
2115       /* See a register other than being set
2116          => mark it as needed.  */
2117
2118       regno = REGNO (x);
2119       {
2120         register int offset = regno / REGSET_ELT_BITS;
2121         register int bit = 1 << (regno % REGSET_ELT_BITS);
2122         int all_needed = (needed[offset] & bit) != 0;
2123         int some_needed = (needed[offset] & bit) != 0;
2124
2125         live[offset] |= bit;
2126         /* A hard reg in a wide mode may really be multiple registers.
2127            If so, mark all of them just like the first.  */
2128         if (regno < FIRST_PSEUDO_REGISTER)
2129           {
2130             int n;
2131
2132             /* For stack ptr or fixed arg pointer,
2133                nothing below can be necessary, so waste no more time.  */
2134             if (regno == STACK_POINTER_REGNUM
2135 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2136                 || (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2137 #endif
2138                 || regno == FRAME_POINTER_REGNUM)
2139               {
2140                 /* If this is a register we are going to try to eliminate,
2141                    don't mark it live here.  If we are successful in
2142                    eliminating it, it need not be live unless it is used for
2143                    pseudos, in which case it will have been set live when
2144                    it was allocated to the pseudos.  If the register will not
2145                    be eliminated, reload will set it live at that point.  */
2146
2147                 if (! TEST_HARD_REG_BIT (elim_reg_set, regno))
2148                   regs_ever_live[regno] = 1;
2149                 return;
2150               }
2151             /* No death notes for global register variables;
2152                their values are live after this function exits.  */
2153             if (global_regs[regno])
2154               return;
2155
2156             n = HARD_REGNO_NREGS (regno, GET_MODE (x));
2157             while (--n > 0)
2158               {
2159                 live[(regno + n) / REGSET_ELT_BITS]
2160                   |= 1 << ((regno + n) % REGSET_ELT_BITS);
2161                 some_needed |= (needed[(regno + n) / REGSET_ELT_BITS]
2162                                 & 1 << ((regno + n) % REGSET_ELT_BITS));
2163                 all_needed &= (needed[(regno + n) / REGSET_ELT_BITS]
2164                                & 1 << ((regno + n) % REGSET_ELT_BITS));
2165               }
2166           }
2167         if (final)
2168           {
2169             /* Record where each reg is used, so when the reg
2170                is set we know the next insn that uses it.  */
2171
2172             reg_next_use[regno] = insn;
2173
2174             if (regno < FIRST_PSEUDO_REGISTER)
2175               {
2176                 /* If a hard reg is being used,
2177                    record that this function does use it.  */
2178
2179                 i = HARD_REGNO_NREGS (regno, GET_MODE (x));
2180                 if (i == 0)
2181                   i = 1;
2182                 do
2183                   regs_ever_live[regno + --i] = 1;
2184                 while (i > 0);
2185               }
2186             else
2187               {
2188                 /* Keep track of which basic block each reg appears in.  */
2189
2190                 register int blocknum = BLOCK_NUM (insn);
2191
2192                 if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
2193                   reg_basic_block[regno] = blocknum;
2194                 else if (reg_basic_block[regno] != blocknum)
2195                   reg_basic_block[regno] = REG_BLOCK_GLOBAL;
2196
2197                 /* Count (weighted) number of uses of each reg.  */
2198
2199                 reg_n_refs[regno] += loop_depth;
2200               }
2201
2202             /* Record and count the insns in which a reg dies.
2203                If it is used in this insn and was dead below the insn
2204                then it dies in this insn.  If it was set in this insn,
2205                we do not make a REG_DEAD note; likewise if we already
2206                made such a note.  */
2207
2208             if (! all_needed
2209                 && ! dead_or_set_p (insn, x)
2210 #if 0
2211                 && (regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
2212 #endif
2213                 )
2214               {
2215                 /* If none of the words in X is needed, make a REG_DEAD
2216                    note.  Otherwise, we must make partial REG_DEAD notes.  */
2217                 if (! some_needed)
2218                   {
2219                     REG_NOTES (insn)
2220                       = gen_rtx (EXPR_LIST, REG_DEAD, x, REG_NOTES (insn));
2221                     reg_n_deaths[regno]++;
2222                   }
2223                 else
2224                   {
2225                     int i;
2226
2227                     /* Don't make a REG_DEAD note for a part of a register
2228                        that is set in the insn.  */
2229
2230                     for (i = HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1;
2231                          i >= 0; i--)
2232                       if ((needed[(regno + i) / REGSET_ELT_BITS]
2233                            & 1 << ((regno + i) % REGSET_ELT_BITS)) == 0
2234                           && ! dead_or_set_regno_p (insn, regno + i))
2235                         REG_NOTES (insn)
2236                           = gen_rtx (EXPR_LIST, REG_DEAD,
2237                                      gen_rtx (REG, word_mode, regno + i),
2238                                      REG_NOTES (insn));
2239                   }
2240               }
2241           }
2242       }
2243       return;
2244
2245     case SET:
2246       {
2247         register rtx testreg = SET_DEST (x);
2248         int mark_dest = 0;
2249
2250         /* If storing into MEM, don't show it as being used.  But do
2251            show the address as being used.  */
2252         if (GET_CODE (testreg) == MEM)
2253           {
2254 #ifdef AUTO_INC_DEC
2255             if (final)
2256               find_auto_inc (needed, testreg, insn);
2257 #endif
2258             mark_used_regs (needed, live, XEXP (testreg, 0), final, insn);
2259             mark_used_regs (needed, live, SET_SRC (x), final, insn);
2260             return;
2261           }
2262             
2263         /* Storing in STRICT_LOW_PART is like storing in a reg
2264            in that this SET might be dead, so ignore it in TESTREG.
2265            but in some other ways it is like using the reg.
2266
2267            Storing in a SUBREG or a bit field is like storing the entire
2268            register in that if the register's value is not used
2269            then this SET is not needed.  */
2270         while (GET_CODE (testreg) == STRICT_LOW_PART
2271                || GET_CODE (testreg) == ZERO_EXTRACT
2272                || GET_CODE (testreg) == SIGN_EXTRACT
2273                || GET_CODE (testreg) == SUBREG)
2274           {
2275             /* Modifying a single register in an alternate mode
2276                does not use any of the old value.  But these other
2277                ways of storing in a register do use the old value.  */
2278             if (GET_CODE (testreg) == SUBREG
2279                 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
2280               ;
2281             else
2282               mark_dest = 1;
2283
2284             testreg = XEXP (testreg, 0);
2285           }
2286
2287         /* If this is a store into a register,
2288            recursively scan the value being stored.  */
2289
2290         if (GET_CODE (testreg) == REG
2291             && (regno = REGNO (testreg), regno != FRAME_POINTER_REGNUM)
2292 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2293             && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2294 #endif
2295             && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
2296           {
2297             mark_used_regs (needed, live, SET_SRC (x), final, insn);
2298             if (mark_dest)
2299               mark_used_regs (needed, live, SET_DEST (x), final, insn);
2300             return;
2301           }
2302       }
2303       break;
2304
2305     case RETURN:
2306       /* If exiting needs the right stack value, consider this insn as
2307          using the stack pointer.  In any event, consider it as using
2308          all global registers.  */
2309
2310 #ifdef EXIT_IGNORE_STACK
2311       if (! EXIT_IGNORE_STACK
2312           || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
2313 #endif
2314         live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
2315           |= 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
2316
2317       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2318         if (global_regs[i])
2319           live[i / REGSET_ELT_BITS] |= 1 << (i % REGSET_ELT_BITS);
2320       break;
2321     }
2322
2323   /* Recursively scan the operands of this expression.  */
2324
2325   {
2326     register char *fmt = GET_RTX_FORMAT (code);
2327     register int i;
2328     
2329     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2330       {
2331         if (fmt[i] == 'e')
2332           {
2333             /* Tail recursive case: save a function call level.  */
2334             if (i == 0)
2335               {
2336                 x = XEXP (x, 0);
2337                 goto retry;
2338               }
2339             mark_used_regs (needed, live, XEXP (x, i), final, insn);
2340           }
2341         else if (fmt[i] == 'E')
2342           {
2343             register int j;
2344             for (j = 0; j < XVECLEN (x, i); j++)
2345               mark_used_regs (needed, live, XVECEXP (x, i, j), final, insn);
2346           }
2347       }
2348   }
2349 }
2350 \f
2351 #ifdef AUTO_INC_DEC
2352
2353 static int
2354 try_pre_increment_1 (insn)
2355      rtx insn;
2356 {
2357   /* Find the next use of this reg.  If in same basic block,
2358      make it do pre-increment or pre-decrement if appropriate.  */
2359   rtx x = PATTERN (insn);
2360   int amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
2361                 * INTVAL (XEXP (SET_SRC (x), 1)));
2362   int regno = REGNO (SET_DEST (x));
2363   rtx y = reg_next_use[regno];
2364   if (y != 0
2365       && BLOCK_NUM (y) == BLOCK_NUM (insn)
2366       && try_pre_increment (y, SET_DEST (PATTERN (insn)),
2367                             amount))
2368     {
2369       /* We have found a suitable auto-increment
2370          and already changed insn Y to do it.
2371          So flush this increment-instruction.  */
2372       PUT_CODE (insn, NOTE);
2373       NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
2374       NOTE_SOURCE_FILE (insn) = 0;
2375       /* Count a reference to this reg for the increment
2376          insn we are deleting.  When a reg is incremented.
2377          spilling it is worse, so we want to make that
2378          less likely.  */
2379       if (regno >= FIRST_PSEUDO_REGISTER)
2380         {
2381           reg_n_refs[regno] += loop_depth;
2382           reg_n_sets[regno]++;
2383         }
2384       return 1;
2385     }
2386   return 0;
2387 }
2388
2389 /* Try to change INSN so that it does pre-increment or pre-decrement
2390    addressing on register REG in order to add AMOUNT to REG.
2391    AMOUNT is negative for pre-decrement.
2392    Returns 1 if the change could be made.
2393    This checks all about the validity of the result of modifying INSN.  */
2394
2395 static int
2396 try_pre_increment (insn, reg, amount)
2397      rtx insn, reg;
2398      int amount;
2399 {
2400   register rtx use;
2401
2402   /* Nonzero if we can try to make a pre-increment or pre-decrement.
2403      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
2404   int pre_ok = 0;
2405   /* Nonzero if we can try to make a post-increment or post-decrement.
2406      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
2407      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
2408      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
2409   int post_ok = 0;
2410
2411   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
2412   int do_post = 0;
2413
2414   /* From the sign of increment, see which possibilities are conceivable
2415      on this target machine.  */
2416 #ifdef HAVE_PRE_INCREMENT
2417   if (amount > 0)
2418     pre_ok = 1;
2419 #endif
2420 #ifdef HAVE_POST_INCREMENT
2421   if (amount > 0)
2422     post_ok = 1;
2423 #endif
2424
2425 #ifdef HAVE_PRE_DECREMENT
2426   if (amount < 0)
2427     pre_ok = 1;
2428 #endif
2429 #ifdef HAVE_POST_DECREMENT
2430   if (amount < 0)
2431     post_ok = 1;
2432 #endif
2433
2434   if (! (pre_ok || post_ok))
2435     return 0;
2436
2437   /* It is not safe to add a side effect to a jump insn
2438      because if the incremented register is spilled and must be reloaded
2439      there would be no way to store the incremented value back in memory.  */
2440
2441   if (GET_CODE (insn) == JUMP_INSN)
2442     return 0;
2443
2444   use = 0;
2445   if (pre_ok)
2446     use = find_use_as_address (PATTERN (insn), reg, 0);
2447   if (post_ok && (use == 0 || use == (rtx) 1))
2448     {
2449       use = find_use_as_address (PATTERN (insn), reg, -amount);
2450       do_post = 1;
2451     }
2452
2453   if (use == 0 || use == (rtx) 1)
2454     return 0;
2455
2456   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
2457     return 0;
2458
2459   XEXP (use, 0) = gen_rtx (amount > 0
2460                            ? (do_post ? POST_INC : PRE_INC)
2461                            : (do_post ? POST_DEC : PRE_DEC),
2462                            Pmode, reg);
2463
2464   /* Record that this insn now has an implicit side effect on X.  */
2465   REG_NOTES (insn) = gen_rtx (EXPR_LIST, REG_INC, reg, REG_NOTES (insn));
2466   return 1;
2467 }
2468
2469 #endif /* AUTO_INC_DEC */
2470 \f
2471 /* Find the place in the rtx X where REG is used as a memory address.
2472    Return the MEM rtx that so uses it.
2473    If PLUSCONST is nonzero, search instead for a memory address equivalent to
2474    (plus REG (const_int PLUSCONST)).
2475
2476    If such an address does not appear, return 0.
2477    If REG appears more than once, or is used other than in such an address,
2478    return (rtx)1.  */
2479
2480 static rtx
2481 find_use_as_address (x, reg, plusconst)
2482      register rtx x;
2483      rtx reg;
2484      int plusconst;
2485 {
2486   enum rtx_code code = GET_CODE (x);
2487   char *fmt = GET_RTX_FORMAT (code);
2488   register int i;
2489   register rtx value = 0;
2490   register rtx tem;
2491
2492   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
2493     return x;
2494
2495   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
2496       && XEXP (XEXP (x, 0), 0) == reg
2497       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
2498       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
2499     return x;
2500
2501   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
2502     {
2503       /* If REG occurs inside a MEM used in a bit-field reference,
2504          that is unacceptable.  */
2505       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
2506         return (rtx) 1;
2507     }
2508
2509   if (x == reg)
2510     return (rtx) 1;
2511
2512   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2513     {
2514       if (fmt[i] == 'e')
2515         {
2516           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
2517           if (value == 0)
2518             value = tem;
2519           else if (tem != 0)
2520             return (rtx) 1;
2521         }
2522       if (fmt[i] == 'E')
2523         {
2524           register int j;
2525           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2526             {
2527               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
2528               if (value == 0)
2529                 value = tem;
2530               else if (tem != 0)
2531                 return (rtx) 1;
2532             }
2533         }
2534     }
2535
2536   return value;
2537 }
2538 \f
2539 /* Write information about registers and basic blocks into FILE.
2540    This is part of making a debugging dump.  */
2541
2542 void
2543 dump_flow_info (file)
2544      FILE *file;
2545 {
2546   register int i;
2547   static char *reg_class_names[] = REG_CLASS_NAMES;
2548
2549   fprintf (file, "%d registers.\n", max_regno);
2550
2551   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2552     if (reg_n_refs[i])
2553       {
2554         enum reg_class class, altclass;
2555         fprintf (file, "\nRegister %d used %d times across %d insns",
2556                  i, reg_n_refs[i], reg_live_length[i]);
2557         if (reg_basic_block[i] >= 0)
2558           fprintf (file, " in block %d", reg_basic_block[i]);
2559         if (reg_n_deaths[i] != 1)
2560           fprintf (file, "; dies in %d places", reg_n_deaths[i]);
2561         if (reg_n_calls_crossed[i] == 1)
2562           fprintf (file, "; crosses 1 call");
2563         else if (reg_n_calls_crossed[i])
2564           fprintf (file, "; crosses %d calls", reg_n_calls_crossed[i]);
2565         if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
2566           fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
2567         class = reg_preferred_class (i);
2568         altclass = reg_alternate_class (i);
2569         if (class != GENERAL_REGS || altclass != ALL_REGS)
2570           {
2571             if (altclass == ALL_REGS || class == ALL_REGS)
2572               fprintf (file, "; pref %s", reg_class_names[(int) class]);
2573             else if (altclass == NO_REGS)
2574               fprintf (file, "; %s or none", reg_class_names[(int) class]);
2575             else
2576               fprintf (file, "; pref %s, else %s",
2577                        reg_class_names[(int) class],
2578                        reg_class_names[(int) altclass]);
2579           }
2580         if (REGNO_POINTER_FLAG (i))
2581           fprintf (file, "; pointer");
2582         fprintf (file, ".\n");
2583       }
2584   fprintf (file, "\n%d basic blocks.\n", n_basic_blocks);
2585   for (i = 0; i < n_basic_blocks; i++)
2586     {
2587       register rtx head, jump;
2588       register int regno;
2589       fprintf (file, "\nBasic block %d: first insn %d, last %d.\n",
2590                i,
2591                INSN_UID (basic_block_head[i]),
2592                INSN_UID (basic_block_end[i]));
2593       /* The control flow graph's storage is freed
2594          now when flow_analysis returns.
2595          Don't try to print it if it is gone.  */
2596       if (basic_block_drops_in)
2597         {
2598           fprintf (file, "Reached from blocks: ");
2599           head = basic_block_head[i];
2600           if (GET_CODE (head) == CODE_LABEL)
2601             for (jump = LABEL_REFS (head);
2602                  jump != head;
2603                  jump = LABEL_NEXTREF (jump))
2604               {
2605                 register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
2606                 fprintf (file, " %d", from_block);
2607               }
2608           if (basic_block_drops_in[i])
2609             fprintf (file, " previous");
2610         }
2611       fprintf (file, "\nRegisters live at start:");
2612       for (regno = 0; regno < max_regno; regno++)
2613         {
2614           register int offset = regno / REGSET_ELT_BITS;
2615           register int bit = 1 << (regno % REGSET_ELT_BITS);
2616           if (basic_block_live_at_start[i][offset] & bit)
2617               fprintf (file, " %d", regno);
2618         }
2619       fprintf (file, "\n");
2620     }
2621   fprintf (file, "\n");
2622 }