OSDN Git Service

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