OSDN Git Service

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