OSDN Git Service

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