OSDN Git Service

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