OSDN Git Service

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