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