OSDN Git Service

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