OSDN Git Service

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