OSDN Git Service

* g++.dg/abi/vague1.C: Use xfail, rather than embedded Tcl code.
[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                   start_sequence ();
1488                   emit_move_insn (param.retval,
1489                                   CONST0_RTX (GET_MODE (param.retval)));
1490                   insn = get_insns ();
1491                   end_sequence ();
1492                   insert_insn_on_edge (insn, e);
1493                   did_something = 1;
1494                 }
1495             }
1496         });
1497     }
1498
1499   if (did_something)
1500     commit_edge_insertions ();
1501   return did_something;
1502 }
1503
1504 \f
1505 /* Subroutines of life analysis.  */
1506
1507 /* Allocate the permanent data structures that represent the results
1508    of life analysis.  Not static since used also for stupid life analysis.  */
1509
1510 void
1511 allocate_bb_life_data ()
1512 {
1513   basic_block bb;
1514
1515   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
1516     {
1517       bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1518       bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1519     }
1520
1521   regs_live_at_setjmp = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1522 }
1523
1524 void
1525 allocate_reg_life_data ()
1526 {
1527   int i;
1528
1529   max_regno = max_reg_num ();
1530
1531   /* Recalculate the register space, in case it has grown.  Old style
1532      vector oriented regsets would set regset_{size,bytes} here also.  */
1533   allocate_reg_info (max_regno, FALSE, FALSE);
1534
1535   /* Reset all the data we'll collect in propagate_block and its
1536      subroutines.  */
1537   for (i = 0; i < max_regno; i++)
1538     {
1539       REG_N_SETS (i) = 0;
1540       REG_N_REFS (i) = 0;
1541       REG_N_DEATHS (i) = 0;
1542       REG_N_CALLS_CROSSED (i) = 0;
1543       REG_LIVE_LENGTH (i) = 0;
1544       REG_FREQ (i) = 0;
1545       REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
1546     }
1547 }
1548
1549 /* Delete dead instructions for propagate_block.  */
1550
1551 static void
1552 propagate_block_delete_insn (insn)
1553      rtx insn;
1554 {
1555   rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX);
1556
1557   /* If the insn referred to a label, and that label was attached to
1558      an ADDR_VEC, it's safe to delete the ADDR_VEC.  In fact, it's
1559      pretty much mandatory to delete it, because the ADDR_VEC may be
1560      referencing labels that no longer exist.
1561
1562      INSN may reference a deleted label, particularly when a jump
1563      table has been optimized into a direct jump.  There's no
1564      real good way to fix up the reference to the deleted label
1565      when the label is deleted, so we just allow it here.  */
1566
1567   if (inote && GET_CODE (inote) == CODE_LABEL)
1568     {
1569       rtx label = XEXP (inote, 0);
1570       rtx next;
1571
1572       /* The label may be forced if it has been put in the constant
1573          pool.  If that is the only use we must discard the table
1574          jump following it, but not the label itself.  */
1575       if (LABEL_NUSES (label) == 1 + LABEL_PRESERVE_P (label)
1576           && (next = next_nonnote_insn (label)) != NULL
1577           && GET_CODE (next) == JUMP_INSN
1578           && (GET_CODE (PATTERN (next)) == ADDR_VEC
1579               || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
1580         {
1581           rtx pat = PATTERN (next);
1582           int diff_vec_p = GET_CODE (pat) == ADDR_DIFF_VEC;
1583           int len = XVECLEN (pat, diff_vec_p);
1584           int i;
1585
1586           for (i = 0; i < len; i++)
1587             LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
1588
1589           delete_insn_and_edges (next);
1590           ndead++;
1591         }
1592     }
1593
1594   delete_insn_and_edges (insn);
1595   ndead++;
1596 }
1597
1598 /* Delete dead libcalls for propagate_block.  Return the insn
1599    before the libcall.  */
1600
1601 static rtx
1602 propagate_block_delete_libcall ( insn, note)
1603      rtx insn, note;
1604 {
1605   rtx first = XEXP (note, 0);
1606   rtx before = PREV_INSN (first);
1607
1608   delete_insn_chain_and_edges (first, insn);
1609   ndead++;
1610   return before;
1611 }
1612
1613 /* Update the life-status of regs for one insn.  Return the previous insn.  */
1614
1615 rtx
1616 propagate_one_insn (pbi, insn)
1617      struct propagate_block_info *pbi;
1618      rtx insn;
1619 {
1620   rtx prev = PREV_INSN (insn);
1621   int flags = pbi->flags;
1622   int insn_is_dead = 0;
1623   int libcall_is_dead = 0;
1624   rtx note;
1625   int i;
1626
1627   if (! INSN_P (insn))
1628     return prev;
1629
1630   note = find_reg_note (insn, REG_RETVAL, NULL_RTX);
1631   if (flags & PROP_SCAN_DEAD_CODE)
1632     {
1633       insn_is_dead = insn_dead_p (pbi, PATTERN (insn), 0, REG_NOTES (insn));
1634       libcall_is_dead = (insn_is_dead && note != 0
1635                          && libcall_dead_p (pbi, note, insn));
1636     }
1637
1638   /* If an instruction consists of just dead store(s) on final pass,
1639      delete it.  */
1640   if ((flags & PROP_KILL_DEAD_CODE) && insn_is_dead)
1641     {
1642       /* If we're trying to delete a prologue or epilogue instruction
1643          that isn't flagged as possibly being dead, something is wrong.
1644          But if we are keeping the stack pointer depressed, we might well
1645          be deleting insns that are used to compute the amount to update
1646          it by, so they are fine.  */
1647       if (reload_completed
1648           && !(TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
1649                 && (TYPE_RETURNS_STACK_DEPRESSED
1650                     (TREE_TYPE (current_function_decl))))
1651           && (((HAVE_epilogue || HAVE_prologue)
1652                && prologue_epilogue_contains (insn))
1653               || (HAVE_sibcall_epilogue
1654                   && sibcall_epilogue_contains (insn)))
1655           && find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0)
1656         fatal_insn ("Attempt to delete prologue/epilogue insn:", insn);
1657
1658       /* Record sets.  Do this even for dead instructions, since they
1659          would have killed the values if they hadn't been deleted.  */
1660       mark_set_regs (pbi, PATTERN (insn), insn);
1661
1662       /* CC0 is now known to be dead.  Either this insn used it,
1663          in which case it doesn't anymore, or clobbered it,
1664          so the next insn can't use it.  */
1665       pbi->cc0_live = 0;
1666
1667       if (libcall_is_dead)
1668         prev = propagate_block_delete_libcall ( insn, note);
1669       else
1670         {
1671
1672         /* If INSN contains a RETVAL note and is dead, but the libcall
1673            as a whole is not dead, then we want to remove INSN, but
1674            not the whole libcall sequence.
1675
1676            However, we need to also remove the dangling REG_LIBCALL     
1677            note so that we do not have mis-matched LIBCALL/RETVAL
1678            notes.  In theory we could find a new location for the
1679            REG_RETVAL note, but it hardly seems worth the effort. 
1680
1681            NOTE at this point will be the RETVAL note if it exists.  */
1682           if (note)
1683             {
1684               rtx libcall_note;
1685          
1686               libcall_note
1687                 = find_reg_note (XEXP (note, 0), REG_LIBCALL, NULL_RTX);
1688               remove_note (XEXP (note, 0), libcall_note);
1689             }
1690
1691           /* Similarly if INSN contains a LIBCALL note, remove the
1692              dangling REG_RETVAL note.  */
1693           note = find_reg_note (insn, REG_LIBCALL, NULL_RTX);
1694           if (note)
1695             {
1696               rtx retval_note;
1697
1698               retval_note
1699                 = find_reg_note (XEXP (note, 0), REG_RETVAL, NULL_RTX);
1700               remove_note (XEXP (note, 0), retval_note);
1701             }
1702
1703           /* Now delete INSN.  */
1704           propagate_block_delete_insn (insn);
1705         }
1706
1707       return prev;
1708     }
1709
1710   /* See if this is an increment or decrement that can be merged into
1711      a following memory address.  */
1712 #ifdef AUTO_INC_DEC
1713   {
1714     rtx x = single_set (insn);
1715
1716     /* Does this instruction increment or decrement a register?  */
1717     if ((flags & PROP_AUTOINC)
1718         && x != 0
1719         && GET_CODE (SET_DEST (x)) == REG
1720         && (GET_CODE (SET_SRC (x)) == PLUS
1721             || GET_CODE (SET_SRC (x)) == MINUS)
1722         && XEXP (SET_SRC (x), 0) == SET_DEST (x)
1723         && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1724         /* Ok, look for a following memory ref we can combine with.
1725            If one is found, change the memory ref to a PRE_INC
1726            or PRE_DEC, cancel this insn, and return 1.
1727            Return 0 if nothing has been done.  */
1728         && try_pre_increment_1 (pbi, insn))
1729       return prev;
1730   }
1731 #endif /* AUTO_INC_DEC */
1732
1733   CLEAR_REG_SET (pbi->new_set);
1734
1735   /* If this is not the final pass, and this insn is copying the value of
1736      a library call and it's dead, don't scan the insns that perform the
1737      library call, so that the call's arguments are not marked live.  */
1738   if (libcall_is_dead)
1739     {
1740       /* Record the death of the dest reg.  */
1741       mark_set_regs (pbi, PATTERN (insn), insn);
1742
1743       insn = XEXP (note, 0);
1744       return PREV_INSN (insn);
1745     }
1746   else if (GET_CODE (PATTERN (insn)) == SET
1747            && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
1748            && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
1749            && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
1750            && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
1751     /* We have an insn to pop a constant amount off the stack.
1752        (Such insns use PLUS regardless of the direction of the stack,
1753        and any insn to adjust the stack by a constant is always a pop.)
1754        These insns, if not dead stores, have no effect on life, though
1755        they do have an effect on the memory stores we are tracking.  */
1756     invalidate_mems_from_set (pbi, stack_pointer_rtx);
1757   else
1758     {
1759       rtx note;
1760       /* Any regs live at the time of a call instruction must not go
1761          in a register clobbered by calls.  Find all regs now live and
1762          record this for them.  */
1763
1764       if (GET_CODE (insn) == CALL_INSN && (flags & PROP_REG_INFO))
1765         EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
1766                                    { REG_N_CALLS_CROSSED (i)++; });
1767
1768       /* Record sets.  Do this even for dead instructions, since they
1769          would have killed the values if they hadn't been deleted.  */
1770       mark_set_regs (pbi, PATTERN (insn), insn);
1771
1772       if (GET_CODE (insn) == CALL_INSN)
1773         {
1774           int i;
1775           rtx note, cond;
1776
1777           cond = NULL_RTX;
1778           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
1779             cond = COND_EXEC_TEST (PATTERN (insn));
1780
1781           /* Non-constant calls clobber memory, constant calls do not
1782              clobber memory, though they may clobber outgoing arguments
1783              on the stack.  */
1784           if (! CONST_OR_PURE_CALL_P (insn))
1785             {
1786               free_EXPR_LIST_list (&pbi->mem_set_list);
1787               pbi->mem_set_list_len = 0;
1788             }
1789           else
1790             invalidate_mems_from_set (pbi, stack_pointer_rtx);
1791
1792           /* There may be extra registers to be clobbered.  */
1793           for (note = CALL_INSN_FUNCTION_USAGE (insn);
1794                note;
1795                note = XEXP (note, 1))
1796             if (GET_CODE (XEXP (note, 0)) == CLOBBER)
1797               mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0),
1798                           cond, insn, pbi->flags);
1799
1800           /* Calls change all call-used and global registers.  */
1801           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1802             if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
1803               {
1804                 /* We do not want REG_UNUSED notes for these registers.  */
1805                 mark_set_1 (pbi, CLOBBER, regno_reg_rtx[i], cond, insn,
1806                             pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO));
1807               }
1808         }
1809
1810       /* If an insn doesn't use CC0, it becomes dead since we assume
1811          that every insn clobbers it.  So show it dead here;
1812          mark_used_regs will set it live if it is referenced.  */
1813       pbi->cc0_live = 0;
1814
1815       /* Record uses.  */
1816       if (! insn_is_dead)
1817         mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn);
1818       if ((flags & PROP_EQUAL_NOTES)
1819           && ((note = find_reg_note (insn, REG_EQUAL, NULL_RTX))
1820               || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX))))
1821         mark_used_regs (pbi, XEXP (note, 0), NULL_RTX, insn);
1822
1823       /* Sometimes we may have inserted something before INSN (such as a move)
1824          when we make an auto-inc.  So ensure we will scan those insns.  */
1825 #ifdef AUTO_INC_DEC
1826       prev = PREV_INSN (insn);
1827 #endif
1828
1829       if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
1830         {
1831           int i;
1832           rtx note, cond;
1833
1834           cond = NULL_RTX;
1835           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
1836             cond = COND_EXEC_TEST (PATTERN (insn));
1837
1838           /* Calls use their arguments, and may clobber memory which
1839              address involves some register.  */
1840           for (note = CALL_INSN_FUNCTION_USAGE (insn);
1841                note;
1842                note = XEXP (note, 1))
1843             /* We find USE or CLOBBER entities in a FUNCTION_USAGE list: both
1844                of which mark_used_regs knows how to handle.  */
1845             mark_used_regs (pbi, XEXP (XEXP (note, 0), 0), cond, insn);
1846
1847           /* The stack ptr is used (honorarily) by a CALL insn.  */
1848           SET_REGNO_REG_SET (pbi->reg_live, STACK_POINTER_REGNUM);
1849
1850           /* Calls may also reference any of the global registers,
1851              so they are made live.  */
1852           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1853             if (global_regs[i])
1854               mark_used_reg (pbi, regno_reg_rtx[i], cond, insn);
1855         }
1856     }
1857
1858   /* On final pass, update counts of how many insns in which each reg
1859      is live.  */
1860   if (flags & PROP_REG_INFO)
1861     EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
1862                                { REG_LIVE_LENGTH (i)++; });
1863
1864   return prev;
1865 }
1866
1867 /* Initialize a propagate_block_info struct for public consumption.
1868    Note that the structure itself is opaque to this file, but that
1869    the user can use the regsets provided here.  */
1870
1871 struct propagate_block_info *
1872 init_propagate_block_info (bb, live, local_set, cond_local_set, flags)
1873      basic_block bb;
1874      regset live, local_set, cond_local_set;
1875      int flags;
1876 {
1877   struct propagate_block_info *pbi = xmalloc (sizeof (*pbi));
1878
1879   pbi->bb = bb;
1880   pbi->reg_live = live;
1881   pbi->mem_set_list = NULL_RTX;
1882   pbi->mem_set_list_len = 0;
1883   pbi->local_set = local_set;
1884   pbi->cond_local_set = cond_local_set;
1885   pbi->cc0_live = 0;
1886   pbi->flags = flags;
1887
1888   if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
1889     pbi->reg_next_use = (rtx *) xcalloc (max_reg_num (), sizeof (rtx));
1890   else
1891     pbi->reg_next_use = NULL;
1892
1893   pbi->new_set = BITMAP_XMALLOC ();
1894
1895 #ifdef HAVE_conditional_execution
1896   pbi->reg_cond_dead = splay_tree_new (splay_tree_compare_ints, NULL,
1897                                        free_reg_cond_life_info);
1898   pbi->reg_cond_reg = BITMAP_XMALLOC ();
1899
1900   /* If this block ends in a conditional branch, for each register live
1901      from one side of the branch and not the other, record the register
1902      as conditionally dead.  */
1903   if (GET_CODE (bb->end) == JUMP_INSN
1904       && any_condjump_p (bb->end))
1905     {
1906       regset_head diff_head;
1907       regset diff = INITIALIZE_REG_SET (diff_head);
1908       basic_block bb_true, bb_false;
1909       rtx cond_true, cond_false, set_src;
1910       int i;
1911
1912       /* Identify the successor blocks.  */
1913       bb_true = bb->succ->dest;
1914       if (bb->succ->succ_next != NULL)
1915         {
1916           bb_false = bb->succ->succ_next->dest;
1917
1918           if (bb->succ->flags & EDGE_FALLTHRU)
1919             {
1920               basic_block t = bb_false;
1921               bb_false = bb_true;
1922               bb_true = t;
1923             }
1924           else if (! (bb->succ->succ_next->flags & EDGE_FALLTHRU))
1925             abort ();
1926         }
1927       else
1928         {
1929           /* This can happen with a conditional jump to the next insn.  */
1930           if (JUMP_LABEL (bb->end) != bb_true->head)
1931             abort ();
1932
1933           /* Simplest way to do nothing.  */
1934           bb_false = bb_true;
1935         }
1936
1937       /* Extract the condition from the branch.  */
1938       set_src = SET_SRC (pc_set (bb->end));
1939       cond_true = XEXP (set_src, 0);
1940       cond_false = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
1941                                    GET_MODE (cond_true), XEXP (cond_true, 0),
1942                                    XEXP (cond_true, 1));
1943       if (GET_CODE (XEXP (set_src, 1)) == PC)
1944         {
1945           rtx t = cond_false;
1946           cond_false = cond_true;
1947           cond_true = t;
1948         }
1949
1950       /* Compute which register lead different lives in the successors.  */
1951       if (bitmap_operation (diff, bb_true->global_live_at_start,
1952                             bb_false->global_live_at_start, BITMAP_XOR))
1953         {
1954           rtx reg = XEXP (cond_true, 0);
1955
1956           if (GET_CODE (reg) == SUBREG)
1957             reg = SUBREG_REG (reg);
1958
1959           if (GET_CODE (reg) != REG)
1960             abort ();
1961
1962           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (reg));
1963
1964           /* For each such register, mark it conditionally dead.  */
1965           EXECUTE_IF_SET_IN_REG_SET
1966             (diff, 0, i,
1967              {
1968                struct reg_cond_life_info *rcli;
1969                rtx cond;
1970
1971                rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
1972
1973                if (REGNO_REG_SET_P (bb_true->global_live_at_start, i))
1974                  cond = cond_false;
1975                else
1976                  cond = cond_true;
1977                rcli->condition = cond;
1978                rcli->stores = const0_rtx;
1979                rcli->orig_condition = cond;
1980
1981                splay_tree_insert (pbi->reg_cond_dead, i,
1982                                   (splay_tree_value) rcli);
1983              });
1984         }
1985
1986       FREE_REG_SET (diff);
1987     }
1988 #endif
1989
1990   /* If this block has no successors, any stores to the frame that aren't
1991      used later in the block are dead.  So make a pass over the block
1992      recording any such that are made and show them dead at the end.  We do
1993      a very conservative and simple job here.  */
1994   if (optimize
1995       && ! (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
1996             && (TYPE_RETURNS_STACK_DEPRESSED
1997                 (TREE_TYPE (current_function_decl))))
1998       && (flags & PROP_SCAN_DEAD_STORES)
1999       && (bb->succ == NULL
2000           || (bb->succ->succ_next == NULL
2001               && bb->succ->dest == EXIT_BLOCK_PTR
2002               && ! current_function_calls_eh_return)))
2003     {
2004       rtx insn, set;
2005       for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn))
2006         if (GET_CODE (insn) == INSN
2007             && (set = single_set (insn))
2008             && GET_CODE (SET_DEST (set)) == MEM)
2009           {
2010             rtx mem = SET_DEST (set);
2011             rtx canon_mem = canon_rtx (mem);
2012
2013             /* This optimization is performed by faking a store to the
2014                memory at the end of the block.  This doesn't work for
2015                unchanging memories because multiple stores to unchanging
2016                memory is illegal and alias analysis doesn't consider it.  */
2017             if (RTX_UNCHANGING_P (canon_mem))
2018               continue;
2019
2020             if (XEXP (canon_mem, 0) == frame_pointer_rtx
2021                 || (GET_CODE (XEXP (canon_mem, 0)) == PLUS
2022                     && XEXP (XEXP (canon_mem, 0), 0) == frame_pointer_rtx
2023                     && GET_CODE (XEXP (XEXP (canon_mem, 0), 1)) == CONST_INT))
2024               add_to_mem_set_list (pbi, canon_mem);
2025           }
2026     }
2027
2028   return pbi;
2029 }
2030
2031 /* Release a propagate_block_info struct.  */
2032
2033 void
2034 free_propagate_block_info (pbi)
2035      struct propagate_block_info *pbi;
2036 {
2037   free_EXPR_LIST_list (&pbi->mem_set_list);
2038
2039   BITMAP_XFREE (pbi->new_set);
2040
2041 #ifdef HAVE_conditional_execution
2042   splay_tree_delete (pbi->reg_cond_dead);
2043   BITMAP_XFREE (pbi->reg_cond_reg);
2044 #endif
2045
2046   if (pbi->reg_next_use)
2047     free (pbi->reg_next_use);
2048
2049   free (pbi);
2050 }
2051
2052 /* Compute the registers live at the beginning of a basic block BB from
2053    those live at the end.
2054
2055    When called, REG_LIVE contains those live at the end.  On return, it
2056    contains those live at the beginning.
2057
2058    LOCAL_SET, if non-null, will be set with all registers killed
2059    unconditionally by this basic block.
2060    Likewise, COND_LOCAL_SET, if non-null, will be set with all registers
2061    killed conditionally by this basic block.  If there is any unconditional
2062    set of a register, then the corresponding bit will be set in LOCAL_SET
2063    and cleared in COND_LOCAL_SET.
2064    It is valid for LOCAL_SET and COND_LOCAL_SET to be the same set.  In this
2065    case, the resulting set will be equal to the union of the two sets that
2066    would otherwise be computed.
2067
2068    Return nonzero if an INSN is deleted (i.e. by dead code removal).  */
2069
2070 int
2071 propagate_block (bb, live, local_set, cond_local_set, flags)
2072      basic_block bb;
2073      regset live;
2074      regset local_set;
2075      regset cond_local_set;
2076      int flags;
2077 {
2078   struct propagate_block_info *pbi;
2079   rtx insn, prev;
2080   int changed;
2081
2082   pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags);
2083
2084   if (flags & PROP_REG_INFO)
2085     {
2086       int i;
2087
2088       /* Process the regs live at the end of the block.
2089          Mark them as not local to any one basic block.  */
2090       EXECUTE_IF_SET_IN_REG_SET (live, 0, i,
2091                                  { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
2092     }
2093
2094   /* Scan the block an insn at a time from end to beginning.  */
2095
2096   changed = 0;
2097   for (insn = bb->end;; insn = prev)
2098     {
2099       /* If this is a call to `setjmp' et al, warn if any
2100          non-volatile datum is live.  */
2101       if ((flags & PROP_REG_INFO)
2102           && GET_CODE (insn) == CALL_INSN
2103           && find_reg_note (insn, REG_SETJMP, NULL))
2104         IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live);
2105
2106       prev = propagate_one_insn (pbi, insn);
2107       changed |= NEXT_INSN (prev) != insn;
2108
2109       if (insn == bb->head)
2110         break;
2111     }
2112
2113   free_propagate_block_info (pbi);
2114
2115   return changed;
2116 }
2117 \f
2118 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
2119    (SET expressions whose destinations are registers dead after the insn).
2120    NEEDED is the regset that says which regs are alive after the insn.
2121
2122    Unless CALL_OK is nonzero, an insn is needed if it contains a CALL.
2123
2124    If X is the entire body of an insn, NOTES contains the reg notes
2125    pertaining to the insn.  */
2126
2127 static int
2128 insn_dead_p (pbi, x, call_ok, notes)
2129      struct propagate_block_info *pbi;
2130      rtx x;
2131      int call_ok;
2132      rtx notes ATTRIBUTE_UNUSED;
2133 {
2134   enum rtx_code code = GET_CODE (x);
2135
2136   /* Don't eliminate insns that may trap.  */
2137   if (flag_non_call_exceptions && may_trap_p (x))
2138     return 0;
2139
2140 #ifdef AUTO_INC_DEC
2141   /* As flow is invoked after combine, we must take existing AUTO_INC
2142      expressions into account.  */
2143   for (; notes; notes = XEXP (notes, 1))
2144     {
2145       if (REG_NOTE_KIND (notes) == REG_INC)
2146         {
2147           int regno = REGNO (XEXP (notes, 0));
2148
2149           /* Don't delete insns to set global regs.  */
2150           if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2151               || REGNO_REG_SET_P (pbi->reg_live, regno))
2152             return 0;
2153         }
2154     }
2155 #endif
2156
2157   /* If setting something that's a reg or part of one,
2158      see if that register's altered value will be live.  */
2159
2160   if (code == SET)
2161     {
2162       rtx r = SET_DEST (x);
2163
2164 #ifdef HAVE_cc0
2165       if (GET_CODE (r) == CC0)
2166         return ! pbi->cc0_live;
2167 #endif
2168
2169       /* A SET that is a subroutine call cannot be dead.  */
2170       if (GET_CODE (SET_SRC (x)) == CALL)
2171         {
2172           if (! call_ok)
2173             return 0;
2174         }
2175
2176       /* Don't eliminate loads from volatile memory or volatile asms.  */
2177       else if (volatile_refs_p (SET_SRC (x)))
2178         return 0;
2179
2180       if (GET_CODE (r) == MEM)
2181         {
2182           rtx temp, canon_r;
2183
2184           if (MEM_VOLATILE_P (r) || GET_MODE (r) == BLKmode)
2185             return 0;
2186
2187           canon_r = canon_rtx (r);
2188
2189           /* Walk the set of memory locations we are currently tracking
2190              and see if one is an identical match to this memory location.
2191              If so, this memory write is dead (remember, we're walking
2192              backwards from the end of the block to the start).  Since
2193              rtx_equal_p does not check the alias set or flags, we also
2194              must have the potential for them to conflict (anti_dependence).  */
2195           for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
2196             if (anti_dependence (r, XEXP (temp, 0)))
2197               {
2198                 rtx mem = XEXP (temp, 0);
2199
2200                 if (rtx_equal_p (XEXP (canon_r, 0), XEXP (mem, 0))
2201                     && (GET_MODE_SIZE (GET_MODE (canon_r))
2202                         <= GET_MODE_SIZE (GET_MODE (mem))))
2203                   return 1;
2204
2205 #ifdef AUTO_INC_DEC
2206                 /* Check if memory reference matches an auto increment. Only
2207                    post increment/decrement or modify are valid.  */
2208                 if (GET_MODE (mem) == GET_MODE (r)
2209                     && (GET_CODE (XEXP (mem, 0)) == POST_DEC
2210                         || GET_CODE (XEXP (mem, 0)) == POST_INC
2211                         || GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
2212                     && GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
2213                     && rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
2214                   return 1;
2215 #endif
2216               }
2217         }
2218       else
2219         {
2220           while (GET_CODE (r) == SUBREG
2221                  || GET_CODE (r) == STRICT_LOW_PART
2222                  || GET_CODE (r) == ZERO_EXTRACT)
2223             r = XEXP (r, 0);
2224
2225           if (GET_CODE (r) == REG)
2226             {
2227               int regno = REGNO (r);
2228
2229               /* Obvious.  */
2230               if (REGNO_REG_SET_P (pbi->reg_live, regno))
2231                 return 0;
2232
2233               /* If this is a hard register, verify that subsequent
2234                  words are not needed.  */
2235               if (regno < FIRST_PSEUDO_REGISTER)
2236                 {
2237                   int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
2238
2239                   while (--n > 0)
2240                     if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
2241                       return 0;
2242                 }
2243
2244               /* Don't delete insns to set global regs.  */
2245               if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2246                 return 0;
2247
2248               /* Make sure insns to set the stack pointer aren't deleted.  */
2249               if (regno == STACK_POINTER_REGNUM)
2250                 return 0;
2251
2252               /* ??? These bits might be redundant with the force live bits
2253                  in calculate_global_regs_live.  We would delete from
2254                  sequential sets; whether this actually affects real code
2255                  for anything but the stack pointer I don't know.  */
2256               /* Make sure insns to set the frame pointer aren't deleted.  */
2257               if (regno == FRAME_POINTER_REGNUM
2258                   && (! reload_completed || frame_pointer_needed))
2259                 return 0;
2260 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2261               if (regno == HARD_FRAME_POINTER_REGNUM
2262                   && (! reload_completed || frame_pointer_needed))
2263                 return 0;
2264 #endif
2265
2266 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2267               /* Make sure insns to set arg pointer are never deleted
2268                  (if the arg pointer isn't fixed, there will be a USE
2269                  for it, so we can treat it normally).  */
2270               if (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2271                 return 0;
2272 #endif
2273
2274               /* Otherwise, the set is dead.  */
2275               return 1;
2276             }
2277         }
2278     }
2279
2280   /* If performing several activities, insn is dead if each activity
2281      is individually dead.  Also, CLOBBERs and USEs can be ignored; a
2282      CLOBBER or USE that's inside a PARALLEL doesn't make the insn
2283      worth keeping.  */
2284   else if (code == PARALLEL)
2285     {
2286       int i = XVECLEN (x, 0);
2287
2288       for (i--; i >= 0; i--)
2289         if (GET_CODE (XVECEXP (x, 0, i)) != CLOBBER
2290             && GET_CODE (XVECEXP (x, 0, i)) != USE
2291             && ! insn_dead_p (pbi, XVECEXP (x, 0, i), call_ok, NULL_RTX))
2292           return 0;
2293
2294       return 1;
2295     }
2296
2297   /* A CLOBBER of a pseudo-register that is dead serves no purpose.  That
2298      is not necessarily true for hard registers.  */
2299   else if (code == CLOBBER && GET_CODE (XEXP (x, 0)) == REG
2300            && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
2301            && ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
2302     return 1;
2303
2304   /* We do not check other CLOBBER or USE here.  An insn consisting of just
2305      a CLOBBER or just a USE should not be deleted.  */
2306   return 0;
2307 }
2308
2309 /* If INSN is the last insn in a libcall, and assuming INSN is dead,
2310    return 1 if the entire library call is dead.
2311    This is true if INSN copies a register (hard or pseudo)
2312    and if the hard return reg of the call insn is dead.
2313    (The caller should have tested the destination of the SET inside
2314    INSN already for death.)
2315
2316    If this insn doesn't just copy a register, then we don't
2317    have an ordinary libcall.  In that case, cse could not have
2318    managed to substitute the source for the dest later on,
2319    so we can assume the libcall is dead.
2320
2321    PBI is the block info giving pseudoregs live before this insn.
2322    NOTE is the REG_RETVAL note of the insn.  */
2323
2324 static int
2325 libcall_dead_p (pbi, note, insn)
2326      struct propagate_block_info *pbi;
2327      rtx note;
2328      rtx insn;
2329 {
2330   rtx x = single_set (insn);
2331
2332   if (x)
2333     {
2334       rtx r = SET_SRC (x);
2335
2336       if (GET_CODE (r) == REG)
2337         {
2338           rtx call = XEXP (note, 0);
2339           rtx call_pat;
2340           int i;
2341
2342           /* Find the call insn.  */
2343           while (call != insn && GET_CODE (call) != CALL_INSN)
2344             call = NEXT_INSN (call);
2345
2346           /* If there is none, do nothing special,
2347              since ordinary death handling can understand these insns.  */
2348           if (call == insn)
2349             return 0;
2350
2351           /* See if the hard reg holding the value is dead.
2352              If this is a PARALLEL, find the call within it.  */
2353           call_pat = PATTERN (call);
2354           if (GET_CODE (call_pat) == PARALLEL)
2355             {
2356               for (i = XVECLEN (call_pat, 0) - 1; i >= 0; i--)
2357                 if (GET_CODE (XVECEXP (call_pat, 0, i)) == SET
2358                     && GET_CODE (SET_SRC (XVECEXP (call_pat, 0, i))) == CALL)
2359                   break;
2360
2361               /* This may be a library call that is returning a value
2362                  via invisible pointer.  Do nothing special, since
2363                  ordinary death handling can understand these insns.  */
2364               if (i < 0)
2365                 return 0;
2366
2367               call_pat = XVECEXP (call_pat, 0, i);
2368             }
2369
2370           return insn_dead_p (pbi, call_pat, 1, REG_NOTES (call));
2371         }
2372     }
2373   return 1;
2374 }
2375
2376 /* Return 1 if register REGNO was used before it was set, i.e. if it is
2377    live at function entry.  Don't count global register variables, variables
2378    in registers that can be used for function arg passing, or variables in
2379    fixed hard registers.  */
2380
2381 int
2382 regno_uninitialized (regno)
2383      unsigned int regno;
2384 {
2385   if (n_basic_blocks == 0
2386       || (regno < FIRST_PSEUDO_REGISTER
2387           && (global_regs[regno]
2388               || fixed_regs[regno]
2389               || FUNCTION_ARG_REGNO_P (regno))))
2390     return 0;
2391
2392   return REGNO_REG_SET_P (ENTRY_BLOCK_PTR->global_live_at_end, regno);
2393 }
2394
2395 /* 1 if register REGNO was alive at a place where `setjmp' was called
2396    and was set more than once or is an argument.
2397    Such regs may be clobbered by `longjmp'.  */
2398
2399 int
2400 regno_clobbered_at_setjmp (regno)
2401      int regno;
2402 {
2403   if (n_basic_blocks == 0)
2404     return 0;
2405
2406   return ((REG_N_SETS (regno) > 1
2407            || REGNO_REG_SET_P (ENTRY_BLOCK_PTR->global_live_at_end, regno))
2408           && REGNO_REG_SET_P (regs_live_at_setjmp, regno));
2409 }
2410 \f
2411 /* Add MEM to PBI->MEM_SET_LIST.  MEM should be canonical.  Respect the
2412    maximal list size; look for overlaps in mode and select the largest.  */
2413 static void
2414 add_to_mem_set_list (pbi, mem)
2415      struct propagate_block_info *pbi;
2416      rtx mem;
2417 {
2418   rtx i;
2419
2420   /* We don't know how large a BLKmode store is, so we must not
2421      take them into consideration.  */
2422   if (GET_MODE (mem) == BLKmode)
2423     return;
2424
2425   for (i = pbi->mem_set_list; i ; i = XEXP (i, 1))
2426     {
2427       rtx e = XEXP (i, 0);
2428       if (rtx_equal_p (XEXP (mem, 0), XEXP (e, 0)))
2429         {
2430           if (GET_MODE_SIZE (GET_MODE (mem)) > GET_MODE_SIZE (GET_MODE (e)))
2431             {
2432 #ifdef AUTO_INC_DEC
2433               /* If we must store a copy of the mem, we can just modify
2434                  the mode of the stored copy.  */
2435               if (pbi->flags & PROP_AUTOINC)
2436                 PUT_MODE (e, GET_MODE (mem));
2437               else
2438 #endif
2439                 XEXP (i, 0) = mem;
2440             }
2441           return;
2442         }
2443     }
2444
2445   if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN)
2446     {
2447 #ifdef AUTO_INC_DEC
2448       /* Store a copy of mem, otherwise the address may be
2449          scrogged by find_auto_inc.  */
2450       if (pbi->flags & PROP_AUTOINC)
2451         mem = shallow_copy_rtx (mem);
2452 #endif
2453       pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
2454       pbi->mem_set_list_len++;
2455     }
2456 }
2457
2458 /* INSN references memory, possibly using autoincrement addressing modes.
2459    Find any entries on the mem_set_list that need to be invalidated due
2460    to an address change.  */
2461
2462 static int
2463 invalidate_mems_from_autoinc (px, data)
2464      rtx *px;
2465      void *data;
2466 {
2467   rtx x = *px;
2468   struct propagate_block_info *pbi = data;
2469
2470   if (GET_RTX_CLASS (GET_CODE (x)) == 'a')
2471     {
2472       invalidate_mems_from_set (pbi, XEXP (x, 0));
2473       return -1;
2474     }
2475
2476   return 0;
2477 }
2478
2479 /* EXP is a REG.  Remove any dependent entries from pbi->mem_set_list.  */
2480
2481 static void
2482 invalidate_mems_from_set (pbi, exp)
2483      struct propagate_block_info *pbi;
2484      rtx exp;
2485 {
2486   rtx temp = pbi->mem_set_list;
2487   rtx prev = NULL_RTX;
2488   rtx next;
2489
2490   while (temp)
2491     {
2492       next = XEXP (temp, 1);
2493       if (reg_overlap_mentioned_p (exp, XEXP (temp, 0)))
2494         {
2495           /* Splice this entry out of the list.  */
2496           if (prev)
2497             XEXP (prev, 1) = next;
2498           else
2499             pbi->mem_set_list = next;
2500           free_EXPR_LIST_node (temp);
2501           pbi->mem_set_list_len--;
2502         }
2503       else
2504         prev = temp;
2505       temp = next;
2506     }
2507 }
2508
2509 /* Process the registers that are set within X.  Their bits are set to
2510    1 in the regset DEAD, because they are dead prior to this insn.
2511
2512    If INSN is nonzero, it is the insn being processed.
2513
2514    FLAGS is the set of operations to perform.  */
2515
2516 static void
2517 mark_set_regs (pbi, x, insn)
2518      struct propagate_block_info *pbi;
2519      rtx x, insn;
2520 {
2521   rtx cond = NULL_RTX;
2522   rtx link;
2523   enum rtx_code code;
2524
2525   if (insn)
2526     for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
2527       {
2528         if (REG_NOTE_KIND (link) == REG_INC)
2529           mark_set_1 (pbi, SET, XEXP (link, 0),
2530                       (GET_CODE (x) == COND_EXEC
2531                        ? COND_EXEC_TEST (x) : NULL_RTX),
2532                       insn, pbi->flags);
2533       }
2534  retry:
2535   switch (code = GET_CODE (x))
2536     {
2537     case SET:
2538     case CLOBBER:
2539       mark_set_1 (pbi, code, SET_DEST (x), cond, insn, pbi->flags);
2540       return;
2541
2542     case COND_EXEC:
2543       cond = COND_EXEC_TEST (x);
2544       x = COND_EXEC_CODE (x);
2545       goto retry;
2546
2547     case PARALLEL:
2548       {
2549         int i;
2550
2551         for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
2552           {
2553             rtx sub = XVECEXP (x, 0, i);
2554             switch (code = GET_CODE (sub))
2555               {
2556               case COND_EXEC:
2557                 if (cond != NULL_RTX)
2558                   abort ();
2559
2560                 cond = COND_EXEC_TEST (sub);
2561                 sub = COND_EXEC_CODE (sub);
2562                 if (GET_CODE (sub) != SET && GET_CODE (sub) != CLOBBER)
2563                   break;
2564                 /* Fall through.  */
2565
2566               case SET:
2567               case CLOBBER:
2568                 mark_set_1 (pbi, code, SET_DEST (sub), cond, insn, pbi->flags);
2569                 break;
2570
2571               default:
2572                 break;
2573               }
2574           }
2575         break;
2576       }
2577
2578     default:
2579       break;
2580     }
2581 }
2582
2583 /* Process a single set, which appears in INSN.  REG (which may not
2584    actually be a REG, it may also be a SUBREG, PARALLEL, etc.) is
2585    being set using the CODE (which may be SET, CLOBBER, or COND_EXEC).
2586    If the set is conditional (because it appear in a COND_EXEC), COND
2587    will be the condition.  */
2588
2589 static void
2590 mark_set_1 (pbi, code, reg, cond, insn, flags)
2591      struct propagate_block_info *pbi;
2592      enum rtx_code code;
2593      rtx reg, cond, insn;
2594      int flags;
2595 {
2596   int regno_first = -1, regno_last = -1;
2597   unsigned long not_dead = 0;
2598   int i;
2599
2600   /* Modifying just one hardware register of a multi-reg value or just a
2601      byte field of a register does not mean the value from before this insn
2602      is now dead.  Of course, if it was dead after it's unused now.  */
2603
2604   switch (GET_CODE (reg))
2605     {
2606     case PARALLEL:
2607       /* Some targets place small structures in registers for return values of
2608          functions.  We have to detect this case specially here to get correct
2609          flow information.  */
2610       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
2611         if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
2612           mark_set_1 (pbi, code, XEXP (XVECEXP (reg, 0, i), 0), cond, insn,
2613                       flags);
2614       return;
2615
2616     case ZERO_EXTRACT:
2617     case SIGN_EXTRACT:
2618     case STRICT_LOW_PART:
2619       /* ??? Assumes STRICT_LOW_PART not used on multi-word registers.  */
2620       do
2621         reg = XEXP (reg, 0);
2622       while (GET_CODE (reg) == SUBREG
2623              || GET_CODE (reg) == ZERO_EXTRACT
2624              || GET_CODE (reg) == SIGN_EXTRACT
2625              || GET_CODE (reg) == STRICT_LOW_PART);
2626       if (GET_CODE (reg) == MEM)
2627         break;
2628       not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live, REGNO (reg));
2629       /* Fall through.  */
2630
2631     case REG:
2632       regno_last = regno_first = REGNO (reg);
2633       if (regno_first < FIRST_PSEUDO_REGISTER)
2634         regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
2635       break;
2636
2637     case SUBREG:
2638       if (GET_CODE (SUBREG_REG (reg)) == REG)
2639         {
2640           enum machine_mode outer_mode = GET_MODE (reg);
2641           enum machine_mode inner_mode = GET_MODE (SUBREG_REG (reg));
2642
2643           /* Identify the range of registers affected.  This is moderately
2644              tricky for hard registers.  See alter_subreg.  */
2645
2646           regno_last = regno_first = REGNO (SUBREG_REG (reg));
2647           if (regno_first < FIRST_PSEUDO_REGISTER)
2648             {
2649               regno_first += subreg_regno_offset (regno_first, inner_mode,
2650                                                   SUBREG_BYTE (reg),
2651                                                   outer_mode);
2652               regno_last = (regno_first
2653                             + HARD_REGNO_NREGS (regno_first, outer_mode) - 1);
2654
2655               /* Since we've just adjusted the register number ranges, make
2656                  sure REG matches.  Otherwise some_was_live will be clear
2657                  when it shouldn't have been, and we'll create incorrect
2658                  REG_UNUSED notes.  */
2659               reg = gen_rtx_REG (outer_mode, regno_first);
2660             }
2661           else
2662             {
2663               /* If the number of words in the subreg is less than the number
2664                  of words in the full register, we have a well-defined partial
2665                  set.  Otherwise the high bits are undefined.
2666
2667                  This is only really applicable to pseudos, since we just took
2668                  care of multi-word hard registers.  */
2669               if (((GET_MODE_SIZE (outer_mode)
2670                     + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
2671                   < ((GET_MODE_SIZE (inner_mode)
2672                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
2673                 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live,
2674                                                             regno_first);
2675
2676               reg = SUBREG_REG (reg);
2677             }
2678         }
2679       else
2680         reg = SUBREG_REG (reg);
2681       break;
2682
2683     default:
2684       break;
2685     }
2686
2687   /* If this set is a MEM, then it kills any aliased writes.
2688      If this set is a REG, then it kills any MEMs which use the reg.  */
2689   if (optimize && (flags & PROP_SCAN_DEAD_STORES))
2690     {
2691       if (GET_CODE (reg) == REG)
2692         invalidate_mems_from_set (pbi, reg);
2693
2694       /* If the memory reference had embedded side effects (autoincrement
2695          address modes.  Then we may need to kill some entries on the
2696          memory set list.  */
2697       if (insn && GET_CODE (reg) == MEM)
2698         for_each_rtx (&PATTERN (insn), invalidate_mems_from_autoinc, pbi);
2699
2700       if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
2701           /* ??? With more effort we could track conditional memory life.  */
2702           && ! cond)
2703         add_to_mem_set_list (pbi, canon_rtx (reg));
2704     }
2705
2706   if (GET_CODE (reg) == REG
2707       && ! (regno_first == FRAME_POINTER_REGNUM
2708             && (! reload_completed || frame_pointer_needed))
2709 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2710       && ! (regno_first == HARD_FRAME_POINTER_REGNUM
2711             && (! reload_completed || frame_pointer_needed))
2712 #endif
2713 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2714       && ! (regno_first == ARG_POINTER_REGNUM && fixed_regs[regno_first])
2715 #endif
2716       )
2717     {
2718       int some_was_live = 0, some_was_dead = 0;
2719
2720       for (i = regno_first; i <= regno_last; ++i)
2721         {
2722           int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
2723           if (pbi->local_set)
2724             {
2725               /* Order of the set operation matters here since both
2726                  sets may be the same.  */
2727               CLEAR_REGNO_REG_SET (pbi->cond_local_set, i);
2728               if (cond != NULL_RTX
2729                   && ! REGNO_REG_SET_P (pbi->local_set, i))
2730                 SET_REGNO_REG_SET (pbi->cond_local_set, i);
2731               else
2732                 SET_REGNO_REG_SET (pbi->local_set, i);
2733             }
2734           if (code != CLOBBER)
2735             SET_REGNO_REG_SET (pbi->new_set, i);
2736
2737           some_was_live |= needed_regno;
2738           some_was_dead |= ! needed_regno;
2739         }
2740
2741 #ifdef HAVE_conditional_execution
2742       /* Consider conditional death in deciding that the register needs
2743          a death note.  */
2744       if (some_was_live && ! not_dead
2745           /* The stack pointer is never dead.  Well, not strictly true,
2746              but it's very difficult to tell from here.  Hopefully
2747              combine_stack_adjustments will fix up the most egregious
2748              errors.  */
2749           && regno_first != STACK_POINTER_REGNUM)
2750         {
2751           for (i = regno_first; i <= regno_last; ++i)
2752             if (! mark_regno_cond_dead (pbi, i, cond))
2753               not_dead |= ((unsigned long) 1) << (i - regno_first);
2754         }
2755 #endif
2756
2757       /* Additional data to record if this is the final pass.  */
2758       if (flags & (PROP_LOG_LINKS | PROP_REG_INFO
2759                    | PROP_DEATH_NOTES | PROP_AUTOINC))
2760         {
2761           rtx y;
2762           int blocknum = pbi->bb->index;
2763
2764           y = NULL_RTX;
2765           if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2766             {
2767               y = pbi->reg_next_use[regno_first];
2768
2769               /* The next use is no longer next, since a store intervenes.  */
2770               for (i = regno_first; i <= regno_last; ++i)
2771                 pbi->reg_next_use[i] = 0;
2772             }
2773
2774           if (flags & PROP_REG_INFO)
2775             {
2776               for (i = regno_first; i <= regno_last; ++i)
2777                 {
2778                   /* Count (weighted) references, stores, etc.  This counts a
2779                      register twice if it is modified, but that is correct.  */
2780                   REG_N_SETS (i) += 1;
2781                   REG_N_REFS (i) += 1;
2782                   REG_FREQ (i) += REG_FREQ_FROM_BB (pbi->bb);
2783
2784                   /* The insns where a reg is live are normally counted
2785                      elsewhere, but we want the count to include the insn
2786                      where the reg is set, and the normal counting mechanism
2787                      would not count it.  */
2788                   REG_LIVE_LENGTH (i) += 1;
2789                 }
2790
2791               /* If this is a hard reg, record this function uses the reg.  */
2792               if (regno_first < FIRST_PSEUDO_REGISTER)
2793                 {
2794                   for (i = regno_first; i <= regno_last; i++)
2795                     regs_ever_live[i] = 1;
2796                 }
2797               else
2798                 {
2799                   /* Keep track of which basic blocks each reg appears in.  */
2800                   if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
2801                     REG_BASIC_BLOCK (regno_first) = blocknum;
2802                   else if (REG_BASIC_BLOCK (regno_first) != blocknum)
2803                     REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
2804                 }
2805             }
2806
2807           if (! some_was_dead)
2808             {
2809               if (flags & PROP_LOG_LINKS)
2810                 {
2811                   /* Make a logical link from the next following insn
2812                      that uses this register, back to this insn.
2813                      The following insns have already been processed.
2814
2815                      We don't build a LOG_LINK for hard registers containing
2816                      in ASM_OPERANDs.  If these registers get replaced,
2817                      we might wind up changing the semantics of the insn,
2818                      even if reload can make what appear to be valid
2819                      assignments later.  */
2820                   if (y && (BLOCK_NUM (y) == blocknum)
2821                       && (regno_first >= FIRST_PSEUDO_REGISTER
2822                           || asm_noperands (PATTERN (y)) < 0))
2823                     LOG_LINKS (y) = alloc_INSN_LIST (insn, LOG_LINKS (y));
2824                 }
2825             }
2826           else if (not_dead)
2827             ;
2828           else if (! some_was_live)
2829             {
2830               if (flags & PROP_REG_INFO)
2831                 REG_N_DEATHS (regno_first) += 1;
2832
2833               if (flags & PROP_DEATH_NOTES)
2834                 {
2835                   /* Note that dead stores have already been deleted
2836                      when possible.  If we get here, we have found a
2837                      dead store that cannot be eliminated (because the
2838                      same insn does something useful).  Indicate this
2839                      by marking the reg being set as dying here.  */
2840                   REG_NOTES (insn)
2841                     = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2842                 }
2843             }
2844           else
2845             {
2846               if (flags & PROP_DEATH_NOTES)
2847                 {
2848                   /* This is a case where we have a multi-word hard register
2849                      and some, but not all, of the words of the register are
2850                      needed in subsequent insns.  Write REG_UNUSED notes
2851                      for those parts that were not needed.  This case should
2852                      be rare.  */
2853
2854                   for (i = regno_first; i <= regno_last; ++i)
2855                     if (! REGNO_REG_SET_P (pbi->reg_live, i))
2856                       REG_NOTES (insn)
2857                         = alloc_EXPR_LIST (REG_UNUSED,
2858                                            regno_reg_rtx[i],
2859                                            REG_NOTES (insn));
2860                 }
2861             }
2862         }
2863
2864       /* Mark the register as being dead.  */
2865       if (some_was_live
2866           /* The stack pointer is never dead.  Well, not strictly true,
2867              but it's very difficult to tell from here.  Hopefully
2868              combine_stack_adjustments will fix up the most egregious
2869              errors.  */
2870           && regno_first != STACK_POINTER_REGNUM)
2871         {
2872           for (i = regno_first; i <= regno_last; ++i)
2873             if (!(not_dead & (((unsigned long) 1) << (i - regno_first))))
2874               CLEAR_REGNO_REG_SET (pbi->reg_live, i);
2875         }
2876     }
2877   else if (GET_CODE (reg) == REG)
2878     {
2879       if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2880         pbi->reg_next_use[regno_first] = 0;
2881     }
2882
2883   /* If this is the last pass and this is a SCRATCH, show it will be dying
2884      here and count it.  */
2885   else if (GET_CODE (reg) == SCRATCH)
2886     {
2887       if (flags & PROP_DEATH_NOTES)
2888         REG_NOTES (insn)
2889           = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2890     }
2891 }
2892 \f
2893 #ifdef HAVE_conditional_execution
2894 /* Mark REGNO conditionally dead.
2895    Return true if the register is now unconditionally dead.  */
2896
2897 static int
2898 mark_regno_cond_dead (pbi, regno, cond)
2899      struct propagate_block_info *pbi;
2900      int regno;
2901      rtx cond;
2902 {
2903   /* If this is a store to a predicate register, the value of the
2904      predicate is changing, we don't know that the predicate as seen
2905      before is the same as that seen after.  Flush all dependent
2906      conditions from reg_cond_dead.  This will make all such
2907      conditionally live registers unconditionally live.  */
2908   if (REGNO_REG_SET_P (pbi->reg_cond_reg, regno))
2909     flush_reg_cond_reg (pbi, regno);
2910
2911   /* If this is an unconditional store, remove any conditional
2912      life that may have existed.  */
2913   if (cond == NULL_RTX)
2914     splay_tree_remove (pbi->reg_cond_dead, regno);
2915   else
2916     {
2917       splay_tree_node node;
2918       struct reg_cond_life_info *rcli;
2919       rtx ncond;
2920
2921       /* Otherwise this is a conditional set.  Record that fact.
2922          It may have been conditionally used, or there may be a
2923          subsequent set with a complimentary condition.  */
2924
2925       node = splay_tree_lookup (pbi->reg_cond_dead, regno);
2926       if (node == NULL)
2927         {
2928           /* The register was unconditionally live previously.
2929              Record the current condition as the condition under
2930              which it is dead.  */
2931           rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
2932           rcli->condition = cond;
2933           rcli->stores = cond;
2934           rcli->orig_condition = const0_rtx;
2935           splay_tree_insert (pbi->reg_cond_dead, regno,
2936                              (splay_tree_value) rcli);
2937
2938           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2939
2940           /* Not unconditionally dead.  */
2941           return 0;
2942         }
2943       else
2944         {
2945           /* The register was conditionally live previously.
2946              Add the new condition to the old.  */
2947           rcli = (struct reg_cond_life_info *) node->value;
2948           ncond = rcli->condition;
2949           ncond = ior_reg_cond (ncond, cond, 1);
2950           if (rcli->stores == const0_rtx)
2951             rcli->stores = cond;
2952           else if (rcli->stores != const1_rtx)
2953             rcli->stores = ior_reg_cond (rcli->stores, cond, 1);
2954
2955           /* If the register is now unconditionally dead, remove the entry
2956              in the splay_tree.  A register is unconditionally dead if the
2957              dead condition ncond is true.  A register is also unconditionally
2958              dead if the sum of all conditional stores is an unconditional
2959              store (stores is true), and the dead condition is identically the
2960              same as the original dead condition initialized at the end of
2961              the block.  This is a pointer compare, not an rtx_equal_p
2962              compare.  */
2963           if (ncond == const1_rtx
2964               || (ncond == rcli->orig_condition && rcli->stores == const1_rtx))
2965             splay_tree_remove (pbi->reg_cond_dead, regno);
2966           else
2967             {
2968               rcli->condition = ncond;
2969
2970               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2971
2972               /* Not unconditionally dead.  */
2973               return 0;
2974             }
2975         }
2976     }
2977
2978   return 1;
2979 }
2980
2981 /* Called from splay_tree_delete for pbi->reg_cond_life.  */
2982
2983 static void
2984 free_reg_cond_life_info (value)
2985      splay_tree_value value;
2986 {
2987   struct reg_cond_life_info *rcli = (struct reg_cond_life_info *) value;
2988   free (rcli);
2989 }
2990
2991 /* Helper function for flush_reg_cond_reg.  */
2992
2993 static int
2994 flush_reg_cond_reg_1 (node, data)
2995      splay_tree_node node;
2996      void *data;
2997 {
2998   struct reg_cond_life_info *rcli;
2999   int *xdata = (int *) data;
3000   unsigned int regno = xdata[0];
3001
3002   /* Don't need to search if last flushed value was farther on in
3003      the in-order traversal.  */
3004   if (xdata[1] >= (int) node->key)
3005     return 0;
3006
3007   /* Splice out portions of the expression that refer to regno.  */
3008   rcli = (struct reg_cond_life_info *) node->value;
3009   rcli->condition = elim_reg_cond (rcli->condition, regno);
3010   if (rcli->stores != const0_rtx && rcli->stores != const1_rtx)
3011     rcli->stores = elim_reg_cond (rcli->stores, regno);
3012
3013   /* If the entire condition is now false, signal the node to be removed.  */
3014   if (rcli->condition == const0_rtx)
3015     {
3016       xdata[1] = node->key;
3017       return -1;
3018     }
3019   else if (rcli->condition == const1_rtx)
3020     abort ();
3021
3022   return 0;
3023 }
3024
3025 /* Flush all (sub) expressions referring to REGNO from REG_COND_LIVE.  */
3026
3027 static void
3028 flush_reg_cond_reg (pbi, regno)
3029      struct propagate_block_info *pbi;
3030      int regno;
3031 {
3032   int pair[2];
3033
3034   pair[0] = regno;
3035   pair[1] = -1;
3036   while (splay_tree_foreach (pbi->reg_cond_dead,
3037                              flush_reg_cond_reg_1, pair) == -1)
3038     splay_tree_remove (pbi->reg_cond_dead, pair[1]);
3039
3040   CLEAR_REGNO_REG_SET (pbi->reg_cond_reg, regno);
3041 }
3042
3043 /* Logical arithmetic on predicate conditions.  IOR, NOT and AND.
3044    For ior/and, the ADD flag determines whether we want to add the new
3045    condition X to the old one unconditionally.  If it is zero, we will
3046    only return a new expression if X allows us to simplify part of
3047    OLD, otherwise we return NULL to the caller.
3048    If ADD is nonzero, we will return a new condition in all cases.  The
3049    toplevel caller of one of these functions should always pass 1 for
3050    ADD.  */
3051
3052 static rtx
3053 ior_reg_cond (old, x, add)
3054      rtx old, x;
3055      int add;
3056 {
3057   rtx op0, op1;
3058
3059   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
3060     {
3061       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
3062           && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
3063           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3064         return const1_rtx;
3065       if (GET_CODE (x) == GET_CODE (old)
3066           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3067         return old;
3068       if (! add)
3069         return NULL;
3070       return gen_rtx_IOR (0, old, x);
3071     }
3072
3073   switch (GET_CODE (old))
3074     {
3075     case IOR:
3076       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
3077       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
3078       if (op0 != NULL || op1 != NULL)
3079         {
3080           if (op0 == const0_rtx)
3081             return op1 ? op1 : gen_rtx_IOR (0, XEXP (old, 1), x);
3082           if (op1 == const0_rtx)
3083             return op0 ? op0 : gen_rtx_IOR (0, XEXP (old, 0), x);
3084           if (op0 == const1_rtx || op1 == const1_rtx)
3085             return const1_rtx;
3086           if (op0 == NULL)
3087             op0 = gen_rtx_IOR (0, XEXP (old, 0), x);
3088           else if (rtx_equal_p (x, op0))
3089             /* (x | A) | x ~ (x | A).  */
3090             return old;
3091           if (op1 == NULL)
3092             op1 = gen_rtx_IOR (0, XEXP (old, 1), x);
3093           else if (rtx_equal_p (x, op1))
3094             /* (A | x) | x ~ (A | x).  */
3095             return old;
3096           return gen_rtx_IOR (0, op0, op1);
3097         }
3098       if (! add)
3099         return NULL;
3100       return gen_rtx_IOR (0, old, x);
3101
3102     case AND:
3103       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
3104       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
3105       if (op0 != NULL || op1 != NULL)
3106         {
3107           if (op0 == const1_rtx)
3108             return op1 ? op1 : gen_rtx_IOR (0, XEXP (old, 1), x);
3109           if (op1 == const1_rtx)
3110             return op0 ? op0 : gen_rtx_IOR (0, XEXP (old, 0), x);
3111           if (op0 == const0_rtx || op1 == const0_rtx)
3112             return const0_rtx;
3113           if (op0 == NULL)
3114             op0 = gen_rtx_IOR (0, XEXP (old, 0), x);
3115           else if (rtx_equal_p (x, op0))
3116             /* (x & A) | x ~ x.  */
3117             return op0;
3118           if (op1 == NULL)
3119             op1 = gen_rtx_IOR (0, XEXP (old, 1), x);
3120           else if (rtx_equal_p (x, op1))
3121             /* (A & x) | x ~ x.  */
3122             return op1;
3123           return gen_rtx_AND (0, op0, op1);
3124         }
3125       if (! add)
3126         return NULL;
3127       return gen_rtx_IOR (0, old, x);
3128
3129     case NOT:
3130       op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
3131       if (op0 != NULL)
3132         return not_reg_cond (op0);
3133       if (! add)
3134         return NULL;
3135       return gen_rtx_IOR (0, old, x);
3136
3137     default:
3138       abort ();
3139     }
3140 }
3141
3142 static rtx
3143 not_reg_cond (x)
3144      rtx x;
3145 {
3146   enum rtx_code x_code;
3147
3148   if (x == const0_rtx)
3149     return const1_rtx;
3150   else if (x == const1_rtx)
3151     return const0_rtx;
3152   x_code = GET_CODE (x);
3153   if (x_code == NOT)
3154     return XEXP (x, 0);
3155   if (GET_RTX_CLASS (x_code) == '<'
3156       && GET_CODE (XEXP (x, 0)) == REG)
3157     {
3158       if (XEXP (x, 1) != const0_rtx)
3159         abort ();
3160
3161       return gen_rtx_fmt_ee (reverse_condition (x_code),
3162                              VOIDmode, XEXP (x, 0), const0_rtx);
3163     }
3164   return gen_rtx_NOT (0, x);
3165 }
3166
3167 static rtx
3168 and_reg_cond (old, x, add)
3169      rtx old, x;
3170      int add;
3171 {
3172   rtx op0, op1;
3173
3174   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
3175     {
3176       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
3177           && GET_CODE (x) == reverse_condition (GET_CODE (old))
3178           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3179         return const0_rtx;
3180       if (GET_CODE (x) == GET_CODE (old)
3181           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3182         return old;
3183       if (! add)
3184         return NULL;
3185       return gen_rtx_AND (0, old, x);
3186     }
3187
3188   switch (GET_CODE (old))
3189     {
3190     case IOR:
3191       op0 = and_reg_cond (XEXP (old, 0), x, 0);
3192       op1 = and_reg_cond (XEXP (old, 1), x, 0);
3193       if (op0 != NULL || op1 != NULL)
3194         {
3195           if (op0 == const0_rtx)
3196             return op1 ? op1 : gen_rtx_AND (0, XEXP (old, 1), x);
3197           if (op1 == const0_rtx)
3198             return op0 ? op0 : gen_rtx_AND (0, XEXP (old, 0), x);
3199           if (op0 == const1_rtx || op1 == const1_rtx)
3200             return const1_rtx;
3201           if (op0 == NULL)
3202             op0 = gen_rtx_AND (0, XEXP (old, 0), x);
3203           else if (rtx_equal_p (x, op0))
3204             /* (x | A) & x ~ x.  */
3205             return op0;
3206           if (op1 == NULL)
3207             op1 = gen_rtx_AND (0, XEXP (old, 1), x);
3208           else if (rtx_equal_p (x, op1))
3209             /* (A | x) & x ~ x.  */
3210             return op1;
3211           return gen_rtx_IOR (0, op0, op1);
3212         }
3213       if (! add)
3214         return NULL;
3215       return gen_rtx_AND (0, old, x);
3216
3217     case AND:
3218       op0 = and_reg_cond (XEXP (old, 0), x, 0);
3219       op1 = and_reg_cond (XEXP (old, 1), x, 0);
3220       if (op0 != NULL || op1 != NULL)
3221         {
3222           if (op0 == const1_rtx)
3223             return op1 ? op1 : gen_rtx_AND (0, XEXP (old, 1), x);
3224           if (op1 == const1_rtx)
3225             return op0 ? op0 : gen_rtx_AND (0, XEXP (old, 0), x);
3226           if (op0 == const0_rtx || op1 == const0_rtx)
3227             return const0_rtx;
3228           if (op0 == NULL)
3229             op0 = gen_rtx_AND (0, XEXP (old, 0), x);
3230           else if (rtx_equal_p (x, op0))
3231             /* (x & A) & x ~ (x & A).  */
3232             return old;
3233           if (op1 == NULL)
3234             op1 = gen_rtx_AND (0, XEXP (old, 1), x);
3235           else if (rtx_equal_p (x, op1))
3236             /* (A & x) & x ~ (A & x).  */
3237             return old;
3238           return gen_rtx_AND (0, op0, op1);
3239         }
3240       if (! add)
3241         return NULL;
3242       return gen_rtx_AND (0, old, x);
3243
3244     case NOT:
3245       op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
3246       if (op0 != NULL)
3247         return not_reg_cond (op0);
3248       if (! add)
3249         return NULL;
3250       return gen_rtx_AND (0, old, x);
3251
3252     default:
3253       abort ();
3254     }
3255 }
3256
3257 /* Given a condition X, remove references to reg REGNO and return the
3258    new condition.  The removal will be done so that all conditions
3259    involving REGNO are considered to evaluate to false.  This function
3260    is used when the value of REGNO changes.  */
3261
3262 static rtx
3263 elim_reg_cond (x, regno)
3264      rtx x;
3265      unsigned int regno;
3266 {
3267   rtx op0, op1;
3268
3269   if (GET_RTX_CLASS (GET_CODE (x)) == '<')
3270     {
3271       if (REGNO (XEXP (x, 0)) == regno)
3272         return const0_rtx;
3273       return x;
3274     }
3275
3276   switch (GET_CODE (x))
3277     {
3278     case AND:
3279       op0 = elim_reg_cond (XEXP (x, 0), regno);
3280       op1 = elim_reg_cond (XEXP (x, 1), regno);
3281       if (op0 == const0_rtx || op1 == const0_rtx)
3282         return const0_rtx;
3283       if (op0 == const1_rtx)
3284         return op1;
3285       if (op1 == const1_rtx)
3286         return op0;
3287       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3288         return x;
3289       return gen_rtx_AND (0, op0, op1);
3290
3291     case IOR:
3292       op0 = elim_reg_cond (XEXP (x, 0), regno);
3293       op1 = elim_reg_cond (XEXP (x, 1), regno);
3294       if (op0 == const1_rtx || op1 == const1_rtx)
3295         return const1_rtx;
3296       if (op0 == const0_rtx)
3297         return op1;
3298       if (op1 == const0_rtx)
3299         return op0;
3300       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3301         return x;
3302       return gen_rtx_IOR (0, op0, op1);
3303
3304     case NOT:
3305       op0 = elim_reg_cond (XEXP (x, 0), regno);
3306       if (op0 == const0_rtx)
3307         return const1_rtx;
3308       if (op0 == const1_rtx)
3309         return const0_rtx;
3310       if (op0 != XEXP (x, 0))
3311         return not_reg_cond (op0);
3312       return x;
3313
3314     default:
3315       abort ();
3316     }
3317 }
3318 #endif /* HAVE_conditional_execution */
3319 \f
3320 #ifdef AUTO_INC_DEC
3321
3322 /* Try to substitute the auto-inc expression INC as the address inside
3323    MEM which occurs in INSN.  Currently, the address of MEM is an expression
3324    involving INCR_REG, and INCR is the next use of INCR_REG; it is an insn
3325    that has a single set whose source is a PLUS of INCR_REG and something
3326    else.  */
3327
3328 static void
3329 attempt_auto_inc (pbi, inc, insn, mem, incr, incr_reg)
3330      struct propagate_block_info *pbi;
3331      rtx inc, insn, mem, incr, incr_reg;
3332 {
3333   int regno = REGNO (incr_reg);
3334   rtx set = single_set (incr);
3335   rtx q = SET_DEST (set);
3336   rtx y = SET_SRC (set);
3337   int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
3338
3339   /* Make sure this reg appears only once in this insn.  */
3340   if (count_occurrences (PATTERN (insn), incr_reg, 1) != 1)
3341     return;
3342
3343   if (dead_or_set_p (incr, incr_reg)
3344       /* Mustn't autoinc an eliminable register.  */
3345       && (regno >= FIRST_PSEUDO_REGISTER
3346           || ! TEST_HARD_REG_BIT (elim_reg_set, regno)))
3347     {
3348       /* This is the simple case.  Try to make the auto-inc.  If
3349          we can't, we are done.  Otherwise, we will do any
3350          needed updates below.  */
3351       if (! validate_change (insn, &XEXP (mem, 0), inc, 0))
3352         return;
3353     }
3354   else if (GET_CODE (q) == REG
3355            /* PREV_INSN used here to check the semi-open interval
3356               [insn,incr).  */
3357            && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
3358            /* We must also check for sets of q as q may be
3359               a call clobbered hard register and there may
3360               be a call between PREV_INSN (insn) and incr.  */
3361            && ! reg_set_between_p (q,  PREV_INSN (insn), incr))
3362     {
3363       /* We have *p followed sometime later by q = p+size.
3364          Both p and q must be live afterward,
3365          and q is not used between INSN and its assignment.
3366          Change it to q = p, ...*q..., q = q+size.
3367          Then fall into the usual case.  */
3368       rtx insns, temp;
3369
3370       start_sequence ();
3371       emit_move_insn (q, incr_reg);
3372       insns = get_insns ();
3373       end_sequence ();
3374
3375       /* If we can't make the auto-inc, or can't make the
3376          replacement into Y, exit.  There's no point in making
3377          the change below if we can't do the auto-inc and doing
3378          so is not correct in the pre-inc case.  */
3379
3380       XEXP (inc, 0) = q;
3381       validate_change (insn, &XEXP (mem, 0), inc, 1);
3382       validate_change (incr, &XEXP (y, opnum), q, 1);
3383       if (! apply_change_group ())
3384         return;
3385
3386       /* We now know we'll be doing this change, so emit the
3387          new insn(s) and do the updates.  */
3388       emit_insn_before (insns, insn);
3389
3390       if (pbi->bb->head == insn)
3391         pbi->bb->head = insns;
3392
3393       /* INCR will become a NOTE and INSN won't contain a
3394          use of INCR_REG.  If a use of INCR_REG was just placed in
3395          the insn before INSN, make that the next use.
3396          Otherwise, invalidate it.  */
3397       if (GET_CODE (PREV_INSN (insn)) == INSN
3398           && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
3399           && SET_SRC (PATTERN (PREV_INSN (insn))) == incr_reg)
3400         pbi->reg_next_use[regno] = PREV_INSN (insn);
3401       else
3402         pbi->reg_next_use[regno] = 0;
3403
3404       incr_reg = q;
3405       regno = REGNO (q);
3406
3407       /* REGNO is now used in INCR which is below INSN, but
3408          it previously wasn't live here.  If we don't mark
3409          it as live, we'll put a REG_DEAD note for it
3410          on this insn, which is incorrect.  */
3411       SET_REGNO_REG_SET (pbi->reg_live, regno);
3412
3413       /* If there are any calls between INSN and INCR, show
3414          that REGNO now crosses them.  */
3415       for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
3416         if (GET_CODE (temp) == CALL_INSN)
3417           REG_N_CALLS_CROSSED (regno)++;
3418
3419       /* Invalidate alias info for Q since we just changed its value.  */
3420       clear_reg_alias_info (q);
3421     }
3422   else
3423     return;
3424
3425   /* If we haven't returned, it means we were able to make the
3426      auto-inc, so update the status.  First, record that this insn
3427      has an implicit side effect.  */
3428
3429   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, incr_reg, REG_NOTES (insn));
3430
3431   /* Modify the old increment-insn to simply copy
3432      the already-incremented value of our register.  */
3433   if (! validate_change (incr, &SET_SRC (set), incr_reg, 0))
3434     abort ();
3435
3436   /* If that makes it a no-op (copying the register into itself) delete
3437      it so it won't appear to be a "use" and a "set" of this
3438      register.  */
3439   if (REGNO (SET_DEST (set)) == REGNO (incr_reg))
3440     {
3441       /* If the original source was dead, it's dead now.  */
3442       rtx note;
3443
3444       while ((note = find_reg_note (incr, REG_DEAD, NULL_RTX)) != NULL_RTX)
3445         {
3446           remove_note (incr, note);
3447           if (XEXP (note, 0) != incr_reg)
3448             CLEAR_REGNO_REG_SET (pbi->reg_live, REGNO (XEXP (note, 0)));
3449         }
3450
3451       PUT_CODE (incr, NOTE);
3452       NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
3453       NOTE_SOURCE_FILE (incr) = 0;
3454     }
3455
3456   if (regno >= FIRST_PSEUDO_REGISTER)
3457     {
3458       /* Count an extra reference to the reg.  When a reg is
3459          incremented, spilling it is worse, so we want to make
3460          that less likely.  */
3461       REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3462
3463       /* Count the increment as a setting of the register,
3464          even though it isn't a SET in rtl.  */
3465       REG_N_SETS (regno)++;
3466     }
3467 }
3468
3469 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
3470    reference.  */
3471
3472 static void
3473 find_auto_inc (pbi, x, insn)
3474      struct propagate_block_info *pbi;
3475      rtx x;
3476      rtx insn;
3477 {
3478   rtx addr = XEXP (x, 0);
3479   HOST_WIDE_INT offset = 0;
3480   rtx set, y, incr, inc_val;
3481   int regno;
3482   int size = GET_MODE_SIZE (GET_MODE (x));
3483
3484   if (GET_CODE (insn) == JUMP_INSN)
3485     return;
3486
3487   /* Here we detect use of an index register which might be good for
3488      postincrement, postdecrement, preincrement, or predecrement.  */
3489
3490   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
3491     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
3492
3493   if (GET_CODE (addr) != REG)
3494     return;
3495
3496   regno = REGNO (addr);
3497
3498   /* Is the next use an increment that might make auto-increment? */
3499   incr = pbi->reg_next_use[regno];
3500   if (incr == 0 || BLOCK_NUM (incr) != BLOCK_NUM (insn))
3501     return;
3502   set = single_set (incr);
3503   if (set == 0 || GET_CODE (set) != SET)
3504     return;
3505   y = SET_SRC (set);
3506
3507   if (GET_CODE (y) != PLUS)
3508     return;
3509
3510   if (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) == REGNO (addr))
3511     inc_val = XEXP (y, 1);
3512   else if (REG_P (XEXP (y, 1)) && REGNO (XEXP (y, 1)) == REGNO (addr))
3513     inc_val = XEXP (y, 0);
3514   else
3515     return;
3516
3517   if (GET_CODE (inc_val) == CONST_INT)
3518     {
3519       if (HAVE_POST_INCREMENT
3520           && (INTVAL (inc_val) == size && offset == 0))
3521         attempt_auto_inc (pbi, gen_rtx_POST_INC (Pmode, addr), insn, x,
3522                           incr, addr);
3523       else if (HAVE_POST_DECREMENT
3524                && (INTVAL (inc_val) == -size && offset == 0))
3525         attempt_auto_inc (pbi, gen_rtx_POST_DEC (Pmode, addr), insn, x,
3526                           incr, addr);
3527       else if (HAVE_PRE_INCREMENT
3528                && (INTVAL (inc_val) == size && offset == size))
3529         attempt_auto_inc (pbi, gen_rtx_PRE_INC (Pmode, addr), insn, x,
3530                           incr, addr);
3531       else if (HAVE_PRE_DECREMENT
3532                && (INTVAL (inc_val) == -size && offset == -size))
3533         attempt_auto_inc (pbi, gen_rtx_PRE_DEC (Pmode, addr), insn, x,
3534                           incr, addr);
3535       else if (HAVE_POST_MODIFY_DISP && offset == 0)
3536         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3537                                                     gen_rtx_PLUS (Pmode,
3538                                                                   addr,
3539                                                                   inc_val)),
3540                           insn, x, incr, addr);
3541       else if (HAVE_PRE_MODIFY_DISP && offset == INTVAL (inc_val))
3542         attempt_auto_inc (pbi, gen_rtx_PRE_MODIFY (Pmode, addr,
3543                                                     gen_rtx_PLUS (Pmode,
3544                                                                   addr,
3545                                                                   inc_val)),
3546                           insn, x, incr, addr);
3547     }
3548   else if (GET_CODE (inc_val) == REG
3549            && ! reg_set_between_p (inc_val, PREV_INSN (insn),
3550                                    NEXT_INSN (incr)))
3551
3552     {
3553       if (HAVE_POST_MODIFY_REG && offset == 0)
3554         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3555                                                     gen_rtx_PLUS (Pmode,
3556                                                                   addr,
3557                                                                   inc_val)),
3558                           insn, x, incr, addr);
3559     }
3560 }
3561
3562 #endif /* AUTO_INC_DEC */
3563 \f
3564 static void
3565 mark_used_reg (pbi, reg, cond, insn)
3566      struct propagate_block_info *pbi;
3567      rtx reg;
3568      rtx cond ATTRIBUTE_UNUSED;
3569      rtx insn;
3570 {
3571   unsigned int regno_first, regno_last, i;
3572   int some_was_live, some_was_dead, some_not_set;
3573
3574   regno_last = regno_first = REGNO (reg);
3575   if (regno_first < FIRST_PSEUDO_REGISTER)
3576     regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
3577
3578   /* Find out if any of this register is live after this instruction.  */
3579   some_was_live = some_was_dead = 0;
3580   for (i = regno_first; i <= regno_last; ++i)
3581     {
3582       int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
3583       some_was_live |= needed_regno;
3584       some_was_dead |= ! needed_regno;
3585     }
3586
3587   /* Find out if any of the register was set this insn.  */
3588   some_not_set = 0;
3589   for (i = regno_first; i <= regno_last; ++i)
3590     some_not_set |= ! REGNO_REG_SET_P (pbi->new_set, i);
3591
3592   if (pbi->flags & (PROP_LOG_LINKS | PROP_AUTOINC))
3593     {
3594       /* Record where each reg is used, so when the reg is set we know
3595          the next insn that uses it.  */
3596       pbi->reg_next_use[regno_first] = insn;
3597     }
3598
3599   if (pbi->flags & PROP_REG_INFO)
3600     {
3601       if (regno_first < FIRST_PSEUDO_REGISTER)
3602         {
3603           /* If this is a register we are going to try to eliminate,
3604              don't mark it live here.  If we are successful in
3605              eliminating it, it need not be live unless it is used for
3606              pseudos, in which case it will have been set live when it
3607              was allocated to the pseudos.  If the register will not
3608              be eliminated, reload will set it live at that point.
3609
3610              Otherwise, record that this function uses this register.  */
3611           /* ??? The PPC backend tries to "eliminate" on the pic
3612              register to itself.  This should be fixed.  In the mean
3613              time, hack around it.  */
3614
3615           if (! (TEST_HARD_REG_BIT (elim_reg_set, regno_first)
3616                  && (regno_first == FRAME_POINTER_REGNUM
3617                      || regno_first == ARG_POINTER_REGNUM)))
3618             for (i = regno_first; i <= regno_last; ++i)
3619               regs_ever_live[i] = 1;
3620         }
3621       else
3622         {
3623           /* Keep track of which basic block each reg appears in.  */
3624
3625           int blocknum = pbi->bb->index;
3626           if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
3627             REG_BASIC_BLOCK (regno_first) = blocknum;
3628           else if (REG_BASIC_BLOCK (regno_first) != blocknum)
3629             REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
3630
3631           /* Count (weighted) number of uses of each reg.  */
3632           REG_FREQ (regno_first) += REG_FREQ_FROM_BB (pbi->bb);
3633           REG_N_REFS (regno_first)++;
3634         }
3635     }
3636
3637   /* Record and count the insns in which a reg dies.  If it is used in
3638      this insn and was dead below the insn then it dies in this insn.
3639      If it was set in this insn, we do not make a REG_DEAD note;
3640      likewise if we already made such a note.  */
3641   if ((pbi->flags & (PROP_DEATH_NOTES | PROP_REG_INFO))
3642       && some_was_dead
3643       && some_not_set)
3644     {
3645       /* Check for the case where the register dying partially
3646          overlaps the register set by this insn.  */
3647       if (regno_first != regno_last)
3648         for (i = regno_first; i <= regno_last; ++i)
3649           some_was_live |= REGNO_REG_SET_P (pbi->new_set, i);
3650
3651       /* If none of the words in X is needed, make a REG_DEAD note.
3652          Otherwise, we must make partial REG_DEAD notes.  */
3653       if (! some_was_live)
3654         {
3655           if ((pbi->flags & PROP_DEATH_NOTES)
3656               && ! find_regno_note (insn, REG_DEAD, regno_first))
3657             REG_NOTES (insn)
3658               = alloc_EXPR_LIST (REG_DEAD, reg, REG_NOTES (insn));
3659
3660           if (pbi->flags & PROP_REG_INFO)
3661             REG_N_DEATHS (regno_first)++;
3662         }
3663       else
3664         {
3665           /* Don't make a REG_DEAD note for a part of a register
3666              that is set in the insn.  */
3667           for (i = regno_first; i <= regno_last; ++i)
3668             if (! REGNO_REG_SET_P (pbi->reg_live, i)
3669                 && ! dead_or_set_regno_p (insn, i))
3670               REG_NOTES (insn)
3671                 = alloc_EXPR_LIST (REG_DEAD,
3672                                    regno_reg_rtx[i],
3673                                    REG_NOTES (insn));
3674         }
3675     }
3676
3677   /* Mark the register as being live.  */
3678   for (i = regno_first; i <= regno_last; ++i)
3679     {
3680 #ifdef HAVE_conditional_execution
3681       int this_was_live = REGNO_REG_SET_P (pbi->reg_live, i);
3682 #endif
3683
3684       SET_REGNO_REG_SET (pbi->reg_live, i);
3685
3686 #ifdef HAVE_conditional_execution
3687       /* If this is a conditional use, record that fact.  If it is later
3688          conditionally set, we'll know to kill the register.  */
3689       if (cond != NULL_RTX)
3690         {
3691           splay_tree_node node;
3692           struct reg_cond_life_info *rcli;
3693           rtx ncond;
3694
3695           if (this_was_live)
3696             {
3697               node = splay_tree_lookup (pbi->reg_cond_dead, i);
3698               if (node == NULL)
3699                 {
3700                   /* The register was unconditionally live previously.
3701                      No need to do anything.  */
3702                 }
3703               else
3704                 {
3705                   /* The register was conditionally live previously.
3706                      Subtract the new life cond from the old death cond.  */
3707                   rcli = (struct reg_cond_life_info *) node->value;
3708                   ncond = rcli->condition;
3709                   ncond = and_reg_cond (ncond, not_reg_cond (cond), 1);
3710
3711                   /* If the register is now unconditionally live,
3712                      remove the entry in the splay_tree.  */
3713                   if (ncond == const0_rtx)
3714                     splay_tree_remove (pbi->reg_cond_dead, i);
3715                   else
3716                     {
3717                       rcli->condition = ncond;
3718                       SET_REGNO_REG_SET (pbi->reg_cond_reg,
3719                                          REGNO (XEXP (cond, 0)));
3720                     }
3721                 }
3722             }
3723           else
3724             {
3725               /* The register was not previously live at all.  Record
3726                  the condition under which it is still dead.  */
3727               rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
3728               rcli->condition = not_reg_cond (cond);
3729               rcli->stores = const0_rtx;
3730               rcli->orig_condition = const0_rtx;
3731               splay_tree_insert (pbi->reg_cond_dead, i,
3732                                  (splay_tree_value) rcli);
3733
3734               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3735             }
3736         }
3737       else if (this_was_live)
3738         {
3739           /* The register may have been conditionally live previously, but
3740              is now unconditionally live.  Remove it from the conditionally
3741              dead list, so that a conditional set won't cause us to think
3742              it dead.  */
3743           splay_tree_remove (pbi->reg_cond_dead, i);
3744         }
3745 #endif
3746     }
3747 }
3748
3749 /* Scan expression X and store a 1-bit in NEW_LIVE for each reg it uses.
3750    This is done assuming the registers needed from X are those that
3751    have 1-bits in PBI->REG_LIVE.
3752
3753    INSN is the containing instruction.  If INSN is dead, this function
3754    is not called.  */
3755
3756 static void
3757 mark_used_regs (pbi, x, cond, insn)
3758      struct propagate_block_info *pbi;
3759      rtx x, cond, insn;
3760 {
3761   RTX_CODE code;
3762   int regno;
3763   int flags = pbi->flags;
3764
3765  retry:
3766   if (!x)
3767     return;
3768   code = GET_CODE (x);
3769   switch (code)
3770     {
3771     case LABEL_REF:
3772     case SYMBOL_REF:
3773     case CONST_INT:
3774     case CONST:
3775     case CONST_DOUBLE:
3776     case CONST_VECTOR:
3777     case PC:
3778     case ADDR_VEC:
3779     case ADDR_DIFF_VEC:
3780       return;
3781
3782 #ifdef HAVE_cc0
3783     case CC0:
3784       pbi->cc0_live = 1;
3785       return;
3786 #endif
3787
3788     case CLOBBER:
3789       /* If we are clobbering a MEM, mark any registers inside the address
3790          as being used.  */
3791       if (GET_CODE (XEXP (x, 0)) == MEM)
3792         mark_used_regs (pbi, XEXP (XEXP (x, 0), 0), cond, insn);
3793       return;
3794
3795     case MEM:
3796       /* Don't bother watching stores to mems if this is not the
3797          final pass.  We'll not be deleting dead stores this round.  */
3798       if (optimize && (flags & PROP_SCAN_DEAD_STORES))
3799         {
3800           /* Invalidate the data for the last MEM stored, but only if MEM is
3801              something that can be stored into.  */
3802           if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
3803               && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
3804             /* Needn't clear the memory set list.  */
3805             ;
3806           else
3807             {
3808               rtx temp = pbi->mem_set_list;
3809               rtx prev = NULL_RTX;
3810               rtx next;
3811
3812               while (temp)
3813                 {
3814                   next = XEXP (temp, 1);
3815                   if (anti_dependence (XEXP (temp, 0), x))
3816                     {
3817                       /* Splice temp out of the list.  */
3818                       if (prev)
3819                         XEXP (prev, 1) = next;
3820                       else
3821                         pbi->mem_set_list = next;
3822                       free_EXPR_LIST_node (temp);
3823                       pbi->mem_set_list_len--;
3824                     }
3825                   else
3826                     prev = temp;
3827                   temp = next;
3828                 }
3829             }
3830
3831           /* If the memory reference had embedded side effects (autoincrement
3832              address modes.  Then we may need to kill some entries on the
3833              memory set list.  */
3834           if (insn)
3835             for_each_rtx (&PATTERN (insn), invalidate_mems_from_autoinc, pbi);
3836         }
3837
3838 #ifdef AUTO_INC_DEC
3839       if (flags & PROP_AUTOINC)
3840         find_auto_inc (pbi, x, insn);
3841 #endif
3842       break;
3843
3844     case SUBREG:
3845 #ifdef CANNOT_CHANGE_MODE_CLASS
3846       if (GET_CODE (SUBREG_REG (x)) == REG
3847           && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER)
3848         bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (x))
3849                                           * MAX_MACHINE_MODE
3850                                           + GET_MODE (x));
3851 #endif
3852
3853       /* While we're here, optimize this case.  */
3854       x = SUBREG_REG (x);
3855       if (GET_CODE (x) != REG)
3856         goto retry;
3857       /* Fall through.  */
3858
3859     case REG:
3860       /* See a register other than being set => mark it as needed.  */
3861       mark_used_reg (pbi, x, cond, insn);
3862       return;
3863
3864     case SET:
3865       {
3866         rtx testreg = SET_DEST (x);
3867         int mark_dest = 0;
3868
3869         /* If storing into MEM, don't show it as being used.  But do
3870            show the address as being used.  */
3871         if (GET_CODE (testreg) == MEM)
3872           {
3873 #ifdef AUTO_INC_DEC
3874             if (flags & PROP_AUTOINC)
3875               find_auto_inc (pbi, testreg, insn);
3876 #endif
3877             mark_used_regs (pbi, XEXP (testreg, 0), cond, insn);
3878             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3879             return;
3880           }
3881
3882         /* Storing in STRICT_LOW_PART is like storing in a reg
3883            in that this SET might be dead, so ignore it in TESTREG.
3884            but in some other ways it is like using the reg.
3885
3886            Storing in a SUBREG or a bit field is like storing the entire
3887            register in that if the register's value is not used
3888            then this SET is not needed.  */
3889         while (GET_CODE (testreg) == STRICT_LOW_PART
3890                || GET_CODE (testreg) == ZERO_EXTRACT
3891                || GET_CODE (testreg) == SIGN_EXTRACT
3892                || GET_CODE (testreg) == SUBREG)
3893           {
3894 #ifdef CANNOT_CHANGE_MODE_CLASS
3895             if (GET_CODE (testreg) == SUBREG
3896                 && GET_CODE (SUBREG_REG (testreg)) == REG
3897                 && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER)
3898               bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (testreg))
3899                                                 * MAX_MACHINE_MODE
3900                                                 + GET_MODE (testreg));
3901 #endif
3902
3903             /* Modifying a single register in an alternate mode
3904                does not use any of the old value.  But these other
3905                ways of storing in a register do use the old value.  */
3906             if (GET_CODE (testreg) == SUBREG
3907                 && !((REG_BYTES (SUBREG_REG (testreg))
3908                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD
3909                      > (REG_BYTES (testreg)
3910                         + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
3911               ;
3912             else
3913               mark_dest = 1;
3914
3915             testreg = XEXP (testreg, 0);
3916           }
3917
3918         /* If this is a store into a register or group of registers,
3919            recursively scan the value being stored.  */
3920
3921         if ((GET_CODE (testreg) == PARALLEL
3922              && GET_MODE (testreg) == BLKmode)
3923             || (GET_CODE (testreg) == REG
3924                 && (regno = REGNO (testreg),
3925                     ! (regno == FRAME_POINTER_REGNUM
3926                        && (! reload_completed || frame_pointer_needed)))
3927 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
3928                 && ! (regno == HARD_FRAME_POINTER_REGNUM
3929                       && (! reload_completed || frame_pointer_needed))
3930 #endif
3931 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3932                 && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
3933 #endif
3934                 ))
3935           {
3936             if (mark_dest)
3937               mark_used_regs (pbi, SET_DEST (x), cond, insn);
3938             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3939             return;
3940           }
3941       }
3942       break;
3943
3944     case ASM_OPERANDS:
3945     case UNSPEC_VOLATILE:
3946     case TRAP_IF:
3947     case ASM_INPUT:
3948       {
3949         /* Traditional and volatile asm instructions must be considered to use
3950            and clobber all hard registers, all pseudo-registers and all of
3951            memory.  So must TRAP_IF and UNSPEC_VOLATILE operations.
3952
3953            Consider for instance a volatile asm that changes the fpu rounding
3954            mode.  An insn should not be moved across this even if it only uses
3955            pseudo-regs because it might give an incorrectly rounded result.
3956
3957            ?!? Unfortunately, marking all hard registers as live causes massive
3958            problems for the register allocator and marking all pseudos as live
3959            creates mountains of uninitialized variable warnings.
3960
3961            So for now, just clear the memory set list and mark any regs
3962            we can find in ASM_OPERANDS as used.  */
3963         if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
3964           {
3965             free_EXPR_LIST_list (&pbi->mem_set_list);
3966             pbi->mem_set_list_len = 0;
3967           }
3968
3969         /* For all ASM_OPERANDS, we must traverse the vector of input operands.
3970            We can not just fall through here since then we would be confused
3971            by the ASM_INPUT rtx inside ASM_OPERANDS, which do not indicate
3972            traditional asms unlike their normal usage.  */
3973         if (code == ASM_OPERANDS)
3974           {
3975             int j;
3976
3977             for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++)
3978               mark_used_regs (pbi, ASM_OPERANDS_INPUT (x, j), cond, insn);
3979           }
3980         break;
3981       }
3982
3983     case COND_EXEC:
3984       if (cond != NULL_RTX)
3985         abort ();
3986
3987       mark_used_regs (pbi, COND_EXEC_TEST (x), NULL_RTX, insn);
3988
3989       cond = COND_EXEC_TEST (x);
3990       x = COND_EXEC_CODE (x);
3991       goto retry;
3992
3993     case PHI:
3994       /* We _do_not_ want to scan operands of phi nodes.  Operands of
3995          a phi function are evaluated only when control reaches this
3996          block along a particular edge.  Therefore, regs that appear
3997          as arguments to phi should not be added to the global live at
3998          start.  */
3999       return;
4000
4001     default:
4002       break;
4003     }
4004
4005   /* Recursively scan the operands of this expression.  */
4006
4007   {
4008     const char * const fmt = GET_RTX_FORMAT (code);
4009     int i;
4010
4011     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4012       {
4013         if (fmt[i] == 'e')
4014           {
4015             /* Tail recursive case: save a function call level.  */
4016             if (i == 0)
4017               {
4018                 x = XEXP (x, 0);
4019                 goto retry;
4020               }
4021             mark_used_regs (pbi, XEXP (x, i), cond, insn);
4022           }
4023         else if (fmt[i] == 'E')
4024           {
4025             int j;
4026             for (j = 0; j < XVECLEN (x, i); j++)
4027               mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn);
4028           }
4029       }
4030   }
4031 }
4032 \f
4033 #ifdef AUTO_INC_DEC
4034
4035 static int
4036 try_pre_increment_1 (pbi, insn)
4037      struct propagate_block_info *pbi;
4038      rtx insn;
4039 {
4040   /* Find the next use of this reg.  If in same basic block,
4041      make it do pre-increment or pre-decrement if appropriate.  */
4042   rtx x = single_set (insn);
4043   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
4044                           * INTVAL (XEXP (SET_SRC (x), 1)));
4045   int regno = REGNO (SET_DEST (x));
4046   rtx y = pbi->reg_next_use[regno];
4047   if (y != 0
4048       && SET_DEST (x) != stack_pointer_rtx
4049       && BLOCK_NUM (y) == BLOCK_NUM (insn)
4050       /* Don't do this if the reg dies, or gets set in y; a standard addressing
4051          mode would be better.  */
4052       && ! dead_or_set_p (y, SET_DEST (x))
4053       && try_pre_increment (y, SET_DEST (x), amount))
4054     {
4055       /* We have found a suitable auto-increment and already changed
4056          insn Y to do it.  So flush this increment instruction.  */
4057       propagate_block_delete_insn (insn);
4058
4059       /* Count a reference to this reg for the increment insn we are
4060          deleting.  When a reg is incremented, spilling it is worse,
4061          so we want to make that less likely.  */
4062       if (regno >= FIRST_PSEUDO_REGISTER)
4063         {
4064           REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
4065           REG_N_SETS (regno)++;
4066         }
4067
4068       /* Flush any remembered memories depending on the value of
4069          the incremented register.  */
4070       invalidate_mems_from_set (pbi, SET_DEST (x));
4071
4072       return 1;
4073     }
4074   return 0;
4075 }
4076
4077 /* Try to change INSN so that it does pre-increment or pre-decrement
4078    addressing on register REG in order to add AMOUNT to REG.
4079    AMOUNT is negative for pre-decrement.
4080    Returns 1 if the change could be made.
4081    This checks all about the validity of the result of modifying INSN.  */
4082
4083 static int
4084 try_pre_increment (insn, reg, amount)
4085      rtx insn, reg;
4086      HOST_WIDE_INT amount;
4087 {
4088   rtx use;
4089
4090   /* Nonzero if we can try to make a pre-increment or pre-decrement.
4091      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
4092   int pre_ok = 0;
4093   /* Nonzero if we can try to make a post-increment or post-decrement.
4094      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
4095      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
4096      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
4097   int post_ok = 0;
4098
4099   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
4100   int do_post = 0;
4101
4102   /* From the sign of increment, see which possibilities are conceivable
4103      on this target machine.  */
4104   if (HAVE_PRE_INCREMENT && amount > 0)
4105     pre_ok = 1;
4106   if (HAVE_POST_INCREMENT && amount > 0)
4107     post_ok = 1;
4108
4109   if (HAVE_PRE_DECREMENT && amount < 0)
4110     pre_ok = 1;
4111   if (HAVE_POST_DECREMENT && amount < 0)
4112     post_ok = 1;
4113
4114   if (! (pre_ok || post_ok))
4115     return 0;
4116
4117   /* It is not safe to add a side effect to a jump insn
4118      because if the incremented register is spilled and must be reloaded
4119      there would be no way to store the incremented value back in memory.  */
4120
4121   if (GET_CODE (insn) == JUMP_INSN)
4122     return 0;
4123
4124   use = 0;
4125   if (pre_ok)
4126     use = find_use_as_address (PATTERN (insn), reg, 0);
4127   if (post_ok && (use == 0 || use == (rtx) (size_t) 1))
4128     {
4129       use = find_use_as_address (PATTERN (insn), reg, -amount);
4130       do_post = 1;
4131     }
4132
4133   if (use == 0 || use == (rtx) (size_t) 1)
4134     return 0;
4135
4136   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
4137     return 0;
4138
4139   /* See if this combination of instruction and addressing mode exists.  */
4140   if (! validate_change (insn, &XEXP (use, 0),
4141                          gen_rtx_fmt_e (amount > 0
4142                                         ? (do_post ? POST_INC : PRE_INC)
4143                                         : (do_post ? POST_DEC : PRE_DEC),
4144                                         Pmode, reg), 0))
4145     return 0;
4146
4147   /* Record that this insn now has an implicit side effect on X.  */
4148   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, reg, REG_NOTES (insn));
4149   return 1;
4150 }
4151
4152 #endif /* AUTO_INC_DEC */
4153 \f
4154 /* Find the place in the rtx X where REG is used as a memory address.
4155    Return the MEM rtx that so uses it.
4156    If PLUSCONST is nonzero, search instead for a memory address equivalent to
4157    (plus REG (const_int PLUSCONST)).
4158
4159    If such an address does not appear, return 0.
4160    If REG appears more than once, or is used other than in such an address,
4161    return (rtx) 1.  */
4162
4163 rtx
4164 find_use_as_address (x, reg, plusconst)
4165      rtx x;
4166      rtx reg;
4167      HOST_WIDE_INT plusconst;
4168 {
4169   enum rtx_code code = GET_CODE (x);
4170   const char * const fmt = GET_RTX_FORMAT (code);
4171   int i;
4172   rtx value = 0;
4173   rtx tem;
4174
4175   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
4176     return x;
4177
4178   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
4179       && XEXP (XEXP (x, 0), 0) == reg
4180       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
4181       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
4182     return x;
4183
4184   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
4185     {
4186       /* If REG occurs inside a MEM used in a bit-field reference,
4187          that is unacceptable.  */
4188       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
4189         return (rtx) (size_t) 1;
4190     }
4191
4192   if (x == reg)
4193     return (rtx) (size_t) 1;
4194
4195   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4196     {
4197       if (fmt[i] == 'e')
4198         {
4199           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
4200           if (value == 0)
4201             value = tem;
4202           else if (tem != 0)
4203             return (rtx) (size_t) 1;
4204         }
4205       else if (fmt[i] == 'E')
4206         {
4207           int j;
4208           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
4209             {
4210               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
4211               if (value == 0)
4212                 value = tem;
4213               else if (tem != 0)
4214                 return (rtx) (size_t) 1;
4215             }
4216         }
4217     }
4218
4219   return value;
4220 }
4221 \f
4222 /* Write information about registers and basic blocks into FILE.
4223    This is part of making a debugging dump.  */
4224
4225 void
4226 dump_regset (r, outf)
4227      regset r;
4228      FILE *outf;
4229 {
4230   int i;
4231   if (r == NULL)
4232     {
4233       fputs (" (nil)", outf);
4234       return;
4235     }
4236
4237   EXECUTE_IF_SET_IN_REG_SET (r, 0, i,
4238     {
4239       fprintf (outf, " %d", i);
4240       if (i < FIRST_PSEUDO_REGISTER)
4241         fprintf (outf, " [%s]",
4242                  reg_names[i]);
4243     });
4244 }
4245
4246 /* Print a human-readable representation of R on the standard error
4247    stream.  This function is designed to be used from within the
4248    debugger.  */
4249
4250 void
4251 debug_regset (r)
4252      regset r;
4253 {
4254   dump_regset (r, stderr);
4255   putc ('\n', stderr);
4256 }
4257
4258 /* Recompute register set/reference counts immediately prior to register
4259    allocation.
4260
4261    This avoids problems with set/reference counts changing to/from values
4262    which have special meanings to the register allocators.
4263
4264    Additionally, the reference counts are the primary component used by the
4265    register allocators to prioritize pseudos for allocation to hard regs.
4266    More accurate reference counts generally lead to better register allocation.
4267
4268    F is the first insn to be scanned.
4269
4270    LOOP_STEP denotes how much loop_depth should be incremented per
4271    loop nesting level in order to increase the ref count more for
4272    references in a loop.
4273
4274    It might be worthwhile to update REG_LIVE_LENGTH, REG_BASIC_BLOCK and
4275    possibly other information which is used by the register allocators.  */
4276
4277 void
4278 recompute_reg_usage (f, loop_step)
4279      rtx f ATTRIBUTE_UNUSED;
4280      int loop_step ATTRIBUTE_UNUSED;
4281 {
4282   allocate_reg_life_data ();
4283   update_life_info (NULL, UPDATE_LIFE_LOCAL, PROP_REG_INFO);
4284 }
4285
4286 /* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of
4287    blocks.  If BLOCKS is NULL, assume the universal set.  Returns a count
4288    of the number of registers that died.  */
4289
4290 int
4291 count_or_remove_death_notes (blocks, kill)
4292      sbitmap blocks;
4293      int kill;
4294 {
4295   int count = 0;
4296   basic_block bb;
4297
4298   FOR_EACH_BB_REVERSE (bb)
4299     {
4300       rtx insn;
4301
4302       if (blocks && ! TEST_BIT (blocks, bb->index))
4303         continue;
4304
4305       for (insn = bb->head;; insn = NEXT_INSN (insn))
4306         {
4307           if (INSN_P (insn))
4308             {
4309               rtx *pprev = &REG_NOTES (insn);
4310               rtx link = *pprev;
4311
4312               while (link)
4313                 {
4314                   switch (REG_NOTE_KIND (link))
4315                     {
4316                     case REG_DEAD:
4317                       if (GET_CODE (XEXP (link, 0)) == REG)
4318                         {
4319                           rtx reg = XEXP (link, 0);
4320                           int n;
4321
4322                           if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
4323                             n = 1;
4324                           else
4325                             n = HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg));
4326                           count += n;
4327                         }
4328                       /* Fall through.  */
4329
4330                     case REG_UNUSED:
4331                       if (kill)
4332                         {
4333                           rtx next = XEXP (link, 1);
4334                           free_EXPR_LIST_node (link);
4335                           *pprev = link = next;
4336                           break;
4337                         }
4338                       /* Fall through.  */
4339
4340                     default:
4341                       pprev = &XEXP (link, 1);
4342                       link = *pprev;
4343                       break;
4344                     }
4345                 }
4346             }
4347
4348           if (insn == bb->end)
4349             break;
4350         }
4351     }
4352
4353   return count;
4354 }
4355 /* Clear LOG_LINKS fields of insns in a selected blocks or whole chain
4356    if blocks is NULL.  */
4357
4358 static void
4359 clear_log_links (blocks)
4360      sbitmap blocks;
4361 {
4362   rtx insn;
4363   int i;
4364
4365   if (!blocks)
4366     {
4367       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4368         if (INSN_P (insn))
4369           free_INSN_LIST_list (&LOG_LINKS (insn));
4370     }
4371   else
4372     EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i,
4373       {
4374         basic_block bb = BASIC_BLOCK (i);
4375
4376         for (insn = bb->head; insn != NEXT_INSN (bb->end);
4377              insn = NEXT_INSN (insn))
4378           if (INSN_P (insn))
4379             free_INSN_LIST_list (&LOG_LINKS (insn));
4380       });
4381 }
4382
4383 /* Given a register bitmap, turn on the bits in a HARD_REG_SET that
4384    correspond to the hard registers, if any, set in that map.  This
4385    could be done far more efficiently by having all sorts of special-cases
4386    with moving single words, but probably isn't worth the trouble.  */
4387
4388 void
4389 reg_set_to_hard_reg_set (to, from)
4390      HARD_REG_SET *to;
4391      bitmap from;
4392 {
4393   int i;
4394
4395   EXECUTE_IF_SET_IN_BITMAP
4396     (from, 0, i,
4397      {
4398        if (i >= FIRST_PSEUDO_REGISTER)
4399          return;
4400        SET_HARD_REG_BIT (*to, i);
4401      });
4402 }