OSDN Git Service

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