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