OSDN Git Service

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