OSDN Git Service

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