OSDN Git Service

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