OSDN Git Service

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