OSDN Git Service

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