OSDN Git Service

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