OSDN Git Service

bfc3544f7dad01f18b0025f23a012aebe7308fb1
[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 && reload_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 && reload_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 || ! reload_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 || ! reload_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           int i;
1774           rtx note, cond;
1775
1776           cond = NULL_RTX;
1777           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
1778             cond = COND_EXEC_TEST (PATTERN (insn));
1779
1780           /* Non-constant calls clobber memory, constant calls do not
1781              clobber memory, though they may clobber outgoing arguments
1782              on the stack.  */
1783           if (! CONST_OR_PURE_CALL_P (insn))
1784             {
1785               free_EXPR_LIST_list (&pbi->mem_set_list);
1786               pbi->mem_set_list_len = 0;
1787             }
1788           else
1789             invalidate_mems_from_set (pbi, stack_pointer_rtx);
1790
1791           /* There may be extra registers to be clobbered.  */
1792           for (note = CALL_INSN_FUNCTION_USAGE (insn);
1793                note;
1794                note = XEXP (note, 1))
1795             if (GET_CODE (XEXP (note, 0)) == CLOBBER)
1796               mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0),
1797                           cond, insn, pbi->flags);
1798
1799           /* Calls change all call-used and global registers.  */
1800           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1801             if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
1802               {
1803                 /* We do not want REG_UNUSED notes for these registers.  */
1804                 mark_set_1 (pbi, CLOBBER, regno_reg_rtx[i], cond, insn,
1805                             pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO));
1806               }
1807         }
1808
1809       /* If an insn doesn't use CC0, it becomes dead since we assume
1810          that every insn clobbers it.  So show it dead here;
1811          mark_used_regs will set it live if it is referenced.  */
1812       pbi->cc0_live = 0;
1813
1814       /* Record uses.  */
1815       if (! insn_is_dead)
1816         mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn);
1817       if ((flags & PROP_EQUAL_NOTES)
1818           && ((note = find_reg_note (insn, REG_EQUAL, NULL_RTX))
1819               || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX))))
1820         mark_used_regs (pbi, XEXP (note, 0), NULL_RTX, insn);
1821
1822       /* Sometimes we may have inserted something before INSN (such as a move)
1823          when we make an auto-inc.  So ensure we will scan those insns.  */
1824 #ifdef AUTO_INC_DEC
1825       prev = PREV_INSN (insn);
1826 #endif
1827
1828       if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
1829         {
1830           int i;
1831           rtx note, cond;
1832
1833           cond = NULL_RTX;
1834           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
1835             cond = COND_EXEC_TEST (PATTERN (insn));
1836
1837           /* Calls use their arguments, and may clobber memory which
1838              address involves some register.  */
1839           for (note = CALL_INSN_FUNCTION_USAGE (insn);
1840                note;
1841                note = XEXP (note, 1))
1842             /* We find USE or CLOBBER entities in a FUNCTION_USAGE list: both
1843                of which mark_used_regs knows how to handle.  */
1844             mark_used_regs (pbi, XEXP (XEXP (note, 0), 0), cond, insn);
1845
1846           /* The stack ptr is used (honorarily) by a CALL insn.  */
1847           SET_REGNO_REG_SET (pbi->reg_live, STACK_POINTER_REGNUM);
1848
1849           /* Calls may also reference any of the global registers,
1850              so they are made live.  */
1851           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1852             if (global_regs[i])
1853               mark_used_reg (pbi, regno_reg_rtx[i], cond, insn);
1854         }
1855     }
1856
1857   /* On final pass, update counts of how many insns in which each reg
1858      is live.  */
1859   if (flags & PROP_REG_INFO)
1860     EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
1861                                { REG_LIVE_LENGTH (i)++; });
1862
1863   return prev;
1864 }
1865
1866 /* Initialize a propagate_block_info struct for public consumption.
1867    Note that the structure itself is opaque to this file, but that
1868    the user can use the regsets provided here.  */
1869
1870 struct propagate_block_info *
1871 init_propagate_block_info (bb, live, local_set, cond_local_set, flags)
1872      basic_block bb;
1873      regset live, local_set, cond_local_set;
1874      int flags;
1875 {
1876   struct propagate_block_info *pbi = xmalloc (sizeof (*pbi));
1877
1878   pbi->bb = bb;
1879   pbi->reg_live = live;
1880   pbi->mem_set_list = NULL_RTX;
1881   pbi->mem_set_list_len = 0;
1882   pbi->local_set = local_set;
1883   pbi->cond_local_set = cond_local_set;
1884   pbi->cc0_live = 0;
1885   pbi->flags = flags;
1886
1887   if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
1888     pbi->reg_next_use = (rtx *) xcalloc (max_reg_num (), sizeof (rtx));
1889   else
1890     pbi->reg_next_use = NULL;
1891
1892   pbi->new_set = BITMAP_XMALLOC ();
1893
1894 #ifdef HAVE_conditional_execution
1895   pbi->reg_cond_dead = splay_tree_new (splay_tree_compare_ints, NULL,
1896                                        free_reg_cond_life_info);
1897   pbi->reg_cond_reg = BITMAP_XMALLOC ();
1898
1899   /* If this block ends in a conditional branch, for each register live
1900      from one side of the branch and not the other, record the register
1901      as conditionally dead.  */
1902   if (GET_CODE (bb->end) == JUMP_INSN
1903       && any_condjump_p (bb->end))
1904     {
1905       regset_head diff_head;
1906       regset diff = INITIALIZE_REG_SET (diff_head);
1907       basic_block bb_true, bb_false;
1908       rtx cond_true, cond_false, set_src;
1909       int i;
1910
1911       /* Identify the successor blocks.  */
1912       bb_true = bb->succ->dest;
1913       if (bb->succ->succ_next != NULL)
1914         {
1915           bb_false = bb->succ->succ_next->dest;
1916
1917           if (bb->succ->flags & EDGE_FALLTHRU)
1918             {
1919               basic_block t = bb_false;
1920               bb_false = bb_true;
1921               bb_true = t;
1922             }
1923           else if (! (bb->succ->succ_next->flags & EDGE_FALLTHRU))
1924             abort ();
1925         }
1926       else
1927         {
1928           /* This can happen with a conditional jump to the next insn.  */
1929           if (JUMP_LABEL (bb->end) != bb_true->head)
1930             abort ();
1931
1932           /* Simplest way to do nothing.  */
1933           bb_false = bb_true;
1934         }
1935
1936       /* Extract the condition from the branch.  */
1937       set_src = SET_SRC (pc_set (bb->end));
1938       cond_true = XEXP (set_src, 0);
1939       cond_false = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
1940                                    GET_MODE (cond_true), XEXP (cond_true, 0),
1941                                    XEXP (cond_true, 1));
1942       if (GET_CODE (XEXP (set_src, 1)) == PC)
1943         {
1944           rtx t = cond_false;
1945           cond_false = cond_true;
1946           cond_true = t;
1947         }
1948
1949       /* Compute which register lead different lives in the successors.  */
1950       if (bitmap_operation (diff, bb_true->global_live_at_start,
1951                             bb_false->global_live_at_start, BITMAP_XOR))
1952         {
1953           rtx reg = XEXP (cond_true, 0);
1954
1955           if (GET_CODE (reg) == SUBREG)
1956             reg = SUBREG_REG (reg);
1957
1958           if (GET_CODE (reg) != REG)
1959             abort ();
1960
1961           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (reg));
1962
1963           /* For each such register, mark it conditionally dead.  */
1964           EXECUTE_IF_SET_IN_REG_SET
1965             (diff, 0, i,
1966              {
1967                struct reg_cond_life_info *rcli;
1968                rtx cond;
1969
1970                rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
1971
1972                if (REGNO_REG_SET_P (bb_true->global_live_at_start, i))
1973                  cond = cond_false;
1974                else
1975                  cond = cond_true;
1976                rcli->condition = cond;
1977                rcli->stores = const0_rtx;
1978                rcli->orig_condition = cond;
1979
1980                splay_tree_insert (pbi->reg_cond_dead, i,
1981                                   (splay_tree_value) rcli);
1982              });
1983         }
1984
1985       FREE_REG_SET (diff);
1986     }
1987 #endif
1988
1989   /* If this block has no successors, any stores to the frame that aren't
1990      used later in the block are dead.  So make a pass over the block
1991      recording any such that are made and show them dead at the end.  We do
1992      a very conservative and simple job here.  */
1993   if (optimize
1994       && ! (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
1995             && (TYPE_RETURNS_STACK_DEPRESSED
1996                 (TREE_TYPE (current_function_decl))))
1997       && (flags & PROP_SCAN_DEAD_STORES)
1998       && (bb->succ == NULL
1999           || (bb->succ->succ_next == NULL
2000               && bb->succ->dest == EXIT_BLOCK_PTR
2001               && ! current_function_calls_eh_return)))
2002     {
2003       rtx insn, set;
2004       for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn))
2005         if (GET_CODE (insn) == INSN
2006             && (set = single_set (insn))
2007             && GET_CODE (SET_DEST (set)) == MEM)
2008           {
2009             rtx mem = SET_DEST (set);
2010             rtx canon_mem = canon_rtx (mem);
2011
2012             /* This optimization is performed by faking a store to the
2013                memory at the end of the block.  This doesn't work for
2014                unchanging memories because multiple stores to unchanging
2015                memory is illegal and alias analysis doesn't consider it.  */
2016             if (RTX_UNCHANGING_P (canon_mem))
2017               continue;
2018
2019             if (XEXP (canon_mem, 0) == frame_pointer_rtx
2020                 || (GET_CODE (XEXP (canon_mem, 0)) == PLUS
2021                     && XEXP (XEXP (canon_mem, 0), 0) == frame_pointer_rtx
2022                     && GET_CODE (XEXP (XEXP (canon_mem, 0), 1)) == CONST_INT))
2023               add_to_mem_set_list (pbi, canon_mem);
2024           }
2025     }
2026
2027   return pbi;
2028 }
2029
2030 /* Release a propagate_block_info struct.  */
2031
2032 void
2033 free_propagate_block_info (pbi)
2034      struct propagate_block_info *pbi;
2035 {
2036   free_EXPR_LIST_list (&pbi->mem_set_list);
2037
2038   BITMAP_XFREE (pbi->new_set);
2039
2040 #ifdef HAVE_conditional_execution
2041   splay_tree_delete (pbi->reg_cond_dead);
2042   BITMAP_XFREE (pbi->reg_cond_reg);
2043 #endif
2044
2045   if (pbi->reg_next_use)
2046     free (pbi->reg_next_use);
2047
2048   free (pbi);
2049 }
2050
2051 /* Compute the registers live at the beginning of a basic block BB from
2052    those live at the end.
2053
2054    When called, REG_LIVE contains those live at the end.  On return, it
2055    contains those live at the beginning.
2056
2057    LOCAL_SET, if non-null, will be set with all registers killed
2058    unconditionally by this basic block.
2059    Likewise, COND_LOCAL_SET, if non-null, will be set with all registers
2060    killed conditionally by this basic block.  If there is any unconditional
2061    set of a register, then the corresponding bit will be set in LOCAL_SET
2062    and cleared in COND_LOCAL_SET.
2063    It is valid for LOCAL_SET and COND_LOCAL_SET to be the same set.  In this
2064    case, the resulting set will be equal to the union of the two sets that
2065    would otherwise be computed.
2066
2067    Return nonzero if an INSN is deleted (i.e. by dead code removal).  */
2068
2069 int
2070 propagate_block (bb, live, local_set, cond_local_set, flags)
2071      basic_block bb;
2072      regset live;
2073      regset local_set;
2074      regset cond_local_set;
2075      int flags;
2076 {
2077   struct propagate_block_info *pbi;
2078   rtx insn, prev;
2079   int changed;
2080
2081   pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags);
2082
2083   if (flags & PROP_REG_INFO)
2084     {
2085       int i;
2086
2087       /* Process the regs live at the end of the block.
2088          Mark them as not local to any one basic block.  */
2089       EXECUTE_IF_SET_IN_REG_SET (live, 0, i,
2090                                  { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
2091     }
2092
2093   /* Scan the block an insn at a time from end to beginning.  */
2094
2095   changed = 0;
2096   for (insn = bb->end;; insn = prev)
2097     {
2098       /* If this is a call to `setjmp' et al, warn if any
2099          non-volatile datum is live.  */
2100       if ((flags & PROP_REG_INFO)
2101           && GET_CODE (insn) == CALL_INSN
2102           && find_reg_note (insn, REG_SETJMP, NULL))
2103         IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live);
2104
2105       prev = propagate_one_insn (pbi, insn);
2106       changed |= NEXT_INSN (prev) != insn;
2107
2108       if (insn == bb->head)
2109         break;
2110     }
2111
2112   free_propagate_block_info (pbi);
2113
2114   return changed;
2115 }
2116 \f
2117 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
2118    (SET expressions whose destinations are registers dead after the insn).
2119    NEEDED is the regset that says which regs are alive after the insn.
2120
2121    Unless CALL_OK is nonzero, an insn is needed if it contains a CALL.
2122
2123    If X is the entire body of an insn, NOTES contains the reg notes
2124    pertaining to the insn.  */
2125
2126 static int
2127 insn_dead_p (pbi, x, call_ok, notes)
2128      struct propagate_block_info *pbi;
2129      rtx x;
2130      int call_ok;
2131      rtx notes ATTRIBUTE_UNUSED;
2132 {
2133   enum rtx_code code = GET_CODE (x);
2134
2135   /* Don't eliminate insns that may trap.  */
2136   if (flag_non_call_exceptions && may_trap_p (x))
2137     return 0;
2138
2139 #ifdef AUTO_INC_DEC
2140   /* As flow is invoked after combine, we must take existing AUTO_INC
2141      expressions into account.  */
2142   for (; notes; notes = XEXP (notes, 1))
2143     {
2144       if (REG_NOTE_KIND (notes) == REG_INC)
2145         {
2146           int regno = REGNO (XEXP (notes, 0));
2147
2148           /* Don't delete insns to set global regs.  */
2149           if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2150               || REGNO_REG_SET_P (pbi->reg_live, regno))
2151             return 0;
2152         }
2153     }
2154 #endif
2155
2156   /* If setting something that's a reg or part of one,
2157      see if that register's altered value will be live.  */
2158
2159   if (code == SET)
2160     {
2161       rtx r = SET_DEST (x);
2162
2163 #ifdef HAVE_cc0
2164       if (GET_CODE (r) == CC0)
2165         return ! pbi->cc0_live;
2166 #endif
2167
2168       /* A SET that is a subroutine call cannot be dead.  */
2169       if (GET_CODE (SET_SRC (x)) == CALL)
2170         {
2171           if (! call_ok)
2172             return 0;
2173         }
2174
2175       /* Don't eliminate loads from volatile memory or volatile asms.  */
2176       else if (volatile_refs_p (SET_SRC (x)))
2177         return 0;
2178
2179       if (GET_CODE (r) == MEM)
2180         {
2181           rtx temp, canon_r;
2182
2183           if (MEM_VOLATILE_P (r) || GET_MODE (r) == BLKmode)
2184             return 0;
2185
2186           canon_r = canon_rtx (r);
2187
2188           /* Walk the set of memory locations we are currently tracking
2189              and see if one is an identical match to this memory location.
2190              If so, this memory write is dead (remember, we're walking
2191              backwards from the end of the block to the start).  Since
2192              rtx_equal_p does not check the alias set or flags, we also
2193              must have the potential for them to conflict (anti_dependence).  */
2194           for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
2195             if (anti_dependence (r, XEXP (temp, 0)))
2196               {
2197                 rtx mem = XEXP (temp, 0);
2198
2199                 if (rtx_equal_p (XEXP (canon_r, 0), XEXP (mem, 0))
2200                     && (GET_MODE_SIZE (GET_MODE (canon_r))
2201                         <= GET_MODE_SIZE (GET_MODE (mem))))
2202                   return 1;
2203
2204 #ifdef AUTO_INC_DEC
2205                 /* Check if memory reference matches an auto increment. Only
2206                    post increment/decrement or modify are valid.  */
2207                 if (GET_MODE (mem) == GET_MODE (r)
2208                     && (GET_CODE (XEXP (mem, 0)) == POST_DEC
2209                         || GET_CODE (XEXP (mem, 0)) == POST_INC
2210                         || GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
2211                     && GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
2212                     && rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
2213                   return 1;
2214 #endif
2215               }
2216         }
2217       else
2218         {
2219           while (GET_CODE (r) == SUBREG
2220                  || GET_CODE (r) == STRICT_LOW_PART
2221                  || GET_CODE (r) == ZERO_EXTRACT)
2222             r = XEXP (r, 0);
2223
2224           if (GET_CODE (r) == REG)
2225             {
2226               int regno = REGNO (r);
2227
2228               /* Obvious.  */
2229               if (REGNO_REG_SET_P (pbi->reg_live, regno))
2230                 return 0;
2231
2232               /* If this is a hard register, verify that subsequent
2233                  words are not needed.  */
2234               if (regno < FIRST_PSEUDO_REGISTER)
2235                 {
2236                   int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
2237
2238                   while (--n > 0)
2239                     if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
2240                       return 0;
2241                 }
2242
2243               /* Don't delete insns to set global regs.  */
2244               if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2245                 return 0;
2246
2247               /* Make sure insns to set the stack pointer aren't deleted.  */
2248               if (regno == STACK_POINTER_REGNUM)
2249                 return 0;
2250
2251               /* ??? These bits might be redundant with the force live bits
2252                  in calculate_global_regs_live.  We would delete from
2253                  sequential sets; whether this actually affects real code
2254                  for anything but the stack pointer I don't know.  */
2255               /* Make sure insns to set the frame pointer aren't deleted.  */
2256               if (regno == FRAME_POINTER_REGNUM
2257                   && (! reload_completed || frame_pointer_needed))
2258                 return 0;
2259 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2260               if (regno == HARD_FRAME_POINTER_REGNUM
2261                   && (! reload_completed || frame_pointer_needed))
2262                 return 0;
2263 #endif
2264
2265 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2266               /* Make sure insns to set arg pointer are never deleted
2267                  (if the arg pointer isn't fixed, there will be a USE
2268                  for it, so we can treat it normally).  */
2269               if (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
2270                 return 0;
2271 #endif
2272
2273               /* Otherwise, the set is dead.  */
2274               return 1;
2275             }
2276         }
2277     }
2278
2279   /* If performing several activities, insn is dead if each activity
2280      is individually dead.  Also, CLOBBERs and USEs can be ignored; a
2281      CLOBBER or USE that's inside a PARALLEL doesn't make the insn
2282      worth keeping.  */
2283   else if (code == PARALLEL)
2284     {
2285       int i = XVECLEN (x, 0);
2286
2287       for (i--; i >= 0; i--)
2288         if (GET_CODE (XVECEXP (x, 0, i)) != CLOBBER
2289             && GET_CODE (XVECEXP (x, 0, i)) != USE
2290             && ! insn_dead_p (pbi, XVECEXP (x, 0, i), call_ok, NULL_RTX))
2291           return 0;
2292
2293       return 1;
2294     }
2295
2296   /* A CLOBBER of a pseudo-register that is dead serves no purpose.  That
2297      is not necessarily true for hard registers.  */
2298   else if (code == CLOBBER && GET_CODE (XEXP (x, 0)) == REG
2299            && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
2300            && ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
2301     return 1;
2302
2303   /* We do not check other CLOBBER or USE here.  An insn consisting of just
2304      a CLOBBER or just a USE should not be deleted.  */
2305   return 0;
2306 }
2307
2308 /* If INSN is the last insn in a libcall, and assuming INSN is dead,
2309    return 1 if the entire library call is dead.
2310    This is true if INSN copies a register (hard or pseudo)
2311    and if the hard return reg of the call insn is dead.
2312    (The caller should have tested the destination of the SET inside
2313    INSN already for death.)
2314
2315    If this insn doesn't just copy a register, then we don't
2316    have an ordinary libcall.  In that case, cse could not have
2317    managed to substitute the source for the dest later on,
2318    so we can assume the libcall is dead.
2319
2320    PBI is the block info giving pseudoregs live before this insn.
2321    NOTE is the REG_RETVAL note of the insn.  */
2322
2323 static int
2324 libcall_dead_p (pbi, note, insn)
2325      struct propagate_block_info *pbi;
2326      rtx note;
2327      rtx insn;
2328 {
2329   rtx x = single_set (insn);
2330
2331   if (x)
2332     {
2333       rtx r = SET_SRC (x);
2334
2335       if (GET_CODE (r) == REG)
2336         {
2337           rtx call = XEXP (note, 0);
2338           rtx call_pat;
2339           int i;
2340
2341           /* Find the call insn.  */
2342           while (call != insn && GET_CODE (call) != CALL_INSN)
2343             call = NEXT_INSN (call);
2344
2345           /* If there is none, do nothing special,
2346              since ordinary death handling can understand these insns.  */
2347           if (call == insn)
2348             return 0;
2349
2350           /* See if the hard reg holding the value is dead.
2351              If this is a PARALLEL, find the call within it.  */
2352           call_pat = PATTERN (call);
2353           if (GET_CODE (call_pat) == PARALLEL)
2354             {
2355               for (i = XVECLEN (call_pat, 0) - 1; i >= 0; i--)
2356                 if (GET_CODE (XVECEXP (call_pat, 0, i)) == SET
2357                     && GET_CODE (SET_SRC (XVECEXP (call_pat, 0, i))) == CALL)
2358                   break;
2359
2360               /* This may be a library call that is returning a value
2361                  via invisible pointer.  Do nothing special, since
2362                  ordinary death handling can understand these insns.  */
2363               if (i < 0)
2364                 return 0;
2365
2366               call_pat = XVECEXP (call_pat, 0, i);
2367             }
2368
2369           return insn_dead_p (pbi, call_pat, 1, REG_NOTES (call));
2370         }
2371     }
2372   return 1;
2373 }
2374
2375 /* Return 1 if register REGNO was used before it was set, i.e. if it is
2376    live at function entry.  Don't count global register variables, variables
2377    in registers that can be used for function arg passing, or variables in
2378    fixed hard registers.  */
2379
2380 int
2381 regno_uninitialized (regno)
2382      unsigned int regno;
2383 {
2384   if (n_basic_blocks == 0
2385       || (regno < FIRST_PSEUDO_REGISTER
2386           && (global_regs[regno]
2387               || fixed_regs[regno]
2388               || FUNCTION_ARG_REGNO_P (regno))))
2389     return 0;
2390
2391   return REGNO_REG_SET_P (ENTRY_BLOCK_PTR->global_live_at_end, regno);
2392 }
2393
2394 /* 1 if register REGNO was alive at a place where `setjmp' was called
2395    and was set more than once or is an argument.
2396    Such regs may be clobbered by `longjmp'.  */
2397
2398 int
2399 regno_clobbered_at_setjmp (regno)
2400      int regno;
2401 {
2402   if (n_basic_blocks == 0)
2403     return 0;
2404
2405   return ((REG_N_SETS (regno) > 1
2406            || REGNO_REG_SET_P (ENTRY_BLOCK_PTR->global_live_at_end, regno))
2407           && REGNO_REG_SET_P (regs_live_at_setjmp, regno));
2408 }
2409 \f
2410 /* Add MEM to PBI->MEM_SET_LIST.  MEM should be canonical.  Respect the
2411    maximal list size; look for overlaps in mode and select the largest.  */
2412 static void
2413 add_to_mem_set_list (pbi, mem)
2414      struct propagate_block_info *pbi;
2415      rtx mem;
2416 {
2417   rtx i;
2418
2419   /* We don't know how large a BLKmode store is, so we must not
2420      take them into consideration.  */
2421   if (GET_MODE (mem) == BLKmode)
2422     return;
2423
2424   for (i = pbi->mem_set_list; i ; i = XEXP (i, 1))
2425     {
2426       rtx e = XEXP (i, 0);
2427       if (rtx_equal_p (XEXP (mem, 0), XEXP (e, 0)))
2428         {
2429           if (GET_MODE_SIZE (GET_MODE (mem)) > GET_MODE_SIZE (GET_MODE (e)))
2430             {
2431 #ifdef AUTO_INC_DEC
2432               /* If we must store a copy of the mem, we can just modify
2433                  the mode of the stored copy.  */
2434               if (pbi->flags & PROP_AUTOINC)
2435                 PUT_MODE (e, GET_MODE (mem));
2436               else
2437 #endif
2438                 XEXP (i, 0) = mem;
2439             }
2440           return;
2441         }
2442     }
2443
2444   if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN)
2445     {
2446 #ifdef AUTO_INC_DEC
2447       /* Store a copy of mem, otherwise the address may be
2448          scrogged by find_auto_inc.  */
2449       if (pbi->flags & PROP_AUTOINC)
2450         mem = shallow_copy_rtx (mem);
2451 #endif
2452       pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
2453       pbi->mem_set_list_len++;
2454     }
2455 }
2456
2457 /* INSN references memory, possibly using autoincrement addressing modes.
2458    Find any entries on the mem_set_list that need to be invalidated due
2459    to an address change.  */
2460
2461 static int
2462 invalidate_mems_from_autoinc (px, data)
2463      rtx *px;
2464      void *data;
2465 {
2466   rtx x = *px;
2467   struct propagate_block_info *pbi = data;
2468
2469   if (GET_RTX_CLASS (GET_CODE (x)) == 'a')
2470     {
2471       invalidate_mems_from_set (pbi, XEXP (x, 0));
2472       return -1;
2473     }
2474
2475   return 0;
2476 }
2477
2478 /* EXP is a REG.  Remove any dependent entries from pbi->mem_set_list.  */
2479
2480 static void
2481 invalidate_mems_from_set (pbi, exp)
2482      struct propagate_block_info *pbi;
2483      rtx exp;
2484 {
2485   rtx temp = pbi->mem_set_list;
2486   rtx prev = NULL_RTX;
2487   rtx next;
2488
2489   while (temp)
2490     {
2491       next = XEXP (temp, 1);
2492       if (reg_overlap_mentioned_p (exp, XEXP (temp, 0)))
2493         {
2494           /* Splice this entry out of the list.  */
2495           if (prev)
2496             XEXP (prev, 1) = next;
2497           else
2498             pbi->mem_set_list = next;
2499           free_EXPR_LIST_node (temp);
2500           pbi->mem_set_list_len--;
2501         }
2502       else
2503         prev = temp;
2504       temp = next;
2505     }
2506 }
2507
2508 /* Process the registers that are set within X.  Their bits are set to
2509    1 in the regset DEAD, because they are dead prior to this insn.
2510
2511    If INSN is nonzero, it is the insn being processed.
2512
2513    FLAGS is the set of operations to perform.  */
2514
2515 static void
2516 mark_set_regs (pbi, x, insn)
2517      struct propagate_block_info *pbi;
2518      rtx x, insn;
2519 {
2520   rtx cond = NULL_RTX;
2521   rtx link;
2522   enum rtx_code code;
2523
2524   if (insn)
2525     for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
2526       {
2527         if (REG_NOTE_KIND (link) == REG_INC)
2528           mark_set_1 (pbi, SET, XEXP (link, 0),
2529                       (GET_CODE (x) == COND_EXEC
2530                        ? COND_EXEC_TEST (x) : NULL_RTX),
2531                       insn, pbi->flags);
2532       }
2533  retry:
2534   switch (code = GET_CODE (x))
2535     {
2536     case SET:
2537     case CLOBBER:
2538       mark_set_1 (pbi, code, SET_DEST (x), cond, insn, pbi->flags);
2539       return;
2540
2541     case COND_EXEC:
2542       cond = COND_EXEC_TEST (x);
2543       x = COND_EXEC_CODE (x);
2544       goto retry;
2545
2546     case PARALLEL:
2547       {
2548         int i;
2549
2550         for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
2551           {
2552             rtx sub = XVECEXP (x, 0, i);
2553             switch (code = GET_CODE (sub))
2554               {
2555               case COND_EXEC:
2556                 if (cond != NULL_RTX)
2557                   abort ();
2558
2559                 cond = COND_EXEC_TEST (sub);
2560                 sub = COND_EXEC_CODE (sub);
2561                 if (GET_CODE (sub) != SET && GET_CODE (sub) != CLOBBER)
2562                   break;
2563                 /* Fall through.  */
2564
2565               case SET:
2566               case CLOBBER:
2567                 mark_set_1 (pbi, code, SET_DEST (sub), cond, insn, pbi->flags);
2568                 break;
2569
2570               default:
2571                 break;
2572               }
2573           }
2574         break;
2575       }
2576
2577     default:
2578       break;
2579     }
2580 }
2581
2582 /* Process a single set, which appears in INSN.  REG (which may not
2583    actually be a REG, it may also be a SUBREG, PARALLEL, etc.) is
2584    being set using the CODE (which may be SET, CLOBBER, or COND_EXEC).
2585    If the set is conditional (because it appear in a COND_EXEC), COND
2586    will be the condition.  */
2587
2588 static void
2589 mark_set_1 (pbi, code, reg, cond, insn, flags)
2590      struct propagate_block_info *pbi;
2591      enum rtx_code code;
2592      rtx reg, cond, insn;
2593      int flags;
2594 {
2595   int regno_first = -1, regno_last = -1;
2596   unsigned long not_dead = 0;
2597   int i;
2598
2599   /* Modifying just one hardware register of a multi-reg value or just a
2600      byte field of a register does not mean the value from before this insn
2601      is now dead.  Of course, if it was dead after it's unused now.  */
2602
2603   switch (GET_CODE (reg))
2604     {
2605     case PARALLEL:
2606       /* Some targets place small structures in registers for return values of
2607          functions.  We have to detect this case specially here to get correct
2608          flow information.  */
2609       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
2610         if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
2611           mark_set_1 (pbi, code, XEXP (XVECEXP (reg, 0, i), 0), cond, insn,
2612                       flags);
2613       return;
2614
2615     case ZERO_EXTRACT:
2616     case SIGN_EXTRACT:
2617     case STRICT_LOW_PART:
2618       /* ??? Assumes STRICT_LOW_PART not used on multi-word registers.  */
2619       do
2620         reg = XEXP (reg, 0);
2621       while (GET_CODE (reg) == SUBREG
2622              || GET_CODE (reg) == ZERO_EXTRACT
2623              || GET_CODE (reg) == SIGN_EXTRACT
2624              || GET_CODE (reg) == STRICT_LOW_PART);
2625       if (GET_CODE (reg) == MEM)
2626         break;
2627       not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live, REGNO (reg));
2628       /* Fall through.  */
2629
2630     case REG:
2631       regno_last = regno_first = REGNO (reg);
2632       if (regno_first < FIRST_PSEUDO_REGISTER)
2633         regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
2634       break;
2635
2636     case SUBREG:
2637       if (GET_CODE (SUBREG_REG (reg)) == REG)
2638         {
2639           enum machine_mode outer_mode = GET_MODE (reg);
2640           enum machine_mode inner_mode = GET_MODE (SUBREG_REG (reg));
2641
2642           /* Identify the range of registers affected.  This is moderately
2643              tricky for hard registers.  See alter_subreg.  */
2644
2645           regno_last = regno_first = REGNO (SUBREG_REG (reg));
2646           if (regno_first < FIRST_PSEUDO_REGISTER)
2647             {
2648               regno_first += subreg_regno_offset (regno_first, inner_mode,
2649                                                   SUBREG_BYTE (reg),
2650                                                   outer_mode);
2651               regno_last = (regno_first
2652                             + HARD_REGNO_NREGS (regno_first, outer_mode) - 1);
2653
2654               /* Since we've just adjusted the register number ranges, make
2655                  sure REG matches.  Otherwise some_was_live will be clear
2656                  when it shouldn't have been, and we'll create incorrect
2657                  REG_UNUSED notes.  */
2658               reg = gen_rtx_REG (outer_mode, regno_first);
2659             }
2660           else
2661             {
2662               /* If the number of words in the subreg is less than the number
2663                  of words in the full register, we have a well-defined partial
2664                  set.  Otherwise the high bits are undefined.
2665
2666                  This is only really applicable to pseudos, since we just took
2667                  care of multi-word hard registers.  */
2668               if (((GET_MODE_SIZE (outer_mode)
2669                     + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
2670                   < ((GET_MODE_SIZE (inner_mode)
2671                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
2672                 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live,
2673                                                             regno_first);
2674
2675               reg = SUBREG_REG (reg);
2676             }
2677         }
2678       else
2679         reg = SUBREG_REG (reg);
2680       break;
2681
2682     default:
2683       break;
2684     }
2685
2686   /* If this set is a MEM, then it kills any aliased writes.
2687      If this set is a REG, then it kills any MEMs which use the reg.  */
2688   if (optimize && (flags & PROP_SCAN_DEAD_STORES))
2689     {
2690       if (GET_CODE (reg) == REG)
2691         invalidate_mems_from_set (pbi, reg);
2692
2693       /* If the memory reference had embedded side effects (autoincrement
2694          address modes.  Then we may need to kill some entries on the
2695          memory set list.  */
2696       if (insn && GET_CODE (reg) == MEM)
2697         for_each_rtx (&PATTERN (insn), invalidate_mems_from_autoinc, pbi);
2698
2699       if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
2700           /* ??? With more effort we could track conditional memory life.  */
2701           && ! cond)
2702         add_to_mem_set_list (pbi, canon_rtx (reg));
2703     }
2704
2705   if (GET_CODE (reg) == REG
2706       && ! (regno_first == FRAME_POINTER_REGNUM
2707             && (! reload_completed || frame_pointer_needed))
2708 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
2709       && ! (regno_first == HARD_FRAME_POINTER_REGNUM
2710             && (! reload_completed || frame_pointer_needed))
2711 #endif
2712 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
2713       && ! (regno_first == ARG_POINTER_REGNUM && fixed_regs[regno_first])
2714 #endif
2715       )
2716     {
2717       int some_was_live = 0, some_was_dead = 0;
2718
2719       for (i = regno_first; i <= regno_last; ++i)
2720         {
2721           int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
2722           if (pbi->local_set)
2723             {
2724               /* Order of the set operation matters here since both
2725                  sets may be the same.  */
2726               CLEAR_REGNO_REG_SET (pbi->cond_local_set, i);
2727               if (cond != NULL_RTX
2728                   && ! REGNO_REG_SET_P (pbi->local_set, i))
2729                 SET_REGNO_REG_SET (pbi->cond_local_set, i);
2730               else
2731                 SET_REGNO_REG_SET (pbi->local_set, i);
2732             }
2733           if (code != CLOBBER)
2734             SET_REGNO_REG_SET (pbi->new_set, i);
2735
2736           some_was_live |= needed_regno;
2737           some_was_dead |= ! needed_regno;
2738         }
2739
2740 #ifdef HAVE_conditional_execution
2741       /* Consider conditional death in deciding that the register needs
2742          a death note.  */
2743       if (some_was_live && ! not_dead
2744           /* The stack pointer is never dead.  Well, not strictly true,
2745              but it's very difficult to tell from here.  Hopefully
2746              combine_stack_adjustments will fix up the most egregious
2747              errors.  */
2748           && regno_first != STACK_POINTER_REGNUM)
2749         {
2750           for (i = regno_first; i <= regno_last; ++i)
2751             if (! mark_regno_cond_dead (pbi, i, cond))
2752               not_dead |= ((unsigned long) 1) << (i - regno_first);
2753         }
2754 #endif
2755
2756       /* Additional data to record if this is the final pass.  */
2757       if (flags & (PROP_LOG_LINKS | PROP_REG_INFO
2758                    | PROP_DEATH_NOTES | PROP_AUTOINC))
2759         {
2760           rtx y;
2761           int blocknum = pbi->bb->index;
2762
2763           y = NULL_RTX;
2764           if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2765             {
2766               y = pbi->reg_next_use[regno_first];
2767
2768               /* The next use is no longer next, since a store intervenes.  */
2769               for (i = regno_first; i <= regno_last; ++i)
2770                 pbi->reg_next_use[i] = 0;
2771             }
2772
2773           if (flags & PROP_REG_INFO)
2774             {
2775               for (i = regno_first; i <= regno_last; ++i)
2776                 {
2777                   /* Count (weighted) references, stores, etc.  This counts a
2778                      register twice if it is modified, but that is correct.  */
2779                   REG_N_SETS (i) += 1;
2780                   REG_N_REFS (i) += 1;
2781                   REG_FREQ (i) += REG_FREQ_FROM_BB (pbi->bb);
2782
2783                   /* The insns where a reg is live are normally counted
2784                      elsewhere, but we want the count to include the insn
2785                      where the reg is set, and the normal counting mechanism
2786                      would not count it.  */
2787                   REG_LIVE_LENGTH (i) += 1;
2788                 }
2789
2790               /* If this is a hard reg, record this function uses the reg.  */
2791               if (regno_first < FIRST_PSEUDO_REGISTER)
2792                 {
2793                   for (i = regno_first; i <= regno_last; i++)
2794                     regs_ever_live[i] = 1;
2795                 }
2796               else
2797                 {
2798                   /* Keep track of which basic blocks each reg appears in.  */
2799                   if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
2800                     REG_BASIC_BLOCK (regno_first) = blocknum;
2801                   else if (REG_BASIC_BLOCK (regno_first) != blocknum)
2802                     REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
2803                 }
2804             }
2805
2806           if (! some_was_dead)
2807             {
2808               if (flags & PROP_LOG_LINKS)
2809                 {
2810                   /* Make a logical link from the next following insn
2811                      that uses this register, back to this insn.
2812                      The following insns have already been processed.
2813
2814                      We don't build a LOG_LINK for hard registers containing
2815                      in ASM_OPERANDs.  If these registers get replaced,
2816                      we might wind up changing the semantics of the insn,
2817                      even if reload can make what appear to be valid
2818                      assignments later.  */
2819                   if (y && (BLOCK_NUM (y) == blocknum)
2820                       && (regno_first >= FIRST_PSEUDO_REGISTER
2821                           || asm_noperands (PATTERN (y)) < 0))
2822                     LOG_LINKS (y) = alloc_INSN_LIST (insn, LOG_LINKS (y));
2823                 }
2824             }
2825           else if (not_dead)
2826             ;
2827           else if (! some_was_live)
2828             {
2829               if (flags & PROP_REG_INFO)
2830                 REG_N_DEATHS (regno_first) += 1;
2831
2832               if (flags & PROP_DEATH_NOTES)
2833                 {
2834                   /* Note that dead stores have already been deleted
2835                      when possible.  If we get here, we have found a
2836                      dead store that cannot be eliminated (because the
2837                      same insn does something useful).  Indicate this
2838                      by marking the reg being set as dying here.  */
2839                   REG_NOTES (insn)
2840                     = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2841                 }
2842             }
2843           else
2844             {
2845               if (flags & PROP_DEATH_NOTES)
2846                 {
2847                   /* This is a case where we have a multi-word hard register
2848                      and some, but not all, of the words of the register are
2849                      needed in subsequent insns.  Write REG_UNUSED notes
2850                      for those parts that were not needed.  This case should
2851                      be rare.  */
2852
2853                   for (i = regno_first; i <= regno_last; ++i)
2854                     if (! REGNO_REG_SET_P (pbi->reg_live, i))
2855                       REG_NOTES (insn)
2856                         = alloc_EXPR_LIST (REG_UNUSED,
2857                                            regno_reg_rtx[i],
2858                                            REG_NOTES (insn));
2859                 }
2860             }
2861         }
2862
2863       /* Mark the register as being dead.  */
2864       if (some_was_live
2865           /* The stack pointer is never dead.  Well, not strictly true,
2866              but it's very difficult to tell from here.  Hopefully
2867              combine_stack_adjustments will fix up the most egregious
2868              errors.  */
2869           && regno_first != STACK_POINTER_REGNUM)
2870         {
2871           for (i = regno_first; i <= regno_last; ++i)
2872             if (!(not_dead & (((unsigned long) 1) << (i - regno_first))))
2873               CLEAR_REGNO_REG_SET (pbi->reg_live, i);
2874         }
2875     }
2876   else if (GET_CODE (reg) == REG)
2877     {
2878       if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
2879         pbi->reg_next_use[regno_first] = 0;
2880     }
2881
2882   /* If this is the last pass and this is a SCRATCH, show it will be dying
2883      here and count it.  */
2884   else if (GET_CODE (reg) == SCRATCH)
2885     {
2886       if (flags & PROP_DEATH_NOTES)
2887         REG_NOTES (insn)
2888           = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
2889     }
2890 }
2891 \f
2892 #ifdef HAVE_conditional_execution
2893 /* Mark REGNO conditionally dead.
2894    Return true if the register is now unconditionally dead.  */
2895
2896 static int
2897 mark_regno_cond_dead (pbi, regno, cond)
2898      struct propagate_block_info *pbi;
2899      int regno;
2900      rtx cond;
2901 {
2902   /* If this is a store to a predicate register, the value of the
2903      predicate is changing, we don't know that the predicate as seen
2904      before is the same as that seen after.  Flush all dependent
2905      conditions from reg_cond_dead.  This will make all such
2906      conditionally live registers unconditionally live.  */
2907   if (REGNO_REG_SET_P (pbi->reg_cond_reg, regno))
2908     flush_reg_cond_reg (pbi, regno);
2909
2910   /* If this is an unconditional store, remove any conditional
2911      life that may have existed.  */
2912   if (cond == NULL_RTX)
2913     splay_tree_remove (pbi->reg_cond_dead, regno);
2914   else
2915     {
2916       splay_tree_node node;
2917       struct reg_cond_life_info *rcli;
2918       rtx ncond;
2919
2920       /* Otherwise this is a conditional set.  Record that fact.
2921          It may have been conditionally used, or there may be a
2922          subsequent set with a complimentary condition.  */
2923
2924       node = splay_tree_lookup (pbi->reg_cond_dead, regno);
2925       if (node == NULL)
2926         {
2927           /* The register was unconditionally live previously.
2928              Record the current condition as the condition under
2929              which it is dead.  */
2930           rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
2931           rcli->condition = cond;
2932           rcli->stores = cond;
2933           rcli->orig_condition = const0_rtx;
2934           splay_tree_insert (pbi->reg_cond_dead, regno,
2935                              (splay_tree_value) rcli);
2936
2937           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2938
2939           /* Not unconditionally dead.  */
2940           return 0;
2941         }
2942       else
2943         {
2944           /* The register was conditionally live previously.
2945              Add the new condition to the old.  */
2946           rcli = (struct reg_cond_life_info *) node->value;
2947           ncond = rcli->condition;
2948           ncond = ior_reg_cond (ncond, cond, 1);
2949           if (rcli->stores == const0_rtx)
2950             rcli->stores = cond;
2951           else if (rcli->stores != const1_rtx)
2952             rcli->stores = ior_reg_cond (rcli->stores, cond, 1);
2953
2954           /* If the register is now unconditionally dead, remove the entry
2955              in the splay_tree.  A register is unconditionally dead if the
2956              dead condition ncond is true.  A register is also unconditionally
2957              dead if the sum of all conditional stores is an unconditional
2958              store (stores is true), and the dead condition is identically the
2959              same as the original dead condition initialized at the end of
2960              the block.  This is a pointer compare, not an rtx_equal_p
2961              compare.  */
2962           if (ncond == const1_rtx
2963               || (ncond == rcli->orig_condition && rcli->stores == const1_rtx))
2964             splay_tree_remove (pbi->reg_cond_dead, regno);
2965           else
2966             {
2967               rcli->condition = ncond;
2968
2969               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
2970
2971               /* Not unconditionally dead.  */
2972               return 0;
2973             }
2974         }
2975     }
2976
2977   return 1;
2978 }
2979
2980 /* Called from splay_tree_delete for pbi->reg_cond_life.  */
2981
2982 static void
2983 free_reg_cond_life_info (value)
2984      splay_tree_value value;
2985 {
2986   struct reg_cond_life_info *rcli = (struct reg_cond_life_info *) value;
2987   free (rcli);
2988 }
2989
2990 /* Helper function for flush_reg_cond_reg.  */
2991
2992 static int
2993 flush_reg_cond_reg_1 (node, data)
2994      splay_tree_node node;
2995      void *data;
2996 {
2997   struct reg_cond_life_info *rcli;
2998   int *xdata = (int *) data;
2999   unsigned int regno = xdata[0];
3000
3001   /* Don't need to search if last flushed value was farther on in
3002      the in-order traversal.  */
3003   if (xdata[1] >= (int) node->key)
3004     return 0;
3005
3006   /* Splice out portions of the expression that refer to regno.  */
3007   rcli = (struct reg_cond_life_info *) node->value;
3008   rcli->condition = elim_reg_cond (rcli->condition, regno);
3009   if (rcli->stores != const0_rtx && rcli->stores != const1_rtx)
3010     rcli->stores = elim_reg_cond (rcli->stores, regno);
3011
3012   /* If the entire condition is now false, signal the node to be removed.  */
3013   if (rcli->condition == const0_rtx)
3014     {
3015       xdata[1] = node->key;
3016       return -1;
3017     }
3018   else if (rcli->condition == const1_rtx)
3019     abort ();
3020
3021   return 0;
3022 }
3023
3024 /* Flush all (sub) expressions referring to REGNO from REG_COND_LIVE.  */
3025
3026 static void
3027 flush_reg_cond_reg (pbi, regno)
3028      struct propagate_block_info *pbi;
3029      int regno;
3030 {
3031   int pair[2];
3032
3033   pair[0] = regno;
3034   pair[1] = -1;
3035   while (splay_tree_foreach (pbi->reg_cond_dead,
3036                              flush_reg_cond_reg_1, pair) == -1)
3037     splay_tree_remove (pbi->reg_cond_dead, pair[1]);
3038
3039   CLEAR_REGNO_REG_SET (pbi->reg_cond_reg, regno);
3040 }
3041
3042 /* Logical arithmetic on predicate conditions.  IOR, NOT and AND.
3043    For ior/and, the ADD flag determines whether we want to add the new
3044    condition X to the old one unconditionally.  If it is zero, we will
3045    only return a new expression if X allows us to simplify part of
3046    OLD, otherwise we return NULL to the caller.
3047    If ADD is nonzero, we will return a new condition in all cases.  The
3048    toplevel caller of one of these functions should always pass 1 for
3049    ADD.  */
3050
3051 static rtx
3052 ior_reg_cond (old, x, add)
3053      rtx old, x;
3054      int add;
3055 {
3056   rtx op0, op1;
3057
3058   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
3059     {
3060       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
3061           && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
3062           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3063         return const1_rtx;
3064       if (GET_CODE (x) == GET_CODE (old)
3065           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3066         return old;
3067       if (! add)
3068         return NULL;
3069       return gen_rtx_IOR (0, old, x);
3070     }
3071
3072   switch (GET_CODE (old))
3073     {
3074     case IOR:
3075       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
3076       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
3077       if (op0 != NULL || op1 != NULL)
3078         {
3079           if (op0 == const0_rtx)
3080             return op1 ? op1 : gen_rtx_IOR (0, XEXP (old, 1), x);
3081           if (op1 == const0_rtx)
3082             return op0 ? op0 : gen_rtx_IOR (0, XEXP (old, 0), x);
3083           if (op0 == const1_rtx || op1 == const1_rtx)
3084             return const1_rtx;
3085           if (op0 == NULL)
3086             op0 = gen_rtx_IOR (0, XEXP (old, 0), x);
3087           else if (rtx_equal_p (x, op0))
3088             /* (x | A) | x ~ (x | A).  */
3089             return old;
3090           if (op1 == NULL)
3091             op1 = gen_rtx_IOR (0, XEXP (old, 1), x);
3092           else if (rtx_equal_p (x, op1))
3093             /* (A | x) | x ~ (A | x).  */
3094             return old;
3095           return gen_rtx_IOR (0, op0, op1);
3096         }
3097       if (! add)
3098         return NULL;
3099       return gen_rtx_IOR (0, old, x);
3100
3101     case AND:
3102       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
3103       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
3104       if (op0 != NULL || op1 != NULL)
3105         {
3106           if (op0 == const1_rtx)
3107             return op1 ? op1 : gen_rtx_IOR (0, XEXP (old, 1), x);
3108           if (op1 == const1_rtx)
3109             return op0 ? op0 : gen_rtx_IOR (0, XEXP (old, 0), x);
3110           if (op0 == const0_rtx || op1 == const0_rtx)
3111             return const0_rtx;
3112           if (op0 == NULL)
3113             op0 = gen_rtx_IOR (0, XEXP (old, 0), x);
3114           else if (rtx_equal_p (x, op0))
3115             /* (x & A) | x ~ x.  */
3116             return op0;
3117           if (op1 == NULL)
3118             op1 = gen_rtx_IOR (0, XEXP (old, 1), x);
3119           else if (rtx_equal_p (x, op1))
3120             /* (A & x) | x ~ x.  */
3121             return op1;
3122           return gen_rtx_AND (0, op0, op1);
3123         }
3124       if (! add)
3125         return NULL;
3126       return gen_rtx_IOR (0, old, x);
3127
3128     case NOT:
3129       op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
3130       if (op0 != NULL)
3131         return not_reg_cond (op0);
3132       if (! add)
3133         return NULL;
3134       return gen_rtx_IOR (0, old, x);
3135
3136     default:
3137       abort ();
3138     }
3139 }
3140
3141 static rtx
3142 not_reg_cond (x)
3143      rtx x;
3144 {
3145   enum rtx_code x_code;
3146
3147   if (x == const0_rtx)
3148     return const1_rtx;
3149   else if (x == const1_rtx)
3150     return const0_rtx;
3151   x_code = GET_CODE (x);
3152   if (x_code == NOT)
3153     return XEXP (x, 0);
3154   if (GET_RTX_CLASS (x_code) == '<'
3155       && GET_CODE (XEXP (x, 0)) == REG)
3156     {
3157       if (XEXP (x, 1) != const0_rtx)
3158         abort ();
3159
3160       return gen_rtx_fmt_ee (reverse_condition (x_code),
3161                              VOIDmode, XEXP (x, 0), const0_rtx);
3162     }
3163   return gen_rtx_NOT (0, x);
3164 }
3165
3166 static rtx
3167 and_reg_cond (old, x, add)
3168      rtx old, x;
3169      int add;
3170 {
3171   rtx op0, op1;
3172
3173   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
3174     {
3175       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
3176           && GET_CODE (x) == reverse_condition (GET_CODE (old))
3177           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3178         return const0_rtx;
3179       if (GET_CODE (x) == GET_CODE (old)
3180           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
3181         return old;
3182       if (! add)
3183         return NULL;
3184       return gen_rtx_AND (0, old, x);
3185     }
3186
3187   switch (GET_CODE (old))
3188     {
3189     case IOR:
3190       op0 = and_reg_cond (XEXP (old, 0), x, 0);
3191       op1 = and_reg_cond (XEXP (old, 1), x, 0);
3192       if (op0 != NULL || op1 != NULL)
3193         {
3194           if (op0 == const0_rtx)
3195             return op1 ? op1 : gen_rtx_AND (0, XEXP (old, 1), x);
3196           if (op1 == const0_rtx)
3197             return op0 ? op0 : gen_rtx_AND (0, XEXP (old, 0), x);
3198           if (op0 == const1_rtx || op1 == const1_rtx)
3199             return const1_rtx;
3200           if (op0 == NULL)
3201             op0 = gen_rtx_AND (0, XEXP (old, 0), x);
3202           else if (rtx_equal_p (x, op0))
3203             /* (x | A) & x ~ x.  */
3204             return op0;
3205           if (op1 == NULL)
3206             op1 = gen_rtx_AND (0, XEXP (old, 1), x);
3207           else if (rtx_equal_p (x, op1))
3208             /* (A | x) & x ~ x.  */
3209             return op1;
3210           return gen_rtx_IOR (0, op0, op1);
3211         }
3212       if (! add)
3213         return NULL;
3214       return gen_rtx_AND (0, old, x);
3215
3216     case AND:
3217       op0 = and_reg_cond (XEXP (old, 0), x, 0);
3218       op1 = and_reg_cond (XEXP (old, 1), x, 0);
3219       if (op0 != NULL || op1 != NULL)
3220         {
3221           if (op0 == const1_rtx)
3222             return op1 ? op1 : gen_rtx_AND (0, XEXP (old, 1), x);
3223           if (op1 == const1_rtx)
3224             return op0 ? op0 : gen_rtx_AND (0, XEXP (old, 0), x);
3225           if (op0 == const0_rtx || op1 == const0_rtx)
3226             return const0_rtx;
3227           if (op0 == NULL)
3228             op0 = gen_rtx_AND (0, XEXP (old, 0), x);
3229           else if (rtx_equal_p (x, op0))
3230             /* (x & A) & x ~ (x & A).  */
3231             return old;
3232           if (op1 == NULL)
3233             op1 = gen_rtx_AND (0, XEXP (old, 1), x);
3234           else if (rtx_equal_p (x, op1))
3235             /* (A & x) & x ~ (A & x).  */
3236             return old;
3237           return gen_rtx_AND (0, op0, op1);
3238         }
3239       if (! add)
3240         return NULL;
3241       return gen_rtx_AND (0, old, x);
3242
3243     case NOT:
3244       op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
3245       if (op0 != NULL)
3246         return not_reg_cond (op0);
3247       if (! add)
3248         return NULL;
3249       return gen_rtx_AND (0, old, x);
3250
3251     default:
3252       abort ();
3253     }
3254 }
3255
3256 /* Given a condition X, remove references to reg REGNO and return the
3257    new condition.  The removal will be done so that all conditions
3258    involving REGNO are considered to evaluate to false.  This function
3259    is used when the value of REGNO changes.  */
3260
3261 static rtx
3262 elim_reg_cond (x, regno)
3263      rtx x;
3264      unsigned int regno;
3265 {
3266   rtx op0, op1;
3267
3268   if (GET_RTX_CLASS (GET_CODE (x)) == '<')
3269     {
3270       if (REGNO (XEXP (x, 0)) == regno)
3271         return const0_rtx;
3272       return x;
3273     }
3274
3275   switch (GET_CODE (x))
3276     {
3277     case AND:
3278       op0 = elim_reg_cond (XEXP (x, 0), regno);
3279       op1 = elim_reg_cond (XEXP (x, 1), regno);
3280       if (op0 == const0_rtx || op1 == const0_rtx)
3281         return const0_rtx;
3282       if (op0 == const1_rtx)
3283         return op1;
3284       if (op1 == const1_rtx)
3285         return op0;
3286       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3287         return x;
3288       return gen_rtx_AND (0, op0, op1);
3289
3290     case IOR:
3291       op0 = elim_reg_cond (XEXP (x, 0), regno);
3292       op1 = elim_reg_cond (XEXP (x, 1), regno);
3293       if (op0 == const1_rtx || op1 == const1_rtx)
3294         return const1_rtx;
3295       if (op0 == const0_rtx)
3296         return op1;
3297       if (op1 == const0_rtx)
3298         return op0;
3299       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
3300         return x;
3301       return gen_rtx_IOR (0, op0, op1);
3302
3303     case NOT:
3304       op0 = elim_reg_cond (XEXP (x, 0), regno);
3305       if (op0 == const0_rtx)
3306         return const1_rtx;
3307       if (op0 == const1_rtx)
3308         return const0_rtx;
3309       if (op0 != XEXP (x, 0))
3310         return not_reg_cond (op0);
3311       return x;
3312
3313     default:
3314       abort ();
3315     }
3316 }
3317 #endif /* HAVE_conditional_execution */
3318 \f
3319 #ifdef AUTO_INC_DEC
3320
3321 /* Try to substitute the auto-inc expression INC as the address inside
3322    MEM which occurs in INSN.  Currently, the address of MEM is an expression
3323    involving INCR_REG, and INCR is the next use of INCR_REG; it is an insn
3324    that has a single set whose source is a PLUS of INCR_REG and something
3325    else.  */
3326
3327 static void
3328 attempt_auto_inc (pbi, inc, insn, mem, incr, incr_reg)
3329      struct propagate_block_info *pbi;
3330      rtx inc, insn, mem, incr, incr_reg;
3331 {
3332   int regno = REGNO (incr_reg);
3333   rtx set = single_set (incr);
3334   rtx q = SET_DEST (set);
3335   rtx y = SET_SRC (set);
3336   int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
3337
3338   /* Make sure this reg appears only once in this insn.  */
3339   if (count_occurrences (PATTERN (insn), incr_reg, 1) != 1)
3340     return;
3341
3342   if (dead_or_set_p (incr, incr_reg)
3343       /* Mustn't autoinc an eliminable register.  */
3344       && (regno >= FIRST_PSEUDO_REGISTER
3345           || ! TEST_HARD_REG_BIT (elim_reg_set, regno)))
3346     {
3347       /* This is the simple case.  Try to make the auto-inc.  If
3348          we can't, we are done.  Otherwise, we will do any
3349          needed updates below.  */
3350       if (! validate_change (insn, &XEXP (mem, 0), inc, 0))
3351         return;
3352     }
3353   else if (GET_CODE (q) == REG
3354            /* PREV_INSN used here to check the semi-open interval
3355               [insn,incr).  */
3356            && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
3357            /* We must also check for sets of q as q may be
3358               a call clobbered hard register and there may
3359               be a call between PREV_INSN (insn) and incr.  */
3360            && ! reg_set_between_p (q,  PREV_INSN (insn), incr))
3361     {
3362       /* We have *p followed sometime later by q = p+size.
3363          Both p and q must be live afterward,
3364          and q is not used between INSN and its assignment.
3365          Change it to q = p, ...*q..., q = q+size.
3366          Then fall into the usual case.  */
3367       rtx insns, temp;
3368
3369       start_sequence ();
3370       emit_move_insn (q, incr_reg);
3371       insns = get_insns ();
3372       end_sequence ();
3373
3374       /* If we can't make the auto-inc, or can't make the
3375          replacement into Y, exit.  There's no point in making
3376          the change below if we can't do the auto-inc and doing
3377          so is not correct in the pre-inc case.  */
3378
3379       XEXP (inc, 0) = q;
3380       validate_change (insn, &XEXP (mem, 0), inc, 1);
3381       validate_change (incr, &XEXP (y, opnum), q, 1);
3382       if (! apply_change_group ())
3383         return;
3384
3385       /* We now know we'll be doing this change, so emit the
3386          new insn(s) and do the updates.  */
3387       emit_insn_before (insns, insn);
3388
3389       if (pbi->bb->head == insn)
3390         pbi->bb->head = insns;
3391
3392       /* INCR will become a NOTE and INSN won't contain a
3393          use of INCR_REG.  If a use of INCR_REG was just placed in
3394          the insn before INSN, make that the next use.
3395          Otherwise, invalidate it.  */
3396       if (GET_CODE (PREV_INSN (insn)) == INSN
3397           && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
3398           && SET_SRC (PATTERN (PREV_INSN (insn))) == incr_reg)
3399         pbi->reg_next_use[regno] = PREV_INSN (insn);
3400       else
3401         pbi->reg_next_use[regno] = 0;
3402
3403       incr_reg = q;
3404       regno = REGNO (q);
3405
3406       /* REGNO is now used in INCR which is below INSN, but
3407          it previously wasn't live here.  If we don't mark
3408          it as live, we'll put a REG_DEAD note for it
3409          on this insn, which is incorrect.  */
3410       SET_REGNO_REG_SET (pbi->reg_live, regno);
3411
3412       /* If there are any calls between INSN and INCR, show
3413          that REGNO now crosses them.  */
3414       for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
3415         if (GET_CODE (temp) == CALL_INSN)
3416           REG_N_CALLS_CROSSED (regno)++;
3417
3418       /* Invalidate alias info for Q since we just changed its value.  */
3419       clear_reg_alias_info (q);
3420     }
3421   else
3422     return;
3423
3424   /* If we haven't returned, it means we were able to make the
3425      auto-inc, so update the status.  First, record that this insn
3426      has an implicit side effect.  */
3427
3428   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, incr_reg, REG_NOTES (insn));
3429
3430   /* Modify the old increment-insn to simply copy
3431      the already-incremented value of our register.  */
3432   if (! validate_change (incr, &SET_SRC (set), incr_reg, 0))
3433     abort ();
3434
3435   /* If that makes it a no-op (copying the register into itself) delete
3436      it so it won't appear to be a "use" and a "set" of this
3437      register.  */
3438   if (REGNO (SET_DEST (set)) == REGNO (incr_reg))
3439     {
3440       /* If the original source was dead, it's dead now.  */
3441       rtx note;
3442
3443       while ((note = find_reg_note (incr, REG_DEAD, NULL_RTX)) != NULL_RTX)
3444         {
3445           remove_note (incr, note);
3446           if (XEXP (note, 0) != incr_reg)
3447             CLEAR_REGNO_REG_SET (pbi->reg_live, REGNO (XEXP (note, 0)));
3448         }
3449
3450       PUT_CODE (incr, NOTE);
3451       NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
3452       NOTE_SOURCE_FILE (incr) = 0;
3453     }
3454
3455   if (regno >= FIRST_PSEUDO_REGISTER)
3456     {
3457       /* Count an extra reference to the reg.  When a reg is
3458          incremented, spilling it is worse, so we want to make
3459          that less likely.  */
3460       REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3461
3462       /* Count the increment as a setting of the register,
3463          even though it isn't a SET in rtl.  */
3464       REG_N_SETS (regno)++;
3465     }
3466 }
3467
3468 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
3469    reference.  */
3470
3471 static void
3472 find_auto_inc (pbi, x, insn)
3473      struct propagate_block_info *pbi;
3474      rtx x;
3475      rtx insn;
3476 {
3477   rtx addr = XEXP (x, 0);
3478   HOST_WIDE_INT offset = 0;
3479   rtx set, y, incr, inc_val;
3480   int regno;
3481   int size = GET_MODE_SIZE (GET_MODE (x));
3482
3483   if (GET_CODE (insn) == JUMP_INSN)
3484     return;
3485
3486   /* Here we detect use of an index register which might be good for
3487      postincrement, postdecrement, preincrement, or predecrement.  */
3488
3489   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
3490     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
3491
3492   if (GET_CODE (addr) != REG)
3493     return;
3494
3495   regno = REGNO (addr);
3496
3497   /* Is the next use an increment that might make auto-increment? */
3498   incr = pbi->reg_next_use[regno];
3499   if (incr == 0 || BLOCK_NUM (incr) != BLOCK_NUM (insn))
3500     return;
3501   set = single_set (incr);
3502   if (set == 0 || GET_CODE (set) != SET)
3503     return;
3504   y = SET_SRC (set);
3505
3506   if (GET_CODE (y) != PLUS)
3507     return;
3508
3509   if (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) == REGNO (addr))
3510     inc_val = XEXP (y, 1);
3511   else if (REG_P (XEXP (y, 1)) && REGNO (XEXP (y, 1)) == REGNO (addr))
3512     inc_val = XEXP (y, 0);
3513   else
3514     return;
3515
3516   if (GET_CODE (inc_val) == CONST_INT)
3517     {
3518       if (HAVE_POST_INCREMENT
3519           && (INTVAL (inc_val) == size && offset == 0))
3520         attempt_auto_inc (pbi, gen_rtx_POST_INC (Pmode, addr), insn, x,
3521                           incr, addr);
3522       else if (HAVE_POST_DECREMENT
3523                && (INTVAL (inc_val) == -size && offset == 0))
3524         attempt_auto_inc (pbi, gen_rtx_POST_DEC (Pmode, addr), insn, x,
3525                           incr, addr);
3526       else if (HAVE_PRE_INCREMENT
3527                && (INTVAL (inc_val) == size && offset == size))
3528         attempt_auto_inc (pbi, gen_rtx_PRE_INC (Pmode, addr), insn, x,
3529                           incr, addr);
3530       else if (HAVE_PRE_DECREMENT
3531                && (INTVAL (inc_val) == -size && offset == -size))
3532         attempt_auto_inc (pbi, gen_rtx_PRE_DEC (Pmode, addr), insn, x,
3533                           incr, addr);
3534       else if (HAVE_POST_MODIFY_DISP && offset == 0)
3535         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3536                                                     gen_rtx_PLUS (Pmode,
3537                                                                   addr,
3538                                                                   inc_val)),
3539                           insn, x, incr, addr);
3540       else if (HAVE_PRE_MODIFY_DISP && offset == INTVAL (inc_val))
3541         attempt_auto_inc (pbi, gen_rtx_PRE_MODIFY (Pmode, addr,
3542                                                     gen_rtx_PLUS (Pmode,
3543                                                                   addr,
3544                                                                   inc_val)),
3545                           insn, x, incr, addr);
3546     }
3547   else if (GET_CODE (inc_val) == REG
3548            && ! reg_set_between_p (inc_val, PREV_INSN (insn),
3549                                    NEXT_INSN (incr)))
3550
3551     {
3552       if (HAVE_POST_MODIFY_REG && offset == 0)
3553         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3554                                                     gen_rtx_PLUS (Pmode,
3555                                                                   addr,
3556                                                                   inc_val)),
3557                           insn, x, incr, addr);
3558     }
3559 }
3560
3561 #endif /* AUTO_INC_DEC */
3562 \f
3563 static void
3564 mark_used_reg (pbi, reg, cond, insn)
3565      struct propagate_block_info *pbi;
3566      rtx reg;
3567      rtx cond ATTRIBUTE_UNUSED;
3568      rtx insn;
3569 {
3570   unsigned int regno_first, regno_last, i;
3571   int some_was_live, some_was_dead, some_not_set;
3572
3573   regno_last = regno_first = REGNO (reg);
3574   if (regno_first < FIRST_PSEUDO_REGISTER)
3575     regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
3576
3577   /* Find out if any of this register is live after this instruction.  */
3578   some_was_live = some_was_dead = 0;
3579   for (i = regno_first; i <= regno_last; ++i)
3580     {
3581       int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
3582       some_was_live |= needed_regno;
3583       some_was_dead |= ! needed_regno;
3584     }
3585
3586   /* Find out if any of the register was set this insn.  */
3587   some_not_set = 0;
3588   for (i = regno_first; i <= regno_last; ++i)
3589     some_not_set |= ! REGNO_REG_SET_P (pbi->new_set, i);
3590
3591   if (pbi->flags & (PROP_LOG_LINKS | PROP_AUTOINC))
3592     {
3593       /* Record where each reg is used, so when the reg is set we know
3594          the next insn that uses it.  */
3595       pbi->reg_next_use[regno_first] = insn;
3596     }
3597
3598   if (pbi->flags & PROP_REG_INFO)
3599     {
3600       if (regno_first < FIRST_PSEUDO_REGISTER)
3601         {
3602           /* If this is a register we are going to try to eliminate,
3603              don't mark it live here.  If we are successful in
3604              eliminating it, it need not be live unless it is used for
3605              pseudos, in which case it will have been set live when it
3606              was allocated to the pseudos.  If the register will not
3607              be eliminated, reload will set it live at that point.
3608
3609              Otherwise, record that this function uses this register.  */
3610           /* ??? The PPC backend tries to "eliminate" on the pic
3611              register to itself.  This should be fixed.  In the mean
3612              time, hack around it.  */
3613
3614           if (! (TEST_HARD_REG_BIT (elim_reg_set, regno_first)
3615                  && (regno_first == FRAME_POINTER_REGNUM
3616                      || regno_first == ARG_POINTER_REGNUM)))
3617             for (i = regno_first; i <= regno_last; ++i)
3618               regs_ever_live[i] = 1;
3619         }
3620       else
3621         {
3622           /* Keep track of which basic block each reg appears in.  */
3623
3624           int blocknum = pbi->bb->index;
3625           if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
3626             REG_BASIC_BLOCK (regno_first) = blocknum;
3627           else if (REG_BASIC_BLOCK (regno_first) != blocknum)
3628             REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
3629
3630           /* Count (weighted) number of uses of each reg.  */
3631           REG_FREQ (regno_first) += REG_FREQ_FROM_BB (pbi->bb);
3632           REG_N_REFS (regno_first)++;
3633         }
3634     }
3635
3636   /* Record and count the insns in which a reg dies.  If it is used in
3637      this insn and was dead below the insn then it dies in this insn.
3638      If it was set in this insn, we do not make a REG_DEAD note;
3639      likewise if we already made such a note.  */
3640   if ((pbi->flags & (PROP_DEATH_NOTES | PROP_REG_INFO))
3641       && some_was_dead
3642       && some_not_set)
3643     {
3644       /* Check for the case where the register dying partially
3645          overlaps the register set by this insn.  */
3646       if (regno_first != regno_last)
3647         for (i = regno_first; i <= regno_last; ++i)
3648           some_was_live |= REGNO_REG_SET_P (pbi->new_set, i);
3649
3650       /* If none of the words in X is needed, make a REG_DEAD note.
3651          Otherwise, we must make partial REG_DEAD notes.  */
3652       if (! some_was_live)
3653         {
3654           if ((pbi->flags & PROP_DEATH_NOTES)
3655               && ! find_regno_note (insn, REG_DEAD, regno_first))
3656             REG_NOTES (insn)
3657               = alloc_EXPR_LIST (REG_DEAD, reg, REG_NOTES (insn));
3658
3659           if (pbi->flags & PROP_REG_INFO)
3660             REG_N_DEATHS (regno_first)++;
3661         }
3662       else
3663         {
3664           /* Don't make a REG_DEAD note for a part of a register
3665              that is set in the insn.  */
3666           for (i = regno_first; i <= regno_last; ++i)
3667             if (! REGNO_REG_SET_P (pbi->reg_live, i)
3668                 && ! dead_or_set_regno_p (insn, i))
3669               REG_NOTES (insn)
3670                 = alloc_EXPR_LIST (REG_DEAD,
3671                                    regno_reg_rtx[i],
3672                                    REG_NOTES (insn));
3673         }
3674     }
3675
3676   /* Mark the register as being live.  */
3677   for (i = regno_first; i <= regno_last; ++i)
3678     {
3679 #ifdef HAVE_conditional_execution
3680       int this_was_live = REGNO_REG_SET_P (pbi->reg_live, i);
3681 #endif
3682
3683       SET_REGNO_REG_SET (pbi->reg_live, i);
3684
3685 #ifdef HAVE_conditional_execution
3686       /* If this is a conditional use, record that fact.  If it is later
3687          conditionally set, we'll know to kill the register.  */
3688       if (cond != NULL_RTX)
3689         {
3690           splay_tree_node node;
3691           struct reg_cond_life_info *rcli;
3692           rtx ncond;
3693
3694           if (this_was_live)
3695             {
3696               node = splay_tree_lookup (pbi->reg_cond_dead, i);
3697               if (node == NULL)
3698                 {
3699                   /* The register was unconditionally live previously.
3700                      No need to do anything.  */
3701                 }
3702               else
3703                 {
3704                   /* The register was conditionally live previously.
3705                      Subtract the new life cond from the old death cond.  */
3706                   rcli = (struct reg_cond_life_info *) node->value;
3707                   ncond = rcli->condition;
3708                   ncond = and_reg_cond (ncond, not_reg_cond (cond), 1);
3709
3710                   /* If the register is now unconditionally live,
3711                      remove the entry in the splay_tree.  */
3712                   if (ncond == const0_rtx)
3713                     splay_tree_remove (pbi->reg_cond_dead, i);
3714                   else
3715                     {
3716                       rcli->condition = ncond;
3717                       SET_REGNO_REG_SET (pbi->reg_cond_reg,
3718                                          REGNO (XEXP (cond, 0)));
3719                     }
3720                 }
3721             }
3722           else
3723             {
3724               /* The register was not previously live at all.  Record
3725                  the condition under which it is still dead.  */
3726               rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
3727               rcli->condition = not_reg_cond (cond);
3728               rcli->stores = const0_rtx;
3729               rcli->orig_condition = const0_rtx;
3730               splay_tree_insert (pbi->reg_cond_dead, i,
3731                                  (splay_tree_value) rcli);
3732
3733               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3734             }
3735         }
3736       else if (this_was_live)
3737         {
3738           /* The register may have been conditionally live previously, but
3739              is now unconditionally live.  Remove it from the conditionally
3740              dead list, so that a conditional set won't cause us to think
3741              it dead.  */
3742           splay_tree_remove (pbi->reg_cond_dead, i);
3743         }
3744 #endif
3745     }
3746 }
3747
3748 /* Scan expression X and store a 1-bit in NEW_LIVE for each reg it uses.
3749    This is done assuming the registers needed from X are those that
3750    have 1-bits in PBI->REG_LIVE.
3751
3752    INSN is the containing instruction.  If INSN is dead, this function
3753    is not called.  */
3754
3755 static void
3756 mark_used_regs (pbi, x, cond, insn)
3757      struct propagate_block_info *pbi;
3758      rtx x, cond, insn;
3759 {
3760   RTX_CODE code;
3761   int regno;
3762   int flags = pbi->flags;
3763
3764  retry:
3765   if (!x)
3766     return;
3767   code = GET_CODE (x);
3768   switch (code)
3769     {
3770     case LABEL_REF:
3771     case SYMBOL_REF:
3772     case CONST_INT:
3773     case CONST:
3774     case CONST_DOUBLE:
3775     case CONST_VECTOR:
3776     case PC:
3777     case ADDR_VEC:
3778     case ADDR_DIFF_VEC:
3779       return;
3780
3781 #ifdef HAVE_cc0
3782     case CC0:
3783       pbi->cc0_live = 1;
3784       return;
3785 #endif
3786
3787     case CLOBBER:
3788       /* If we are clobbering a MEM, mark any registers inside the address
3789          as being used.  */
3790       if (GET_CODE (XEXP (x, 0)) == MEM)
3791         mark_used_regs (pbi, XEXP (XEXP (x, 0), 0), cond, insn);
3792       return;
3793
3794     case MEM:
3795       /* Don't bother watching stores to mems if this is not the
3796          final pass.  We'll not be deleting dead stores this round.  */
3797       if (optimize && (flags & PROP_SCAN_DEAD_STORES))
3798         {
3799           /* Invalidate the data for the last MEM stored, but only if MEM is
3800              something that can be stored into.  */
3801           if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
3802               && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
3803             /* Needn't clear the memory set list.  */
3804             ;
3805           else
3806             {
3807               rtx temp = pbi->mem_set_list;
3808               rtx prev = NULL_RTX;
3809               rtx next;
3810
3811               while (temp)
3812                 {
3813                   next = XEXP (temp, 1);
3814                   if (anti_dependence (XEXP (temp, 0), x))
3815                     {
3816                       /* Splice temp out of the list.  */
3817                       if (prev)
3818                         XEXP (prev, 1) = next;
3819                       else
3820                         pbi->mem_set_list = next;
3821                       free_EXPR_LIST_node (temp);
3822                       pbi->mem_set_list_len--;
3823                     }
3824                   else
3825                     prev = temp;
3826                   temp = next;
3827                 }
3828             }
3829
3830           /* If the memory reference had embedded side effects (autoincrement
3831              address modes.  Then we may need to kill some entries on the
3832              memory set list.  */
3833           if (insn)
3834             for_each_rtx (&PATTERN (insn), invalidate_mems_from_autoinc, pbi);
3835         }
3836
3837 #ifdef AUTO_INC_DEC
3838       if (flags & PROP_AUTOINC)
3839         find_auto_inc (pbi, x, insn);
3840 #endif
3841       break;
3842
3843     case SUBREG:
3844 #ifdef CANNOT_CHANGE_MODE_CLASS
3845       if (GET_CODE (SUBREG_REG (x)) == REG
3846           && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER)
3847         bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (x))
3848                                           * MAX_MACHINE_MODE
3849                                           + GET_MODE (x));
3850 #endif
3851
3852       /* While we're here, optimize this case.  */
3853       x = SUBREG_REG (x);
3854       if (GET_CODE (x) != REG)
3855         goto retry;
3856       /* Fall through.  */
3857
3858     case REG:
3859       /* See a register other than being set => mark it as needed.  */
3860       mark_used_reg (pbi, x, cond, insn);
3861       return;
3862
3863     case SET:
3864       {
3865         rtx testreg = SET_DEST (x);
3866         int mark_dest = 0;
3867
3868         /* If storing into MEM, don't show it as being used.  But do
3869            show the address as being used.  */
3870         if (GET_CODE (testreg) == MEM)
3871           {
3872 #ifdef AUTO_INC_DEC
3873             if (flags & PROP_AUTOINC)
3874               find_auto_inc (pbi, testreg, insn);
3875 #endif
3876             mark_used_regs (pbi, XEXP (testreg, 0), cond, insn);
3877             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3878             return;
3879           }
3880
3881         /* Storing in STRICT_LOW_PART is like storing in a reg
3882            in that this SET might be dead, so ignore it in TESTREG.
3883            but in some other ways it is like using the reg.
3884
3885            Storing in a SUBREG or a bit field is like storing the entire
3886            register in that if the register's value is not used
3887            then this SET is not needed.  */
3888         while (GET_CODE (testreg) == STRICT_LOW_PART
3889                || GET_CODE (testreg) == ZERO_EXTRACT
3890                || GET_CODE (testreg) == SIGN_EXTRACT
3891                || GET_CODE (testreg) == SUBREG)
3892           {
3893 #ifdef CANNOT_CHANGE_MODE_CLASS
3894             if (GET_CODE (testreg) == SUBREG
3895                 && GET_CODE (SUBREG_REG (testreg)) == REG
3896                 && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER)
3897               bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (testreg))
3898                                                 * MAX_MACHINE_MODE
3899                                                 + GET_MODE (testreg));
3900 #endif
3901
3902             /* Modifying a single register in an alternate mode
3903                does not use any of the old value.  But these other
3904                ways of storing in a register do use the old value.  */
3905             if (GET_CODE (testreg) == SUBREG
3906                 && !((REG_BYTES (SUBREG_REG (testreg))
3907                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD
3908                      > (REG_BYTES (testreg)
3909                         + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
3910               ;
3911             else
3912               mark_dest = 1;
3913
3914             testreg = XEXP (testreg, 0);
3915           }
3916
3917         /* If this is a store into a register or group of registers,
3918            recursively scan the value being stored.  */
3919
3920         if ((GET_CODE (testreg) == PARALLEL
3921              && GET_MODE (testreg) == BLKmode)
3922             || (GET_CODE (testreg) == REG
3923                 && (regno = REGNO (testreg),
3924                     ! (regno == FRAME_POINTER_REGNUM
3925                        && (! reload_completed || frame_pointer_needed)))
3926 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
3927                 && ! (regno == HARD_FRAME_POINTER_REGNUM
3928                       && (! reload_completed || frame_pointer_needed))
3929 #endif
3930 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3931                 && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
3932 #endif
3933                 ))
3934           {
3935             if (mark_dest)
3936               mark_used_regs (pbi, SET_DEST (x), cond, insn);
3937             mark_used_regs (pbi, SET_SRC (x), cond, insn);
3938             return;
3939           }
3940       }
3941       break;
3942
3943     case ASM_OPERANDS:
3944     case UNSPEC_VOLATILE:
3945     case TRAP_IF:
3946     case ASM_INPUT:
3947       {
3948         /* Traditional and volatile asm instructions must be considered to use
3949            and clobber all hard registers, all pseudo-registers and all of
3950            memory.  So must TRAP_IF and UNSPEC_VOLATILE operations.
3951
3952            Consider for instance a volatile asm that changes the fpu rounding
3953            mode.  An insn should not be moved across this even if it only uses
3954            pseudo-regs because it might give an incorrectly rounded result.
3955
3956            ?!? Unfortunately, marking all hard registers as live causes massive
3957            problems for the register allocator and marking all pseudos as live
3958            creates mountains of uninitialized variable warnings.
3959
3960            So for now, just clear the memory set list and mark any regs
3961            we can find in ASM_OPERANDS as used.  */
3962         if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
3963           {
3964             free_EXPR_LIST_list (&pbi->mem_set_list);
3965             pbi->mem_set_list_len = 0;
3966           }
3967
3968         /* For all ASM_OPERANDS, we must traverse the vector of input operands.
3969            We can not just fall through here since then we would be confused
3970            by the ASM_INPUT rtx inside ASM_OPERANDS, which do not indicate
3971            traditional asms unlike their normal usage.  */
3972         if (code == ASM_OPERANDS)
3973           {
3974             int j;
3975
3976             for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++)
3977               mark_used_regs (pbi, ASM_OPERANDS_INPUT (x, j), cond, insn);
3978           }
3979         break;
3980       }
3981
3982     case COND_EXEC:
3983       if (cond != NULL_RTX)
3984         abort ();
3985
3986       mark_used_regs (pbi, COND_EXEC_TEST (x), NULL_RTX, insn);
3987
3988       cond = COND_EXEC_TEST (x);
3989       x = COND_EXEC_CODE (x);
3990       goto retry;
3991
3992     case PHI:
3993       /* We _do_not_ want to scan operands of phi nodes.  Operands of
3994          a phi function are evaluated only when control reaches this
3995          block along a particular edge.  Therefore, regs that appear
3996          as arguments to phi should not be added to the global live at
3997          start.  */
3998       return;
3999
4000     default:
4001       break;
4002     }
4003
4004   /* Recursively scan the operands of this expression.  */
4005
4006   {
4007     const char * const fmt = GET_RTX_FORMAT (code);
4008     int i;
4009
4010     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4011       {
4012         if (fmt[i] == 'e')
4013           {
4014             /* Tail recursive case: save a function call level.  */
4015             if (i == 0)
4016               {
4017                 x = XEXP (x, 0);
4018                 goto retry;
4019               }
4020             mark_used_regs (pbi, XEXP (x, i), cond, insn);
4021           }
4022         else if (fmt[i] == 'E')
4023           {
4024             int j;
4025             for (j = 0; j < XVECLEN (x, i); j++)
4026               mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn);
4027           }
4028       }
4029   }
4030 }
4031 \f
4032 #ifdef AUTO_INC_DEC
4033
4034 static int
4035 try_pre_increment_1 (pbi, insn)
4036      struct propagate_block_info *pbi;
4037      rtx insn;
4038 {
4039   /* Find the next use of this reg.  If in same basic block,
4040      make it do pre-increment or pre-decrement if appropriate.  */
4041   rtx x = single_set (insn);
4042   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
4043                           * INTVAL (XEXP (SET_SRC (x), 1)));
4044   int regno = REGNO (SET_DEST (x));
4045   rtx y = pbi->reg_next_use[regno];
4046   if (y != 0
4047       && SET_DEST (x) != stack_pointer_rtx
4048       && BLOCK_NUM (y) == BLOCK_NUM (insn)
4049       /* Don't do this if the reg dies, or gets set in y; a standard addressing
4050          mode would be better.  */
4051       && ! dead_or_set_p (y, SET_DEST (x))
4052       && try_pre_increment (y, SET_DEST (x), amount))
4053     {
4054       /* We have found a suitable auto-increment and already changed
4055          insn Y to do it.  So flush this increment instruction.  */
4056       propagate_block_delete_insn (insn);
4057
4058       /* Count a reference to this reg for the increment insn we are
4059          deleting.  When a reg is incremented, spilling it is worse,
4060          so we want to make that less likely.  */
4061       if (regno >= FIRST_PSEUDO_REGISTER)
4062         {
4063           REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
4064           REG_N_SETS (regno)++;
4065         }
4066
4067       /* Flush any remembered memories depending on the value of
4068          the incremented register.  */
4069       invalidate_mems_from_set (pbi, SET_DEST (x));
4070
4071       return 1;
4072     }
4073   return 0;
4074 }
4075
4076 /* Try to change INSN so that it does pre-increment or pre-decrement
4077    addressing on register REG in order to add AMOUNT to REG.
4078    AMOUNT is negative for pre-decrement.
4079    Returns 1 if the change could be made.
4080    This checks all about the validity of the result of modifying INSN.  */
4081
4082 static int
4083 try_pre_increment (insn, reg, amount)
4084      rtx insn, reg;
4085      HOST_WIDE_INT amount;
4086 {
4087   rtx use;
4088
4089   /* Nonzero if we can try to make a pre-increment or pre-decrement.
4090      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
4091   int pre_ok = 0;
4092   /* Nonzero if we can try to make a post-increment or post-decrement.
4093      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
4094      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
4095      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
4096   int post_ok = 0;
4097
4098   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
4099   int do_post = 0;
4100
4101   /* From the sign of increment, see which possibilities are conceivable
4102      on this target machine.  */
4103   if (HAVE_PRE_INCREMENT && amount > 0)
4104     pre_ok = 1;
4105   if (HAVE_POST_INCREMENT && amount > 0)
4106     post_ok = 1;
4107
4108   if (HAVE_PRE_DECREMENT && amount < 0)
4109     pre_ok = 1;
4110   if (HAVE_POST_DECREMENT && amount < 0)
4111     post_ok = 1;
4112
4113   if (! (pre_ok || post_ok))
4114     return 0;
4115
4116   /* It is not safe to add a side effect to a jump insn
4117      because if the incremented register is spilled and must be reloaded
4118      there would be no way to store the incremented value back in memory.  */
4119
4120   if (GET_CODE (insn) == JUMP_INSN)
4121     return 0;
4122
4123   use = 0;
4124   if (pre_ok)
4125     use = find_use_as_address (PATTERN (insn), reg, 0);
4126   if (post_ok && (use == 0 || use == (rtx) (size_t) 1))
4127     {
4128       use = find_use_as_address (PATTERN (insn), reg, -amount);
4129       do_post = 1;
4130     }
4131
4132   if (use == 0 || use == (rtx) (size_t) 1)
4133     return 0;
4134
4135   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
4136     return 0;
4137
4138   /* See if this combination of instruction and addressing mode exists.  */
4139   if (! validate_change (insn, &XEXP (use, 0),
4140                          gen_rtx_fmt_e (amount > 0
4141                                         ? (do_post ? POST_INC : PRE_INC)
4142                                         : (do_post ? POST_DEC : PRE_DEC),
4143                                         Pmode, reg), 0))
4144     return 0;
4145
4146   /* Record that this insn now has an implicit side effect on X.  */
4147   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, reg, REG_NOTES (insn));
4148   return 1;
4149 }
4150
4151 #endif /* AUTO_INC_DEC */
4152 \f
4153 /* Find the place in the rtx X where REG is used as a memory address.
4154    Return the MEM rtx that so uses it.
4155    If PLUSCONST is nonzero, search instead for a memory address equivalent to
4156    (plus REG (const_int PLUSCONST)).
4157
4158    If such an address does not appear, return 0.
4159    If REG appears more than once, or is used other than in such an address,
4160    return (rtx) 1.  */
4161
4162 rtx
4163 find_use_as_address (x, reg, plusconst)
4164      rtx x;
4165      rtx reg;
4166      HOST_WIDE_INT plusconst;
4167 {
4168   enum rtx_code code = GET_CODE (x);
4169   const char * const fmt = GET_RTX_FORMAT (code);
4170   int i;
4171   rtx value = 0;
4172   rtx tem;
4173
4174   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
4175     return x;
4176
4177   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
4178       && XEXP (XEXP (x, 0), 0) == reg
4179       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
4180       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
4181     return x;
4182
4183   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
4184     {
4185       /* If REG occurs inside a MEM used in a bit-field reference,
4186          that is unacceptable.  */
4187       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
4188         return (rtx) (size_t) 1;
4189     }
4190
4191   if (x == reg)
4192     return (rtx) (size_t) 1;
4193
4194   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4195     {
4196       if (fmt[i] == 'e')
4197         {
4198           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
4199           if (value == 0)
4200             value = tem;
4201           else if (tem != 0)
4202             return (rtx) (size_t) 1;
4203         }
4204       else if (fmt[i] == 'E')
4205         {
4206           int j;
4207           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
4208             {
4209               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
4210               if (value == 0)
4211                 value = tem;
4212               else if (tem != 0)
4213                 return (rtx) (size_t) 1;
4214             }
4215         }
4216     }
4217
4218   return value;
4219 }
4220 \f
4221 /* Write information about registers and basic blocks into FILE.
4222    This is part of making a debugging dump.  */
4223
4224 void
4225 dump_regset (r, outf)
4226      regset r;
4227      FILE *outf;
4228 {
4229   int i;
4230   if (r == NULL)
4231     {
4232       fputs (" (nil)", outf);
4233       return;
4234     }
4235
4236   EXECUTE_IF_SET_IN_REG_SET (r, 0, i,
4237     {
4238       fprintf (outf, " %d", i);
4239       if (i < FIRST_PSEUDO_REGISTER)
4240         fprintf (outf, " [%s]",
4241                  reg_names[i]);
4242     });
4243 }
4244
4245 /* Print a human-readable representation of R on the standard error
4246    stream.  This function is designed to be used from within the
4247    debugger.  */
4248
4249 void
4250 debug_regset (r)
4251      regset r;
4252 {
4253   dump_regset (r, stderr);
4254   putc ('\n', stderr);
4255 }
4256
4257 /* Recompute register set/reference counts immediately prior to register
4258    allocation.
4259
4260    This avoids problems with set/reference counts changing to/from values
4261    which have special meanings to the register allocators.
4262
4263    Additionally, the reference counts are the primary component used by the
4264    register allocators to prioritize pseudos for allocation to hard regs.
4265    More accurate reference counts generally lead to better register allocation.
4266
4267    F is the first insn to be scanned.
4268
4269    LOOP_STEP denotes how much loop_depth should be incremented per
4270    loop nesting level in order to increase the ref count more for
4271    references in a loop.
4272
4273    It might be worthwhile to update REG_LIVE_LENGTH, REG_BASIC_BLOCK and
4274    possibly other information which is used by the register allocators.  */
4275
4276 void
4277 recompute_reg_usage (f, loop_step)
4278      rtx f ATTRIBUTE_UNUSED;
4279      int loop_step ATTRIBUTE_UNUSED;
4280 {
4281   allocate_reg_life_data ();
4282   update_life_info (NULL, UPDATE_LIFE_LOCAL, PROP_REG_INFO);
4283 }
4284
4285 /* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of
4286    blocks.  If BLOCKS is NULL, assume the universal set.  Returns a count
4287    of the number of registers that died.  */
4288
4289 int
4290 count_or_remove_death_notes (blocks, kill)
4291      sbitmap blocks;
4292      int kill;
4293 {
4294   int count = 0;
4295   basic_block bb;
4296
4297   FOR_EACH_BB_REVERSE (bb)
4298     {
4299       rtx insn;
4300
4301       if (blocks && ! TEST_BIT (blocks, bb->index))
4302         continue;
4303
4304       for (insn = bb->head;; insn = NEXT_INSN (insn))
4305         {
4306           if (INSN_P (insn))
4307             {
4308               rtx *pprev = &REG_NOTES (insn);
4309               rtx link = *pprev;
4310
4311               while (link)
4312                 {
4313                   switch (REG_NOTE_KIND (link))
4314                     {
4315                     case REG_DEAD:
4316                       if (GET_CODE (XEXP (link, 0)) == REG)
4317                         {
4318                           rtx reg = XEXP (link, 0);
4319                           int n;
4320
4321                           if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
4322                             n = 1;
4323                           else
4324                             n = HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg));
4325                           count += n;
4326                         }
4327                       /* Fall through.  */
4328
4329                     case REG_UNUSED:
4330                       if (kill)
4331                         {
4332                           rtx next = XEXP (link, 1);
4333                           free_EXPR_LIST_node (link);
4334                           *pprev = link = next;
4335                           break;
4336                         }
4337                       /* Fall through.  */
4338
4339                     default:
4340                       pprev = &XEXP (link, 1);
4341                       link = *pprev;
4342                       break;
4343                     }
4344                 }
4345             }
4346
4347           if (insn == bb->end)
4348             break;
4349         }
4350     }
4351
4352   return count;
4353 }
4354 /* Clear LOG_LINKS fields of insns in a selected blocks or whole chain
4355    if blocks is NULL.  */
4356
4357 static void
4358 clear_log_links (blocks)
4359      sbitmap blocks;
4360 {
4361   rtx insn;
4362   int i;
4363
4364   if (!blocks)
4365     {
4366       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
4367         if (INSN_P (insn))
4368           free_INSN_LIST_list (&LOG_LINKS (insn));
4369     }
4370   else
4371     EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i,
4372       {
4373         basic_block bb = BASIC_BLOCK (i);
4374
4375         for (insn = bb->head; insn != NEXT_INSN (bb->end);
4376              insn = NEXT_INSN (insn))
4377           if (INSN_P (insn))
4378             free_INSN_LIST_list (&LOG_LINKS (insn));
4379       });
4380 }
4381
4382 /* Given a register bitmap, turn on the bits in a HARD_REG_SET that
4383    correspond to the hard registers, if any, set in that map.  This
4384    could be done far more efficiently by having all sorts of special-cases
4385    with moving single words, but probably isn't worth the trouble.  */
4386
4387 void
4388 reg_set_to_hard_reg_set (to, from)
4389      HARD_REG_SET *to;
4390      bitmap from;
4391 {
4392   int i;
4393
4394   EXECUTE_IF_SET_IN_BITMAP
4395     (from, 0, i,
4396      {
4397        if (i >= FIRST_PSEUDO_REGISTER)
4398          return;
4399        SET_HARD_REG_BIT (*to, i);
4400      });
4401 }