OSDN Git Service

* flow.c (insn_dead_p): Allow for AUTO_INC notes all the time.
[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   /* As flow is invoked after combine, we must take existing AUTO_INC
1896      expressions into account.  */
1897   for (; notes; notes = XEXP (notes, 1))
1898     {
1899       if (REG_NOTE_KIND (notes) == REG_INC)
1900         {
1901           int regno = REGNO (XEXP (notes, 0));
1902           
1903           /* Don't delete insns to set global regs.  */
1904           if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1905               || REGNO_REG_SET_P (pbi->reg_live, regno))
1906             return 0;
1907         }
1908     }
1909 #endif
1910
1911   /* If setting something that's a reg or part of one,
1912      see if that register's altered value will be live.  */
1913
1914   if (code == SET)
1915     {
1916       rtx r = SET_DEST (x);
1917
1918 #ifdef HAVE_cc0
1919       if (GET_CODE (r) == CC0)
1920         return ! pbi->cc0_live;
1921 #endif
1922
1923       /* A SET that is a subroutine call cannot be dead.  */
1924       if (GET_CODE (SET_SRC (x)) == CALL)
1925         {
1926           if (! call_ok)
1927             return 0;
1928         }
1929
1930       /* Don't eliminate loads from volatile memory or volatile asms.  */
1931       else if (volatile_refs_p (SET_SRC (x)))
1932         return 0;
1933
1934       if (GET_CODE (r) == MEM)
1935         {
1936           rtx temp, canon_r;
1937
1938           if (MEM_VOLATILE_P (r) || GET_MODE (r) == BLKmode)
1939             return 0;
1940
1941           canon_r = canon_rtx (r);
1942
1943           /* Walk the set of memory locations we are currently tracking
1944              and see if one is an identical match to this memory location.
1945              If so, this memory write is dead (remember, we're walking
1946              backwards from the end of the block to the start).  Since
1947              rtx_equal_p does not check the alias set or flags, we also
1948              must have the potential for them to conflict (anti_dependence).  */
1949           for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
1950             if (anti_dependence (r, XEXP (temp, 0)))
1951               {
1952                 rtx mem = XEXP (temp, 0);
1953
1954                 if (rtx_equal_p (XEXP (canon_r, 0), XEXP (mem, 0))
1955                     && (GET_MODE_SIZE (GET_MODE (canon_r))
1956                         <= GET_MODE_SIZE (GET_MODE (mem))))
1957                   return 1;
1958
1959 #ifdef AUTO_INC_DEC
1960                 /* Check if memory reference matches an auto increment. Only
1961                    post increment/decrement or modify are valid.  */
1962                 if (GET_MODE (mem) == GET_MODE (r)
1963                     && (GET_CODE (XEXP (mem, 0)) == POST_DEC
1964                         || GET_CODE (XEXP (mem, 0)) == POST_INC
1965                         || GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
1966                     && GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
1967                     && rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
1968                   return 1;
1969 #endif
1970               }
1971         }
1972       else
1973         {
1974           while (GET_CODE (r) == SUBREG
1975                  || GET_CODE (r) == STRICT_LOW_PART
1976                  || GET_CODE (r) == ZERO_EXTRACT)
1977             r = XEXP (r, 0);
1978
1979           if (GET_CODE (r) == REG)
1980             {
1981               int regno = REGNO (r);
1982
1983               /* Obvious.  */
1984               if (REGNO_REG_SET_P (pbi->reg_live, regno))
1985                 return 0;
1986
1987               /* If this is a hard register, verify that subsequent
1988                  words are not needed.  */
1989               if (regno < FIRST_PSEUDO_REGISTER)
1990                 {
1991                   int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
1992
1993                   while (--n > 0)
1994                     if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
1995                       return 0;
1996                 }
1997
1998               /* Don't delete insns to set global regs.  */
1999               if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2000                 return 0;
2001
2002               /* Make sure insns to set the stack pointer aren't deleted.  */
2003               if (regno == STACK_POINTER_REGNUM)
2004                 return 0;
2005
2006               /* ??? These bits might be redundant with the force live bits
2007                  in calculate_global_regs_live.  We would delete from
2008                  sequential sets; whether this actually affects real code
2009                  for anything but the stack pointer I don't know.  */
2010               /* Make sure insns to set the frame pointer aren't deleted.  */
2011               if (regno == FRAME_POINTER_REGNUM
2012                   && (! reload_completed || frame_pointer_needed))
2013                 return 0;
2014 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2015               if (regno == HARD_FRAME_POINTER_REGNUM
2016                   && (! reload_completed || frame_pointer_needed))
2017                 return 0;
2018 #endif
2019
2020 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2021               /* Make sure insns to set arg pointer are never deleted
2022                  (if the arg pointer isn't fixed, there will be a USE
2023                  for it, so we can treat it normally).  */
2024               if (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2025                 return 0;
2026 #endif
2027
2028               /* Otherwise, the set is dead.  */
2029               return 1;
2030             }
2031         }
2032     }
2033
2034   /* If performing several activities, insn is dead if each activity
2035      is individually dead.  Also, CLOBBERs and USEs can be ignored; a
2036      CLOBBER or USE that's inside a PARALLEL doesn't make the insn
2037      worth keeping.  */
2038   else if (code == PARALLEL)
2039     {
2040       int i = XVECLEN (x, 0);
2041
2042       for (i--; i >= 0; i--)
2043         if (GET_CODE (XVECEXP (x, 0, i)) != CLOBBER
2044             && GET_CODE (XVECEXP (x, 0, i)) != USE
2045             && ! insn_dead_p (pbi, XVECEXP (x, 0, i), call_ok, NULL_RTX))
2046           return 0;
2047
2048       return 1;
2049     }
2050
2051   /* A CLOBBER of a pseudo-register that is dead serves no purpose.  That
2052      is not necessarily true for hard registers.  */
2053   else if (code == CLOBBER && GET_CODE (XEXP (x, 0)) == REG
2054            && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
2055            && ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
2056     return 1;
2057
2058   /* We do not check other CLOBBER or USE here.  An insn consisting of just
2059      a CLOBBER or just a USE should not be deleted.  */
2060   return 0;
2061 }
2062
2063 /* If INSN is the last insn in a libcall, and assuming INSN is dead,
2064    return 1 if the entire library call is dead.
2065    This is true if INSN copies a register (hard or pseudo)
2066    and if the hard return reg of the call insn is dead.
2067    (The caller should have tested the destination of the SET inside
2068    INSN already for death.)
2069
2070    If this insn doesn't just copy a register, then we don't
2071    have an ordinary libcall.  In that case, cse could not have
2072    managed to substitute the source for the dest later on,
2073    so we can assume the libcall is dead.
2074
2075    PBI is the block info giving pseudoregs live before this insn.
2076    NOTE is the REG_RETVAL note of the insn.  */
2077
2078 static int
2079 libcall_dead_p (pbi, note, insn)
2080      struct propagate_block_info *pbi;
2081      rtx note;
2082      rtx insn;
2083 {
2084   rtx x = single_set (insn);
2085
2086   if (x)
2087     {
2088       rtx r = SET_SRC (x);
2089
2090       if (GET_CODE (r) == REG)
2091         {
2092           rtx call = XEXP (note, 0);
2093           rtx call_pat;
2094           int i;
2095
2096           /* Find the call insn.  */
2097           while (call != insn && GET_CODE (call) != CALL_INSN)
2098             call = NEXT_INSN (call);
2099
2100           /* If there is none, do nothing special,
2101              since ordinary death handling can understand these insns.  */
2102           if (call == insn)
2103             return 0;
2104
2105           /* See if the hard reg holding the value is dead.
2106              If this is a PARALLEL, find the call within it.  */
2107           call_pat = PATTERN (call);
2108           if (GET_CODE (call_pat) == PARALLEL)
2109             {
2110               for (i = XVECLEN (call_pat, 0) - 1; i >= 0; i--)
2111                 if (GET_CODE (XVECEXP (call_pat, 0, i)) == SET
2112                     && GET_CODE (SET_SRC (XVECEXP (call_pat, 0, i))) == CALL)
2113                   break;
2114
2115               /* This may be a library call that is returning a value
2116                  via invisible pointer.  Do nothing special, since
2117                  ordinary death handling can understand these insns.  */
2118               if (i < 0)
2119                 return 0;
2120
2121               call_pat = XVECEXP (call_pat, 0, i);
2122             }
2123
2124           return insn_dead_p (pbi, call_pat, 1, REG_NOTES (call));
2125         }
2126     }
2127   return 1;
2128 }
2129
2130 /* Return 1 if register REGNO was used before it was set, i.e. if it is
2131    live at function entry.  Don't count global register variables, variables
2132    in registers that can be used for function arg passing, or variables in
2133    fixed hard registers.  */
2134
2135 int
2136 regno_uninitialized (regno)
2137      int regno;
2138 {
2139   if (n_basic_blocks == 0
2140       || (regno < FIRST_PSEUDO_REGISTER
2141           && (global_regs[regno]
2142               || fixed_regs[regno]
2143               || FUNCTION_ARG_REGNO_P (regno))))
2144     return 0;
2145
2146   return REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno);
2147 }
2148
2149 /* 1 if register REGNO was alive at a place where `setjmp' was called
2150    and was set more than once or is an argument.
2151    Such regs may be clobbered by `longjmp'.  */
2152
2153 int
2154 regno_clobbered_at_setjmp (regno)
2155      int regno;
2156 {
2157   if (n_basic_blocks == 0)
2158     return 0;
2159
2160   return ((REG_N_SETS (regno) > 1
2161            || REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno))
2162           && REGNO_REG_SET_P (regs_live_at_setjmp, regno));
2163 }
2164 \f
2165 /* Add MEM to PBI->MEM_SET_LIST.  MEM should be canonical.  Respect the
2166    maximal list size; look for overlaps in mode and select the largest.  */
2167 static void
2168 add_to_mem_set_list (pbi, mem)
2169      struct propagate_block_info *pbi;
2170      rtx mem;
2171 {
2172   rtx i;
2173
2174   /* We don't know how large a BLKmode store is, so we must not
2175      take them into consideration.  */
2176   if (GET_MODE (mem) == BLKmode)
2177     return;
2178
2179   for (i = pbi->mem_set_list; i ; i = XEXP (i, 1))
2180     {
2181       rtx e = XEXP (i, 0);
2182       if (rtx_equal_p (XEXP (mem, 0), XEXP (e, 0)))
2183         {
2184           if (GET_MODE_SIZE (GET_MODE (mem)) > GET_MODE_SIZE (GET_MODE (e)))
2185             {
2186 #ifdef AUTO_INC_DEC
2187               /* If we must store a copy of the mem, we can just modify
2188                  the mode of the stored copy.  */
2189               if (pbi->flags & PROP_AUTOINC)
2190                 PUT_MODE (e, GET_MODE (mem));
2191               else
2192 #endif
2193                 XEXP (i, 0) = mem;
2194             }
2195           return;
2196         }
2197     }
2198
2199   if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN)
2200     {
2201 #ifdef AUTO_INC_DEC
2202       /* Store a copy of mem, otherwise the address may be
2203          scrogged by find_auto_inc.  */
2204       if (pbi->flags & PROP_AUTOINC)
2205         mem = shallow_copy_rtx (mem);
2206 #endif
2207       pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
2208       pbi->mem_set_list_len++;
2209     }
2210 }
2211
2212 /* INSN references memory, possibly using autoincrement addressing modes.
2213    Find any entries on the mem_set_list that need to be invalidated due
2214    to an address change.  */
2215
2216 static void
2217 invalidate_mems_from_autoinc (pbi, insn)
2218      struct propagate_block_info *pbi;
2219      rtx insn;
2220 {
2221   rtx note = REG_NOTES (insn);
2222   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2223     if (REG_NOTE_KIND (note) == REG_INC)
2224       invalidate_mems_from_set (pbi, XEXP (note, 0));
2225 }
2226
2227 /* EXP is a REG.  Remove any dependent entries from pbi->mem_set_list.  */
2228
2229 static void
2230 invalidate_mems_from_set (pbi, exp)
2231      struct propagate_block_info *pbi;
2232      rtx exp;
2233 {
2234   rtx temp = pbi->mem_set_list;
2235   rtx prev = NULL_RTX;
2236   rtx next;
2237
2238   while (temp)
2239     {
2240       next = XEXP (temp, 1);
2241       if (reg_overlap_mentioned_p (exp, XEXP (temp, 0)))
2242         {
2243           /* Splice this entry out of the list.  */
2244           if (prev)
2245             XEXP (prev, 1) = next;
2246           else
2247             pbi->mem_set_list = next;
2248           free_EXPR_LIST_node (temp);
2249           pbi->mem_set_list_len--;
2250         }
2251       else
2252         prev = temp;
2253       temp = next;
2254     }
2255 }
2256
2257 /* Process the registers that are set within X.  Their bits are set to
2258    1 in the regset DEAD, because they are dead prior to this insn.
2259
2260    If INSN is nonzero, it is the insn being processed.
2261
2262    FLAGS is the set of operations to perform.  */
2263
2264 static void
2265 mark_set_regs (pbi, x, insn)
2266      struct propagate_block_info *pbi;
2267      rtx x, insn;
2268 {
2269   rtx cond = NULL_RTX;
2270   rtx link;
2271   enum rtx_code code;
2272
2273   if (insn)
2274     for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
2275       {
2276         if (REG_NOTE_KIND (link) == REG_INC)
2277           mark_set_1 (pbi, SET, XEXP (link, 0),
2278                       (GET_CODE (x) == COND_EXEC
2279                        ? COND_EXEC_TEST (x) : NULL_RTX),
2280                       insn, pbi->flags);
2281       }
2282  retry:
2283   switch (code = GET_CODE (x))
2284     {
2285     case SET:
2286     case CLOBBER:
2287       mark_set_1 (pbi, code, SET_DEST (x), cond, insn, pbi->flags);
2288       return;
2289
2290     case COND_EXEC:
2291       cond = COND_EXEC_TEST (x);
2292       x = COND_EXEC_CODE (x);
2293       goto retry;
2294
2295     case PARALLEL:
2296       {
2297         int i;
2298
2299         for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
2300           {
2301             rtx sub = XVECEXP (x, 0, i);
2302             switch (code = GET_CODE (sub))
2303               {
2304               case COND_EXEC:
2305                 if (cond != NULL_RTX)
2306                   abort ();
2307
2308                 cond = COND_EXEC_TEST (sub);
2309                 sub = COND_EXEC_CODE (sub);
2310                 if (GET_CODE (sub) != SET && GET_CODE (sub) != CLOBBER)
2311                   break;
2312                 /* Fall through.  */
2313
2314               case SET:
2315               case CLOBBER:
2316                 mark_set_1 (pbi, code, SET_DEST (sub), cond, insn, pbi->flags);
2317                 break;
2318
2319               default:
2320                 break;
2321               }
2322           }
2323         break;
2324       }
2325
2326     default:
2327       break;
2328     }
2329 }
2330
2331 /* Process a single set, which appears in INSN.  REG (which may not
2332    actually be a REG, it may also be a SUBREG, PARALLEL, etc.) is
2333    being set using the CODE (which may be SET, CLOBBER, or COND_EXEC).
2334    If the set is conditional (because it appear in a COND_EXEC), COND
2335    will be the condition.  */
2336
2337 static void
2338 mark_set_1 (pbi, code, reg, cond, insn, flags)
2339      struct propagate_block_info *pbi;
2340      enum rtx_code code;
2341      rtx reg, cond, insn;
2342      int flags;
2343 {
2344   int regno_first = -1, regno_last = -1;
2345   unsigned long not_dead = 0;
2346   int i;
2347
2348   /* Modifying just one hardware register of a multi-reg value or just a
2349      byte field of a register does not mean the value from before this insn
2350      is now dead.  Of course, if it was dead after it's unused now.  */
2351
2352   switch (GET_CODE (reg))
2353     {
2354     case PARALLEL:
2355       /* Some targets place small structures in registers for return values of
2356          functions.  We have to detect this case specially here to get correct
2357          flow information.  */
2358       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
2359         if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
2360           mark_set_1 (pbi, code, XEXP (XVECEXP (reg, 0, i), 0), cond, insn,
2361                       flags);
2362       return;
2363
2364     case ZERO_EXTRACT:
2365     case SIGN_EXTRACT:
2366     case STRICT_LOW_PART:
2367       /* ??? Assumes STRICT_LOW_PART not used on multi-word registers.  */
2368       do
2369         reg = XEXP (reg, 0);
2370       while (GET_CODE (reg) == SUBREG
2371              || GET_CODE (reg) == ZERO_EXTRACT
2372              || GET_CODE (reg) == SIGN_EXTRACT
2373              || GET_CODE (reg) == STRICT_LOW_PART);
2374       if (GET_CODE (reg) == MEM)
2375         break;
2376       not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live, REGNO (reg));
2377       /* Fall through.  */
2378
2379     case REG:
2380       regno_last = regno_first = REGNO (reg);
2381       if (regno_first < FIRST_PSEUDO_REGISTER)
2382         regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
2383       break;
2384
2385     case SUBREG:
2386       if (GET_CODE (SUBREG_REG (reg)) == REG)
2387         {
2388           enum machine_mode outer_mode = GET_MODE (reg);
2389           enum machine_mode inner_mode = GET_MODE (SUBREG_REG (reg));
2390
2391           /* Identify the range of registers affected.  This is moderately
2392              tricky for hard registers.  See alter_subreg.  */
2393
2394           regno_last = regno_first = REGNO (SUBREG_REG (reg));
2395           if (regno_first < FIRST_PSEUDO_REGISTER)
2396             {
2397               regno_first += subreg_regno_offset (regno_first, inner_mode,
2398                                                   SUBREG_BYTE (reg),
2399                                                   outer_mode);
2400               regno_last = (regno_first
2401                             + HARD_REGNO_NREGS (regno_first, outer_mode) - 1);
2402
2403               /* Since we've just adjusted the register number ranges, make
2404                  sure REG matches.  Otherwise some_was_live will be clear
2405                  when it shouldn't have been, and we'll create incorrect
2406                  REG_UNUSED notes.  */
2407               reg = gen_rtx_REG (outer_mode, regno_first);
2408             }
2409           else
2410             {
2411               /* If the number of words in the subreg is less than the number
2412                  of words in the full register, we have a well-defined partial
2413                  set.  Otherwise the high bits are undefined.
2414
2415                  This is only really applicable to pseudos, since we just took
2416                  care of multi-word hard registers.  */
2417               if (((GET_MODE_SIZE (outer_mode)
2418                     + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
2419                   < ((GET_MODE_SIZE (inner_mode)
2420                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
2421                 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live,
2422                                                             regno_first);
2423
2424               reg = SUBREG_REG (reg);
2425             }
2426         }
2427       else
2428         reg = SUBREG_REG (reg);
2429       break;
2430
2431     default:
2432       break;
2433     }
2434
2435   /* If this set is a MEM, then it kills any aliased writes.
2436      If this set is a REG, then it kills any MEMs which use the reg.  */
2437   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
2438     {
2439       if (GET_CODE (reg) == REG)
2440         invalidate_mems_from_set (pbi, reg);
2441
2442       /* If the memory reference had embedded side effects (autoincrement
2443          address modes.  Then we may need to kill some entries on the
2444          memory set list.  */
2445       if (insn && GET_CODE (reg) == MEM)
2446         invalidate_mems_from_autoinc (pbi, insn);
2447
2448       if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
2449           /* ??? With more effort we could track conditional memory life.  */
2450           && ! cond
2451           /* There are no REG_INC notes for SP, so we can't assume we'll see
2452              everything that invalidates it.  To be safe, don't eliminate any
2453              stores though SP; none of them should be redundant anyway.  */
2454           && ! reg_mentioned_p (stack_pointer_rtx, reg))
2455         add_to_mem_set_list (pbi, canon_rtx (reg));
2456     }
2457
2458   if (GET_CODE (reg) == REG
2459       && ! (regno_first == FRAME_POINTER_REGNUM
2460             && (! reload_completed || frame_pointer_needed))
2461 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2462       && ! (regno_first == HARD_FRAME_POINTER_REGNUM
2463             && (! reload_completed || frame_pointer_needed))
2464 #endif
2465 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2466       && ! (regno_first == ARG_POINTER_REGNUM && fixed_regs[regno_first])
2467 #endif
2468       )
2469     {
2470       int some_was_live = 0, some_was_dead = 0;
2471
2472       for (i = regno_first; i <= regno_last; ++i)
2473         {
2474           int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
2475           if (pbi->local_set)
2476             {
2477               /* Order of the set operation matters here since both
2478                  sets may be the same.  */
2479               CLEAR_REGNO_REG_SET (pbi->cond_local_set, i);
2480               if (cond != NULL_RTX
2481                   && ! REGNO_REG_SET_P (pbi->local_set, i))
2482                 SET_REGNO_REG_SET (pbi->cond_local_set, i);
2483               else
2484                 SET_REGNO_REG_SET (pbi->local_set, i);
2485             }
2486           if (code != CLOBBER)
2487             SET_REGNO_REG_SET (pbi->new_set, i);
2488
2489           some_was_live |= needed_regno;
2490           some_was_dead |= ! needed_regno;
2491         }
2492
2493 #ifdef HAVE_conditional_execution
2494       /* Consider conditional death in deciding that the register needs
2495          a death note.  */
2496       if (some_was_live && ! not_dead
2497           /* The stack pointer is never dead.  Well, not strictly true,
2498              but it's very difficult to tell from here.  Hopefully
2499              combine_stack_adjustments will fix up the most egregious
2500              errors.  */
2501           && regno_first != STACK_POINTER_REGNUM)
2502         {
2503           for (i = regno_first; i <= regno_last; ++i)
2504             if (! mark_regno_cond_dead (pbi, i, cond))
2505               not_dead |= ((unsigned long) 1) << (i - regno_first);
2506         }
2507 #endif
2508
2509       /* Additional data to record if this is the final pass.  */
2510       if (flags & (PROP_LOG_LINKS | PROP_REG_INFO
2511                    | PROP_DEATH_NOTES | PROP_AUTOINC))
2512         {
2513           rtx y;
2514           int blocknum = pbi->bb->index;
2515
2516           y = NULL_RTX;
2517           if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2518             {
2519               y = pbi->reg_next_use[regno_first];
2520
2521               /* The next use is no longer next, since a store intervenes.  */
2522               for (i = regno_first; i <= regno_last; ++i)
2523                 pbi->reg_next_use[i] = 0;
2524             }
2525
2526           if (flags & PROP_REG_INFO)
2527             {
2528               for (i = regno_first; i <= regno_last; ++i)
2529                 {
2530                   /* Count (weighted) references, stores, etc.  This counts a
2531                      register twice if it is modified, but that is correct.  */
2532                   REG_N_SETS (i) += 1;
2533                   REG_N_REFS (i) += 1;
2534                   REG_FREQ (i) += REG_FREQ_FROM_BB (pbi->bb);
2535
2536                   /* The insns where a reg is live are normally counted
2537                      elsewhere, but we want the count to include the insn
2538                      where the reg is set, and the normal counting mechanism
2539                      would not count it.  */
2540                   REG_LIVE_LENGTH (i) += 1;
2541                 }
2542
2543               /* If this is a hard reg, record this function uses the reg.  */
2544               if (regno_first < FIRST_PSEUDO_REGISTER)
2545                 {
2546                   for (i = regno_first; i <= regno_last; i++)
2547                     regs_ever_live[i] = 1;
2548                 }
2549               else
2550                 {
2551                   /* Keep track of which basic blocks each reg appears in.  */
2552                   if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
2553                     REG_BASIC_BLOCK (regno_first) = blocknum;
2554                   else if (REG_BASIC_BLOCK (regno_first) != blocknum)
2555                     REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
2556                 }
2557             }
2558
2559           if (! some_was_dead)
2560             {
2561               if (flags & PROP_LOG_LINKS)
2562                 {
2563                   /* Make a logical link from the next following insn
2564                      that uses this register, back to this insn.
2565                      The following insns have already been processed.
2566
2567                      We don't build a LOG_LINK for hard registers containing
2568                      in ASM_OPERANDs.  If these registers get replaced,
2569                      we might wind up changing the semantics of the insn,
2570                      even if reload can make what appear to be valid
2571                      assignments later.  */
2572                   if (y && (BLOCK_NUM (y) == blocknum)
2573                       && (regno_first >= FIRST_PSEUDO_REGISTER
2574                           || asm_noperands (PATTERN (y)) < 0))
2575                     LOG_LINKS (y) = alloc_INSN_LIST (insn, LOG_LINKS (y));
2576                 }
2577             }
2578           else if (not_dead)
2579             ;
2580           else if (! some_was_live)
2581             {
2582               if (flags & PROP_REG_INFO)
2583                 REG_N_DEATHS (regno_first) += 1;
2584
2585               if (flags & PROP_DEATH_NOTES)
2586                 {
2587                   /* Note that dead stores have already been deleted
2588                      when possible.  If we get here, we have found a
2589                      dead store that cannot be eliminated (because the
2590                      same insn does something useful).  Indicate this
2591                      by marking the reg being set as dying here.  */
2592                   REG_NOTES (insn)
2593                     = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2594                 }
2595             }
2596           else
2597             {
2598               if (flags & PROP_DEATH_NOTES)
2599                 {
2600                   /* This is a case where we have a multi-word hard register
2601                      and some, but not all, of the words of the register are
2602                      needed in subsequent insns.  Write REG_UNUSED notes
2603                      for those parts that were not needed.  This case should
2604                      be rare.  */
2605
2606                   for (i = regno_first; i <= regno_last; ++i)
2607                     if (! REGNO_REG_SET_P (pbi->reg_live, i))
2608                       REG_NOTES (insn)
2609                         = alloc_EXPR_LIST (REG_UNUSED,
2610                                            gen_rtx_REG (reg_raw_mode[i], i),
2611                                            REG_NOTES (insn));
2612                 }
2613             }
2614         }
2615
2616       /* Mark the register as being dead.  */
2617       if (some_was_live
2618           /* The stack pointer is never dead.  Well, not strictly true,
2619              but it's very difficult to tell from here.  Hopefully
2620              combine_stack_adjustments will fix up the most egregious
2621              errors.  */
2622           && regno_first != STACK_POINTER_REGNUM)
2623         {
2624           for (i = regno_first; i <= regno_last; ++i)
2625             if (!(not_dead & (((unsigned long) 1) << (i - regno_first))))
2626               CLEAR_REGNO_REG_SET (pbi->reg_live, i);
2627         }
2628     }
2629   else if (GET_CODE (reg) == REG)
2630     {
2631       if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2632         pbi->reg_next_use[regno_first] = 0;
2633     }
2634
2635   /* If this is the last pass and this is a SCRATCH, show it will be dying
2636      here and count it.  */
2637   else if (GET_CODE (reg) == SCRATCH)
2638     {
2639       if (flags & PROP_DEATH_NOTES)
2640         REG_NOTES (insn)
2641           = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2642     }
2643 }
2644 \f
2645 #ifdef HAVE_conditional_execution
2646 /* Mark REGNO conditionally dead.
2647    Return true if the register is now unconditionally dead.  */
2648
2649 static int
2650 mark_regno_cond_dead (pbi, regno, cond)
2651      struct propagate_block_info *pbi;
2652      int regno;
2653      rtx cond;
2654 {
2655   /* If this is a store to a predicate register, the value of the
2656      predicate is changing, we don't know that the predicate as seen
2657      before is the same as that seen after.  Flush all dependent
2658      conditions from reg_cond_dead.  This will make all such
2659      conditionally live registers unconditionally live.  */
2660   if (REGNO_REG_SET_P (pbi->reg_cond_reg, regno))
2661     flush_reg_cond_reg (pbi, regno);
2662
2663   /* If this is an unconditional store, remove any conditional
2664      life that may have existed.  */
2665   if (cond == NULL_RTX)
2666     splay_tree_remove (pbi->reg_cond_dead, regno);
2667   else
2668     {
2669       splay_tree_node node;
2670       struct reg_cond_life_info *rcli;
2671       rtx ncond;
2672
2673       /* Otherwise this is a conditional set.  Record that fact.
2674          It may have been conditionally used, or there may be a
2675          subsequent set with a complimentary condition.  */
2676
2677       node = splay_tree_lookup (pbi->reg_cond_dead, regno);
2678       if (node == NULL)
2679         {
2680           /* The register was unconditionally live previously.
2681              Record the current condition as the condition under
2682              which it is dead.  */
2683           rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
2684           rcli->condition = cond;
2685           rcli->stores = cond;
2686           rcli->orig_condition = const0_rtx;
2687           splay_tree_insert (pbi->reg_cond_dead, regno,
2688                              (splay_tree_value) rcli);
2689
2690           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2691
2692           /* Not unconditionaly dead.  */
2693           return 0;
2694         }
2695       else
2696         {
2697           /* The register was conditionally live previously.
2698              Add the new condition to the old.  */
2699           rcli = (struct reg_cond_life_info *) node->value;
2700           ncond = rcli->condition;
2701           ncond = ior_reg_cond (ncond, cond, 1);
2702           if (rcli->stores == const0_rtx)
2703             rcli->stores = cond;
2704           else if (rcli->stores != const1_rtx)
2705             rcli->stores = ior_reg_cond (rcli->stores, cond, 1);
2706
2707           /* If the register is now unconditionally dead, remove the entry
2708              in the splay_tree.  A register is unconditionally dead if the
2709              dead condition ncond is true.  A register is also unconditionally
2710              dead if the sum of all conditional stores is an unconditional
2711              store (stores is true), and the dead condition is identically the
2712              same as the original dead condition initialized at the end of
2713              the block.  This is a pointer compare, not an rtx_equal_p
2714              compare.  */
2715           if (ncond == const1_rtx
2716               || (ncond == rcli->orig_condition && rcli->stores == const1_rtx))
2717             splay_tree_remove (pbi->reg_cond_dead, regno);
2718           else
2719             {
2720               rcli->condition = ncond;
2721
2722               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2723
2724               /* Not unconditionaly dead.  */
2725               return 0;
2726             }
2727         }
2728     }
2729
2730   return 1;
2731 }
2732
2733 /* Called from splay_tree_delete for pbi->reg_cond_life.  */
2734
2735 static void
2736 free_reg_cond_life_info (value)
2737      splay_tree_value value;
2738 {
2739   struct reg_cond_life_info *rcli = (struct reg_cond_life_info *) value;
2740   free (rcli);
2741 }
2742
2743 /* Helper function for flush_reg_cond_reg.  */
2744
2745 static int
2746 flush_reg_cond_reg_1 (node, data)
2747      splay_tree_node node;
2748      void *data;
2749 {
2750   struct reg_cond_life_info *rcli;
2751   int *xdata = (int *) data;
2752   unsigned int regno = xdata[0];
2753
2754   /* Don't need to search if last flushed value was farther on in
2755      the in-order traversal.  */
2756   if (xdata[1] >= (int) node->key)
2757     return 0;
2758
2759   /* Splice out portions of the expression that refer to regno.  */
2760   rcli = (struct reg_cond_life_info *) node->value;
2761   rcli->condition = elim_reg_cond (rcli->condition, regno);
2762   if (rcli->stores != const0_rtx && rcli->stores != const1_rtx)
2763     rcli->stores = elim_reg_cond (rcli->stores, regno);
2764
2765   /* If the entire condition is now false, signal the node to be removed.  */
2766   if (rcli->condition == const0_rtx)
2767     {
2768       xdata[1] = node->key;
2769       return -1;
2770     }
2771   else if (rcli->condition == const1_rtx)
2772     abort ();
2773
2774   return 0;
2775 }
2776
2777 /* Flush all (sub) expressions referring to REGNO from REG_COND_LIVE.  */
2778
2779 static void
2780 flush_reg_cond_reg (pbi, regno)
2781      struct propagate_block_info *pbi;
2782      int regno;
2783 {
2784   int pair[2];
2785
2786   pair[0] = regno;
2787   pair[1] = -1;
2788   while (splay_tree_foreach (pbi->reg_cond_dead,
2789                              flush_reg_cond_reg_1, pair) == -1)
2790     splay_tree_remove (pbi->reg_cond_dead, pair[1]);
2791
2792   CLEAR_REGNO_REG_SET (pbi->reg_cond_reg, regno);
2793 }
2794
2795 /* Logical arithmetic on predicate conditions.  IOR, NOT and AND.
2796    For ior/and, the ADD flag determines whether we want to add the new
2797    condition X to the old one unconditionally.  If it is zero, we will
2798    only return a new expression if X allows us to simplify part of
2799    OLD, otherwise we return OLD unchanged to the caller.
2800    If ADD is nonzero, we will return a new condition in all cases.  The
2801    toplevel caller of one of these functions should always pass 1 for
2802    ADD.  */
2803
2804 static rtx
2805 ior_reg_cond (old, x, add)
2806      rtx old, x;
2807      int add;
2808 {
2809   rtx op0, op1;
2810
2811   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
2812     {
2813       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
2814           && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
2815           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2816         return const1_rtx;
2817       if (GET_CODE (x) == GET_CODE (old)
2818           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2819         return old;
2820       if (! add)
2821         return old;
2822       return gen_rtx_IOR (0, old, x);
2823     }
2824
2825   switch (GET_CODE (old))
2826     {
2827     case IOR:
2828       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
2829       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
2830       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2831         {
2832           if (op0 == const0_rtx)
2833             return op1;
2834           if (op1 == const0_rtx)
2835             return op0;
2836           if (op0 == const1_rtx || op1 == const1_rtx)
2837             return const1_rtx;
2838           if (op0 == XEXP (old, 0))
2839             op0 = gen_rtx_IOR (0, op0, x);
2840           else
2841             op1 = gen_rtx_IOR (0, op1, x);
2842           return gen_rtx_IOR (0, op0, op1);
2843         }
2844       if (! add)
2845         return old;
2846       return gen_rtx_IOR (0, old, x);
2847
2848     case AND:
2849       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
2850       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
2851       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2852         {
2853           if (op0 == const1_rtx)
2854             return op1;
2855           if (op1 == const1_rtx)
2856             return op0;
2857           if (op0 == const0_rtx || op1 == const0_rtx)
2858             return const0_rtx;
2859           if (op0 == XEXP (old, 0))
2860             op0 = gen_rtx_IOR (0, op0, x);
2861           else
2862             op1 = gen_rtx_IOR (0, op1, x);
2863           return gen_rtx_AND (0, op0, op1);
2864         }
2865       if (! add)
2866         return old;
2867       return gen_rtx_IOR (0, old, x);
2868
2869     case NOT:
2870       op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
2871       if (op0 != XEXP (old, 0))
2872         return not_reg_cond (op0);
2873       if (! add)
2874         return old;
2875       return gen_rtx_IOR (0, old, x);
2876
2877     default:
2878       abort ();
2879     }
2880 }
2881
2882 static rtx
2883 not_reg_cond (x)
2884      rtx x;
2885 {
2886   enum rtx_code x_code;
2887
2888   if (x == const0_rtx)
2889     return const1_rtx;
2890   else if (x == const1_rtx)
2891     return const0_rtx;
2892   x_code = GET_CODE (x);
2893   if (x_code == NOT)
2894     return XEXP (x, 0);
2895   if (GET_RTX_CLASS (x_code) == '<'
2896       && GET_CODE (XEXP (x, 0)) == REG)
2897     {
2898       if (XEXP (x, 1) != const0_rtx)
2899         abort ();
2900
2901       return gen_rtx_fmt_ee (reverse_condition (x_code),
2902                              VOIDmode, XEXP (x, 0), const0_rtx);
2903     }
2904   return gen_rtx_NOT (0, x);
2905 }
2906
2907 static rtx
2908 and_reg_cond (old, x, add)
2909      rtx old, x;
2910      int add;
2911 {
2912   rtx op0, op1;
2913
2914   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
2915     {
2916       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
2917           && GET_CODE (x) == reverse_condition (GET_CODE (old))
2918           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2919         return const0_rtx;
2920       if (GET_CODE (x) == GET_CODE (old)
2921           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
2922         return old;
2923       if (! add)
2924         return old;
2925       return gen_rtx_AND (0, old, x);
2926     }
2927
2928   switch (GET_CODE (old))
2929     {
2930     case IOR:
2931       op0 = and_reg_cond (XEXP (old, 0), x, 0);
2932       op1 = and_reg_cond (XEXP (old, 1), x, 0);
2933       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2934         {
2935           if (op0 == const0_rtx)
2936             return op1;
2937           if (op1 == const0_rtx)
2938             return op0;
2939           if (op0 == const1_rtx || op1 == const1_rtx)
2940             return const1_rtx;
2941           if (op0 == XEXP (old, 0))
2942             op0 = gen_rtx_AND (0, op0, x);
2943           else
2944             op1 = gen_rtx_AND (0, op1, x);
2945           return gen_rtx_IOR (0, op0, op1);
2946         }
2947       if (! add)
2948         return old;
2949       return gen_rtx_AND (0, old, x);
2950
2951     case AND:
2952       op0 = and_reg_cond (XEXP (old, 0), x, 0);
2953       op1 = and_reg_cond (XEXP (old, 1), x, 0);
2954       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
2955         {
2956           if (op0 == const1_rtx)
2957             return op1;
2958           if (op1 == const1_rtx)
2959             return op0;
2960           if (op0 == const0_rtx || op1 == const0_rtx)
2961             return const0_rtx;
2962           if (op0 == XEXP (old, 0))
2963             op0 = gen_rtx_AND (0, op0, x);
2964           else
2965             op1 = gen_rtx_AND (0, op1, x);
2966           return gen_rtx_AND (0, op0, op1);
2967         }
2968       if (! add)
2969         return old;
2970
2971       /* If X is identical to one of the existing terms of the AND,
2972          then just return what we already have.  */
2973       /* ??? There really should be some sort of recursive check here in
2974          case there are nested ANDs.  */
2975       if ((GET_CODE (XEXP (old, 0)) == GET_CODE (x)
2976            && REGNO (XEXP (XEXP (old, 0), 0)) == REGNO (XEXP (x, 0)))
2977           || (GET_CODE (XEXP (old, 1)) == GET_CODE (x)
2978               && REGNO (XEXP (XEXP (old, 1), 0)) == REGNO (XEXP (x, 0))))
2979         return old;
2980
2981       return gen_rtx_AND (0, old, x);
2982
2983     case NOT:
2984       op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
2985       if (op0 != XEXP (old, 0))
2986         return not_reg_cond (op0);
2987       if (! add)
2988         return old;
2989       return gen_rtx_AND (0, old, x);
2990
2991     default:
2992       abort ();
2993     }
2994 }
2995
2996 /* Given a condition X, remove references to reg REGNO and return the
2997    new condition.  The removal will be done so that all conditions
2998    involving REGNO are considered to evaluate to false.  This function
2999    is used when the value of REGNO changes.  */
3000
3001 static rtx
3002 elim_reg_cond (x, regno)
3003      rtx x;
3004      unsigned int regno;
3005 {
3006   rtx op0, op1;
3007
3008   if (GET_RTX_CLASS (GET_CODE (x)) == '<')
3009     {
3010       if (REGNO (XEXP (x, 0)) == regno)
3011         return const0_rtx;
3012       return x;
3013     }
3014
3015   switch (GET_CODE (x))
3016     {
3017     case AND:
3018       op0 = elim_reg_cond (XEXP (x, 0), regno);
3019       op1 = elim_reg_cond (XEXP (x, 1), regno);
3020       if (op0 == const0_rtx || op1 == const0_rtx)
3021         return const0_rtx;
3022       if (op0 == const1_rtx)
3023         return op1;
3024       if (op1 == const1_rtx)
3025         return op0;
3026       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3027         return x;
3028       return gen_rtx_AND (0, op0, op1);
3029
3030     case IOR:
3031       op0 = elim_reg_cond (XEXP (x, 0), regno);
3032       op1 = elim_reg_cond (XEXP (x, 1), regno);
3033       if (op0 == const1_rtx || op1 == const1_rtx)
3034         return const1_rtx;
3035       if (op0 == const0_rtx)
3036         return op1;
3037       if (op1 == const0_rtx)
3038         return op0;
3039       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3040         return x;
3041       return gen_rtx_IOR (0, op0, op1);
3042
3043     case NOT:
3044       op0 = elim_reg_cond (XEXP (x, 0), regno);
3045       if (op0 == const0_rtx)
3046         return const1_rtx;
3047       if (op0 == const1_rtx)
3048         return const0_rtx;
3049       if (op0 != XEXP (x, 0))
3050         return not_reg_cond (op0);
3051       return x;
3052
3053     default:
3054       abort ();
3055     }
3056 }
3057 #endif /* HAVE_conditional_execution */
3058 \f
3059 #ifdef AUTO_INC_DEC
3060
3061 /* Try to substitute the auto-inc expression INC as the address inside
3062    MEM which occurs in INSN.  Currently, the address of MEM is an expression
3063    involving INCR_REG, and INCR is the next use of INCR_REG; it is an insn
3064    that has a single set whose source is a PLUS of INCR_REG and something
3065    else.  */
3066
3067 static void
3068 attempt_auto_inc (pbi, inc, insn, mem, incr, incr_reg)
3069      struct propagate_block_info *pbi;
3070      rtx inc, insn, mem, incr, incr_reg;
3071 {
3072   int regno = REGNO (incr_reg);
3073   rtx set = single_set (incr);
3074   rtx q = SET_DEST (set);
3075   rtx y = SET_SRC (set);
3076   int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
3077
3078   /* Make sure this reg appears only once in this insn.  */
3079   if (count_occurrences (PATTERN (insn), incr_reg, 1) != 1)
3080     return;
3081
3082   if (dead_or_set_p (incr, incr_reg)
3083       /* Mustn't autoinc an eliminable register.  */
3084       && (regno >= FIRST_PSEUDO_REGISTER
3085           || ! TEST_HARD_REG_BIT (elim_reg_set, regno)))
3086     {
3087       /* This is the simple case.  Try to make the auto-inc.  If
3088          we can't, we are done.  Otherwise, we will do any
3089          needed updates below.  */
3090       if (! validate_change (insn, &XEXP (mem, 0), inc, 0))
3091         return;
3092     }
3093   else if (GET_CODE (q) == REG
3094            /* PREV_INSN used here to check the semi-open interval
3095               [insn,incr).  */
3096            && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
3097            /* We must also check for sets of q as q may be
3098               a call clobbered hard register and there may
3099               be a call between PREV_INSN (insn) and incr.  */
3100            && ! reg_set_between_p (q,  PREV_INSN (insn), incr))
3101     {
3102       /* We have *p followed sometime later by q = p+size.
3103          Both p and q must be live afterward,
3104          and q is not used between INSN and its assignment.
3105          Change it to q = p, ...*q..., q = q+size.
3106          Then fall into the usual case.  */
3107       rtx insns, temp;
3108
3109       start_sequence ();
3110       emit_move_insn (q, incr_reg);
3111       insns = get_insns ();
3112       end_sequence ();
3113
3114       /* If we can't make the auto-inc, or can't make the
3115          replacement into Y, exit.  There's no point in making
3116          the change below if we can't do the auto-inc and doing
3117          so is not correct in the pre-inc case.  */
3118
3119       XEXP (inc, 0) = q;
3120       validate_change (insn, &XEXP (mem, 0), inc, 1);
3121       validate_change (incr, &XEXP (y, opnum), q, 1);
3122       if (! apply_change_group ())
3123         return;
3124
3125       /* We now know we'll be doing this change, so emit the
3126          new insn(s) and do the updates.  */
3127       emit_insns_before (insns, insn);
3128
3129       if (pbi->bb->head == insn)
3130         pbi->bb->head = insns;
3131
3132       /* INCR will become a NOTE and INSN won't contain a
3133          use of INCR_REG.  If a use of INCR_REG was just placed in
3134          the insn before INSN, make that the next use.
3135          Otherwise, invalidate it.  */
3136       if (GET_CODE (PREV_INSN (insn)) == INSN
3137           && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
3138           && SET_SRC (PATTERN (PREV_INSN (insn))) == incr_reg)
3139         pbi->reg_next_use[regno] = PREV_INSN (insn);
3140       else
3141         pbi->reg_next_use[regno] = 0;
3142
3143       incr_reg = q;
3144       regno = REGNO (q);
3145
3146       /* REGNO is now used in INCR which is below INSN, but
3147          it previously wasn't live here.  If we don't mark
3148          it as live, we'll put a REG_DEAD note for it
3149          on this insn, which is incorrect.  */
3150       SET_REGNO_REG_SET (pbi->reg_live, regno);
3151
3152       /* If there are any calls between INSN and INCR, show
3153          that REGNO now crosses them.  */
3154       for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
3155         if (GET_CODE (temp) == CALL_INSN)
3156           REG_N_CALLS_CROSSED (regno)++;
3157
3158       /* Invalidate alias info for Q since we just changed its value.  */
3159       clear_reg_alias_info (q);
3160     }
3161   else
3162     return;
3163
3164   /* If we haven't returned, it means we were able to make the
3165      auto-inc, so update the status.  First, record that this insn
3166      has an implicit side effect.  */
3167
3168   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, incr_reg, REG_NOTES (insn));
3169
3170   /* Modify the old increment-insn to simply copy
3171      the already-incremented value of our register.  */
3172   if (! validate_change (incr, &SET_SRC (set), incr_reg, 0))
3173     abort ();
3174
3175   /* If that makes it a no-op (copying the register into itself) delete
3176      it so it won't appear to be a "use" and a "set" of this
3177      register.  */
3178   if (REGNO (SET_DEST (set)) == REGNO (incr_reg))
3179     {
3180       /* If the original source was dead, it's dead now.  */
3181       rtx note;
3182
3183       while ((note = find_reg_note (incr, REG_DEAD, NULL_RTX)) != NULL_RTX)
3184         {
3185           remove_note (incr, note);
3186           if (XEXP (note, 0) != incr_reg)
3187             CLEAR_REGNO_REG_SET (pbi->reg_live, REGNO (XEXP (note, 0)));
3188         }
3189
3190       PUT_CODE (incr, NOTE);
3191       NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
3192       NOTE_SOURCE_FILE (incr) = 0;
3193     }
3194
3195   if (regno >= FIRST_PSEUDO_REGISTER)
3196     {
3197       /* Count an extra reference to the reg.  When a reg is
3198          incremented, spilling it is worse, so we want to make
3199          that less likely.  */
3200       REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3201
3202       /* Count the increment as a setting of the register,
3203          even though it isn't a SET in rtl.  */
3204       REG_N_SETS (regno)++;
3205     }
3206 }
3207
3208 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
3209    reference.  */
3210
3211 static void
3212 find_auto_inc (pbi, x, insn)
3213      struct propagate_block_info *pbi;
3214      rtx x;
3215      rtx insn;
3216 {
3217   rtx addr = XEXP (x, 0);
3218   HOST_WIDE_INT offset = 0;
3219   rtx set, y, incr, inc_val;
3220   int regno;
3221   int size = GET_MODE_SIZE (GET_MODE (x));
3222
3223   if (GET_CODE (insn) == JUMP_INSN)
3224     return;
3225
3226   /* Here we detect use of an index register which might be good for
3227      postincrement, postdecrement, preincrement, or predecrement.  */
3228
3229   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
3230     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
3231
3232   if (GET_CODE (addr) != REG)
3233     return;
3234
3235   regno = REGNO (addr);
3236
3237   /* Is the next use an increment that might make auto-increment? */
3238   incr = pbi->reg_next_use[regno];
3239   if (incr == 0 || BLOCK_NUM (incr) != BLOCK_NUM (insn))
3240     return;
3241   set = single_set (incr);
3242   if (set == 0 || GET_CODE (set) != SET)
3243     return;
3244   y = SET_SRC (set);
3245
3246   if (GET_CODE (y) != PLUS)
3247     return;
3248
3249   if (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) == REGNO (addr))
3250     inc_val = XEXP (y, 1);
3251   else if (REG_P (XEXP (y, 1)) && REGNO (XEXP (y, 1)) == REGNO (addr))
3252     inc_val = XEXP (y, 0);
3253   else
3254     return;
3255
3256   if (GET_CODE (inc_val) == CONST_INT)
3257     {
3258       if (HAVE_POST_INCREMENT
3259           && (INTVAL (inc_val) == size && offset == 0))
3260         attempt_auto_inc (pbi, gen_rtx_POST_INC (Pmode, addr), insn, x,
3261                           incr, addr);
3262       else if (HAVE_POST_DECREMENT
3263                && (INTVAL (inc_val) == -size && offset == 0))
3264         attempt_auto_inc (pbi, gen_rtx_POST_DEC (Pmode, addr), insn, x,
3265                           incr, addr);
3266       else if (HAVE_PRE_INCREMENT
3267                && (INTVAL (inc_val) == size && offset == size))
3268         attempt_auto_inc (pbi, gen_rtx_PRE_INC (Pmode, addr), insn, x,
3269                           incr, addr);
3270       else if (HAVE_PRE_DECREMENT
3271                && (INTVAL (inc_val) == -size && offset == -size))
3272         attempt_auto_inc (pbi, gen_rtx_PRE_DEC (Pmode, addr), insn, x,
3273                           incr, addr);
3274       else if (HAVE_POST_MODIFY_DISP && offset == 0)
3275         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3276                                                     gen_rtx_PLUS (Pmode,
3277                                                                   addr,
3278                                                                   inc_val)),
3279                           insn, x, incr, addr);
3280     }
3281   else if (GET_CODE (inc_val) == REG
3282            && ! reg_set_between_p (inc_val, PREV_INSN (insn),
3283                                    NEXT_INSN (incr)))
3284
3285     {
3286       if (HAVE_POST_MODIFY_REG && offset == 0)
3287         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3288                                                     gen_rtx_PLUS (Pmode,
3289                                                                   addr,
3290                                                                   inc_val)),
3291                           insn, x, incr, addr);
3292     }
3293 }
3294
3295 #endif /* AUTO_INC_DEC */
3296 \f
3297 static void
3298 mark_used_reg (pbi, reg, cond, insn)
3299      struct propagate_block_info *pbi;
3300      rtx reg;
3301      rtx cond ATTRIBUTE_UNUSED;
3302      rtx insn;
3303 {
3304   unsigned int regno_first, regno_last, i;
3305   int some_was_live, some_was_dead, some_not_set;
3306
3307   regno_last = regno_first = REGNO (reg);
3308   if (regno_first < FIRST_PSEUDO_REGISTER)
3309     regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
3310
3311   /* Find out if any of this register is live after this instruction.  */
3312   some_was_live = some_was_dead = 0;
3313   for (i = regno_first; i <= regno_last; ++i)
3314     {
3315       int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
3316       some_was_live |= needed_regno;
3317       some_was_dead |= ! needed_regno;
3318     }
3319
3320   /* Find out if any of the register was set this insn.  */
3321   some_not_set = 0;
3322   for (i = regno_first; i <= regno_last; ++i)
3323     some_not_set |= ! REGNO_REG_SET_P (pbi->new_set, i);
3324
3325   if (pbi->flags & (PROP_LOG_LINKS | PROP_AUTOINC))
3326     {
3327       /* Record where each reg is used, so when the reg is set we know
3328          the next insn that uses it.  */
3329       pbi->reg_next_use[regno_first] = insn;
3330     }
3331
3332   if (pbi->flags & PROP_REG_INFO)
3333     {
3334       if (regno_first < FIRST_PSEUDO_REGISTER)
3335         {
3336           /* If this is a register we are going to try to eliminate,
3337              don't mark it live here.  If we are successful in
3338              eliminating it, it need not be live unless it is used for
3339              pseudos, in which case it will have been set live when it
3340              was allocated to the pseudos.  If the register will not
3341              be eliminated, reload will set it live at that point.
3342
3343              Otherwise, record that this function uses this register.  */
3344           /* ??? The PPC backend tries to "eliminate" on the pic
3345              register to itself.  This should be fixed.  In the mean
3346              time, hack around it.  */
3347
3348           if (! (TEST_HARD_REG_BIT (elim_reg_set, regno_first)
3349                  && (regno_first == FRAME_POINTER_REGNUM
3350                      || regno_first == ARG_POINTER_REGNUM)))
3351             for (i = regno_first; i <= regno_last; ++i)
3352               regs_ever_live[i] = 1;
3353         }
3354       else
3355         {
3356           /* Keep track of which basic block each reg appears in.  */
3357
3358           int blocknum = pbi->bb->index;
3359           if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
3360             REG_BASIC_BLOCK (regno_first) = blocknum;
3361           else if (REG_BASIC_BLOCK (regno_first) != blocknum)
3362             REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
3363
3364           /* Count (weighted) number of uses of each reg.  */
3365           REG_FREQ (regno_first) += REG_FREQ_FROM_BB (pbi->bb);
3366           REG_N_REFS (regno_first)++;
3367         }
3368     }
3369
3370   /* Record and count the insns in which a reg dies.  If it is used in
3371      this insn and was dead below the insn then it dies in this insn.
3372      If it was set in this insn, we do not make a REG_DEAD note;
3373      likewise if we already made such a note.  */
3374   if ((pbi->flags & (PROP_DEATH_NOTES | PROP_REG_INFO))
3375       && some_was_dead
3376       && some_not_set)
3377     {
3378       /* Check for the case where the register dying partially
3379          overlaps the register set by this insn.  */
3380       if (regno_first != regno_last)
3381         for (i = regno_first; i <= regno_last; ++i)
3382           some_was_live |= REGNO_REG_SET_P (pbi->new_set, i);
3383
3384       /* If none of the words in X is needed, make a REG_DEAD note.
3385          Otherwise, we must make partial REG_DEAD notes.  */
3386       if (! some_was_live)
3387         {
3388           if ((pbi->flags & PROP_DEATH_NOTES)
3389               && ! find_regno_note (insn, REG_DEAD, regno_first))
3390             REG_NOTES (insn)
3391               = alloc_EXPR_LIST (REG_DEAD, reg, REG_NOTES (insn));
3392
3393           if (pbi->flags & PROP_REG_INFO)
3394             REG_N_DEATHS (regno_first)++;
3395         }
3396       else
3397         {
3398           /* Don't make a REG_DEAD note for a part of a register
3399              that is set in the insn.  */
3400           for (i = regno_first; i <= regno_last; ++i)
3401             if (! REGNO_REG_SET_P (pbi->reg_live, i)
3402                 && ! dead_or_set_regno_p (insn, i))
3403               REG_NOTES (insn)
3404                 = alloc_EXPR_LIST (REG_DEAD,
3405                                    gen_rtx_REG (reg_raw_mode[i], i),
3406                                    REG_NOTES (insn));
3407         }
3408     }
3409
3410   /* Mark the register as being live.  */
3411   for (i = regno_first; i <= regno_last; ++i)
3412     {
3413       SET_REGNO_REG_SET (pbi->reg_live, i);
3414
3415 #ifdef HAVE_conditional_execution
3416       /* If this is a conditional use, record that fact.  If it is later
3417          conditionally set, we'll know to kill the register.  */
3418       if (cond != NULL_RTX)
3419         {
3420           splay_tree_node node;
3421           struct reg_cond_life_info *rcli;
3422           rtx ncond;
3423
3424           if (some_was_live)
3425             {
3426               node = splay_tree_lookup (pbi->reg_cond_dead, i);
3427               if (node == NULL)
3428                 {
3429                   /* The register was unconditionally live previously.
3430                      No need to do anything.  */
3431                 }
3432               else
3433                 {
3434                   /* The register was conditionally live previously.
3435                      Subtract the new life cond from the old death cond.  */
3436                   rcli = (struct reg_cond_life_info *) node->value;
3437                   ncond = rcli->condition;
3438                   ncond = and_reg_cond (ncond, not_reg_cond (cond), 1);
3439
3440                   /* If the register is now unconditionally live,
3441                      remove the entry in the splay_tree.  */
3442                   if (ncond == const0_rtx)
3443                     splay_tree_remove (pbi->reg_cond_dead, i);
3444                   else
3445                     {
3446                       rcli->condition = ncond;
3447                       SET_REGNO_REG_SET (pbi->reg_cond_reg,
3448                                          REGNO (XEXP (cond, 0)));
3449                     }
3450                 }
3451             }
3452           else
3453             {
3454               /* The register was not previously live at all.  Record
3455                  the condition under which it is still dead.  */
3456               rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
3457               rcli->condition = not_reg_cond (cond);
3458               rcli->stores = const0_rtx;
3459               rcli->orig_condition = const0_rtx;
3460               splay_tree_insert (pbi->reg_cond_dead, i,
3461                                  (splay_tree_value) rcli);
3462
3463               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3464             }
3465         }
3466       else if (some_was_live)
3467         {
3468           /* The register may have been conditionally live previously, but
3469              is now unconditionally live.  Remove it from the conditionally
3470              dead list, so that a conditional set won't cause us to think
3471              it dead.  */
3472           splay_tree_remove (pbi->reg_cond_dead, i);
3473         }
3474 #endif
3475     }
3476 }
3477
3478 /* Scan expression X and store a 1-bit in NEW_LIVE for each reg it uses.
3479    This is done assuming the registers needed from X are those that
3480    have 1-bits in PBI->REG_LIVE.
3481
3482    INSN is the containing instruction.  If INSN is dead, this function
3483    is not called.  */
3484
3485 static void
3486 mark_used_regs (pbi, x, cond, insn)
3487      struct propagate_block_info *pbi;
3488      rtx x, cond, insn;
3489 {
3490   RTX_CODE code;
3491   int regno;
3492   int flags = pbi->flags;
3493
3494  retry:
3495   code = GET_CODE (x);
3496   switch (code)
3497     {
3498     case LABEL_REF:
3499     case SYMBOL_REF:
3500     case CONST_INT:
3501     case CONST:
3502     case CONST_DOUBLE:
3503     case PC:
3504     case ADDR_VEC:
3505     case ADDR_DIFF_VEC:
3506       return;
3507
3508 #ifdef HAVE_cc0
3509     case CC0:
3510       pbi->cc0_live = 1;
3511       return;
3512 #endif
3513
3514     case CLOBBER:
3515       /* If we are clobbering a MEM, mark any registers inside the address
3516          as being used.  */
3517       if (GET_CODE (XEXP (x, 0)) == MEM)
3518         mark_used_regs (pbi, XEXP (XEXP (x, 0), 0), cond, insn);
3519       return;
3520
3521     case MEM:
3522       /* Don't bother watching stores to mems if this is not the
3523          final pass.  We'll not be deleting dead stores this round.  */
3524       if (optimize && (flags & PROP_SCAN_DEAD_CODE))
3525         {
3526           /* Invalidate the data for the last MEM stored, but only if MEM is
3527              something that can be stored into.  */
3528           if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
3529               && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
3530             /* Needn't clear the memory set list.  */
3531             ;
3532           else
3533             {
3534               rtx temp = pbi->mem_set_list;
3535               rtx prev = NULL_RTX;
3536               rtx next;
3537
3538               while (temp)
3539                 {
3540                   next = XEXP (temp, 1);
3541                   if (anti_dependence (XEXP (temp, 0), x))
3542                     {
3543                       /* Splice temp out of the list.  */
3544                       if (prev)
3545                         XEXP (prev, 1) = next;
3546                       else
3547                         pbi->mem_set_list = next;
3548                       free_EXPR_LIST_node (temp);
3549                       pbi->mem_set_list_len--;
3550                     }
3551                   else
3552                     prev = temp;
3553                   temp = next;
3554                 }
3555             }
3556
3557           /* If the memory reference had embedded side effects (autoincrement
3558              address modes.  Then we may need to kill some entries on the
3559              memory set list.  */
3560           if (insn)
3561             invalidate_mems_from_autoinc (pbi, insn);
3562         }
3563
3564 #ifdef AUTO_INC_DEC
3565       if (flags & PROP_AUTOINC)
3566         find_auto_inc (pbi, x, insn);
3567 #endif
3568       break;
3569
3570     case SUBREG:
3571 #ifdef CLASS_CANNOT_CHANGE_MODE
3572       if (GET_CODE (SUBREG_REG (x)) == REG
3573           && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER
3574           && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (x),
3575                                          GET_MODE (SUBREG_REG (x))))
3576         REG_CHANGES_MODE (REGNO (SUBREG_REG (x))) = 1;
3577 #endif
3578
3579       /* While we're here, optimize this case.  */
3580       x = SUBREG_REG (x);
3581       if (GET_CODE (x) != REG)
3582         goto retry;
3583       /* Fall through.  */
3584
3585     case REG:
3586       /* See a register other than being set => mark it as needed.  */
3587       mark_used_reg (pbi, x, cond, insn);
3588       return;
3589
3590     case SET:
3591       {
3592         rtx testreg = SET_DEST (x);
3593         int mark_dest = 0;
3594
3595         /* If storing into MEM, don't show it as being used.  But do
3596            show the address as being used.  */
3597         if (GET_CODE (testreg) == MEM)
3598           {
3599 #ifdef AUTO_INC_DEC
3600             if (flags & PROP_AUTOINC)
3601               find_auto_inc (pbi, testreg, insn);
3602 #endif
3603             mark_used_regs (pbi, XEXP (testreg, 0), cond, insn);
3604             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3605             return;
3606           }
3607
3608         /* Storing in STRICT_LOW_PART is like storing in a reg
3609            in that this SET might be dead, so ignore it in TESTREG.
3610            but in some other ways it is like using the reg.
3611
3612            Storing in a SUBREG or a bit field is like storing the entire
3613            register in that if the register's value is not used
3614            then this SET is not needed.  */
3615         while (GET_CODE (testreg) == STRICT_LOW_PART
3616                || GET_CODE (testreg) == ZERO_EXTRACT
3617                || GET_CODE (testreg) == SIGN_EXTRACT
3618                || GET_CODE (testreg) == SUBREG)
3619           {
3620 #ifdef CLASS_CANNOT_CHANGE_MODE
3621             if (GET_CODE (testreg) == SUBREG
3622                 && GET_CODE (SUBREG_REG (testreg)) == REG
3623                 && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER
3624                 && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (testreg)),
3625                                                GET_MODE (testreg)))
3626               REG_CHANGES_MODE (REGNO (SUBREG_REG (testreg))) = 1;
3627 #endif
3628
3629             /* Modifying a single register in an alternate mode
3630                does not use any of the old value.  But these other
3631                ways of storing in a register do use the old value.  */
3632             if (GET_CODE (testreg) == SUBREG
3633                 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
3634               ;
3635             else
3636               mark_dest = 1;
3637
3638             testreg = XEXP (testreg, 0);
3639           }
3640
3641         /* If this is a store into a register or group of registers,
3642            recursively scan the value being stored.  */
3643
3644         if ((GET_CODE (testreg) == PARALLEL
3645              && GET_MODE (testreg) == BLKmode)
3646             || (GET_CODE (testreg) == REG
3647                 && (regno = REGNO (testreg),
3648                     ! (regno == FRAME_POINTER_REGNUM
3649                        && (! reload_completed || frame_pointer_needed)))
3650 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
3651                 && ! (regno == HARD_FRAME_POINTER_REGNUM
3652                       && (! reload_completed || frame_pointer_needed))
3653 #endif
3654 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3655                 && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
3656 #endif
3657                 ))
3658           {
3659             if (mark_dest)
3660               mark_used_regs (pbi, SET_DEST (x), cond, insn);
3661             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3662             return;
3663           }
3664       }
3665       break;
3666
3667     case ASM_OPERANDS:
3668     case UNSPEC_VOLATILE:
3669     case TRAP_IF:
3670     case ASM_INPUT:
3671       {
3672         /* Traditional and volatile asm instructions must be considered to use
3673            and clobber all hard registers, all pseudo-registers and all of
3674            memory.  So must TRAP_IF and UNSPEC_VOLATILE operations.
3675
3676            Consider for instance a volatile asm that changes the fpu rounding
3677            mode.  An insn should not be moved across this even if it only uses
3678            pseudo-regs because it might give an incorrectly rounded result.
3679
3680            ?!? Unfortunately, marking all hard registers as live causes massive
3681            problems for the register allocator and marking all pseudos as live
3682            creates mountains of uninitialized variable warnings.
3683
3684            So for now, just clear the memory set list and mark any regs
3685            we can find in ASM_OPERANDS as used.  */
3686         if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
3687           {
3688             free_EXPR_LIST_list (&pbi->mem_set_list);
3689             pbi->mem_set_list_len = 0;
3690           }
3691
3692         /* For all ASM_OPERANDS, we must traverse the vector of input operands.
3693            We can not just fall through here since then we would be confused
3694            by the ASM_INPUT rtx inside ASM_OPERANDS, which do not indicate
3695            traditional asms unlike their normal usage.  */
3696         if (code == ASM_OPERANDS)
3697           {
3698             int j;
3699
3700             for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++)
3701               mark_used_regs (pbi, ASM_OPERANDS_INPUT (x, j), cond, insn);
3702           }
3703         break;
3704       }
3705
3706     case COND_EXEC:
3707       if (cond != NULL_RTX)
3708         abort ();
3709
3710       mark_used_regs (pbi, COND_EXEC_TEST (x), NULL_RTX, insn);
3711
3712       cond = COND_EXEC_TEST (x);
3713       x = COND_EXEC_CODE (x);
3714       goto retry;
3715
3716     case PHI:
3717       /* We _do_not_ want to scan operands of phi nodes.  Operands of
3718          a phi function are evaluated only when control reaches this
3719          block along a particular edge.  Therefore, regs that appear
3720          as arguments to phi should not be added to the global live at
3721          start.  */
3722       return;
3723
3724     default:
3725       break;
3726     }
3727
3728   /* Recursively scan the operands of this expression.  */
3729
3730   {
3731     const char * const fmt = GET_RTX_FORMAT (code);
3732     int i;
3733
3734     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3735       {
3736         if (fmt[i] == 'e')
3737           {
3738             /* Tail recursive case: save a function call level.  */
3739             if (i == 0)
3740               {
3741                 x = XEXP (x, 0);
3742                 goto retry;
3743               }
3744             mark_used_regs (pbi, XEXP (x, i), cond, insn);
3745           }
3746         else if (fmt[i] == 'E')
3747           {
3748             int j;
3749             for (j = 0; j < XVECLEN (x, i); j++)
3750               mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn);
3751           }
3752       }
3753   }
3754 }
3755 \f
3756 #ifdef AUTO_INC_DEC
3757
3758 static int
3759 try_pre_increment_1 (pbi, insn)
3760      struct propagate_block_info *pbi;
3761      rtx insn;
3762 {
3763   /* Find the next use of this reg.  If in same basic block,
3764      make it do pre-increment or pre-decrement if appropriate.  */
3765   rtx x = single_set (insn);
3766   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
3767                           * INTVAL (XEXP (SET_SRC (x), 1)));
3768   int regno = REGNO (SET_DEST (x));
3769   rtx y = pbi->reg_next_use[regno];
3770   if (y != 0
3771       && SET_DEST (x) != stack_pointer_rtx
3772       && BLOCK_NUM (y) == BLOCK_NUM (insn)
3773       /* Don't do this if the reg dies, or gets set in y; a standard addressing
3774          mode would be better.  */
3775       && ! dead_or_set_p (y, SET_DEST (x))
3776       && try_pre_increment (y, SET_DEST (x), amount))
3777     {
3778       /* We have found a suitable auto-increment and already changed
3779          insn Y to do it.  So flush this increment instruction.  */
3780       propagate_block_delete_insn (pbi->bb, insn);
3781
3782       /* Count a reference to this reg for the increment insn we are
3783          deleting.  When a reg is incremented, spilling it is worse,
3784          so we want to make that less likely.  */
3785       if (regno >= FIRST_PSEUDO_REGISTER)
3786         {
3787           REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3788           REG_N_SETS (regno)++;
3789         }
3790
3791       /* Flush any remembered memories depending on the value of
3792          the incremented register.  */
3793       invalidate_mems_from_set (pbi, SET_DEST (x));
3794
3795       return 1;
3796     }
3797   return 0;
3798 }
3799
3800 /* Try to change INSN so that it does pre-increment or pre-decrement
3801    addressing on register REG in order to add AMOUNT to REG.
3802    AMOUNT is negative for pre-decrement.
3803    Returns 1 if the change could be made.
3804    This checks all about the validity of the result of modifying INSN.  */
3805
3806 static int
3807 try_pre_increment (insn, reg, amount)
3808      rtx insn, reg;
3809      HOST_WIDE_INT amount;
3810 {
3811   rtx use;
3812
3813   /* Nonzero if we can try to make a pre-increment or pre-decrement.
3814      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
3815   int pre_ok = 0;
3816   /* Nonzero if we can try to make a post-increment or post-decrement.
3817      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
3818      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
3819      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
3820   int post_ok = 0;
3821
3822   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
3823   int do_post = 0;
3824
3825   /* From the sign of increment, see which possibilities are conceivable
3826      on this target machine.  */
3827   if (HAVE_PRE_INCREMENT && amount > 0)
3828     pre_ok = 1;
3829   if (HAVE_POST_INCREMENT && amount > 0)
3830     post_ok = 1;
3831
3832   if (HAVE_PRE_DECREMENT && amount < 0)
3833     pre_ok = 1;
3834   if (HAVE_POST_DECREMENT && amount < 0)
3835     post_ok = 1;
3836
3837   if (! (pre_ok || post_ok))
3838     return 0;
3839
3840   /* It is not safe to add a side effect to a jump insn
3841      because if the incremented register is spilled and must be reloaded
3842      there would be no way to store the incremented value back in memory.  */
3843
3844   if (GET_CODE (insn) == JUMP_INSN)
3845     return 0;
3846
3847   use = 0;
3848   if (pre_ok)
3849     use = find_use_as_address (PATTERN (insn), reg, 0);
3850   if (post_ok && (use == 0 || use == (rtx) 1))
3851     {
3852       use = find_use_as_address (PATTERN (insn), reg, -amount);
3853       do_post = 1;
3854     }
3855
3856   if (use == 0 || use == (rtx) 1)
3857     return 0;
3858
3859   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
3860     return 0;
3861
3862   /* See if this combination of instruction and addressing mode exists.  */
3863   if (! validate_change (insn, &XEXP (use, 0),
3864                          gen_rtx_fmt_e (amount > 0
3865                                         ? (do_post ? POST_INC : PRE_INC)
3866                                         : (do_post ? POST_DEC : PRE_DEC),
3867                                         Pmode, reg), 0))
3868     return 0;
3869
3870   /* Record that this insn now has an implicit side effect on X.  */
3871   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, reg, REG_NOTES (insn));
3872   return 1;
3873 }
3874
3875 #endif /* AUTO_INC_DEC */
3876 \f
3877 /* Find the place in the rtx X where REG is used as a memory address.
3878    Return the MEM rtx that so uses it.
3879    If PLUSCONST is nonzero, search instead for a memory address equivalent to
3880    (plus REG (const_int PLUSCONST)).
3881
3882    If such an address does not appear, return 0.
3883    If REG appears more than once, or is used other than in such an address,
3884    return (rtx)1.  */
3885
3886 rtx
3887 find_use_as_address (x, reg, plusconst)
3888      rtx x;
3889      rtx reg;
3890      HOST_WIDE_INT plusconst;
3891 {
3892   enum rtx_code code = GET_CODE (x);
3893   const char * const fmt = GET_RTX_FORMAT (code);
3894   int i;
3895   rtx value = 0;
3896   rtx tem;
3897
3898   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
3899     return x;
3900
3901   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
3902       && XEXP (XEXP (x, 0), 0) == reg
3903       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
3904       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
3905     return x;
3906
3907   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
3908     {
3909       /* If REG occurs inside a MEM used in a bit-field reference,
3910          that is unacceptable.  */
3911       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
3912         return (rtx) (HOST_WIDE_INT) 1;
3913     }
3914
3915   if (x == reg)
3916     return (rtx) (HOST_WIDE_INT) 1;
3917
3918   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3919     {
3920       if (fmt[i] == 'e')
3921         {
3922           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
3923           if (value == 0)
3924             value = tem;
3925           else if (tem != 0)
3926             return (rtx) (HOST_WIDE_INT) 1;
3927         }
3928       else if (fmt[i] == 'E')
3929         {
3930           int j;
3931           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
3932             {
3933               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
3934               if (value == 0)
3935                 value = tem;
3936               else if (tem != 0)
3937                 return (rtx) (HOST_WIDE_INT) 1;
3938             }
3939         }
3940     }
3941
3942   return value;
3943 }
3944 \f
3945 /* Write information about registers and basic blocks into FILE.
3946    This is part of making a debugging dump.  */
3947
3948 void
3949 dump_regset (r, outf)
3950      regset r;
3951      FILE *outf;
3952 {
3953   int i;
3954   if (r == NULL)
3955     {
3956       fputs (" (nil)", outf);
3957       return;
3958     }
3959
3960   EXECUTE_IF_SET_IN_REG_SET (r, 0, i,
3961     {
3962       fprintf (outf, " %d", i);
3963       if (i < FIRST_PSEUDO_REGISTER)
3964         fprintf (outf, " [%s]",
3965                  reg_names[i]);
3966     });
3967 }
3968
3969 /* Print a human-reaable representation of R on the standard error
3970    stream.  This function is designed to be used from within the
3971    debugger.  */
3972
3973 void
3974 debug_regset (r)
3975      regset r;
3976 {
3977   dump_regset (r, stderr);
3978   putc ('\n', stderr);
3979 }
3980
3981 /* Dump the rtl into the current debugging dump file, then abort.  */
3982
3983 static void
3984 print_rtl_and_abort_fcn (file, line, function)
3985      const char *file;
3986      int line;
3987      const char *function;
3988 {
3989   if (rtl_dump_file)
3990     {
3991       print_rtl_with_bb (rtl_dump_file, get_insns ());
3992       fclose (rtl_dump_file);
3993     }
3994
3995   fancy_abort (file, line, function);
3996 }
3997
3998 /* Recompute register set/reference counts immediately prior to register
3999    allocation.
4000
4001    This avoids problems with set/reference counts changing to/from values
4002    which have special meanings to the register allocators.
4003
4004    Additionally, the reference counts are the primary component used by the
4005    register allocators to prioritize pseudos for allocation to hard regs.
4006    More accurate reference counts generally lead to better register allocation.
4007
4008    F is the first insn to be scanned.
4009
4010    LOOP_STEP denotes how much loop_depth should be incremented per
4011    loop nesting level in order to increase the ref count more for
4012    references in a loop.
4013
4014    It might be worthwhile to update REG_LIVE_LENGTH, REG_BASIC_BLOCK and
4015    possibly other information which is used by the register allocators.  */
4016
4017 void
4018 recompute_reg_usage (f, loop_step)
4019      rtx f ATTRIBUTE_UNUSED;
4020      int loop_step ATTRIBUTE_UNUSED;
4021 {
4022   allocate_reg_life_data ();
4023   update_life_info (NULL, UPDATE_LIFE_LOCAL, PROP_REG_INFO);
4024 }
4025
4026 /* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of
4027    blocks.  If BLOCKS is NULL, assume the universal set.  Returns a count
4028    of the number of registers that died.  */
4029
4030 int
4031 count_or_remove_death_notes (blocks, kill)
4032      sbitmap blocks;
4033      int kill;
4034 {
4035   int i, count = 0;
4036
4037   for (i = n_basic_blocks - 1; i >= 0; --i)
4038     {
4039       basic_block bb;
4040       rtx insn;
4041
4042       if (blocks && ! TEST_BIT (blocks, i))
4043         continue;
4044
4045       bb = BASIC_BLOCK (i);
4046
4047       for (insn = bb->head;; insn = NEXT_INSN (insn))
4048         {
4049           if (INSN_P (insn))
4050             {
4051               rtx *pprev = &REG_NOTES (insn);
4052               rtx link = *pprev;
4053
4054               while (link)
4055                 {
4056                   switch (REG_NOTE_KIND (link))
4057                     {
4058                     case REG_DEAD:
4059                       if (GET_CODE (XEXP (link, 0)) == REG)
4060                         {
4061                           rtx reg = XEXP (link, 0);
4062                           int n;
4063
4064                           if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
4065                             n = 1;
4066                           else
4067                             n = HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg));
4068                           count += n;
4069                         }
4070                       /* Fall through.  */
4071
4072                     case REG_UNUSED:
4073                       if (kill)
4074                         {
4075                           rtx next = XEXP (link, 1);
4076                           free_EXPR_LIST_node (link);
4077                           *pprev = link = next;
4078                           break;
4079                         }
4080                       /* Fall through.  */
4081
4082                     default:
4083                       pprev = &XEXP (link, 1);
4084                       link = *pprev;
4085                       break;
4086                     }
4087                 }
4088             }
4089
4090           if (insn == bb->end)
4091             break;
4092         }
4093     }
4094
4095   return count;
4096 }
4097 /* Clear LOG_LINKS fields of insns in a selected blocks or whole chain
4098    if blocks is NULL.  */
4099
4100 static void
4101 clear_log_links (blocks)
4102      sbitmap blocks;
4103 {
4104   rtx insn;
4105   int i;
4106
4107   if (!blocks)
4108     {
4109       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4110         if (INSN_P (insn))
4111           free_INSN_LIST_list (&LOG_LINKS (insn));
4112     }
4113   else
4114     EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i,
4115       {
4116         basic_block bb = BASIC_BLOCK (i);
4117
4118         for (insn = bb->head; insn != NEXT_INSN (bb->end);
4119              insn = NEXT_INSN (insn))
4120           if (INSN_P (insn))
4121             free_INSN_LIST_list (&LOG_LINKS (insn));
4122       });
4123 }
4124
4125 /* Given a register bitmap, turn on the bits in a HARD_REG_SET that
4126    correspond to the hard registers, if any, set in that map.  This
4127    could be done far more efficiently by having all sorts of special-cases
4128    with moving single words, but probably isn't worth the trouble.  */
4129
4130 void
4131 reg_set_to_hard_reg_set (to, from)
4132      HARD_REG_SET *to;
4133      bitmap from;
4134 {
4135   int i;
4136
4137   EXECUTE_IF_SET_IN_BITMAP
4138     (from, 0, i,
4139      {
4140        if (i >= FIRST_PSEUDO_REGISTER)
4141          return;
4142        SET_HARD_REG_BIT (*to, i);
4143      });
4144 }