OSDN Git Service

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