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