OSDN Git Service

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