OSDN Git Service

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