b5a6e3775ac1ad81076c9a88dd89979204c8b84f
[platform/upstream/gcc.git] / gcc / flow.c
1 /* Data flow analysis for GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 /* This file contains the data flow analysis pass of the compiler.  It
23    computes data flow information which tells combine_instructions
24    which insns to consider combining and controls register allocation.
25
26    Additional data flow information that is too bulky to record is
27    generated during the analysis, and is used at that time to create
28    autoincrement and autodecrement addressing.
29
30    The first step is dividing the function into basic blocks.
31    find_basic_blocks does this.  Then life_analysis determines
32    where each register is live and where it is dead.
33
34    ** find_basic_blocks **
35
36    find_basic_blocks divides the current function's rtl into basic
37    blocks and constructs the CFG.  The blocks are recorded in the
38    basic_block_info array; the CFG exists in the edge structures
39    referenced by the blocks.
40
41    find_basic_blocks also finds any unreachable loops and deletes them.
42
43    ** life_analysis **
44
45    life_analysis is called immediately after find_basic_blocks.
46    It uses the basic block information to determine where each
47    hard or pseudo register is live.
48
49    ** live-register info **
50
51    The information about where each register is live is in two parts:
52    the REG_NOTES of insns, and the vector basic_block->global_live_at_start.
53
54    basic_block->global_live_at_start has an element for each basic
55    block, and the element is a bit-vector with a bit for each hard or
56    pseudo register.  The bit is 1 if the register is live at the
57    beginning of the basic block.
58
59    Two types of elements can be added to an insn's REG_NOTES.
60    A REG_DEAD note is added to an insn's REG_NOTES for any register
61    that meets both of two conditions:  The value in the register is not
62    needed in subsequent insns and the insn does not replace the value in
63    the register (in the case of multi-word hard registers, the value in
64    each register must be replaced by the insn to avoid a REG_DEAD note).
65
66    In the vast majority of cases, an object in a REG_DEAD note will be
67    used somewhere in the insn.  The (rare) exception to this is if an
68    insn uses a multi-word hard register and only some of the registers are
69    needed in subsequent insns.  In that case, REG_DEAD notes will be
70    provided for those hard registers that are not subsequently needed.
71    Partial REG_DEAD notes of this type do not occur when an insn sets
72    only some of the hard registers used in such a multi-word operand;
73    omitting REG_DEAD notes for objects stored in an insn is optional and
74    the desire to do so does not justify the complexity of the partial
75    REG_DEAD notes.
76
77    REG_UNUSED notes are added for each register that is set by the insn
78    but is unused subsequently (if every register set by the insn is unused
79    and the insn does not reference memory or have some other side-effect,
80    the insn is deleted instead).  If only part of a multi-word hard
81    register is used in a subsequent insn, REG_UNUSED notes are made for
82    the parts that will not be used.
83
84    To determine which registers are live after any insn, one can
85    start from the beginning of the basic block and scan insns, noting
86    which registers are set by each insn and which die there.
87
88    ** Other actions of life_analysis **
89
90    life_analysis sets up the LOG_LINKS fields of insns because the
91    information needed to do so is readily available.
92
93    life_analysis deletes insns whose only effect is to store a value
94    that is never used.
95
96    life_analysis notices cases where a reference to a register as
97    a memory address can be combined with a preceding or following
98    incrementation or decrementation of the register.  The separate
99    instruction to increment or decrement is deleted and the address
100    is changed to a POST_INC or similar rtx.
101
102    Each time an incrementing or decrementing address is created,
103    a REG_INC element is added to the insn's REG_NOTES list.
104
105    life_analysis fills in certain vectors containing information about
106    register usage: REG_N_REFS, REG_N_DEATHS, REG_N_SETS, REG_LIVE_LENGTH,
107    REG_N_CALLS_CROSSED and REG_BASIC_BLOCK.
108
109    life_analysis sets current_function_sp_is_unchanging if the function
110    doesn't modify the stack pointer.  */
111
112 /* TODO:
113
114    Split out from life_analysis:
115         - local property discovery (bb->local_live, bb->local_set)
116         - global property computation
117         - log links creation
118         - pre/post modify transformation
119 */
120 \f
121 #include "config.h"
122 #include "system.h"
123 #include "tree.h"
124 #include "rtl.h"
125 #include "tm_p.h"
126 #include "hard-reg-set.h"
127 #include "basic-block.h"
128 #include "insn-config.h"
129 #include "regs.h"
130 #include "flags.h"
131 #include "output.h"
132 #include "function.h"
133 #include "except.h"
134 #include "toplev.h"
135 #include "recog.h"
136 #include "expr.h"
137 #include "ssa.h"
138 #include "timevar.h"
139
140 #include "obstack.h"
141 #include "splay-tree.h"
142
143 #define obstack_chunk_alloc xmalloc
144 #define obstack_chunk_free free
145
146 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
147    the stack pointer does not matter.  The value is tested only in
148    functions that have frame pointers.
149    No definition is equivalent to always zero.  */
150 #ifndef EXIT_IGNORE_STACK
151 #define EXIT_IGNORE_STACK 0
152 #endif
153
154 #ifndef HAVE_epilogue
155 #define HAVE_epilogue 0
156 #endif
157 #ifndef HAVE_prologue
158 #define HAVE_prologue 0
159 #endif
160 #ifndef HAVE_sibcall_epilogue
161 #define HAVE_sibcall_epilogue 0
162 #endif
163
164 #ifndef LOCAL_REGNO
165 #define LOCAL_REGNO(REGNO)  0
166 #endif
167 #ifndef EPILOGUE_USES
168 #define EPILOGUE_USES(REGNO)  0
169 #endif
170
171 #ifdef HAVE_conditional_execution
172 #ifndef REVERSE_CONDEXEC_PREDICATES_P
173 #define REVERSE_CONDEXEC_PREDICATES_P(x, y) ((x) == reverse_condition (y))
174 #endif
175 #endif
176
177 /* Nonzero if the second flow pass has completed.  */
178 int flow2_completed;
179
180 /* Maximum register number used in this function, plus one.  */
181
182 int max_regno;
183
184 /* Indexed by n, giving various register information */
185
186 varray_type reg_n_info;
187
188 /* Size of a regset for the current function,
189    in (1) bytes and (2) elements.  */
190
191 int regset_bytes;
192 int regset_size;
193
194 /* Regset of regs live when calls to `setjmp'-like functions happen.  */
195 /* ??? Does this exist only for the setjmp-clobbered warning message?  */
196
197 regset regs_live_at_setjmp;
198
199 /* List made of EXPR_LIST rtx's which gives pairs of pseudo registers
200    that have to go in the same hard reg.
201    The first two regs in the list are a pair, and the next two
202    are another pair, etc.  */
203 rtx regs_may_share;
204
205 /* Callback that determines if it's ok for a function to have no
206    noreturn attribute.  */
207 int (*lang_missing_noreturn_ok_p) PARAMS ((tree));
208
209 /* Set of registers that may be eliminable.  These are handled specially
210    in updating regs_ever_live.  */
211
212 static HARD_REG_SET elim_reg_set;
213
214 /* Holds information for tracking conditional register life information.  */
215 struct reg_cond_life_info
216 {
217   /* A boolean expression of conditions under which a register is dead.  */
218   rtx condition;
219   /* Conditions under which a register is dead at the basic block end.  */
220   rtx orig_condition;
221
222   /* A boolean expression of conditions under which a register has been
223      stored into.  */
224   rtx stores;
225
226   /* ??? Could store mask of bytes that are dead, so that we could finally
227      track lifetimes of multi-word registers accessed via subregs.  */
228 };
229
230 /* For use in communicating between propagate_block and its subroutines.
231    Holds all information needed to compute life and def-use information.  */
232
233 struct propagate_block_info
234 {
235   /* The basic block we're considering.  */
236   basic_block bb;
237
238   /* Bit N is set if register N is conditionally or unconditionally live.  */
239   regset reg_live;
240
241   /* Bit N is set if register N is set this insn.  */
242   regset new_set;
243
244   /* Element N is the next insn that uses (hard or pseudo) register N
245      within the current basic block; or zero, if there is no such insn.  */
246   rtx *reg_next_use;
247
248   /* Contains a list of all the MEMs we are tracking for dead store
249      elimination.  */
250   rtx mem_set_list;
251
252   /* If non-null, record the set of registers set unconditionally in the
253      basic block.  */
254   regset local_set;
255
256   /* If non-null, record the set of registers set conditionally in the
257      basic block.  */
258   regset cond_local_set;
259
260 #ifdef HAVE_conditional_execution
261   /* Indexed by register number, holds a reg_cond_life_info for each
262      register that is not unconditionally live or dead.  */
263   splay_tree reg_cond_dead;
264
265   /* Bit N is set if register N is in an expression in reg_cond_dead.  */
266   regset reg_cond_reg;
267 #endif
268
269   /* The length of mem_set_list.  */
270   int mem_set_list_len;
271
272   /* Non-zero if the value of CC0 is live.  */
273   int cc0_live;
274
275   /* Flags controling the set of information propagate_block collects.  */
276   int flags;
277 };
278
279 /* Maximum length of pbi->mem_set_list before we start dropping
280    new elements on the floor.  */
281 #define MAX_MEM_SET_LIST_LEN    100
282
283 /* Have print_rtl_and_abort give the same information that fancy_abort
284    does.  */
285 #define print_rtl_and_abort() \
286   print_rtl_and_abort_fcn (__FILE__, __LINE__, __FUNCTION__)
287
288 /* Forward declarations */
289 static int verify_wide_reg_1            PARAMS ((rtx *, void *));
290 static void verify_wide_reg             PARAMS ((int, rtx, rtx));
291 static void verify_local_live_at_start  PARAMS ((regset, basic_block));
292 static void notice_stack_pointer_modification_1 PARAMS ((rtx, rtx, void *));
293 static void notice_stack_pointer_modification PARAMS ((rtx));
294 static void mark_reg                    PARAMS ((rtx, void *));
295 static void mark_regs_live_at_end       PARAMS ((regset));
296 static int set_phi_alternative_reg      PARAMS ((rtx, int, int, void *));
297 static void calculate_global_regs_live  PARAMS ((sbitmap, sbitmap, int));
298 static void propagate_block_delete_insn PARAMS ((basic_block, rtx));
299 static rtx propagate_block_delete_libcall PARAMS ((basic_block, rtx, rtx));
300 static int insn_dead_p                  PARAMS ((struct propagate_block_info *,
301                                                  rtx, int, rtx));
302 static int libcall_dead_p               PARAMS ((struct propagate_block_info *,
303                                                  rtx, rtx));
304 static void mark_set_regs               PARAMS ((struct propagate_block_info *,
305                                                  rtx, rtx));
306 static void mark_set_1                  PARAMS ((struct propagate_block_info *,
307                                                  enum rtx_code, rtx, rtx,
308                                                  rtx, int));
309 #ifdef HAVE_conditional_execution
310 static int mark_regno_cond_dead         PARAMS ((struct propagate_block_info *,
311                                                  int, rtx));
312 static void free_reg_cond_life_info     PARAMS ((splay_tree_value));
313 static int flush_reg_cond_reg_1         PARAMS ((splay_tree_node, void *));
314 static void flush_reg_cond_reg          PARAMS ((struct propagate_block_info *,
315                                                  int));
316 static rtx elim_reg_cond                PARAMS ((rtx, unsigned int));
317 static rtx ior_reg_cond                 PARAMS ((rtx, rtx, int));
318 static rtx not_reg_cond                 PARAMS ((rtx));
319 static rtx and_reg_cond                 PARAMS ((rtx, rtx, int));
320 #endif
321 #ifdef AUTO_INC_DEC
322 static void attempt_auto_inc            PARAMS ((struct propagate_block_info *,
323                                                  rtx, rtx, rtx, rtx, rtx));
324 static void find_auto_inc               PARAMS ((struct propagate_block_info *,
325                                                  rtx, rtx));
326 static int try_pre_increment_1          PARAMS ((struct propagate_block_info *,
327                                                  rtx));
328 static int try_pre_increment            PARAMS ((rtx, rtx, HOST_WIDE_INT));
329 #endif
330 static void mark_used_reg               PARAMS ((struct propagate_block_info *,
331                                                  rtx, rtx, rtx));
332 static void mark_used_regs              PARAMS ((struct propagate_block_info *,
333                                                  rtx, rtx, rtx));
334 void dump_flow_info                     PARAMS ((FILE *));
335 void debug_flow_info                    PARAMS ((void));
336 static void print_rtl_and_abort_fcn     PARAMS ((const char *, int,
337                                                  const char *))
338                                         ATTRIBUTE_NORETURN;
339
340 static void add_to_mem_set_list         PARAMS ((struct propagate_block_info *,
341                                                  rtx));
342 static void invalidate_mems_from_autoinc PARAMS ((struct propagate_block_info *,
343                                                   rtx));
344 static void invalidate_mems_from_set    PARAMS ((struct propagate_block_info *,
345                                                  rtx));
346 static void delete_dead_jumptables      PARAMS ((void));
347 \f
348
349 void
350 check_function_return_warnings ()
351 {
352   if (warn_missing_noreturn
353       && !TREE_THIS_VOLATILE (cfun->decl)
354       && EXIT_BLOCK_PTR->pred == NULL
355       && (lang_missing_noreturn_ok_p
356           && !lang_missing_noreturn_ok_p (cfun->decl)))
357     warning ("function might be possible candidate for attribute `noreturn'");
358
359   /* If we have a path to EXIT, then we do return.  */
360   if (TREE_THIS_VOLATILE (cfun->decl)
361       && EXIT_BLOCK_PTR->pred != NULL)
362     warning ("`noreturn' function does return");
363
364   /* If the clobber_return_insn appears in some basic block, then we
365      do reach the end without returning a value.  */
366   else if (warn_return_type
367            && cfun->x_clobber_return_insn != NULL
368            && EXIT_BLOCK_PTR->pred != NULL)
369     {
370       int max_uid = get_max_uid ();
371
372       /* If clobber_return_insn was excised by jump1, then renumber_insns
373          can make max_uid smaller than the number still recorded in our rtx.
374          That's fine, since this is a quick way of verifying that the insn
375          is no longer in the chain.  */
376       if (INSN_UID (cfun->x_clobber_return_insn) < max_uid)
377         {
378           /* Recompute insn->block mapping, since the initial mapping is
379              set before we delete unreachable blocks.  */
380           compute_bb_for_insn (max_uid);
381
382           if (BLOCK_FOR_INSN (cfun->x_clobber_return_insn) != NULL)
383             warning ("control reaches end of non-void function");
384         }
385     }
386 }
387 \f
388 /* Return the INSN immediately following the NOTE_INSN_BASIC_BLOCK
389    note associated with the BLOCK.  */
390
391 rtx
392 first_insn_after_basic_block_note (block)
393      basic_block block;
394 {
395   rtx insn;
396
397   /* Get the first instruction in the block.  */
398   insn = block->head;
399
400   if (insn == NULL_RTX)
401     return NULL_RTX;
402   if (GET_CODE (insn) == CODE_LABEL)
403     insn = NEXT_INSN (insn);
404   if (!NOTE_INSN_BASIC_BLOCK_P (insn))
405     abort ();
406
407   return NEXT_INSN (insn);
408 }
409 \f
410 /* Perform data flow analysis.
411    F is the first insn of the function; FLAGS is a set of PROP_* flags
412    to be used in accumulating flow info.  */
413
414 void
415 life_analysis (f, file, flags)
416      rtx f;
417      FILE *file;
418      int flags;
419 {
420 #ifdef ELIMINABLE_REGS
421   register int i;
422   static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
423 #endif
424
425   /* Record which registers will be eliminated.  We use this in
426      mark_used_regs.  */
427
428   CLEAR_HARD_REG_SET (elim_reg_set);
429
430 #ifdef ELIMINABLE_REGS
431   for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
432     SET_HARD_REG_BIT (elim_reg_set, eliminables[i].from);
433 #else
434   SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
435 #endif
436
437   if (! optimize)
438     flags &= ~(PROP_LOG_LINKS | PROP_AUTOINC | PROP_ALLOW_CFG_CHANGES);
439
440   /* The post-reload life analysis have (on a global basis) the same
441      registers live as was computed by reload itself.  elimination
442      Otherwise offsets and such may be incorrect.
443
444      Reload will make some registers as live even though they do not
445      appear in the rtl.
446
447      We don't want to create new auto-incs after reload, since they
448      are unlikely to be useful and can cause problems with shared
449      stack slots.  */
450   if (reload_completed)
451     flags &= ~(PROP_REG_INFO | PROP_AUTOINC);
452
453   /* We want alias analysis information for local dead store elimination.  */
454   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
455     init_alias_analysis ();
456
457   /* Always remove no-op moves.  Do this before other processing so
458      that we don't have to keep re-scanning them.  */
459   delete_noop_moves (f);
460
461   /* Some targets can emit simpler epilogues if they know that sp was
462      not ever modified during the function.  After reload, of course,
463      we've already emitted the epilogue so there's no sense searching.  */
464   if (! reload_completed)
465     notice_stack_pointer_modification (f);
466
467   /* Allocate and zero out data structures that will record the
468      data from lifetime analysis.  */
469   allocate_reg_life_data ();
470   allocate_bb_life_data ();
471
472   /* Find the set of registers live on function exit.  */
473   mark_regs_live_at_end (EXIT_BLOCK_PTR->global_live_at_start);
474
475   /* "Update" life info from zero.  It'd be nice to begin the
476      relaxation with just the exit and noreturn blocks, but that set
477      is not immediately handy.  */
478
479   if (flags & PROP_REG_INFO)
480     memset (regs_ever_live, 0, sizeof (regs_ever_live));
481   update_life_info (NULL, UPDATE_LIFE_GLOBAL, flags);
482
483   /* Clean up.  */
484   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
485     end_alias_analysis ();
486
487   if (file)
488     dump_flow_info (file);
489
490   free_basic_block_vars (1);
491
492 #ifdef ENABLE_CHECKING
493   {
494     rtx insn;
495
496     /* Search for any REG_LABEL notes which reference deleted labels.  */
497     for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
498       {
499         rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX);
500
501         if (inote && GET_CODE (inote) == NOTE_INSN_DELETED_LABEL)
502           abort ();
503       }
504   }
505 #endif
506   /* Removing dead insns should've made jumptables really dead.  */
507   delete_dead_jumptables ();
508 }
509
510 /* A subroutine of verify_wide_reg, called through for_each_rtx.
511    Search for REGNO.  If found, abort if it is not wider than word_mode.  */
512
513 static int
514 verify_wide_reg_1 (px, pregno)
515      rtx *px;
516      void *pregno;
517 {
518   rtx x = *px;
519   unsigned int regno = *(int *) pregno;
520
521   if (GET_CODE (x) == REG && REGNO (x) == regno)
522     {
523       if (GET_MODE_BITSIZE (GET_MODE (x)) <= BITS_PER_WORD)
524         abort ();
525       return 1;
526     }
527   return 0;
528 }
529
530 /* A subroutine of verify_local_live_at_start.  Search through insns
531    between HEAD and END looking for register REGNO.  */
532
533 static void
534 verify_wide_reg (regno, head, end)
535      int regno;
536      rtx head, end;
537 {
538   while (1)
539     {
540       if (INSN_P (head)
541           && for_each_rtx (&PATTERN (head), verify_wide_reg_1, &regno))
542         return;
543       if (head == end)
544         break;
545       head = NEXT_INSN (head);
546     }
547
548   /* We didn't find the register at all.  Something's way screwy.  */
549   if (rtl_dump_file)
550     fprintf (rtl_dump_file, "Aborting in verify_wide_reg; reg %d\n", regno);
551   print_rtl_and_abort ();
552 }
553
554 /* A subroutine of update_life_info.  Verify that there are no untoward
555    changes in live_at_start during a local update.  */
556
557 static void
558 verify_local_live_at_start (new_live_at_start, bb)
559      regset new_live_at_start;
560      basic_block bb;
561 {
562   if (reload_completed)
563     {
564       /* After reload, there are no pseudos, nor subregs of multi-word
565          registers.  The regsets should exactly match.  */
566       if (! REG_SET_EQUAL_P (new_live_at_start, bb->global_live_at_start))
567         {
568           if (rtl_dump_file)
569             {
570               fprintf (rtl_dump_file,
571                        "live_at_start mismatch in bb %d, aborting\n",
572                        bb->index);
573               debug_bitmap_file (rtl_dump_file, bb->global_live_at_start);
574               debug_bitmap_file (rtl_dump_file, new_live_at_start);
575             }
576           print_rtl_and_abort ();
577         }
578     }
579   else
580     {
581       int i;
582
583       /* Find the set of changed registers.  */
584       XOR_REG_SET (new_live_at_start, bb->global_live_at_start);
585
586       EXECUTE_IF_SET_IN_REG_SET (new_live_at_start, 0, i,
587         {
588           /* No registers should die.  */
589           if (REGNO_REG_SET_P (bb->global_live_at_start, i))
590             {
591               if (rtl_dump_file)
592                 fprintf (rtl_dump_file,
593                          "Register %d died unexpectedly in block %d\n", i,
594                          bb->index);
595               print_rtl_and_abort ();
596             }
597
598           /* Verify that the now-live register is wider than word_mode.  */
599           verify_wide_reg (i, bb->head, bb->end);
600         });
601     }
602 }
603
604 /* Updates life information starting with the basic blocks set in BLOCKS.
605    If BLOCKS is null, consider it to be the universal set.
606
607    If EXTENT is UPDATE_LIFE_LOCAL, such as after splitting or peepholeing,
608    we are only expecting local modifications to basic blocks.  If we find
609    extra registers live at the beginning of a block, then we either killed
610    useful data, or we have a broken split that wants data not provided.
611    If we find registers removed from live_at_start, that means we have
612    a broken peephole that is killing a register it shouldn't.
613
614    ??? This is not true in one situation -- when a pre-reload splitter
615    generates subregs of a multi-word pseudo, current life analysis will
616    lose the kill.  So we _can_ have a pseudo go live.  How irritating.
617
618    Including PROP_REG_INFO does not properly refresh regs_ever_live
619    unless the caller resets it to zero.  */
620
621 void
622 update_life_info (blocks, extent, prop_flags)
623      sbitmap blocks;
624      enum update_life_extent extent;
625      int prop_flags;
626 {
627   regset tmp;
628   regset_head tmp_head;
629   int i;
630
631   tmp = INITIALIZE_REG_SET (tmp_head);
632
633   /* Changes to the CFG are only allowed when
634      doing a global update for the entire CFG.  */
635   if ((prop_flags & PROP_ALLOW_CFG_CHANGES)
636       && (extent == UPDATE_LIFE_LOCAL || blocks))
637     abort ();
638
639   /* For a global update, we go through the relaxation process again.  */
640   if (extent != UPDATE_LIFE_LOCAL)
641     {
642       for ( ; ; )
643         {
644           int changed = 0;
645
646           calculate_global_regs_live (blocks, blocks,
647                                 prop_flags & (PROP_SCAN_DEAD_CODE
648                                               | PROP_ALLOW_CFG_CHANGES));
649
650           if ((prop_flags & (PROP_KILL_DEAD_CODE | PROP_ALLOW_CFG_CHANGES))
651               != (PROP_KILL_DEAD_CODE | PROP_ALLOW_CFG_CHANGES))
652             break;
653
654           /* Removing dead code may allow the CFG to be simplified which
655              in turn may allow for further dead code detection / removal.  */
656           for (i = n_basic_blocks - 1; i >= 0; --i)
657             {
658               basic_block bb = BASIC_BLOCK (i);
659
660               COPY_REG_SET (tmp, bb->global_live_at_end);
661               changed |= propagate_block (bb, tmp, NULL, NULL,
662                                 prop_flags & (PROP_SCAN_DEAD_CODE
663                                               | PROP_KILL_DEAD_CODE));
664             }
665
666           if (! changed || ! cleanup_cfg (CLEANUP_EXPENSIVE))
667             break;
668         }
669
670       /* If asked, remove notes from the blocks we'll update.  */
671       if (extent == UPDATE_LIFE_GLOBAL_RM_NOTES)
672         count_or_remove_death_notes (blocks, 1);
673     }
674
675   if (blocks)
676     {
677       EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i,
678         {
679           basic_block bb = BASIC_BLOCK (i);
680
681           COPY_REG_SET (tmp, bb->global_live_at_end);
682           propagate_block (bb, tmp, NULL, NULL, prop_flags);
683
684           if (extent == UPDATE_LIFE_LOCAL)
685             verify_local_live_at_start (tmp, bb);
686         });
687     }
688   else
689     {
690       for (i = n_basic_blocks - 1; i >= 0; --i)
691         {
692           basic_block bb = BASIC_BLOCK (i);
693
694           COPY_REG_SET (tmp, bb->global_live_at_end);
695           propagate_block (bb, tmp, NULL, NULL, prop_flags);
696
697           if (extent == UPDATE_LIFE_LOCAL)
698             verify_local_live_at_start (tmp, bb);
699         }
700     }
701
702   FREE_REG_SET (tmp);
703
704   if (prop_flags & PROP_REG_INFO)
705     {
706       /* The only pseudos that are live at the beginning of the function
707          are those that were not set anywhere in the function.  local-alloc
708          doesn't know how to handle these correctly, so mark them as not
709          local to any one basic block.  */
710       EXECUTE_IF_SET_IN_REG_SET (ENTRY_BLOCK_PTR->global_live_at_end,
711                                  FIRST_PSEUDO_REGISTER, i,
712                                  { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
713
714       /* We have a problem with any pseudoreg that lives across the setjmp.
715          ANSI says that if a user variable does not change in value between
716          the setjmp and the longjmp, then the longjmp preserves it.  This
717          includes longjmp from a place where the pseudo appears dead.
718          (In principle, the value still exists if it is in scope.)
719          If the pseudo goes in a hard reg, some other value may occupy
720          that hard reg where this pseudo is dead, thus clobbering the pseudo.
721          Conclusion: such a pseudo must not go in a hard reg.  */
722       EXECUTE_IF_SET_IN_REG_SET (regs_live_at_setjmp,
723                                  FIRST_PSEUDO_REGISTER, i,
724                                  {
725                                    if (regno_reg_rtx[i] != 0)
726                                      {
727                                        REG_LIVE_LENGTH (i) = -1;
728                                        REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
729                                      }
730                                  });
731     }
732 }
733
734 /* Free the variables allocated by find_basic_blocks.
735
736    KEEP_HEAD_END_P is non-zero if basic_block_info is not to be freed.  */
737
738 void
739 free_basic_block_vars (keep_head_end_p)
740      int keep_head_end_p;
741 {
742   if (basic_block_for_insn)
743     {
744       VARRAY_FREE (basic_block_for_insn);
745       basic_block_for_insn = NULL;
746     }
747
748   if (! keep_head_end_p)
749     {
750       if (basic_block_info)
751         {
752           clear_edges ();
753           VARRAY_FREE (basic_block_info);
754         }
755       n_basic_blocks = 0;
756
757       ENTRY_BLOCK_PTR->aux = NULL;
758       ENTRY_BLOCK_PTR->global_live_at_end = NULL;
759       EXIT_BLOCK_PTR->aux = NULL;
760       EXIT_BLOCK_PTR->global_live_at_start = NULL;
761     }
762 }
763
764 /* Delete any insns that copy a register to itself.  */
765
766 void
767 delete_noop_moves (f)
768      rtx f ATTRIBUTE_UNUSED;
769 {
770   int i;
771   rtx insn, next;
772   basic_block bb;
773
774   for (i = 0; i < n_basic_blocks; i++)
775     {
776       bb = BASIC_BLOCK (i);
777       for (insn = bb->head; insn != NEXT_INSN (bb->end); insn = next)
778         {
779           next = NEXT_INSN (insn);
780           if (INSN_P (insn) && noop_move_p (insn))
781             {
782               /* Do not call flow_delete_insn here to not confuse backward
783                  pointers of LIBCALL block.  */
784               PUT_CODE (insn, NOTE);
785               NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
786               NOTE_SOURCE_FILE (insn) = 0;
787               if (insn == bb->end)
788                 purge_dead_edges (bb);
789             }
790         }
791     }
792 }
793
794 /* Delete any jump tables never referenced.  We can't delete them at the
795    time of removing tablejump insn as they are referenced by the preceeding
796    insns computing the destination, so we delay deleting and garbagecollect
797    them once life information is computed.  */
798 static void
799 delete_dead_jumptables ()
800 {
801   rtx insn, next;
802   for (insn = get_insns (); insn; insn = next)
803     {
804       next = NEXT_INSN (insn);
805       if (GET_CODE (insn) == CODE_LABEL
806           && LABEL_NUSES (insn) == 0
807           && GET_CODE (next) == JUMP_INSN
808           && (GET_CODE (PATTERN (next)) == ADDR_VEC
809               || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
810         {
811           if (rtl_dump_file)
812             fprintf (rtl_dump_file, "Dead jumptable %i removed\n", INSN_UID (insn));
813           flow_delete_insn (NEXT_INSN (insn));
814           flow_delete_insn (insn);
815           next = NEXT_INSN (next);
816         }
817     }
818 }
819
820 /* Determine if the stack pointer is constant over the life of the function.
821    Only useful before prologues have been emitted.  */
822
823 static void
824 notice_stack_pointer_modification_1 (x, pat, data)
825      rtx x;
826      rtx pat ATTRIBUTE_UNUSED;
827      void *data ATTRIBUTE_UNUSED;
828 {
829   if (x == stack_pointer_rtx
830       /* The stack pointer is only modified indirectly as the result
831          of a push until later in flow.  See the comments in rtl.texi
832          regarding Embedded Side-Effects on Addresses.  */
833       || (GET_CODE (x) == MEM
834           && GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == 'a'
835           && XEXP (XEXP (x, 0), 0) == stack_pointer_rtx))
836     current_function_sp_is_unchanging = 0;
837 }
838
839 static void
840 notice_stack_pointer_modification (f)
841      rtx f;
842 {
843   rtx insn;
844
845   /* Assume that the stack pointer is unchanging if alloca hasn't
846      been used.  */
847   current_function_sp_is_unchanging = !current_function_calls_alloca;
848   if (! current_function_sp_is_unchanging)
849     return;
850
851   for (insn = f; insn; insn = NEXT_INSN (insn))
852     {
853       if (INSN_P (insn))
854         {
855           /* Check if insn modifies the stack pointer.  */
856           note_stores (PATTERN (insn), notice_stack_pointer_modification_1,
857                        NULL);
858           if (! current_function_sp_is_unchanging)
859             return;
860         }
861     }
862 }
863
864 /* Mark a register in SET.  Hard registers in large modes get all
865    of their component registers set as well.  */
866
867 static void
868 mark_reg (reg, xset)
869      rtx reg;
870      void *xset;
871 {
872   regset set = (regset) xset;
873   int regno = REGNO (reg);
874
875   if (GET_MODE (reg) == BLKmode)
876     abort ();
877
878   SET_REGNO_REG_SET (set, regno);
879   if (regno < FIRST_PSEUDO_REGISTER)
880     {
881       int n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
882       while (--n > 0)
883         SET_REGNO_REG_SET (set, regno + n);
884     }
885 }
886
887 /* Mark those regs which are needed at the end of the function as live
888    at the end of the last basic block.  */
889
890 static void
891 mark_regs_live_at_end (set)
892      regset set;
893 {
894   unsigned int i;
895
896   /* If exiting needs the right stack value, consider the stack pointer
897      live at the end of the function.  */
898   if ((HAVE_epilogue && reload_completed)
899       || ! EXIT_IGNORE_STACK
900       || (! FRAME_POINTER_REQUIRED
901           && ! current_function_calls_alloca
902           && flag_omit_frame_pointer)
903       || current_function_sp_is_unchanging)
904     {
905       SET_REGNO_REG_SET (set, STACK_POINTER_REGNUM);
906     }
907
908   /* Mark the frame pointer if needed at the end of the function.  If
909      we end up eliminating it, it will be removed from the live list
910      of each basic block by reload.  */
911
912   if (! reload_completed || frame_pointer_needed)
913     {
914       SET_REGNO_REG_SET (set, FRAME_POINTER_REGNUM);
915 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
916       /* If they are different, also mark the hard frame pointer as live.  */
917       if (! LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM))
918         SET_REGNO_REG_SET (set, HARD_FRAME_POINTER_REGNUM);
919 #endif
920     }
921
922 #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
923   /* Many architectures have a GP register even without flag_pic.
924      Assume the pic register is not in use, or will be handled by
925      other means, if it is not fixed.  */
926   if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
927       && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
928     SET_REGNO_REG_SET (set, PIC_OFFSET_TABLE_REGNUM);
929 #endif
930
931   /* Mark all global registers, and all registers used by the epilogue
932      as being live at the end of the function since they may be
933      referenced by our caller.  */
934   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
935     if (global_regs[i] || EPILOGUE_USES (i))
936       SET_REGNO_REG_SET (set, i);
937
938   if (HAVE_epilogue && reload_completed)
939     {
940       /* Mark all call-saved registers that we actually used.  */
941       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
942         if (regs_ever_live[i] && ! LOCAL_REGNO (i)
943             && ! TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
944           SET_REGNO_REG_SET (set, i);
945     }
946
947 #ifdef EH_RETURN_DATA_REGNO
948   /* Mark the registers that will contain data for the handler.  */
949   if (reload_completed && current_function_calls_eh_return)
950     for (i = 0; ; ++i)
951       {
952         unsigned regno = EH_RETURN_DATA_REGNO(i);
953         if (regno == INVALID_REGNUM)
954           break;
955         SET_REGNO_REG_SET (set, regno);
956       }
957 #endif
958 #ifdef EH_RETURN_STACKADJ_RTX
959   if ((! HAVE_epilogue || ! reload_completed)
960       && current_function_calls_eh_return)
961     {
962       rtx tmp = EH_RETURN_STACKADJ_RTX;
963       if (tmp && REG_P (tmp))
964         mark_reg (tmp, set);
965     }
966 #endif
967 #ifdef EH_RETURN_HANDLER_RTX
968   if ((! HAVE_epilogue || ! reload_completed)
969       && current_function_calls_eh_return)
970     {
971       rtx tmp = EH_RETURN_HANDLER_RTX;
972       if (tmp && REG_P (tmp))
973         mark_reg (tmp, set);
974     }
975 #endif
976
977   /* Mark function return value.  */
978   diddle_return_value (mark_reg, set);
979 }
980
981 /* Callback function for for_each_successor_phi.  DATA is a regset.
982    Sets the SRC_REGNO, the regno of the phi alternative for phi node
983    INSN, in the regset.  */
984
985 static int
986 set_phi_alternative_reg (insn, dest_regno, src_regno, data)
987      rtx insn ATTRIBUTE_UNUSED;
988      int dest_regno ATTRIBUTE_UNUSED;
989      int src_regno;
990      void *data;
991 {
992   regset live = (regset) data;
993   SET_REGNO_REG_SET (live, src_regno);
994   return 0;
995 }
996
997 /* Propagate global life info around the graph of basic blocks.  Begin
998    considering blocks with their corresponding bit set in BLOCKS_IN.
999    If BLOCKS_IN is null, consider it the universal set.
1000
1001    BLOCKS_OUT is set for every block that was changed.  */
1002
1003 static void
1004 calculate_global_regs_live (blocks_in, blocks_out, flags)
1005      sbitmap blocks_in, blocks_out;
1006      int flags;
1007 {
1008   basic_block *queue, *qhead, *qtail, *qend;
1009   regset tmp, new_live_at_end, call_used;
1010   regset_head tmp_head, call_used_head;
1011   regset_head new_live_at_end_head;
1012   int i;
1013
1014   tmp = INITIALIZE_REG_SET (tmp_head);
1015   new_live_at_end = INITIALIZE_REG_SET (new_live_at_end_head);
1016   call_used = INITIALIZE_REG_SET (call_used_head);
1017
1018   /* Inconveniently, this is only redily available in hard reg set form.  */
1019   for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
1020     if (call_used_regs[i])
1021       SET_REGNO_REG_SET (call_used, i);
1022
1023   /* Create a worklist.  Allocate an extra slot for ENTRY_BLOCK, and one
1024      because the `head == tail' style test for an empty queue doesn't
1025      work with a full queue.  */
1026   queue = (basic_block *) xmalloc ((n_basic_blocks + 2) * sizeof (*queue));
1027   qtail = queue;
1028   qhead = qend = queue + n_basic_blocks + 2;
1029
1030   /* Queue the blocks set in the initial mask.  Do this in reverse block
1031      number order so that we are more likely for the first round to do
1032      useful work.  We use AUX non-null to flag that the block is queued.  */
1033   if (blocks_in)
1034     {
1035       /* Clear out the garbage that might be hanging out in bb->aux.  */
1036       for (i = n_basic_blocks - 1; i >= 0; --i)
1037         BASIC_BLOCK (i)->aux = NULL;
1038
1039       EXECUTE_IF_SET_IN_SBITMAP (blocks_in, 0, i,
1040         {
1041           basic_block bb = BASIC_BLOCK (i);
1042           *--qhead = bb;
1043           bb->aux = bb;
1044         });
1045     }
1046   else
1047     {
1048       for (i = 0; i < n_basic_blocks; ++i)
1049         {
1050           basic_block bb = BASIC_BLOCK (i);
1051           *--qhead = bb;
1052           bb->aux = bb;
1053         }
1054     }
1055
1056   if (blocks_out)
1057     sbitmap_zero (blocks_out);
1058
1059   /* We work through the queue until there are no more blocks.  What
1060      is live at the end of this block is precisely the union of what
1061      is live at the beginning of all its successors.  So, we set its
1062      GLOBAL_LIVE_AT_END field based on the GLOBAL_LIVE_AT_START field
1063      for its successors.  Then, we compute GLOBAL_LIVE_AT_START for
1064      this block by walking through the instructions in this block in
1065      reverse order and updating as we go.  If that changed
1066      GLOBAL_LIVE_AT_START, we add the predecessors of the block to the
1067      queue; they will now need to recalculate GLOBAL_LIVE_AT_END.
1068
1069      We are guaranteed to terminate, because GLOBAL_LIVE_AT_START
1070      never shrinks.  If a register appears in GLOBAL_LIVE_AT_START, it
1071      must either be live at the end of the block, or used within the
1072      block.  In the latter case, it will certainly never disappear
1073      from GLOBAL_LIVE_AT_START.  In the former case, the register
1074      could go away only if it disappeared from GLOBAL_LIVE_AT_START
1075      for one of the successor blocks.  By induction, that cannot
1076      occur.  */
1077   while (qhead != qtail)
1078     {
1079       int rescan, changed;
1080       basic_block bb;
1081       edge e;
1082
1083       bb = *qhead++;
1084       if (qhead == qend)
1085         qhead = queue;
1086       bb->aux = NULL;
1087
1088       /* Begin by propagating live_at_start from the successor blocks.  */
1089       CLEAR_REG_SET (new_live_at_end);
1090       for (e = bb->succ; e; e = e->succ_next)
1091         {
1092           basic_block sb = e->dest;
1093
1094           /* Call-clobbered registers die across exception and call edges.  */
1095           /* ??? Abnormal call edges ignored for the moment, as this gets
1096              confused by sibling call edges, which crashes reg-stack.  */
1097           if (e->flags & EDGE_EH)
1098             {
1099               bitmap_operation (tmp, sb->global_live_at_start,
1100                                 call_used, BITMAP_AND_COMPL);
1101               IOR_REG_SET (new_live_at_end, tmp);
1102             }
1103           else
1104             IOR_REG_SET (new_live_at_end, sb->global_live_at_start);
1105         }
1106
1107       /* The all-important stack pointer must always be live.  */
1108       SET_REGNO_REG_SET (new_live_at_end, STACK_POINTER_REGNUM);
1109
1110       /* Before reload, there are a few registers that must be forced
1111          live everywhere -- which might not already be the case for
1112          blocks within infinite loops.  */
1113       if (! reload_completed)
1114         {
1115           /* Any reference to any pseudo before reload is a potential
1116              reference of the frame pointer.  */
1117           SET_REGNO_REG_SET (new_live_at_end, FRAME_POINTER_REGNUM);
1118
1119 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1120           /* Pseudos with argument area equivalences may require
1121              reloading via the argument pointer.  */
1122           if (fixed_regs[ARG_POINTER_REGNUM])
1123             SET_REGNO_REG_SET (new_live_at_end, ARG_POINTER_REGNUM);
1124 #endif
1125
1126           /* Any constant, or pseudo with constant equivalences, may
1127              require reloading from memory using the pic register.  */
1128           if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
1129               && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
1130             SET_REGNO_REG_SET (new_live_at_end, PIC_OFFSET_TABLE_REGNUM);
1131         }
1132
1133       /* Regs used in phi nodes are not included in
1134          global_live_at_start, since they are live only along a
1135          particular edge.  Set those regs that are live because of a
1136          phi node alternative corresponding to this particular block.  */
1137       if (in_ssa_form)
1138         for_each_successor_phi (bb, &set_phi_alternative_reg,
1139                                 new_live_at_end);
1140
1141       if (bb == ENTRY_BLOCK_PTR)
1142         {
1143           COPY_REG_SET (bb->global_live_at_end, new_live_at_end);
1144           continue;
1145         }
1146
1147       /* On our first pass through this block, we'll go ahead and continue.
1148          Recognize first pass by local_set NULL.  On subsequent passes, we
1149          get to skip out early if live_at_end wouldn't have changed.  */
1150
1151       if (bb->local_set == NULL)
1152         {
1153           bb->local_set = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1154           bb->cond_local_set = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1155           rescan = 1;
1156         }
1157       else
1158         {
1159           /* If any bits were removed from live_at_end, we'll have to
1160              rescan the block.  This wouldn't be necessary if we had
1161              precalculated local_live, however with PROP_SCAN_DEAD_CODE
1162              local_live is really dependent on live_at_end.  */
1163           CLEAR_REG_SET (tmp);
1164           rescan = bitmap_operation (tmp, bb->global_live_at_end,
1165                                      new_live_at_end, BITMAP_AND_COMPL);
1166
1167           if (! rescan)
1168             {
1169               /* If any of the registers in the new live_at_end set are
1170                  conditionally set in this basic block, we must rescan.
1171                  This is because conditional lifetimes at the end of the
1172                  block do not just take the live_at_end set into account,
1173                  but also the liveness at the start of each successor
1174                  block.  We can miss changes in those sets if we only
1175                  compare the new live_at_end against the previous one.  */
1176               CLEAR_REG_SET (tmp);
1177               rescan = bitmap_operation (tmp, new_live_at_end,
1178                                          bb->cond_local_set, BITMAP_AND);
1179             }
1180
1181           if (! rescan)
1182             {
1183               /* Find the set of changed bits.  Take this opportunity
1184                  to notice that this set is empty and early out.  */
1185               CLEAR_REG_SET (tmp);
1186               changed = bitmap_operation (tmp, bb->global_live_at_end,
1187                                           new_live_at_end, BITMAP_XOR);
1188               if (! changed)
1189                 continue;
1190
1191               /* If any of the changed bits overlap with local_set,
1192                  we'll have to rescan the block.  Detect overlap by
1193                  the AND with ~local_set turning off bits.  */
1194               rescan = bitmap_operation (tmp, tmp, bb->local_set,
1195                                          BITMAP_AND_COMPL);
1196             }
1197         }
1198
1199       /* Let our caller know that BB changed enough to require its
1200          death notes updated.  */
1201       if (blocks_out)
1202         SET_BIT (blocks_out, bb->index);
1203
1204       if (! rescan)
1205         {
1206           /* Add to live_at_start the set of all registers in
1207              new_live_at_end that aren't in the old live_at_end.  */
1208
1209           bitmap_operation (tmp, new_live_at_end, bb->global_live_at_end,
1210                             BITMAP_AND_COMPL);
1211           COPY_REG_SET (bb->global_live_at_end, new_live_at_end);
1212
1213           changed = bitmap_operation (bb->global_live_at_start,
1214                                       bb->global_live_at_start,
1215                                       tmp, BITMAP_IOR);
1216           if (! changed)
1217             continue;
1218         }
1219       else
1220         {
1221           COPY_REG_SET (bb->global_live_at_end, new_live_at_end);
1222
1223           /* Rescan the block insn by insn to turn (a copy of) live_at_end
1224              into live_at_start.  */
1225           propagate_block (bb, new_live_at_end, bb->local_set,
1226                            bb->cond_local_set, flags);
1227
1228           /* If live_at start didn't change, no need to go farther.  */
1229           if (REG_SET_EQUAL_P (bb->global_live_at_start, new_live_at_end))
1230             continue;
1231
1232           COPY_REG_SET (bb->global_live_at_start, new_live_at_end);
1233         }
1234
1235       /* Queue all predecessors of BB so that we may re-examine
1236          their live_at_end.  */
1237       for (e = bb->pred; e; e = e->pred_next)
1238         {
1239           basic_block pb = e->src;
1240           if (pb->aux == NULL)
1241             {
1242               *qtail++ = pb;
1243               if (qtail == qend)
1244                 qtail = queue;
1245               pb->aux = pb;
1246             }
1247         }
1248     }
1249
1250   FREE_REG_SET (tmp);
1251   FREE_REG_SET (new_live_at_end);
1252   FREE_REG_SET (call_used);
1253
1254   if (blocks_out)
1255     {
1256       EXECUTE_IF_SET_IN_SBITMAP (blocks_out, 0, i,
1257         {
1258           basic_block bb = BASIC_BLOCK (i);
1259           FREE_REG_SET (bb->local_set);
1260           FREE_REG_SET (bb->cond_local_set);
1261         });
1262     }
1263   else
1264     {
1265       for (i = n_basic_blocks - 1; i >= 0; --i)
1266         {
1267           basic_block bb = BASIC_BLOCK (i);
1268           FREE_REG_SET (bb->local_set);
1269           FREE_REG_SET (bb->cond_local_set);
1270         }
1271     }
1272
1273   free (queue);
1274 }
1275 \f
1276 /* Subroutines of life analysis.  */
1277
1278 /* Allocate the permanent data structures that represent the results
1279    of life analysis.  Not static since used also for stupid life analysis.  */
1280
1281 void
1282 allocate_bb_life_data ()
1283 {
1284   register int i;
1285
1286   for (i = 0; i < n_basic_blocks; i++)
1287     {
1288       basic_block bb = BASIC_BLOCK (i);
1289
1290       bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1291       bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1292     }
1293
1294   ENTRY_BLOCK_PTR->global_live_at_end
1295     = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1296   EXIT_BLOCK_PTR->global_live_at_start
1297     = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1298
1299   regs_live_at_setjmp = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1300 }
1301
1302 void
1303 allocate_reg_life_data ()
1304 {
1305   int i;
1306
1307   max_regno = max_reg_num ();
1308
1309   /* Recalculate the register space, in case it has grown.  Old style
1310      vector oriented regsets would set regset_{size,bytes} here also.  */
1311   allocate_reg_info (max_regno, FALSE, FALSE);
1312
1313   /* Reset all the data we'll collect in propagate_block and its
1314      subroutines.  */
1315   for (i = 0; i < max_regno; i++)
1316     {
1317       REG_N_SETS (i) = 0;
1318       REG_N_REFS (i) = 0;
1319       REG_N_DEATHS (i) = 0;
1320       REG_N_CALLS_CROSSED (i) = 0;
1321       REG_LIVE_LENGTH (i) = 0;
1322       REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
1323     }
1324 }
1325
1326 /* Delete dead instructions for propagate_block.  */
1327
1328 static void
1329 propagate_block_delete_insn (bb, insn)
1330      basic_block bb;
1331      rtx insn;
1332 {
1333   rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX);
1334
1335   /* If the insn referred to a label, and that label was attached to
1336      an ADDR_VEC, it's safe to delete the ADDR_VEC.  In fact, it's
1337      pretty much mandatory to delete it, because the ADDR_VEC may be
1338      referencing labels that no longer exist.
1339
1340      INSN may reference a deleted label, particularly when a jump
1341      table has been optimized into a direct jump.  There's no
1342      real good way to fix up the reference to the deleted label
1343      when the label is deleted, so we just allow it here.
1344
1345      After dead code elimination is complete, we do search for
1346      any REG_LABEL notes which reference deleted labels as a
1347      sanity check.  */
1348
1349   if (inote && GET_CODE (inote) == CODE_LABEL)
1350     {
1351       rtx label = XEXP (inote, 0);
1352       rtx next;
1353
1354       /* The label may be forced if it has been put in the constant
1355          pool.  If that is the only use we must discard the table
1356          jump following it, but not the label itself.  */
1357       if (LABEL_NUSES (label) == 1 + LABEL_PRESERVE_P (label)
1358           && (next = next_nonnote_insn (label)) != NULL
1359           && GET_CODE (next) == JUMP_INSN
1360           && (GET_CODE (PATTERN (next)) == ADDR_VEC
1361               || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
1362         {
1363           rtx pat = PATTERN (next);
1364           int diff_vec_p = GET_CODE (pat) == ADDR_DIFF_VEC;
1365           int len = XVECLEN (pat, diff_vec_p);
1366           int i;
1367
1368           for (i = 0; i < len; i++)
1369             LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
1370
1371           flow_delete_insn (next);
1372         }
1373     }
1374
1375   if (bb->end == insn)
1376     {
1377       bb->end = PREV_INSN (insn);
1378       purge_dead_edges (bb);
1379     }
1380   flow_delete_insn (insn);
1381 }
1382
1383 /* Delete dead libcalls for propagate_block.  Return the insn
1384    before the libcall.  */
1385
1386 static rtx
1387 propagate_block_delete_libcall (bb, insn, note)
1388      basic_block bb;
1389      rtx insn, note;
1390 {
1391   rtx first = XEXP (note, 0);
1392   rtx before = PREV_INSN (first);
1393
1394   if (insn == bb->end)
1395     bb->end = before;
1396
1397   flow_delete_insn_chain (first, insn);
1398   return before;
1399 }
1400
1401 /* Update the life-status of regs for one insn.  Return the previous insn.  */
1402
1403 rtx
1404 propagate_one_insn (pbi, insn)
1405      struct propagate_block_info *pbi;
1406      rtx insn;
1407 {
1408   rtx prev = PREV_INSN (insn);
1409   int flags = pbi->flags;
1410   int insn_is_dead = 0;
1411   int libcall_is_dead = 0;
1412   rtx note;
1413   int i;
1414
1415   if (! INSN_P (insn))
1416     return prev;
1417
1418   note = find_reg_note (insn, REG_RETVAL, NULL_RTX);
1419   if (flags & PROP_SCAN_DEAD_CODE)
1420     {
1421       insn_is_dead = insn_dead_p (pbi, PATTERN (insn), 0, REG_NOTES (insn));
1422       libcall_is_dead = (insn_is_dead && note != 0
1423                          && libcall_dead_p (pbi, note, insn));
1424     }
1425
1426   /* If an instruction consists of just dead store(s) on final pass,
1427      delete it.  */
1428   if ((flags & PROP_KILL_DEAD_CODE) && insn_is_dead)
1429     {
1430       /* If we're trying to delete a prologue or epilogue instruction
1431          that isn't flagged as possibly being dead, something is wrong.
1432          But if we are keeping the stack pointer depressed, we might well
1433          be deleting insns that are used to compute the amount to update
1434          it by, so they are fine.  */
1435       if (reload_completed
1436           && !(TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
1437                 && (TYPE_RETURNS_STACK_DEPRESSED
1438                     (TREE_TYPE (current_function_decl))))
1439           && (((HAVE_epilogue || HAVE_prologue)
1440                && prologue_epilogue_contains (insn))
1441               || (HAVE_sibcall_epilogue
1442                   && sibcall_epilogue_contains (insn)))
1443           && find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0)
1444         abort ();
1445
1446       /* Record sets.  Do this even for dead instructions, since they
1447          would have killed the values if they hadn't been deleted.  */
1448       mark_set_regs (pbi, PATTERN (insn), insn);
1449
1450       /* CC0 is now known to be dead.  Either this insn used it,
1451          in which case it doesn't anymore, or clobbered it,
1452          so the next insn can't use it.  */
1453       pbi->cc0_live = 0;
1454
1455       if (libcall_is_dead)
1456         prev = propagate_block_delete_libcall (pbi->bb, insn, note);
1457       else
1458         propagate_block_delete_insn (pbi->bb, insn);
1459
1460       return prev;
1461     }
1462
1463   /* See if this is an increment or decrement that can be merged into
1464      a following memory address.  */
1465 #ifdef AUTO_INC_DEC
1466   {
1467     register rtx x = single_set (insn);
1468
1469     /* Does this instruction increment or decrement a register?  */
1470     if ((flags & PROP_AUTOINC)
1471         && x != 0
1472         && GET_CODE (SET_DEST (x)) == REG
1473         && (GET_CODE (SET_SRC (x)) == PLUS
1474             || GET_CODE (SET_SRC (x)) == MINUS)
1475         && XEXP (SET_SRC (x), 0) == SET_DEST (x)
1476         && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1477         /* Ok, look for a following memory ref we can combine with.
1478            If one is found, change the memory ref to a PRE_INC
1479            or PRE_DEC, cancel this insn, and return 1.
1480            Return 0 if nothing has been done.  */
1481         && try_pre_increment_1 (pbi, insn))
1482       return prev;
1483   }
1484 #endif /* AUTO_INC_DEC */
1485
1486   CLEAR_REG_SET (pbi->new_set);
1487
1488   /* If this is not the final pass, and this insn is copying the value of
1489      a library call and it's dead, don't scan the insns that perform the
1490      library call, so that the call's arguments are not marked live.  */
1491   if (libcall_is_dead)
1492     {
1493       /* Record the death of the dest reg.  */
1494       mark_set_regs (pbi, PATTERN (insn), insn);
1495
1496       insn = XEXP (note, 0);
1497       return PREV_INSN (insn);
1498     }
1499   else if (GET_CODE (PATTERN (insn)) == SET
1500            && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
1501            && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
1502            && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
1503            && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
1504     /* We have an insn to pop a constant amount off the stack.
1505        (Such insns use PLUS regardless of the direction of the stack,
1506        and any insn to adjust the stack by a constant is always a pop.)
1507        These insns, if not dead stores, have no effect on life.  */
1508     ;
1509   else
1510     {
1511       /* Any regs live at the time of a call instruction must not go
1512          in a register clobbered by calls.  Find all regs now live and
1513          record this for them.  */
1514
1515       if (GET_CODE (insn) == CALL_INSN && (flags & PROP_REG_INFO))
1516         EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
1517                                    { REG_N_CALLS_CROSSED (i)++; });
1518
1519       /* Record sets.  Do this even for dead instructions, since they
1520          would have killed the values if they hadn't been deleted.  */
1521       mark_set_regs (pbi, PATTERN (insn), insn);
1522
1523       if (GET_CODE (insn) == CALL_INSN)
1524         {
1525           register int i;
1526           rtx note, cond;
1527
1528           cond = NULL_RTX;
1529           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
1530             cond = COND_EXEC_TEST (PATTERN (insn));
1531
1532           /* Non-constant calls clobber memory.  */
1533           if (! CONST_OR_PURE_CALL_P (insn))
1534             {
1535               free_EXPR_LIST_list (&pbi->mem_set_list);
1536               pbi->mem_set_list_len = 0;
1537             }
1538
1539           /* There may be extra registers to be clobbered.  */
1540           for (note = CALL_INSN_FUNCTION_USAGE (insn);
1541                note;
1542                note = XEXP (note, 1))
1543             if (GET_CODE (XEXP (note, 0)) == CLOBBER)
1544               mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0),
1545                           cond, insn, pbi->flags);
1546
1547           /* Calls change all call-used and global registers.  */
1548           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1549             if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
1550               {
1551                 /* We do not want REG_UNUSED notes for these registers.  */
1552                 mark_set_1 (pbi, CLOBBER, gen_rtx_REG (reg_raw_mode[i], i),
1553                             cond, insn,
1554                             pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO));
1555               }
1556         }
1557
1558       /* If an insn doesn't use CC0, it becomes dead since we assume
1559          that every insn clobbers it.  So show it dead here;
1560          mark_used_regs will set it live if it is referenced.  */
1561       pbi->cc0_live = 0;
1562
1563       /* Record uses.  */
1564       if (! insn_is_dead)
1565         mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn);
1566
1567       /* Sometimes we may have inserted something before INSN (such as a move)
1568          when we make an auto-inc.  So ensure we will scan those insns.  */
1569 #ifdef AUTO_INC_DEC
1570       prev = PREV_INSN (insn);
1571 #endif
1572
1573       if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
1574         {
1575           register int i;
1576           rtx note, cond;
1577
1578           cond = NULL_RTX;
1579           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
1580             cond = COND_EXEC_TEST (PATTERN (insn));
1581
1582           /* Calls use their arguments.  */
1583           for (note = CALL_INSN_FUNCTION_USAGE (insn);
1584                note;
1585                note = XEXP (note, 1))
1586             if (GET_CODE (XEXP (note, 0)) == USE)
1587               mark_used_regs (pbi, XEXP (XEXP (note, 0), 0),
1588                               cond, insn);
1589
1590           /* The stack ptr is used (honorarily) by a CALL insn.  */
1591           SET_REGNO_REG_SET (pbi->reg_live, STACK_POINTER_REGNUM);
1592
1593           /* Calls may also reference any of the global registers,
1594              so they are made live.  */
1595           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1596             if (global_regs[i])
1597               mark_used_reg (pbi, gen_rtx_REG (reg_raw_mode[i], i),
1598                              cond, insn);
1599         }
1600     }
1601
1602   /* On final pass, update counts of how many insns in which each reg
1603      is live.  */
1604   if (flags & PROP_REG_INFO)
1605     EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
1606                                { REG_LIVE_LENGTH (i)++; });
1607
1608   return prev;
1609 }
1610
1611 /* Initialize a propagate_block_info struct for public consumption.
1612    Note that the structure itself is opaque to this file, but that
1613    the user can use the regsets provided here.  */
1614
1615 struct propagate_block_info *
1616 init_propagate_block_info (bb, live, local_set, cond_local_set, flags)
1617      basic_block bb;
1618      regset live, local_set, cond_local_set;
1619      int flags;
1620 {
1621   struct propagate_block_info *pbi = xmalloc (sizeof (*pbi));
1622
1623   pbi->bb = bb;
1624   pbi->reg_live = live;
1625   pbi->mem_set_list = NULL_RTX;
1626   pbi->mem_set_list_len = 0;
1627   pbi->local_set = local_set;
1628   pbi->cond_local_set = cond_local_set;
1629   pbi->cc0_live = 0;
1630   pbi->flags = flags;
1631
1632   if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
1633     pbi->reg_next_use = (rtx *) xcalloc (max_reg_num (), sizeof (rtx));
1634   else
1635     pbi->reg_next_use = NULL;
1636
1637   pbi->new_set = BITMAP_XMALLOC ();
1638
1639 #ifdef HAVE_conditional_execution
1640   pbi->reg_cond_dead = splay_tree_new (splay_tree_compare_ints, NULL,
1641                                        free_reg_cond_life_info);
1642   pbi->reg_cond_reg = BITMAP_XMALLOC ();
1643
1644   /* If this block ends in a conditional branch, for each register live
1645      from one side of the branch and not the other, record the register
1646      as conditionally dead.  */
1647   if (GET_CODE (bb->end) == JUMP_INSN
1648       && any_condjump_p (bb->end))
1649     {
1650       regset_head diff_head;
1651       regset diff = INITIALIZE_REG_SET (diff_head);
1652       basic_block bb_true, bb_false;
1653       rtx cond_true, cond_false, set_src;
1654       int i;
1655
1656       /* Identify the successor blocks.  */
1657       bb_true = bb->succ->dest;
1658       if (bb->succ->succ_next != NULL)
1659         {
1660           bb_false = bb->succ->succ_next->dest;
1661
1662           if (bb->succ->flags & EDGE_FALLTHRU)
1663             {
1664               basic_block t = bb_false;
1665               bb_false = bb_true;
1666               bb_true = t;
1667             }
1668           else if (! (bb->succ->succ_next->flags & EDGE_FALLTHRU))
1669             abort ();
1670         }
1671       else
1672         {
1673           /* This can happen with a conditional jump to the next insn.  */
1674           if (JUMP_LABEL (bb->end) != bb_true->head)
1675             abort ();
1676
1677           /* Simplest way to do nothing.  */
1678           bb_false = bb_true;
1679         }
1680
1681       /* Extract the condition from the branch.  */
1682       set_src = SET_SRC (pc_set (bb->end));
1683       cond_true = XEXP (set_src, 0);
1684       cond_false = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
1685                                    GET_MODE (cond_true), XEXP (cond_true, 0),
1686                                    XEXP (cond_true, 1));
1687       if (GET_CODE (XEXP (set_src, 1)) == PC)
1688         {
1689           rtx t = cond_false;
1690           cond_false = cond_true;
1691           cond_true = t;
1692         }
1693
1694       /* Compute which register lead different lives in the successors.  */
1695       if (bitmap_operation (diff, bb_true->global_live_at_start,
1696                             bb_false->global_live_at_start, BITMAP_XOR))
1697         {
1698           rtx reg = XEXP (cond_true, 0);
1699
1700           if (GET_CODE (reg) == SUBREG)
1701             reg = SUBREG_REG (reg);
1702
1703           if (GET_CODE (reg) != REG)
1704             abort ();
1705
1706           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (reg));
1707
1708           /* For each such register, mark it conditionally dead.  */
1709           EXECUTE_IF_SET_IN_REG_SET
1710             (diff, 0, i,
1711              {
1712                struct reg_cond_life_info *rcli;
1713                rtx cond;
1714
1715                rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
1716
1717                if (REGNO_REG_SET_P (bb_true->global_live_at_start, i))
1718                  cond = cond_false;
1719                else
1720                  cond = cond_true;
1721                rcli->condition = cond;
1722                rcli->stores = const0_rtx;
1723                rcli->orig_condition = cond;
1724
1725                splay_tree_insert (pbi->reg_cond_dead, i,
1726                                   (splay_tree_value) rcli);
1727              });
1728         }
1729
1730       FREE_REG_SET (diff);
1731     }
1732 #endif
1733
1734   /* If this block has no successors, any stores to the frame that aren't
1735      used later in the block are dead.  So make a pass over the block
1736      recording any such that are made and show them dead at the end.  We do
1737      a very conservative and simple job here.  */
1738   if (optimize
1739       && ! (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
1740             && (TYPE_RETURNS_STACK_DEPRESSED
1741                 (TREE_TYPE (current_function_decl))))
1742       && (flags & PROP_SCAN_DEAD_CODE)
1743       && (bb->succ == NULL
1744           || (bb->succ->succ_next == NULL
1745               && bb->succ->dest == EXIT_BLOCK_PTR
1746               && ! current_function_calls_eh_return)))
1747     {
1748       rtx insn, set;
1749       for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn))
1750         if (GET_CODE (insn) == INSN
1751             && (set = single_set (insn))
1752             && GET_CODE (SET_DEST (set)) == MEM)
1753           {
1754             rtx mem = SET_DEST (set);
1755             rtx canon_mem = canon_rtx (mem);
1756
1757             /* This optimization is performed by faking a store to the
1758                memory at the end of the block.  This doesn't work for
1759                unchanging memories because multiple stores to unchanging
1760                memory is illegal and alias analysis doesn't consider it.  */
1761             if (RTX_UNCHANGING_P (canon_mem))
1762               continue;
1763
1764             if (XEXP (canon_mem, 0) == frame_pointer_rtx
1765                 || (GET_CODE (XEXP (canon_mem, 0)) == PLUS
1766                     && XEXP (XEXP (canon_mem, 0), 0) == frame_pointer_rtx
1767                     && GET_CODE (XEXP (XEXP (canon_mem, 0), 1)) == CONST_INT))
1768               add_to_mem_set_list (pbi, canon_mem);
1769           }
1770     }
1771
1772   return pbi;
1773 }
1774
1775 /* Release a propagate_block_info struct.  */
1776
1777 void
1778 free_propagate_block_info (pbi)
1779      struct propagate_block_info *pbi;
1780 {
1781   free_EXPR_LIST_list (&pbi->mem_set_list);
1782
1783   BITMAP_XFREE (pbi->new_set);
1784
1785 #ifdef HAVE_conditional_execution
1786   splay_tree_delete (pbi->reg_cond_dead);
1787   BITMAP_XFREE (pbi->reg_cond_reg);
1788 #endif
1789
1790   if (pbi->reg_next_use)
1791     free (pbi->reg_next_use);
1792
1793   free (pbi);
1794 }
1795
1796 /* Compute the registers live at the beginning of a basic block BB from
1797    those live at the end.
1798
1799    When called, REG_LIVE contains those live at the end.  On return, it
1800    contains those live at the beginning.
1801
1802    LOCAL_SET, if non-null, will be set with all registers killed
1803    unconditionally by this basic block.
1804    Likewise, COND_LOCAL_SET, if non-null, will be set with all registers
1805    killed conditionally by this basic block.  If there is any unconditional
1806    set of a register, then the corresponding bit will be set in LOCAL_SET
1807    and cleared in COND_LOCAL_SET.
1808    It is valid for LOCAL_SET and COND_LOCAL_SET to be the same set.  In this
1809    case, the resulting set will be equal to the union of the two sets that
1810    would otherwise be computed.
1811
1812    Return non-zero if an INSN is deleted (i.e. by dead code removal).  */
1813
1814 int
1815 propagate_block (bb, live, local_set, cond_local_set, flags)
1816      basic_block bb;
1817      regset live;
1818      regset local_set;
1819      regset cond_local_set;
1820      int flags;
1821 {
1822   struct propagate_block_info *pbi;
1823   rtx insn, prev;
1824   int changed;
1825
1826   pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags);
1827
1828   if (flags & PROP_REG_INFO)
1829     {
1830       register int i;
1831
1832       /* Process the regs live at the end of the block.
1833          Mark them as not local to any one basic block.  */
1834       EXECUTE_IF_SET_IN_REG_SET (live, 0, i,
1835                                  { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
1836     }
1837
1838   /* Scan the block an insn at a time from end to beginning.  */
1839
1840   changed = 0;
1841   for (insn = bb->end;; insn = prev)
1842     {
1843       /* If this is a call to `setjmp' et al, warn if any
1844          non-volatile datum is live.  */
1845       if ((flags & PROP_REG_INFO)
1846           && GET_CODE (insn) == CALL_INSN
1847           && find_reg_note (insn, REG_SETJMP, NULL))
1848         IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live);
1849
1850       prev = propagate_one_insn (pbi, insn);
1851       changed |= NEXT_INSN (prev) != insn;
1852
1853       if (insn == bb->head)
1854         break;
1855     }
1856
1857   free_propagate_block_info (pbi);
1858
1859   return changed;
1860 }
1861 \f
1862 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
1863    (SET expressions whose destinations are registers dead after the insn).
1864    NEEDED is the regset that says which regs are alive after the insn.
1865
1866    Unless CALL_OK is non-zero, an insn is needed if it contains a CALL.
1867
1868    If X is the entire body of an insn, NOTES contains the reg notes
1869    pertaining to the insn.  */
1870
1871 static int
1872 insn_dead_p (pbi, x, call_ok, notes)
1873      struct propagate_block_info *pbi;
1874      rtx x;
1875      int call_ok;
1876      rtx notes ATTRIBUTE_UNUSED;
1877 {
1878   enum rtx_code code = GET_CODE (x);
1879
1880 #ifdef AUTO_INC_DEC
1881   /* If flow is invoked after reload, we must take existing AUTO_INC
1882      expresions into account.  */
1883   if (reload_completed)
1884     {
1885       for (; notes; notes = XEXP (notes, 1))
1886         {
1887           if (REG_NOTE_KIND (notes) == REG_INC)
1888             {
1889               int regno = REGNO (XEXP (notes, 0));
1890
1891               /* Don't delete insns to set global regs.  */
1892               if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1893                   || REGNO_REG_SET_P (pbi->reg_live, regno))
1894                 return 0;
1895             }
1896         }
1897     }
1898 #endif
1899
1900   /* If setting something that's a reg or part of one,
1901      see if that register's altered value will be live.  */
1902
1903   if (code == SET)
1904     {
1905       rtx r = SET_DEST (x);
1906
1907 #ifdef HAVE_cc0
1908       if (GET_CODE (r) == CC0)
1909         return ! pbi->cc0_live;
1910 #endif
1911
1912       /* A SET that is a subroutine call cannot be dead.  */
1913       if (GET_CODE (SET_SRC (x)) == CALL)
1914         {
1915           if (! call_ok)
1916             return 0;
1917         }
1918
1919       /* Don't eliminate loads from volatile memory or volatile asms.  */
1920       else if (volatile_refs_p (SET_SRC (x)))
1921         return 0;
1922
1923       if (GET_CODE (r) == MEM)
1924         {
1925           rtx temp, canon_r;
1926
1927           if (MEM_VOLATILE_P (r) || GET_MODE (r) == BLKmode)
1928             return 0;
1929
1930           canon_r = canon_rtx (r);
1931
1932           /* Walk the set of memory locations we are currently tracking
1933              and see if one is an identical match to this memory location.
1934              If so, this memory write is dead (remember, we're walking
1935              backwards from the end of the block to the start).  Since
1936              rtx_equal_p does not check the alias set or flags, we also
1937              must have the potential for them to conflict (anti_dependence).  */
1938           for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
1939             if (anti_dependence (r, XEXP (temp, 0)))
1940               {
1941                 rtx mem = XEXP (temp, 0);
1942
1943                 if (rtx_equal_p (XEXP (canon_r, 0), XEXP (mem, 0))
1944                     && (GET_MODE_SIZE (GET_MODE (canon_r))
1945                         <= GET_MODE_SIZE (GET_MODE (mem))))
1946                   return 1;
1947
1948 #ifdef AUTO_INC_DEC
1949                 /* Check if memory reference matches an auto increment. Only
1950                    post increment/decrement or modify are valid.  */
1951                 if (GET_MODE (mem) == GET_MODE (r)
1952                     && (GET_CODE (XEXP (mem, 0)) == POST_DEC
1953                         || GET_CODE (XEXP (mem, 0)) == POST_INC
1954                         || GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
1955                     && GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
1956                     && rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
1957                   return 1;
1958 #endif
1959               }
1960         }
1961       else
1962         {
1963           while (GET_CODE (r) == SUBREG
1964                  || GET_CODE (r) == STRICT_LOW_PART
1965                  || GET_CODE (r) == ZERO_EXTRACT)
1966             r = XEXP (r, 0);
1967
1968           if (GET_CODE (r) == REG)
1969             {
1970               int regno = REGNO (r);
1971
1972               /* Obvious.  */
1973               if (REGNO_REG_SET_P (pbi->reg_live, regno))
1974                 return 0;
1975
1976               /* If this is a hard register, verify that subsequent
1977                  words are not needed.  */
1978               if (regno < FIRST_PSEUDO_REGISTER)
1979                 {
1980                   int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
1981
1982                   while (--n > 0)
1983                     if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
1984                       return 0;
1985                 }
1986
1987               /* Don't delete insns to set global regs.  */
1988               if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1989                 return 0;
1990
1991               /* Make sure insns to set the stack pointer aren't deleted.  */
1992               if (regno == STACK_POINTER_REGNUM)
1993                 return 0;
1994
1995               /* ??? These bits might be redundant with the force live bits
1996                  in calculate_global_regs_live.  We would delete from
1997                  sequential sets; whether this actually affects real code
1998                  for anything but the stack pointer I don't know.  */
1999               /* Make sure insns to set the frame pointer aren't deleted.  */
2000               if (regno == FRAME_POINTER_REGNUM
2001                   && (! reload_completed || frame_pointer_needed))
2002                 return 0;
2003 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2004               if (regno == HARD_FRAME_POINTER_REGNUM
2005                   && (! reload_completed || frame_pointer_needed))
2006                 return 0;
2007 #endif
2008
2009 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2010               /* Make sure insns to set arg pointer are never deleted
2011                  (if the arg pointer isn't fixed, there will be a USE
2012                  for it, so we can treat it normally).  */
2013               if (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2014                 return 0;
2015 #endif
2016
2017               /* Otherwise, the set is dead.  */
2018               return 1;
2019             }
2020         }
2021     }
2022
2023   /* If performing several activities, insn is dead if each activity
2024      is individually dead.  Also, CLOBBERs and USEs can be ignored; a
2025      CLOBBER or USE that's inside a PARALLEL doesn't make the insn
2026      worth keeping.  */
2027   else if (code == PARALLEL)
2028     {
2029       int i = XVECLEN (x, 0);
2030
2031       for (i--; i >= 0; i--)
2032         if (GET_CODE (XVECEXP (x, 0, i)) != CLOBBER
2033             && GET_CODE (XVECEXP (x, 0, i)) != USE
2034             && ! insn_dead_p (pbi, XVECEXP (x, 0, i), call_ok, NULL_RTX))
2035           return 0;
2036
2037       return 1;
2038     }
2039
2040   /* A CLOBBER of a pseudo-register that is dead serves no purpose.  That
2041      is not necessarily true for hard registers.  */
2042   else if (code == CLOBBER && GET_CODE (XEXP (x, 0)) == REG
2043            && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
2044            && ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
2045     return 1;
2046
2047   /* We do not check other CLOBBER or USE here.  An insn consisting of just
2048      a CLOBBER or just a USE should not be deleted.  */
2049   return 0;
2050 }
2051
2052 /* If INSN is the last insn in a libcall, and assuming INSN is dead,
2053    return 1 if the entire library call is dead.
2054    This is true if INSN copies a register (hard or pseudo)
2055    and if the hard return reg of the call insn is dead.
2056    (The caller should have tested the destination of the SET inside
2057    INSN already for death.)
2058
2059    If this insn doesn't just copy a register, then we don't
2060    have an ordinary libcall.  In that case, cse could not have
2061    managed to substitute the source for the dest later on,
2062    so we can assume the libcall is dead.
2063
2064    PBI is the block info giving pseudoregs live before this insn.
2065    NOTE is the REG_RETVAL note of the insn.  */
2066
2067 static int
2068 libcall_dead_p (pbi, note, insn)
2069      struct propagate_block_info *pbi;
2070      rtx note;
2071      rtx insn;
2072 {
2073   rtx x = single_set (insn);
2074
2075   if (x)
2076     {
2077       register rtx r = SET_SRC (x);
2078
2079       if (GET_CODE (r) == REG)
2080         {
2081           rtx call = XEXP (note, 0);
2082           rtx call_pat;
2083           register int i;
2084
2085           /* Find the call insn.  */
2086           while (call != insn && GET_CODE (call) != CALL_INSN)
2087             call = NEXT_INSN (call);
2088
2089           /* If there is none, do nothing special,
2090              since ordinary death handling can understand these insns.  */
2091           if (call == insn)
2092             return 0;
2093
2094           /* See if the hard reg holding the value is dead.
2095              If this is a PARALLEL, find the call within it.  */
2096           call_pat = PATTERN (call);
2097           if (GET_CODE (call_pat) == PARALLEL)
2098             {
2099               for (i = XVECLEN (call_pat, 0) - 1; i >= 0; i--)
2100                 if (GET_CODE (XVECEXP (call_pat, 0, i)) == SET
2101                     && GET_CODE (SET_SRC (XVECEXP (call_pat, 0, i))) == CALL)
2102                   break;
2103
2104               /* This may be a library call that is returning a value
2105                  via invisible pointer.  Do nothing special, since
2106                  ordinary death handling can understand these insns.  */
2107               if (i < 0)
2108                 return 0;
2109
2110               call_pat = XVECEXP (call_pat, 0, i);
2111             }
2112
2113           return insn_dead_p (pbi, call_pat, 1, REG_NOTES (call));
2114         }
2115     }
2116   return 1;
2117 }
2118
2119 /* Return 1 if register REGNO was used before it was set, i.e. if it is
2120    live at function entry.  Don't count global register variables, variables
2121    in registers that can be used for function arg passing, or variables in
2122    fixed hard registers.  */
2123
2124 int
2125 regno_uninitialized (regno)
2126      int regno;
2127 {
2128   if (n_basic_blocks == 0
2129       || (regno < FIRST_PSEUDO_REGISTER
2130           && (global_regs[regno]
2131               || fixed_regs[regno]
2132               || FUNCTION_ARG_REGNO_P (regno))))
2133     return 0;
2134
2135   return REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno);
2136 }
2137
2138 /* 1 if register REGNO was alive at a place where `setjmp' was called
2139    and was set more than once or is an argument.
2140    Such regs may be clobbered by `longjmp'.  */
2141
2142 int
2143 regno_clobbered_at_setjmp (regno)
2144      int regno;
2145 {
2146   if (n_basic_blocks == 0)
2147     return 0;
2148
2149   return ((REG_N_SETS (regno) > 1
2150            || REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno))
2151           && REGNO_REG_SET_P (regs_live_at_setjmp, regno));
2152 }
2153 \f
2154 /* Add MEM to PBI->MEM_SET_LIST.  MEM should be canonical.  Respect the
2155    maximal list size; look for overlaps in mode and select the largest.  */
2156 static void
2157 add_to_mem_set_list (pbi, mem)
2158      struct propagate_block_info *pbi;
2159      rtx mem;
2160 {
2161   rtx i;
2162
2163   /* We don't know how large a BLKmode store is, so we must not
2164      take them into consideration.  */
2165   if (GET_MODE (mem) == BLKmode)
2166     return;
2167
2168   for (i = pbi->mem_set_list; i ; i = XEXP (i, 1))
2169     {
2170       rtx e = XEXP (i, 0);
2171       if (rtx_equal_p (XEXP (mem, 0), XEXP (e, 0)))
2172         {
2173           if (GET_MODE_SIZE (GET_MODE (mem)) > GET_MODE_SIZE (GET_MODE (e)))
2174             {
2175 #ifdef AUTO_INC_DEC
2176               /* If we must store a copy of the mem, we can just modify
2177                  the mode of the stored copy.  */
2178               if (pbi->flags & PROP_AUTOINC)
2179                 PUT_MODE (e, GET_MODE (mem));
2180               else
2181 #endif
2182                 XEXP (i, 0) = mem;
2183             }
2184           return;
2185         }
2186     }
2187
2188   if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN)
2189     {
2190 #ifdef AUTO_INC_DEC
2191       /* Store a copy of mem, otherwise the address may be
2192          scrogged by find_auto_inc.  */
2193       if (pbi->flags & PROP_AUTOINC)
2194         mem = shallow_copy_rtx (mem);
2195 #endif
2196       pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
2197       pbi->mem_set_list_len++;
2198     }
2199 }
2200
2201 /* INSN references memory, possibly using autoincrement addressing modes.
2202    Find any entries on the mem_set_list that need to be invalidated due
2203    to an address change.  */
2204
2205 static void
2206 invalidate_mems_from_autoinc (pbi, insn)
2207      struct propagate_block_info *pbi;
2208      rtx insn;
2209 {
2210   rtx note = REG_NOTES (insn);
2211   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2212     if (REG_NOTE_KIND (note) == REG_INC)
2213       invalidate_mems_from_set (pbi, XEXP (note, 0));
2214 }
2215
2216 /* EXP is a REG.  Remove any dependant entries from pbi->mem_set_list.  */
2217
2218 static void
2219 invalidate_mems_from_set (pbi, exp)
2220      struct propagate_block_info *pbi;
2221      rtx exp;
2222 {
2223   rtx temp = pbi->mem_set_list;
2224   rtx prev = NULL_RTX;
2225   rtx next;
2226
2227   while (temp)
2228     {
2229       next = XEXP (temp, 1);
2230       if (reg_overlap_mentioned_p (exp, XEXP (temp, 0)))
2231         {
2232           /* Splice this entry out of the list.  */
2233           if (prev)
2234             XEXP (prev, 1) = next;
2235           else
2236             pbi->mem_set_list = next;
2237           free_EXPR_LIST_node (temp);
2238           pbi->mem_set_list_len--;
2239         }
2240       else
2241         prev = temp;
2242       temp = next;
2243     }
2244 }
2245
2246 /* Process the registers that are set within X.  Their bits are set to
2247    1 in the regset DEAD, because they are dead prior to this insn.
2248
2249    If INSN is nonzero, it is the insn being processed.
2250
2251    FLAGS is the set of operations to perform.  */
2252
2253 static void
2254 mark_set_regs (pbi, x, insn)
2255      struct propagate_block_info *pbi;
2256      rtx x, insn;
2257 {
2258   rtx cond = NULL_RTX;
2259   rtx link;
2260   enum rtx_code code;
2261
2262   if (insn)
2263     for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
2264       {
2265         if (REG_NOTE_KIND (link) == REG_INC)
2266           mark_set_1 (pbi, SET, XEXP (link, 0),
2267                       (GET_CODE (x) == COND_EXEC
2268                        ? COND_EXEC_TEST (x) : NULL_RTX),
2269                       insn, pbi->flags);
2270       }
2271  retry:
2272   switch (code = GET_CODE (x))
2273     {
2274     case SET:
2275     case CLOBBER:
2276       mark_set_1 (pbi, code, SET_DEST (x), cond, insn, pbi->flags);
2277       return;
2278
2279     case COND_EXEC:
2280       cond = COND_EXEC_TEST (x);
2281       x = COND_EXEC_CODE (x);
2282       goto retry;
2283
2284     case PARALLEL:
2285       {
2286         register int i;
2287         for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
2288           {
2289             rtx sub = XVECEXP (x, 0, i);
2290             switch (code = GET_CODE (sub))
2291               {
2292               case COND_EXEC:
2293                 if (cond != NULL_RTX)
2294                   abort ();
2295
2296                 cond = COND_EXEC_TEST (sub);
2297                 sub = COND_EXEC_CODE (sub);
2298                 if (GET_CODE (sub) != SET && GET_CODE (sub) != CLOBBER)
2299                   break;
2300                 /* Fall through.  */
2301
2302               case SET:
2303               case CLOBBER:
2304                 mark_set_1 (pbi, code, SET_DEST (sub), cond, insn, pbi->flags);
2305                 break;
2306
2307               default:
2308                 break;
2309               }
2310           }
2311         break;
2312       }
2313
2314     default:
2315       break;
2316     }
2317 }
2318
2319 /* Process a single set, which appears in INSN.  REG (which may not
2320    actually be a REG, it may also be a SUBREG, PARALLEL, etc.) is
2321    being set using the CODE (which may be SET, CLOBBER, or COND_EXEC).
2322    If the set is conditional (because it appear in a COND_EXEC), COND
2323    will be the condition.  */
2324
2325 static void
2326 mark_set_1 (pbi, code, reg, cond, insn, flags)
2327      struct propagate_block_info *pbi;
2328      enum rtx_code code;
2329      rtx reg, cond, insn;
2330      int flags;
2331 {
2332   int regno_first = -1, regno_last = -1;
2333   unsigned long not_dead = 0;
2334   int i;
2335
2336   /* Modifying just one hardware register of a multi-reg value or just a
2337      byte field of a register does not mean the value from before this insn
2338      is now dead.  Of course, if it was dead after it's unused now.  */
2339
2340   switch (GET_CODE (reg))
2341     {
2342     case PARALLEL:
2343       /* Some targets place small structures in registers for return values of
2344          functions.  We have to detect this case specially here to get correct
2345          flow information.  */
2346       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
2347         if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
2348           mark_set_1 (pbi, code, XEXP (XVECEXP (reg, 0, i), 0), cond, insn,
2349                       flags);
2350       return;
2351
2352     case ZERO_EXTRACT:
2353     case SIGN_EXTRACT:
2354     case STRICT_LOW_PART:
2355       /* ??? Assumes STRICT_LOW_PART not used on multi-word registers.  */
2356       do
2357         reg = XEXP (reg, 0);
2358       while (GET_CODE (reg) == SUBREG
2359              || GET_CODE (reg) == ZERO_EXTRACT
2360              || GET_CODE (reg) == SIGN_EXTRACT
2361              || GET_CODE (reg) == STRICT_LOW_PART);
2362       if (GET_CODE (reg) == MEM)
2363         break;
2364       not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live, REGNO (reg));
2365       /* Fall through.  */
2366
2367     case REG:
2368       regno_last = regno_first = REGNO (reg);
2369       if (regno_first < FIRST_PSEUDO_REGISTER)
2370         regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
2371       break;
2372
2373     case SUBREG:
2374       if (GET_CODE (SUBREG_REG (reg)) == REG)
2375         {
2376           enum machine_mode outer_mode = GET_MODE (reg);
2377           enum machine_mode inner_mode = GET_MODE (SUBREG_REG (reg));
2378
2379           /* Identify the range of registers affected.  This is moderately
2380              tricky for hard registers.  See alter_subreg.  */
2381
2382           regno_last = regno_first = REGNO (SUBREG_REG (reg));
2383           if (regno_first < FIRST_PSEUDO_REGISTER)
2384             {
2385               regno_first += subreg_regno_offset (regno_first, inner_mode,
2386                                                   SUBREG_BYTE (reg),
2387                                                   outer_mode);
2388               regno_last = (regno_first
2389                             + HARD_REGNO_NREGS (regno_first, outer_mode) - 1);
2390
2391               /* Since we've just adjusted the register number ranges, make
2392                  sure REG matches.  Otherwise some_was_live will be clear
2393                  when it shouldn't have been, and we'll create incorrect
2394                  REG_UNUSED notes.  */
2395               reg = gen_rtx_REG (outer_mode, regno_first);
2396             }
2397           else
2398             {
2399               /* If the number of words in the subreg is less than the number
2400                  of words in the full register, we have a well-defined partial
2401                  set.  Otherwise the high bits are undefined.
2402
2403                  This is only really applicable to pseudos, since we just took
2404                  care of multi-word hard registers.  */
2405               if (((GET_MODE_SIZE (outer_mode)
2406                     + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
2407                   < ((GET_MODE_SIZE (inner_mode)
2408                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
2409                 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live,
2410                                                             regno_first);
2411
2412               reg = SUBREG_REG (reg);
2413             }
2414         }
2415       else
2416         reg = SUBREG_REG (reg);
2417       break;
2418
2419     default:
2420       break;
2421     }
2422
2423   /* If this set is a MEM, then it kills any aliased writes.
2424      If this set is a REG, then it kills any MEMs which use the reg.  */
2425   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
2426     {
2427       if (GET_CODE (reg) == REG)
2428         invalidate_mems_from_set (pbi, reg);
2429
2430       /* If the memory reference had embedded side effects (autoincrement
2431          address modes.  Then we may need to kill some entries on the
2432          memory set list.  */
2433       if (insn && GET_CODE (reg) == MEM)
2434         invalidate_mems_from_autoinc (pbi, insn);
2435
2436       if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
2437           /* ??? With more effort we could track conditional memory life.  */
2438           && ! cond
2439           /* There are no REG_INC notes for SP, so we can't assume we'll see
2440              everything that invalidates it.  To be safe, don't eliminate any
2441              stores though SP; none of them should be redundant anyway.  */
2442           && ! reg_mentioned_p (stack_pointer_rtx, reg))
2443         add_to_mem_set_list (pbi, canon_rtx (reg));
2444     }
2445
2446   if (GET_CODE (reg) == REG
2447       && ! (regno_first == FRAME_POINTER_REGNUM
2448             && (! reload_completed || frame_pointer_needed))
2449 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2450       && ! (regno_first == HARD_FRAME_POINTER_REGNUM
2451             && (! reload_completed || frame_pointer_needed))
2452 #endif
2453 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2454       && ! (regno_first == ARG_POINTER_REGNUM && fixed_regs[regno_first])
2455 #endif
2456       )
2457     {
2458       int some_was_live = 0, some_was_dead = 0;
2459
2460       for (i = regno_first; i <= regno_last; ++i)
2461         {
2462           int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
2463           if (pbi->local_set)
2464             {
2465               /* Order of the set operation matters here since both
2466                  sets may be the same.  */
2467               CLEAR_REGNO_REG_SET (pbi->cond_local_set, i);
2468               if (cond != NULL_RTX
2469                   && ! REGNO_REG_SET_P (pbi->local_set, i))
2470                 SET_REGNO_REG_SET (pbi->cond_local_set, i);
2471               else
2472                 SET_REGNO_REG_SET (pbi->local_set, i);
2473             }
2474           if (code != CLOBBER)
2475             SET_REGNO_REG_SET (pbi->new_set, i);
2476
2477           some_was_live |= needed_regno;
2478           some_was_dead |= ! needed_regno;
2479         }
2480
2481 #ifdef HAVE_conditional_execution
2482       /* Consider conditional death in deciding that the register needs
2483          a death note.  */
2484       if (some_was_live && ! not_dead
2485           /* The stack pointer is never dead.  Well, not strictly true,
2486              but it's very difficult to tell from here.  Hopefully
2487              combine_stack_adjustments will fix up the most egregious
2488              errors.  */
2489           && regno_first != STACK_POINTER_REGNUM)
2490         {
2491           for (i = regno_first; i <= regno_last; ++i)
2492             if (! mark_regno_cond_dead (pbi, i, cond))
2493               not_dead |= ((unsigned long) 1) << (i - regno_first);
2494         }
2495 #endif
2496
2497       /* Additional data to record if this is the final pass.  */
2498       if (flags & (PROP_LOG_LINKS | PROP_REG_INFO
2499                    | PROP_DEATH_NOTES | PROP_AUTOINC))
2500         {
2501           register rtx y;
2502           register int blocknum = pbi->bb->index;
2503
2504           y = NULL_RTX;
2505           if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2506             {
2507               y = pbi->reg_next_use[regno_first];
2508
2509               /* The next use is no longer next, since a store intervenes.  */
2510               for (i = regno_first; i <= regno_last; ++i)
2511                 pbi->reg_next_use[i] = 0;
2512             }
2513
2514           if (flags & PROP_REG_INFO)
2515             {
2516               for (i = regno_first; i <= regno_last; ++i)
2517                 {
2518                   /* Count (weighted) references, stores, etc.  This counts a
2519                      register twice if it is modified, but that is correct.  */
2520                   REG_N_SETS (i) += 1;
2521                   REG_N_REFS (i) += 1;
2522                   REG_FREQ (i) += REG_FREQ_FROM_BB (pbi->bb);
2523
2524                   /* The insns where a reg is live are normally counted
2525                      elsewhere, but we want the count to include the insn
2526                      where the reg is set, and the normal counting mechanism
2527                      would not count it.  */
2528                   REG_LIVE_LENGTH (i) += 1;
2529                 }
2530
2531               /* If this is a hard reg, record this function uses the reg.  */
2532               if (regno_first < FIRST_PSEUDO_REGISTER)
2533                 {
2534                   for (i = regno_first; i <= regno_last; i++)
2535                     regs_ever_live[i] = 1;
2536                 }
2537               else
2538                 {
2539                   /* Keep track of which basic blocks each reg appears in.  */
2540                   if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
2541                     REG_BASIC_BLOCK (regno_first) = blocknum;
2542                   else if (REG_BASIC_BLOCK (regno_first) != blocknum)
2543                     REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
2544                 }
2545             }
2546
2547           if (! some_was_dead)
2548             {
2549               if (flags & PROP_LOG_LINKS)
2550                 {
2551                   /* Make a logical link from the next following insn
2552                      that uses this register, back to this insn.
2553                      The following insns have already been processed.
2554
2555                      We don't build a LOG_LINK for hard registers containing
2556                      in ASM_OPERANDs.  If these registers get replaced,
2557                      we might wind up changing the semantics of the insn,
2558                      even if reload can make what appear to be valid
2559                      assignments later.  */
2560                   if (y && (BLOCK_NUM (y) == blocknum)
2561                       && (regno_first >= FIRST_PSEUDO_REGISTER
2562                           || asm_noperands (PATTERN (y)) < 0))
2563                     LOG_LINKS (y) = alloc_INSN_LIST (insn, LOG_LINKS (y));
2564                 }
2565             }
2566           else if (not_dead)
2567             ;
2568           else if (! some_was_live)
2569             {
2570               if (flags & PROP_REG_INFO)
2571                 REG_N_DEATHS (regno_first) += 1;
2572
2573               if (flags & PROP_DEATH_NOTES)
2574                 {
2575                   /* Note that dead stores have already been deleted
2576                      when possible.  If we get here, we have found a
2577                      dead store that cannot be eliminated (because the
2578                      same insn does something useful).  Indicate this
2579                      by marking the reg being set as dying here.  */
2580                   REG_NOTES (insn)
2581                     = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2582                 }
2583             }
2584           else
2585             {
2586               if (flags & PROP_DEATH_NOTES)
2587                 {
2588                   /* This is a case where we have a multi-word hard register
2589                      and some, but not all, of the words of the register are
2590                      needed in subsequent insns.  Write REG_UNUSED notes
2591                      for those parts that were not needed.  This case should
2592                      be rare.  */
2593
2594                   for (i = regno_first; i <= regno_last; ++i)
2595                     if (! REGNO_REG_SET_P (pbi->reg_live, i))
2596                       REG_NOTES (insn)
2597                         = alloc_EXPR_LIST (REG_UNUSED,
2598                                            gen_rtx_REG (reg_raw_mode[i], i),
2599                                            REG_NOTES (insn));
2600                 }
2601             }
2602         }
2603
2604       /* Mark the register as being dead.  */
2605       if (some_was_live
2606           /* The stack pointer is never dead.  Well, not strictly true,
2607              but it's very difficult to tell from here.  Hopefully
2608              combine_stack_adjustments will fix up the most egregious
2609              errors.  */
2610           && regno_first != STACK_POINTER_REGNUM)
2611         {
2612           for (i = regno_first; i <= regno_last; ++i)
2613             if (!(not_dead & (((unsigned long) 1) << (i - regno_first))))
2614               CLEAR_REGNO_REG_SET (pbi->reg_live, i);
2615         }
2616     }
2617   else if (GET_CODE (reg) == REG)
2618     {
2619       if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2620         pbi->reg_next_use[regno_first] = 0;
2621     }
2622
2623   /* If this is the last pass and this is a SCRATCH, show it will be dying
2624      here and count it.  */
2625   else if (GET_CODE (reg) == SCRATCH)
2626     {
2627       if (flags & PROP_DEATH_NOTES)
2628         REG_NOTES (insn)
2629           = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2630     }
2631 }
2632 \f
2633 #ifdef HAVE_conditional_execution
2634 /* Mark REGNO conditionally dead.
2635    Return true if the register is now unconditionally dead.  */
2636
2637 static int
2638 mark_regno_cond_dead (pbi, regno, cond)
2639      struct propagate_block_info *pbi;
2640      int regno;
2641      rtx cond;
2642 {
2643   /* If this is a store to a predicate register, the value of the
2644      predicate is changing, we don't know that the predicate as seen
2645      before is the same as that seen after.  Flush all dependent
2646      conditions from reg_cond_dead.  This will make all such
2647      conditionally live registers unconditionally live.  */
2648   if (REGNO_REG_SET_P (pbi->reg_cond_reg, regno))
2649     flush_reg_cond_reg (pbi, regno);
2650
2651   /* If this is an unconditional store, remove any conditional
2652      life that may have existed.  */
2653   if (cond == NULL_RTX)
2654     splay_tree_remove (pbi->reg_cond_dead, regno);
2655   else
2656     {
2657       splay_tree_node node;
2658       struct reg_cond_life_info *rcli;
2659       rtx ncond;
2660
2661       /* Otherwise this is a conditional set.  Record that fact.
2662          It may have been conditionally used, or there may be a
2663          subsequent set with a complimentary condition.  */
2664
2665       node = splay_tree_lookup (pbi->reg_cond_dead, regno);
2666       if (node == NULL)
2667         {
2668           /* The register was unconditionally live previously.
2669              Record the current condition as the condition under
2670              which it is dead.  */
2671           rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
2672           rcli->condition = cond;
2673           rcli->stores = cond;
2674           rcli->orig_condition = const0_rtx;
2675           splay_tree_insert (pbi->reg_cond_dead, regno,
2676                              (splay_tree_value) rcli);
2677
2678           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2679
2680           /* Not unconditionaly dead.  */
2681           return 0;
2682         }
2683       else
2684         {
2685           /* The register was conditionally live previously.
2686              Add the new condition to the old.  */
2687           rcli = (struct reg_cond_life_info *) node->value;
2688           ncond = rcli->condition;
2689           ncond = ior_reg_cond (ncond, cond, 1);
2690           if (rcli->stores == const0_rtx)
2691             rcli->stores = cond;
2692           else if (rcli->stores != const1_rtx)
2693             rcli->stores = ior_reg_cond (rcli->stores, cond, 1);
2694
2695           /* If the register is now unconditionally dead, remove the entry
2696              in the splay_tree.  A register is unconditionally dead if the
2697              dead condition ncond is true.  A register is also unconditionally
2698              dead if the sum of all conditional stores is an unconditional
2699              store (stores is true), and the dead condition is identically the
2700              same as the original dead condition initialized at the end of
2701              the block.  This is a pointer compare, not an rtx_equal_p
2702              compare.  */
2703           if (ncond == const1_rtx
2704               || (ncond == rcli->orig_condition && rcli->stores == const1_rtx))
2705             splay_tree_remove (pbi->reg_cond_dead, regno);
2706           else
2707             {
2708               rcli->condition = ncond;
2709
2710               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2711
2712               /* Not unconditionaly dead.  */
2713               return 0;
2714             }
2715         }
2716     }
2717
2718   return 1;
2719 }
2720
2721 /* Called from splay_tree_delete for pbi->reg_cond_life.  */
2722
2723 static void
2724 free_reg_cond_life_info (value)
2725      splay_tree_value value;
2726 {
2727   struct reg_cond_life_info *rcli = (struct reg_cond_life_info *) value;
2728   free (rcli);
2729 }
2730
2731 /* Helper function for flush_reg_cond_reg.  */
2732
2733 static int
2734 flush_reg_cond_reg_1 (node, data)
2735      splay_tree_node node;
2736      void *data;
2737 {
2738   struct reg_cond_life_info *rcli;
2739   int *xdata = (int *) data;
2740   unsigned int regno = xdata[0];
2741
2742   /* Don't need to search if last flushed value was farther on in
2743      the in-order traversal.  */
2744   if (xdata[1] >= (int) node->key)
2745     return 0;
2746
2747   /* Splice out portions of the expression that refer to regno.  */
2748   rcli = (struct reg_cond_life_info *) node->value;
2749   rcli->condition = elim_reg_cond (rcli->condition, regno);
2750   if (rcli->stores != const0_rtx && rcli->stores != const1_rtx)
2751     rcli->stores = elim_reg_cond (rcli->stores, regno);
2752
2753   /* If the entire condition is now false, signal the node to be removed.  */
2754   if (rcli->condition == const0_rtx)
2755     {
2756       xdata[1] = node->key;
2757       return -1;
2758     }
2759   else if (rcli->condition == const1_rtx)
2760     abort ();
2761
2762   return 0;
2763 }
2764
2765 /* Flush all (sub) expressions referring to REGNO from REG_COND_LIVE.  */
2766
2767 static void
2768 flush_reg_cond_reg (pbi, regno)
2769      struct propagate_block_info *pbi;
2770      int regno;
2771 {
2772   int pair[2];
2773
2774   pair[0] = regno;
2775   pair[1] = -1;
2776   while (splay_tree_foreach (pbi->reg_cond_dead,
2777                              flush_reg_cond_reg_1, pair) == -1)
2778     splay_tree_remove (pbi->reg_cond_dead, pair[1]);
2779
2780   CLEAR_REGNO_REG_SET (pbi->reg_cond_reg, regno);
2781 }
2782
2783 /* Logical arithmetic on predicate conditions.  IOR, NOT and AND.
2784    For ior/and, the ADD flag determines whether we want to add the new
2785    condition X to the old one unconditionally.  If it is zero, we will
2786    only return a new expression if X allows us to simplify part of
2787    OLD, otherwise we return OLD unchanged to the caller.
2788    If ADD is nonzero, we will return a new condition in all cases.  The
2789    toplevel caller of one of these functions should always pass 1 for
2790    ADD.  */
2791
2792 static rtx
2793 ior_reg_cond (old, x, add)
2794      rtx old, x;
2795      int add;
2796 {
2797   rtx op0, op1;
2798
2799   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
2800     {
2801       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
2802           && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
2803           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2804         return const1_rtx;
2805       if (GET_CODE (x) == GET_CODE (old)
2806           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2807         return old;
2808       if (! add)
2809         return old;
2810       return gen_rtx_IOR (0, old, x);
2811     }
2812
2813   switch (GET_CODE (old))
2814     {
2815     case IOR:
2816       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
2817       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
2818       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2819         {
2820           if (op0 == const0_rtx)
2821             return op1;
2822           if (op1 == const0_rtx)
2823             return op0;
2824           if (op0 == const1_rtx || op1 == const1_rtx)
2825             return const1_rtx;
2826           if (op0 == XEXP (old, 0))
2827             op0 = gen_rtx_IOR (0, op0, x);
2828           else
2829             op1 = gen_rtx_IOR (0, op1, x);
2830           return gen_rtx_IOR (0, op0, op1);
2831         }
2832       if (! add)
2833         return old;
2834       return gen_rtx_IOR (0, old, x);
2835
2836     case AND:
2837       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
2838       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
2839       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2840         {
2841           if (op0 == const1_rtx)
2842             return op1;
2843           if (op1 == const1_rtx)
2844             return op0;
2845           if (op0 == const0_rtx || op1 == const0_rtx)
2846             return const0_rtx;
2847           if (op0 == XEXP (old, 0))
2848             op0 = gen_rtx_IOR (0, op0, x);
2849           else
2850             op1 = gen_rtx_IOR (0, op1, x);
2851           return gen_rtx_AND (0, op0, op1);
2852         }
2853       if (! add)
2854         return old;
2855       return gen_rtx_IOR (0, old, x);
2856
2857     case NOT:
2858       op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
2859       if (op0 != XEXP (old, 0))
2860         return not_reg_cond (op0);
2861       if (! add)
2862         return old;
2863       return gen_rtx_IOR (0, old, x);
2864
2865     default:
2866       abort ();
2867     }
2868 }
2869
2870 static rtx
2871 not_reg_cond (x)
2872      rtx x;
2873 {
2874   enum rtx_code x_code;
2875
2876   if (x == const0_rtx)
2877     return const1_rtx;
2878   else if (x == const1_rtx)
2879     return const0_rtx;
2880   x_code = GET_CODE (x);
2881   if (x_code == NOT)
2882     return XEXP (x, 0);
2883   if (GET_RTX_CLASS (x_code) == '<'
2884       && GET_CODE (XEXP (x, 0)) == REG)
2885     {
2886       if (XEXP (x, 1) != const0_rtx)
2887         abort ();
2888
2889       return gen_rtx_fmt_ee (reverse_condition (x_code),
2890                              VOIDmode, XEXP (x, 0), const0_rtx);
2891     }
2892   return gen_rtx_NOT (0, x);
2893 }
2894
2895 static rtx
2896 and_reg_cond (old, x, add)
2897      rtx old, x;
2898      int add;
2899 {
2900   rtx op0, op1;
2901
2902   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
2903     {
2904       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
2905           && GET_CODE (x) == reverse_condition (GET_CODE (old))
2906           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2907         return const0_rtx;
2908       if (GET_CODE (x) == GET_CODE (old)
2909           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2910         return old;
2911       if (! add)
2912         return old;
2913       return gen_rtx_AND (0, old, x);
2914     }
2915
2916   switch (GET_CODE (old))
2917     {
2918     case IOR:
2919       op0 = and_reg_cond (XEXP (old, 0), x, 0);
2920       op1 = and_reg_cond (XEXP (old, 1), x, 0);
2921       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2922         {
2923           if (op0 == const0_rtx)
2924             return op1;
2925           if (op1 == const0_rtx)
2926             return op0;
2927           if (op0 == const1_rtx || op1 == const1_rtx)
2928             return const1_rtx;
2929           if (op0 == XEXP (old, 0))
2930             op0 = gen_rtx_AND (0, op0, x);
2931           else
2932             op1 = gen_rtx_AND (0, op1, x);
2933           return gen_rtx_IOR (0, op0, op1);
2934         }
2935       if (! add)
2936         return old;
2937       return gen_rtx_AND (0, old, x);
2938
2939     case AND:
2940       op0 = and_reg_cond (XEXP (old, 0), x, 0);
2941       op1 = and_reg_cond (XEXP (old, 1), x, 0);
2942       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2943         {
2944           if (op0 == const1_rtx)
2945             return op1;
2946           if (op1 == const1_rtx)
2947             return op0;
2948           if (op0 == const0_rtx || op1 == const0_rtx)
2949             return const0_rtx;
2950           if (op0 == XEXP (old, 0))
2951             op0 = gen_rtx_AND (0, op0, x);
2952           else
2953             op1 = gen_rtx_AND (0, op1, x);
2954           return gen_rtx_AND (0, op0, op1);
2955         }
2956       if (! add)
2957         return old;
2958
2959       /* If X is identical to one of the existing terms of the AND,
2960          then just return what we already have.  */
2961       /* ??? There really should be some sort of recursive check here in
2962          case there are nested ANDs.  */
2963       if ((GET_CODE (XEXP (old, 0)) == GET_CODE (x)
2964            && REGNO (XEXP (XEXP (old, 0), 0)) == REGNO (XEXP (x, 0)))
2965           || (GET_CODE (XEXP (old, 1)) == GET_CODE (x)
2966               && REGNO (XEXP (XEXP (old, 1), 0)) == REGNO (XEXP (x, 0))))
2967         return old;
2968
2969       return gen_rtx_AND (0, old, x);
2970
2971     case NOT:
2972       op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
2973       if (op0 != XEXP (old, 0))
2974         return not_reg_cond (op0);
2975       if (! add)
2976         return old;
2977       return gen_rtx_AND (0, old, x);
2978
2979     default:
2980       abort ();
2981     }
2982 }
2983
2984 /* Given a condition X, remove references to reg REGNO and return the
2985    new condition.  The removal will be done so that all conditions
2986    involving REGNO are considered to evaluate to false.  This function
2987    is used when the value of REGNO changes.  */
2988
2989 static rtx
2990 elim_reg_cond (x, regno)
2991      rtx x;
2992      unsigned int regno;
2993 {
2994   rtx op0, op1;
2995
2996   if (GET_RTX_CLASS (GET_CODE (x)) == '<')
2997     {
2998       if (REGNO (XEXP (x, 0)) == regno)
2999         return const0_rtx;
3000       return x;
3001     }
3002
3003   switch (GET_CODE (x))
3004     {
3005     case AND:
3006       op0 = elim_reg_cond (XEXP (x, 0), regno);
3007       op1 = elim_reg_cond (XEXP (x, 1), regno);
3008       if (op0 == const0_rtx || op1 == const0_rtx)
3009         return const0_rtx;
3010       if (op0 == const1_rtx)
3011         return op1;
3012       if (op1 == const1_rtx)
3013         return op0;
3014       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3015         return x;
3016       return gen_rtx_AND (0, op0, op1);
3017
3018     case IOR:
3019       op0 = elim_reg_cond (XEXP (x, 0), regno);
3020       op1 = elim_reg_cond (XEXP (x, 1), regno);
3021       if (op0 == const1_rtx || op1 == const1_rtx)
3022         return const1_rtx;
3023       if (op0 == const0_rtx)
3024         return op1;
3025       if (op1 == const0_rtx)
3026         return op0;
3027       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3028         return x;
3029       return gen_rtx_IOR (0, op0, op1);
3030
3031     case NOT:
3032       op0 = elim_reg_cond (XEXP (x, 0), regno);
3033       if (op0 == const0_rtx)
3034         return const1_rtx;
3035       if (op0 == const1_rtx)
3036         return const0_rtx;
3037       if (op0 != XEXP (x, 0))
3038         return not_reg_cond (op0);
3039       return x;
3040
3041     default:
3042       abort ();
3043     }
3044 }
3045 #endif /* HAVE_conditional_execution */
3046 \f
3047 #ifdef AUTO_INC_DEC
3048
3049 /* Try to substitute the auto-inc expression INC as the address inside
3050    MEM which occurs in INSN.  Currently, the address of MEM is an expression
3051    involving INCR_REG, and INCR is the next use of INCR_REG; it is an insn
3052    that has a single set whose source is a PLUS of INCR_REG and something
3053    else.  */
3054
3055 static void
3056 attempt_auto_inc (pbi, inc, insn, mem, incr, incr_reg)
3057      struct propagate_block_info *pbi;
3058      rtx inc, insn, mem, incr, incr_reg;
3059 {
3060   int regno = REGNO (incr_reg);
3061   rtx set = single_set (incr);
3062   rtx q = SET_DEST (set);
3063   rtx y = SET_SRC (set);
3064   int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
3065
3066   /* Make sure this reg appears only once in this insn.  */
3067   if (count_occurrences (PATTERN (insn), incr_reg, 1) != 1)
3068     return;
3069
3070   if (dead_or_set_p (incr, incr_reg)
3071       /* Mustn't autoinc an eliminable register.  */
3072       && (regno >= FIRST_PSEUDO_REGISTER
3073           || ! TEST_HARD_REG_BIT (elim_reg_set, regno)))
3074     {
3075       /* This is the simple case.  Try to make the auto-inc.  If
3076          we can't, we are done.  Otherwise, we will do any
3077          needed updates below.  */
3078       if (! validate_change (insn, &XEXP (mem, 0), inc, 0))
3079         return;
3080     }
3081   else if (GET_CODE (q) == REG
3082            /* PREV_INSN used here to check the semi-open interval
3083               [insn,incr).  */
3084            && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
3085            /* We must also check for sets of q as q may be
3086               a call clobbered hard register and there may
3087               be a call between PREV_INSN (insn) and incr.  */
3088            && ! reg_set_between_p (q,  PREV_INSN (insn), incr))
3089     {
3090       /* We have *p followed sometime later by q = p+size.
3091          Both p and q must be live afterward,
3092          and q is not used between INSN and its assignment.
3093          Change it to q = p, ...*q..., q = q+size.
3094          Then fall into the usual case.  */
3095       rtx insns, temp;
3096
3097       start_sequence ();
3098       emit_move_insn (q, incr_reg);
3099       insns = get_insns ();
3100       end_sequence ();
3101
3102       if (basic_block_for_insn)
3103         for (temp = insns; temp; temp = NEXT_INSN (temp))
3104           set_block_for_insn (temp, pbi->bb);
3105
3106       /* If we can't make the auto-inc, or can't make the
3107          replacement into Y, exit.  There's no point in making
3108          the change below if we can't do the auto-inc and doing
3109          so is not correct in the pre-inc case.  */
3110
3111       XEXP (inc, 0) = q;
3112       validate_change (insn, &XEXP (mem, 0), inc, 1);
3113       validate_change (incr, &XEXP (y, opnum), q, 1);
3114       if (! apply_change_group ())
3115         return;
3116
3117       /* We now know we'll be doing this change, so emit the
3118          new insn(s) and do the updates.  */
3119       emit_insns_before (insns, insn);
3120
3121       if (pbi->bb->head == insn)
3122         pbi->bb->head = insns;
3123
3124       /* INCR will become a NOTE and INSN won't contain a
3125          use of INCR_REG.  If a use of INCR_REG was just placed in
3126          the insn before INSN, make that the next use.
3127          Otherwise, invalidate it.  */
3128       if (GET_CODE (PREV_INSN (insn)) == INSN
3129           && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
3130           && SET_SRC (PATTERN (PREV_INSN (insn))) == incr_reg)
3131         pbi->reg_next_use[regno] = PREV_INSN (insn);
3132       else
3133         pbi->reg_next_use[regno] = 0;
3134
3135       incr_reg = q;
3136       regno = REGNO (q);
3137
3138       /* REGNO is now used in INCR which is below INSN, but
3139          it previously wasn't live here.  If we don't mark
3140          it as live, we'll put a REG_DEAD note for it
3141          on this insn, which is incorrect.  */
3142       SET_REGNO_REG_SET (pbi->reg_live, regno);
3143
3144       /* If there are any calls between INSN and INCR, show
3145          that REGNO now crosses them.  */
3146       for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
3147         if (GET_CODE (temp) == CALL_INSN)
3148           REG_N_CALLS_CROSSED (regno)++;
3149
3150       /* Invalidate alias info for Q since we just changed its value.  */
3151       clear_reg_alias_info (q);
3152     }
3153   else
3154     return;
3155
3156   /* If we haven't returned, it means we were able to make the
3157      auto-inc, so update the status.  First, record that this insn
3158      has an implicit side effect.  */
3159
3160   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, incr_reg, REG_NOTES (insn));
3161
3162   /* Modify the old increment-insn to simply copy
3163      the already-incremented value of our register.  */
3164   if (! validate_change (incr, &SET_SRC (set), incr_reg, 0))
3165     abort ();
3166
3167   /* If that makes it a no-op (copying the register into itself) delete
3168      it so it won't appear to be a "use" and a "set" of this
3169      register.  */
3170   if (REGNO (SET_DEST (set)) == REGNO (incr_reg))
3171     {
3172       /* If the original source was dead, it's dead now.  */
3173       rtx note;
3174
3175       while ((note = find_reg_note (incr, REG_DEAD, NULL_RTX)) != NULL_RTX)
3176         {
3177           remove_note (incr, note);
3178           if (XEXP (note, 0) != incr_reg)
3179             CLEAR_REGNO_REG_SET (pbi->reg_live, REGNO (XEXP (note, 0)));
3180         }
3181
3182       PUT_CODE (incr, NOTE);
3183       NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
3184       NOTE_SOURCE_FILE (incr) = 0;
3185     }
3186
3187   if (regno >= FIRST_PSEUDO_REGISTER)
3188     {
3189       /* Count an extra reference to the reg.  When a reg is
3190          incremented, spilling it is worse, so we want to make
3191          that less likely.  */
3192       REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3193
3194       /* Count the increment as a setting of the register,
3195          even though it isn't a SET in rtl.  */
3196       REG_N_SETS (regno)++;
3197     }
3198 }
3199
3200 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
3201    reference.  */
3202
3203 static void
3204 find_auto_inc (pbi, x, insn)
3205      struct propagate_block_info *pbi;
3206      rtx x;
3207      rtx insn;
3208 {
3209   rtx addr = XEXP (x, 0);
3210   HOST_WIDE_INT offset = 0;
3211   rtx set, y, incr, inc_val;
3212   int regno;
3213   int size = GET_MODE_SIZE (GET_MODE (x));
3214
3215   if (GET_CODE (insn) == JUMP_INSN)
3216     return;
3217
3218   /* Here we detect use of an index register which might be good for
3219      postincrement, postdecrement, preincrement, or predecrement.  */
3220
3221   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
3222     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
3223
3224   if (GET_CODE (addr) != REG)
3225     return;
3226
3227   regno = REGNO (addr);
3228
3229   /* Is the next use an increment that might make auto-increment? */
3230   incr = pbi->reg_next_use[regno];
3231   if (incr == 0 || BLOCK_NUM (incr) != BLOCK_NUM (insn))
3232     return;
3233   set = single_set (incr);
3234   if (set == 0 || GET_CODE (set) != SET)
3235     return;
3236   y = SET_SRC (set);
3237
3238   if (GET_CODE (y) != PLUS)
3239     return;
3240
3241   if (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) == REGNO (addr))
3242     inc_val = XEXP (y, 1);
3243   else if (REG_P (XEXP (y, 1)) && REGNO (XEXP (y, 1)) == REGNO (addr))
3244     inc_val = XEXP (y, 0);
3245   else
3246     return;
3247
3248   if (GET_CODE (inc_val) == CONST_INT)
3249     {
3250       if (HAVE_POST_INCREMENT
3251           && (INTVAL (inc_val) == size && offset == 0))
3252         attempt_auto_inc (pbi, gen_rtx_POST_INC (Pmode, addr), insn, x,
3253                           incr, addr);
3254       else if (HAVE_POST_DECREMENT
3255                && (INTVAL (inc_val) == -size && offset == 0))
3256         attempt_auto_inc (pbi, gen_rtx_POST_DEC (Pmode, addr), insn, x,
3257                           incr, addr);
3258       else if (HAVE_PRE_INCREMENT
3259                && (INTVAL (inc_val) == size && offset == size))
3260         attempt_auto_inc (pbi, gen_rtx_PRE_INC (Pmode, addr), insn, x,
3261                           incr, addr);
3262       else if (HAVE_PRE_DECREMENT
3263                && (INTVAL (inc_val) == -size && offset == -size))
3264         attempt_auto_inc (pbi, gen_rtx_PRE_DEC (Pmode, addr), insn, x,
3265                           incr, addr);
3266       else if (HAVE_POST_MODIFY_DISP && offset == 0)
3267         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3268                                                     gen_rtx_PLUS (Pmode,
3269                                                                   addr,
3270                                                                   inc_val)),
3271                           insn, x, incr, addr);
3272     }
3273   else if (GET_CODE (inc_val) == REG
3274            && ! reg_set_between_p (inc_val, PREV_INSN (insn),
3275                                    NEXT_INSN (incr)))
3276
3277     {
3278       if (HAVE_POST_MODIFY_REG && offset == 0)
3279         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3280                                                     gen_rtx_PLUS (Pmode,
3281                                                                   addr,
3282                                                                   inc_val)),
3283                           insn, x, incr, addr);
3284     }
3285 }
3286
3287 #endif /* AUTO_INC_DEC */
3288 \f
3289 static void
3290 mark_used_reg (pbi, reg, cond, insn)
3291      struct propagate_block_info *pbi;
3292      rtx reg;
3293      rtx cond ATTRIBUTE_UNUSED;
3294      rtx insn;
3295 {
3296   unsigned int regno_first, regno_last, i;
3297   int some_was_live, some_was_dead, some_not_set;
3298
3299   regno_last = regno_first = REGNO (reg);
3300   if (regno_first < FIRST_PSEUDO_REGISTER)
3301     regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
3302
3303   /* Find out if any of this register is live after this instruction.  */
3304   some_was_live = some_was_dead = 0;
3305   for (i = regno_first; i <= regno_last; ++i)
3306     {
3307       int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
3308       some_was_live |= needed_regno;
3309       some_was_dead |= ! needed_regno;
3310     }
3311
3312   /* Find out if any of the register was set this insn.  */
3313   some_not_set = 0;
3314   for (i = regno_first; i <= regno_last; ++i)
3315     some_not_set |= ! REGNO_REG_SET_P (pbi->new_set, i);
3316
3317   if (pbi->flags & (PROP_LOG_LINKS | PROP_AUTOINC))
3318     {
3319       /* Record where each reg is used, so when the reg is set we know
3320          the next insn that uses it.  */
3321       pbi->reg_next_use[regno_first] = insn;
3322     }
3323
3324   if (pbi->flags & PROP_REG_INFO)
3325     {
3326       if (regno_first < FIRST_PSEUDO_REGISTER)
3327         {
3328           /* If this is a register we are going to try to eliminate,
3329              don't mark it live here.  If we are successful in
3330              eliminating it, it need not be live unless it is used for
3331              pseudos, in which case it will have been set live when it
3332              was allocated to the pseudos.  If the register will not
3333              be eliminated, reload will set it live at that point.
3334
3335              Otherwise, record that this function uses this register.  */
3336           /* ??? The PPC backend tries to "eliminate" on the pic
3337              register to itself.  This should be fixed.  In the mean
3338              time, hack around it.  */
3339
3340           if (! (TEST_HARD_REG_BIT (elim_reg_set, regno_first)
3341                  && (regno_first == FRAME_POINTER_REGNUM
3342                      || regno_first == ARG_POINTER_REGNUM)))
3343             for (i = regno_first; i <= regno_last; ++i)
3344               regs_ever_live[i] = 1;
3345         }
3346       else
3347         {
3348           /* Keep track of which basic block each reg appears in.  */
3349
3350           register int blocknum = pbi->bb->index;
3351           if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
3352             REG_BASIC_BLOCK (regno_first) = blocknum;
3353           else if (REG_BASIC_BLOCK (regno_first) != blocknum)
3354             REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
3355
3356           /* Count (weighted) number of uses of each reg.  */
3357           REG_FREQ (regno_first) += REG_FREQ_FROM_BB (pbi->bb);
3358           REG_N_REFS (regno_first)++;
3359         }
3360     }
3361
3362   /* Record and count the insns in which a reg dies.  If it is used in
3363      this insn and was dead below the insn then it dies in this insn.
3364      If it was set in this insn, we do not make a REG_DEAD note;
3365      likewise if we already made such a note.  */
3366   if ((pbi->flags & (PROP_DEATH_NOTES | PROP_REG_INFO))
3367       && some_was_dead
3368       && some_not_set)
3369     {
3370       /* Check for the case where the register dying partially
3371          overlaps the register set by this insn.  */
3372       if (regno_first != regno_last)
3373         for (i = regno_first; i <= regno_last; ++i)
3374           some_was_live |= REGNO_REG_SET_P (pbi->new_set, i);
3375
3376       /* If none of the words in X is needed, make a REG_DEAD note.
3377          Otherwise, we must make partial REG_DEAD notes.  */
3378       if (! some_was_live)
3379         {
3380           if ((pbi->flags & PROP_DEATH_NOTES)
3381               && ! find_regno_note (insn, REG_DEAD, regno_first))
3382             REG_NOTES (insn)
3383               = alloc_EXPR_LIST (REG_DEAD, reg, REG_NOTES (insn));
3384
3385           if (pbi->flags & PROP_REG_INFO)
3386             REG_N_DEATHS (regno_first)++;
3387         }
3388       else
3389         {
3390           /* Don't make a REG_DEAD note for a part of a register
3391              that is set in the insn.  */
3392           for (i = regno_first; i <= regno_last; ++i)
3393             if (! REGNO_REG_SET_P (pbi->reg_live, i)
3394                 && ! dead_or_set_regno_p (insn, i))
3395               REG_NOTES (insn)
3396                 = alloc_EXPR_LIST (REG_DEAD,
3397                                    gen_rtx_REG (reg_raw_mode[i], i),
3398                                    REG_NOTES (insn));
3399         }
3400     }
3401
3402   /* Mark the register as being live.  */
3403   for (i = regno_first; i <= regno_last; ++i)
3404     {
3405       SET_REGNO_REG_SET (pbi->reg_live, i);
3406
3407 #ifdef HAVE_conditional_execution
3408       /* If this is a conditional use, record that fact.  If it is later
3409          conditionally set, we'll know to kill the register.  */
3410       if (cond != NULL_RTX)
3411         {
3412           splay_tree_node node;
3413           struct reg_cond_life_info *rcli;
3414           rtx ncond;
3415
3416           if (some_was_live)
3417             {
3418               node = splay_tree_lookup (pbi->reg_cond_dead, i);
3419               if (node == NULL)
3420                 {
3421                   /* The register was unconditionally live previously.
3422                      No need to do anything.  */
3423                 }
3424               else
3425                 {
3426                   /* The register was conditionally live previously.
3427                      Subtract the new life cond from the old death cond.  */
3428                   rcli = (struct reg_cond_life_info *) node->value;
3429                   ncond = rcli->condition;
3430                   ncond = and_reg_cond (ncond, not_reg_cond (cond), 1);
3431
3432                   /* If the register is now unconditionally live,
3433                      remove the entry in the splay_tree.  */
3434                   if (ncond == const0_rtx)
3435                     splay_tree_remove (pbi->reg_cond_dead, i);
3436                   else
3437                     {
3438                       rcli->condition = ncond;
3439                       SET_REGNO_REG_SET (pbi->reg_cond_reg,
3440                                          REGNO (XEXP (cond, 0)));
3441                     }
3442                 }
3443             }
3444           else
3445             {
3446               /* The register was not previously live at all.  Record
3447                  the condition under which it is still dead.  */
3448               rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
3449               rcli->condition = not_reg_cond (cond);
3450               rcli->stores = const0_rtx;
3451               rcli->orig_condition = const0_rtx;
3452               splay_tree_insert (pbi->reg_cond_dead, i,
3453                                  (splay_tree_value) rcli);
3454
3455               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3456             }
3457         }
3458       else if (some_was_live)
3459         {
3460           /* The register may have been conditionally live previously, but
3461              is now unconditionally live.  Remove it from the conditionally
3462              dead list, so that a conditional set won't cause us to think
3463              it dead.  */
3464           splay_tree_remove (pbi->reg_cond_dead, i);
3465         }
3466 #endif
3467     }
3468 }
3469
3470 /* Scan expression X and store a 1-bit in NEW_LIVE for each reg it uses.
3471    This is done assuming the registers needed from X are those that
3472    have 1-bits in PBI->REG_LIVE.
3473
3474    INSN is the containing instruction.  If INSN is dead, this function
3475    is not called.  */
3476
3477 static void
3478 mark_used_regs (pbi, x, cond, insn)
3479      struct propagate_block_info *pbi;
3480      rtx x, cond, insn;
3481 {
3482   register RTX_CODE code;
3483   register int regno;
3484   int flags = pbi->flags;
3485
3486  retry:
3487   code = GET_CODE (x);
3488   switch (code)
3489     {
3490     case LABEL_REF:
3491     case SYMBOL_REF:
3492     case CONST_INT:
3493     case CONST:
3494     case CONST_DOUBLE:
3495     case PC:
3496     case ADDR_VEC:
3497     case ADDR_DIFF_VEC:
3498       return;
3499
3500 #ifdef HAVE_cc0
3501     case CC0:
3502       pbi->cc0_live = 1;
3503       return;
3504 #endif
3505
3506     case CLOBBER:
3507       /* If we are clobbering a MEM, mark any registers inside the address
3508          as being used.  */
3509       if (GET_CODE (XEXP (x, 0)) == MEM)
3510         mark_used_regs (pbi, XEXP (XEXP (x, 0), 0), cond, insn);
3511       return;
3512
3513     case MEM:
3514       /* Don't bother watching stores to mems if this is not the
3515          final pass.  We'll not be deleting dead stores this round.  */
3516       if (optimize && (flags & PROP_SCAN_DEAD_CODE))
3517         {
3518           /* Invalidate the data for the last MEM stored, but only if MEM is
3519              something that can be stored into.  */
3520           if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
3521               && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
3522             /* Needn't clear the memory set list.  */
3523             ;
3524           else
3525             {
3526               rtx temp = pbi->mem_set_list;
3527               rtx prev = NULL_RTX;
3528               rtx next;
3529
3530               while (temp)
3531                 {
3532                   next = XEXP (temp, 1);
3533                   if (anti_dependence (XEXP (temp, 0), x))
3534                     {
3535                       /* Splice temp out of the list.  */
3536                       if (prev)
3537                         XEXP (prev, 1) = next;
3538                       else
3539                         pbi->mem_set_list = next;
3540                       free_EXPR_LIST_node (temp);
3541                       pbi->mem_set_list_len--;
3542                     }
3543                   else
3544                     prev = temp;
3545                   temp = next;
3546                 }
3547             }
3548
3549           /* If the memory reference had embedded side effects (autoincrement
3550              address modes.  Then we may need to kill some entries on the
3551              memory set list.  */
3552           if (insn)
3553             invalidate_mems_from_autoinc (pbi, insn);
3554         }
3555
3556 #ifdef AUTO_INC_DEC
3557       if (flags & PROP_AUTOINC)
3558         find_auto_inc (pbi, x, insn);
3559 #endif
3560       break;
3561
3562     case SUBREG:
3563 #ifdef CLASS_CANNOT_CHANGE_MODE
3564       if (GET_CODE (SUBREG_REG (x)) == REG
3565           && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER
3566           && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (x),
3567                                          GET_MODE (SUBREG_REG (x))))
3568         REG_CHANGES_MODE (REGNO (SUBREG_REG (x))) = 1;
3569 #endif
3570
3571       /* While we're here, optimize this case.  */
3572       x = SUBREG_REG (x);
3573       if (GET_CODE (x) != REG)
3574         goto retry;
3575       /* Fall through.  */
3576
3577     case REG:
3578       /* See a register other than being set => mark it as needed.  */
3579       mark_used_reg (pbi, x, cond, insn);
3580       return;
3581
3582     case SET:
3583       {
3584         register rtx testreg = SET_DEST (x);
3585         int mark_dest = 0;
3586
3587         /* If storing into MEM, don't show it as being used.  But do
3588            show the address as being used.  */
3589         if (GET_CODE (testreg) == MEM)
3590           {
3591 #ifdef AUTO_INC_DEC
3592             if (flags & PROP_AUTOINC)
3593               find_auto_inc (pbi, testreg, insn);
3594 #endif
3595             mark_used_regs (pbi, XEXP (testreg, 0), cond, insn);
3596             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3597             return;
3598           }
3599
3600         /* Storing in STRICT_LOW_PART is like storing in a reg
3601            in that this SET might be dead, so ignore it in TESTREG.
3602            but in some other ways it is like using the reg.
3603
3604            Storing in a SUBREG or a bit field is like storing the entire
3605            register in that if the register's value is not used
3606            then this SET is not needed.  */
3607         while (GET_CODE (testreg) == STRICT_LOW_PART
3608                || GET_CODE (testreg) == ZERO_EXTRACT
3609                || GET_CODE (testreg) == SIGN_EXTRACT
3610                || GET_CODE (testreg) == SUBREG)
3611           {
3612 #ifdef CLASS_CANNOT_CHANGE_MODE
3613             if (GET_CODE (testreg) == SUBREG
3614                 && GET_CODE (SUBREG_REG (testreg)) == REG
3615                 && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER
3616                 && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (testreg)),
3617                                                GET_MODE (testreg)))
3618               REG_CHANGES_MODE (REGNO (SUBREG_REG (testreg))) = 1;
3619 #endif
3620
3621             /* Modifying a single register in an alternate mode
3622                does not use any of the old value.  But these other
3623                ways of storing in a register do use the old value.  */
3624             if (GET_CODE (testreg) == SUBREG
3625                 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
3626               ;
3627             else
3628               mark_dest = 1;
3629
3630             testreg = XEXP (testreg, 0);
3631           }
3632
3633         /* If this is a store into a register or group of registers,
3634            recursively scan the value being stored.  */
3635
3636         if ((GET_CODE (testreg) == PARALLEL
3637              && GET_MODE (testreg) == BLKmode)
3638             || (GET_CODE (testreg) == REG
3639                 && (regno = REGNO (testreg),
3640                     ! (regno == FRAME_POINTER_REGNUM
3641                        && (! reload_completed || frame_pointer_needed)))
3642 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
3643                 && ! (regno == HARD_FRAME_POINTER_REGNUM
3644                       && (! reload_completed || frame_pointer_needed))
3645 #endif
3646 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3647                 && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
3648 #endif
3649                 ))
3650           {
3651             if (mark_dest)
3652               mark_used_regs (pbi, SET_DEST (x), cond, insn);
3653             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3654             return;
3655           }
3656       }
3657       break;
3658
3659     case ASM_OPERANDS:
3660     case UNSPEC_VOLATILE:
3661     case TRAP_IF:
3662     case ASM_INPUT:
3663       {
3664         /* Traditional and volatile asm instructions must be considered to use
3665            and clobber all hard registers, all pseudo-registers and all of
3666            memory.  So must TRAP_IF and UNSPEC_VOLATILE operations.
3667
3668            Consider for instance a volatile asm that changes the fpu rounding
3669            mode.  An insn should not be moved across this even if it only uses
3670            pseudo-regs because it might give an incorrectly rounded result.
3671
3672            ?!? Unfortunately, marking all hard registers as live causes massive
3673            problems for the register allocator and marking all pseudos as live
3674            creates mountains of uninitialized variable warnings.
3675
3676            So for now, just clear the memory set list and mark any regs
3677            we can find in ASM_OPERANDS as used.  */
3678         if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
3679           {
3680             free_EXPR_LIST_list (&pbi->mem_set_list);
3681             pbi->mem_set_list_len = 0;
3682           }
3683
3684         /* For all ASM_OPERANDS, we must traverse the vector of input operands.
3685            We can not just fall through here since then we would be confused
3686            by the ASM_INPUT rtx inside ASM_OPERANDS, which do not indicate
3687            traditional asms unlike their normal usage.  */
3688         if (code == ASM_OPERANDS)
3689           {
3690             int j;
3691
3692             for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++)
3693               mark_used_regs (pbi, ASM_OPERANDS_INPUT (x, j), cond, insn);
3694           }
3695         break;
3696       }
3697
3698     case COND_EXEC:
3699       if (cond != NULL_RTX)
3700         abort ();
3701
3702       mark_used_regs (pbi, COND_EXEC_TEST (x), NULL_RTX, insn);
3703
3704       cond = COND_EXEC_TEST (x);
3705       x = COND_EXEC_CODE (x);
3706       goto retry;
3707
3708     case PHI:
3709       /* We _do_not_ want to scan operands of phi nodes.  Operands of
3710          a phi function are evaluated only when control reaches this
3711          block along a particular edge.  Therefore, regs that appear
3712          as arguments to phi should not be added to the global live at
3713          start.  */
3714       return;
3715
3716     default:
3717       break;
3718     }
3719
3720   /* Recursively scan the operands of this expression.  */
3721
3722   {
3723     register const char * const fmt = GET_RTX_FORMAT (code);
3724     register int i;
3725
3726     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3727       {
3728         if (fmt[i] == 'e')
3729           {
3730             /* Tail recursive case: save a function call level.  */
3731             if (i == 0)
3732               {
3733                 x = XEXP (x, 0);
3734                 goto retry;
3735               }
3736             mark_used_regs (pbi, XEXP (x, i), cond, insn);
3737           }
3738         else if (fmt[i] == 'E')
3739           {
3740             register int j;
3741             for (j = 0; j < XVECLEN (x, i); j++)
3742               mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn);
3743           }
3744       }
3745   }
3746 }
3747 \f
3748 #ifdef AUTO_INC_DEC
3749
3750 static int
3751 try_pre_increment_1 (pbi, insn)
3752      struct propagate_block_info *pbi;
3753      rtx insn;
3754 {
3755   /* Find the next use of this reg.  If in same basic block,
3756      make it do pre-increment or pre-decrement if appropriate.  */
3757   rtx x = single_set (insn);
3758   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
3759                           * INTVAL (XEXP (SET_SRC (x), 1)));
3760   int regno = REGNO (SET_DEST (x));
3761   rtx y = pbi->reg_next_use[regno];
3762   if (y != 0
3763       && SET_DEST (x) != stack_pointer_rtx
3764       && BLOCK_NUM (y) == BLOCK_NUM (insn)
3765       /* Don't do this if the reg dies, or gets set in y; a standard addressing
3766          mode would be better.  */
3767       && ! dead_or_set_p (y, SET_DEST (x))
3768       && try_pre_increment (y, SET_DEST (x), amount))
3769     {
3770       /* We have found a suitable auto-increment and already changed
3771          insn Y to do it.  So flush this increment instruction.  */
3772       propagate_block_delete_insn (pbi->bb, insn);
3773
3774       /* Count a reference to this reg for the increment insn we are
3775          deleting.  When a reg is incremented, spilling it is worse,
3776          so we want to make that less likely.  */
3777       if (regno >= FIRST_PSEUDO_REGISTER)
3778         {
3779           REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3780           REG_N_SETS (regno)++;
3781         }
3782
3783       /* Flush any remembered memories depending on the value of
3784          the incremented register.  */
3785       invalidate_mems_from_set (pbi, SET_DEST (x));
3786
3787       return 1;
3788     }
3789   return 0;
3790 }
3791
3792 /* Try to change INSN so that it does pre-increment or pre-decrement
3793    addressing on register REG in order to add AMOUNT to REG.
3794    AMOUNT is negative for pre-decrement.
3795    Returns 1 if the change could be made.
3796    This checks all about the validity of the result of modifying INSN.  */
3797
3798 static int
3799 try_pre_increment (insn, reg, amount)
3800      rtx insn, reg;
3801      HOST_WIDE_INT amount;
3802 {
3803   register rtx use;
3804
3805   /* Nonzero if we can try to make a pre-increment or pre-decrement.
3806      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
3807   int pre_ok = 0;
3808   /* Nonzero if we can try to make a post-increment or post-decrement.
3809      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
3810      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
3811      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
3812   int post_ok = 0;
3813
3814   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
3815   int do_post = 0;
3816
3817   /* From the sign of increment, see which possibilities are conceivable
3818      on this target machine.  */
3819   if (HAVE_PRE_INCREMENT && amount > 0)
3820     pre_ok = 1;
3821   if (HAVE_POST_INCREMENT && amount > 0)
3822     post_ok = 1;
3823
3824   if (HAVE_PRE_DECREMENT && amount < 0)
3825     pre_ok = 1;
3826   if (HAVE_POST_DECREMENT && amount < 0)
3827     post_ok = 1;
3828
3829   if (! (pre_ok || post_ok))
3830     return 0;
3831
3832   /* It is not safe to add a side effect to a jump insn
3833      because if the incremented register is spilled and must be reloaded
3834      there would be no way to store the incremented value back in memory.  */
3835
3836   if (GET_CODE (insn) == JUMP_INSN)
3837     return 0;
3838
3839   use = 0;
3840   if (pre_ok)
3841     use = find_use_as_address (PATTERN (insn), reg, 0);
3842   if (post_ok && (use == 0 || use == (rtx) 1))
3843     {
3844       use = find_use_as_address (PATTERN (insn), reg, -amount);
3845       do_post = 1;
3846     }
3847
3848   if (use == 0 || use == (rtx) 1)
3849     return 0;
3850
3851   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
3852     return 0;
3853
3854   /* See if this combination of instruction and addressing mode exists.  */
3855   if (! validate_change (insn, &XEXP (use, 0),
3856                          gen_rtx_fmt_e (amount > 0
3857                                         ? (do_post ? POST_INC : PRE_INC)
3858                                         : (do_post ? POST_DEC : PRE_DEC),
3859                                         Pmode, reg), 0))
3860     return 0;
3861
3862   /* Record that this insn now has an implicit side effect on X.  */
3863   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, reg, REG_NOTES (insn));
3864   return 1;
3865 }
3866
3867 #endif /* AUTO_INC_DEC */
3868 \f
3869 /* Find the place in the rtx X where REG is used as a memory address.
3870    Return the MEM rtx that so uses it.
3871    If PLUSCONST is nonzero, search instead for a memory address equivalent to
3872    (plus REG (const_int PLUSCONST)).
3873
3874    If such an address does not appear, return 0.
3875    If REG appears more than once, or is used other than in such an address,
3876    return (rtx)1.  */
3877
3878 rtx
3879 find_use_as_address (x, reg, plusconst)
3880      register rtx x;
3881      rtx reg;
3882      HOST_WIDE_INT plusconst;
3883 {
3884   enum rtx_code code = GET_CODE (x);
3885   const char * const fmt = GET_RTX_FORMAT (code);
3886   register int i;
3887   register rtx value = 0;
3888   register rtx tem;
3889
3890   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
3891     return x;
3892
3893   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
3894       && XEXP (XEXP (x, 0), 0) == reg
3895       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
3896       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
3897     return x;
3898
3899   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
3900     {
3901       /* If REG occurs inside a MEM used in a bit-field reference,
3902          that is unacceptable.  */
3903       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
3904         return (rtx) (HOST_WIDE_INT) 1;
3905     }
3906
3907   if (x == reg)
3908     return (rtx) (HOST_WIDE_INT) 1;
3909
3910   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3911     {
3912       if (fmt[i] == 'e')
3913         {
3914           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
3915           if (value == 0)
3916             value = tem;
3917           else if (tem != 0)
3918             return (rtx) (HOST_WIDE_INT) 1;
3919         }
3920       else if (fmt[i] == 'E')
3921         {
3922           register int j;
3923           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3924             {
3925               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
3926               if (value == 0)
3927                 value = tem;
3928               else if (tem != 0)
3929                 return (rtx) (HOST_WIDE_INT) 1;
3930             }
3931         }
3932     }
3933
3934   return value;
3935 }
3936 \f
3937 /* Write information about registers and basic blocks into FILE.
3938    This is part of making a debugging dump.  */
3939
3940 void
3941 dump_regset (r, outf)
3942      regset r;
3943      FILE *outf;
3944 {
3945   int i;
3946   if (r == NULL)
3947     {
3948       fputs (" (nil)", outf);
3949       return;
3950     }
3951
3952   EXECUTE_IF_SET_IN_REG_SET (r, 0, i,
3953     {
3954       fprintf (outf, " %d", i);
3955       if (i < FIRST_PSEUDO_REGISTER)
3956         fprintf (outf, " [%s]",
3957                  reg_names[i]);
3958     });
3959 }
3960
3961 /* Print a human-reaable representation of R on the standard error
3962    stream.  This function is designed to be used from within the
3963    debugger.  */
3964
3965 void
3966 debug_regset (r)
3967      regset r;
3968 {
3969   dump_regset (r, stderr);
3970   putc ('\n', stderr);
3971 }
3972
3973 /* Dump the rtl into the current debugging dump file, then abort.  */
3974
3975 static void
3976 print_rtl_and_abort_fcn (file, line, function)
3977      const char *file;
3978      int line;
3979      const char *function;
3980 {
3981   if (rtl_dump_file)
3982     {
3983       print_rtl_with_bb (rtl_dump_file, get_insns ());
3984       fclose (rtl_dump_file);
3985     }
3986
3987   fancy_abort (file, line, function);
3988 }
3989
3990 /* Recompute register set/reference counts immediately prior to register
3991    allocation.
3992
3993    This avoids problems with set/reference counts changing to/from values
3994    which have special meanings to the register allocators.
3995
3996    Additionally, the reference counts are the primary component used by the
3997    register allocators to prioritize pseudos for allocation to hard regs.
3998    More accurate reference counts generally lead to better register allocation.
3999
4000    F is the first insn to be scanned.
4001
4002    LOOP_STEP denotes how much loop_depth should be incremented per
4003    loop nesting level in order to increase the ref count more for
4004    references in a loop.
4005
4006    It might be worthwhile to update REG_LIVE_LENGTH, REG_BASIC_BLOCK and
4007    possibly other information which is used by the register allocators.  */
4008
4009 void
4010 recompute_reg_usage (f, loop_step)
4011      rtx f ATTRIBUTE_UNUSED;
4012      int loop_step ATTRIBUTE_UNUSED;
4013 {
4014   allocate_reg_life_data ();
4015   update_life_info (NULL, UPDATE_LIFE_LOCAL, PROP_REG_INFO);
4016 }
4017
4018 /* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of
4019    blocks.  If BLOCKS is NULL, assume the universal set.  Returns a count
4020    of the number of registers that died.  */
4021
4022 int
4023 count_or_remove_death_notes (blocks, kill)
4024      sbitmap blocks;
4025      int kill;
4026 {
4027   int i, count = 0;
4028
4029   for (i = n_basic_blocks - 1; i >= 0; --i)
4030     {
4031       basic_block bb;
4032       rtx insn;
4033
4034       if (blocks && ! TEST_BIT (blocks, i))
4035         continue;
4036
4037       bb = BASIC_BLOCK (i);
4038
4039       for (insn = bb->head;; insn = NEXT_INSN (insn))
4040         {
4041           if (INSN_P (insn))
4042             {
4043               rtx *pprev = &REG_NOTES (insn);
4044               rtx link = *pprev;
4045
4046               while (link)
4047                 {
4048                   switch (REG_NOTE_KIND (link))
4049                     {
4050                     case REG_DEAD:
4051                       if (GET_CODE (XEXP (link, 0)) == REG)
4052                         {
4053                           rtx reg = XEXP (link, 0);
4054                           int n;
4055
4056                           if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
4057                             n = 1;
4058                           else
4059                             n = HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg));
4060                           count += n;
4061                         }
4062                       /* Fall through.  */
4063
4064                     case REG_UNUSED:
4065                       if (kill)
4066                         {
4067                           rtx next = XEXP (link, 1);
4068                           free_EXPR_LIST_node (link);
4069                           *pprev = link = next;
4070                           break;
4071                         }
4072                       /* Fall through.  */
4073
4074                     default:
4075                       pprev = &XEXP (link, 1);
4076                       link = *pprev;
4077                       break;
4078                     }
4079                 }
4080             }
4081
4082           if (insn == bb->end)
4083             break;
4084         }
4085     }
4086
4087   return count;
4088 }
4089 /* Clear LOG_LINKS fields of insns in a chain.
4090    Also clear the global_live_at_{start,end} fields of the basic block
4091    structures.  */
4092
4093 void
4094 clear_log_links (insns)
4095      rtx insns;
4096 {
4097   rtx i;
4098   int b;
4099
4100   for (i = insns; i; i = NEXT_INSN (i))
4101     if (INSN_P (i))
4102       LOG_LINKS (i) = 0;
4103
4104   for (b = 0; b < n_basic_blocks; b++)
4105     {
4106       basic_block bb = BASIC_BLOCK (b);
4107
4108       bb->global_live_at_start = NULL;
4109       bb->global_live_at_end = NULL;
4110     }
4111
4112   ENTRY_BLOCK_PTR->global_live_at_end = NULL;
4113   EXIT_BLOCK_PTR->global_live_at_start = NULL;
4114 }
4115
4116 /* Given a register bitmap, turn on the bits in a HARD_REG_SET that
4117    correspond to the hard registers, if any, set in that map.  This
4118    could be done far more efficiently by having all sorts of special-cases
4119    with moving single words, but probably isn't worth the trouble.  */
4120
4121 void
4122 reg_set_to_hard_reg_set (to, from)
4123      HARD_REG_SET *to;
4124      bitmap from;
4125 {
4126   int i;
4127
4128   EXECUTE_IF_SET_IN_BITMAP
4129     (from, 0, i,
4130      {
4131        if (i >= FIRST_PSEUDO_REGISTER)
4132          return;
4133        SET_HARD_REG_BIT (*to, i);
4134      });
4135 }