OSDN Git Service

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