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