OSDN Git Service

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