OSDN Git Service

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