OSDN Git Service

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