OSDN Git Service

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