OSDN Git Service

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