OSDN Git Service

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