OSDN Git Service

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