5c0c6d72ad40cae6b9e384a629d0146a7a34affe
[platform/upstream/gcc.git] / gcc / flow.c
1 /* Data flow analysis for GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001 Free Software Foundation, Inc.
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 /* This file contains the data flow analysis pass of the compiler.  It
23    computes data flow information which tells combine_instructions
24    which insns to consider combining and controls register allocation.
25
26    Additional data flow information that is too bulky to record is
27    generated during the analysis, and is used at that time to create
28    autoincrement and autodecrement addressing.
29
30    The first step is dividing the function into basic blocks.
31    find_basic_blocks does this.  Then life_analysis determines
32    where each register is live and where it is dead.
33
34    ** find_basic_blocks **
35
36    find_basic_blocks divides the current function's rtl into basic
37    blocks and constructs the CFG.  The blocks are recorded in the
38    basic_block_info array; the CFG exists in the edge structures
39    referenced by the blocks.
40
41    find_basic_blocks also finds any unreachable loops and deletes them.
42
43    ** life_analysis **
44
45    life_analysis is called immediately after find_basic_blocks.
46    It uses the basic block information to determine where each
47    hard or pseudo register is live.
48
49    ** live-register info **
50
51    The information about where each register is live is in two parts:
52    the REG_NOTES of insns, and the vector basic_block->global_live_at_start.
53
54    basic_block->global_live_at_start has an element for each basic
55    block, and the element is a bit-vector with a bit for each hard or
56    pseudo register.  The bit is 1 if the register is live at the
57    beginning of the basic block.
58
59    Two types of elements can be added to an insn's REG_NOTES.
60    A REG_DEAD note is added to an insn's REG_NOTES for any register
61    that meets both of two conditions:  The value in the register is not
62    needed in subsequent insns and the insn does not replace the value in
63    the register (in the case of multi-word hard registers, the value in
64    each register must be replaced by the insn to avoid a REG_DEAD note).
65
66    In the vast majority of cases, an object in a REG_DEAD note will be
67    used somewhere in the insn.  The (rare) exception to this is if an
68    insn uses a multi-word hard register and only some of the registers are
69    needed in subsequent insns.  In that case, REG_DEAD notes will be
70    provided for those hard registers that are not subsequently needed.
71    Partial REG_DEAD notes of this type do not occur when an insn sets
72    only some of the hard registers used in such a multi-word operand;
73    omitting REG_DEAD notes for objects stored in an insn is optional and
74    the desire to do so does not justify the complexity of the partial
75    REG_DEAD notes.
76
77    REG_UNUSED notes are added for each register that is set by the insn
78    but is unused subsequently (if every register set by the insn is unused
79    and the insn does not reference memory or have some other side-effect,
80    the insn is deleted instead).  If only part of a multi-word hard
81    register is used in a subsequent insn, REG_UNUSED notes are made for
82    the parts that will not be used.
83
84    To determine which registers are live after any insn, one can
85    start from the beginning of the basic block and scan insns, noting
86    which registers are set by each insn and which die there.
87
88    ** Other actions of life_analysis **
89
90    life_analysis sets up the LOG_LINKS fields of insns because the
91    information needed to do so is readily available.
92
93    life_analysis deletes insns whose only effect is to store a value
94    that is never used.
95
96    life_analysis notices cases where a reference to a register as
97    a memory address can be combined with a preceding or following
98    incrementation or decrementation of the register.  The separate
99    instruction to increment or decrement is deleted and the address
100    is changed to a POST_INC or similar rtx.
101
102    Each time an incrementing or decrementing address is created,
103    a REG_INC element is added to the insn's REG_NOTES list.
104
105    life_analysis fills in certain vectors containing information about
106    register usage: REG_N_REFS, REG_N_DEATHS, REG_N_SETS, REG_LIVE_LENGTH,
107    REG_N_CALLS_CROSSED and REG_BASIC_BLOCK.
108
109    life_analysis sets current_function_sp_is_unchanging if the function
110    doesn't modify the stack pointer.  */
111
112 /* TODO:
113
114    Split out from life_analysis:
115         - local property discovery (bb->local_live, bb->local_set)
116         - global property computation
117         - log links creation
118         - pre/post modify transformation
119 */
120 \f
121 #include "config.h"
122 #include "system.h"
123 #include "tree.h"
124 #include "rtl.h"
125 #include "tm_p.h"
126 #include "hard-reg-set.h"
127 #include "basic-block.h"
128 #include "insn-config.h"
129 #include "regs.h"
130 #include "flags.h"
131 #include "output.h"
132 #include "function.h"
133 #include "except.h"
134 #include "toplev.h"
135 #include "recog.h"
136 #include "expr.h"
137 #include "ssa.h"
138
139 #include "obstack.h"
140 #include "splay-tree.h"
141
142 #define obstack_chunk_alloc xmalloc
143 #define obstack_chunk_free free
144
145 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
146    the stack pointer does not matter.  The value is tested only in
147    functions that have frame pointers.
148    No definition is equivalent to always zero.  */
149 #ifndef EXIT_IGNORE_STACK
150 #define EXIT_IGNORE_STACK 0
151 #endif
152
153 #ifndef HAVE_epilogue
154 #define HAVE_epilogue 0
155 #endif
156 #ifndef HAVE_prologue
157 #define HAVE_prologue 0
158 #endif
159 #ifndef HAVE_sibcall_epilogue
160 #define HAVE_sibcall_epilogue 0
161 #endif
162
163 #ifndef LOCAL_REGNO
164 #define LOCAL_REGNO(REGNO)  0
165 #endif
166 #ifndef EPILOGUE_USES
167 #define EPILOGUE_USES(REGNO)  0
168 #endif
169
170 #ifdef HAVE_conditional_execution
171 #ifndef REVERSE_CONDEXEC_PREDICATES_P
172 #define REVERSE_CONDEXEC_PREDICATES_P(x, y) ((x) == reverse_condition (y))
173 #endif
174 #endif
175
176 /* The obstack on which the flow graph components are allocated.  */
177
178 struct obstack flow_obstack;
179 static char *flow_firstobj;
180
181 /* Number of basic blocks in the current function.  */
182
183 int n_basic_blocks;
184
185 /* Number of edges in the current function.  */
186
187 int n_edges;
188
189 /* The basic block array.  */
190
191 varray_type basic_block_info;
192
193 /* The special entry and exit blocks.  */
194
195 struct basic_block_def entry_exit_blocks[2]
196 = {{NULL,                       /* head */
197     NULL,                       /* end */
198     NULL,                       /* pred */
199     NULL,                       /* succ */
200     NULL,                       /* local_set */
201     NULL,                       /* cond_local_set */
202     NULL,                       /* global_live_at_start */
203     NULL,                       /* global_live_at_end */
204     NULL,                       /* aux */
205     ENTRY_BLOCK,                /* index */
206     0,                          /* loop_depth */
207     0,                          /* count */
208     0                           /* frequency */
209   },
210   {
211     NULL,                       /* head */
212     NULL,                       /* end */
213     NULL,                       /* pred */
214     NULL,                       /* succ */
215     NULL,                       /* local_set */
216     NULL,                       /* cond_local_set */
217     NULL,                       /* global_live_at_start */
218     NULL,                       /* global_live_at_end */
219     NULL,                       /* aux */
220     EXIT_BLOCK,                 /* index */
221     0,                          /* loop_depth */
222     0,                          /* count */
223     0                           /* frequency */
224   }
225 };
226
227 /* Nonzero if the second flow pass has completed.  */
228 int flow2_completed;
229
230 /* Maximum register number used in this function, plus one.  */
231
232 int max_regno;
233
234 /* Indexed by n, giving various register information */
235
236 varray_type reg_n_info;
237
238 /* Size of a regset for the current function,
239    in (1) bytes and (2) elements.  */
240
241 int regset_bytes;
242 int regset_size;
243
244 /* Regset of regs live when calls to `setjmp'-like functions happen.  */
245 /* ??? Does this exist only for the setjmp-clobbered warning message?  */
246
247 regset regs_live_at_setjmp;
248
249 /* List made of EXPR_LIST rtx's which gives pairs of pseudo registers
250    that have to go in the same hard reg.
251    The first two regs in the list are a pair, and the next two
252    are another pair, etc.  */
253 rtx regs_may_share;
254
255 /* Callback that determines if it's ok for a function to have no
256    noreturn attribute.  */
257 int (*lang_missing_noreturn_ok_p) PARAMS ((tree));
258
259 /* Set of registers that may be eliminable.  These are handled specially
260    in updating regs_ever_live.  */
261
262 static HARD_REG_SET elim_reg_set;
263
264 /* The basic block structure for every insn, indexed by uid.  */
265
266 varray_type basic_block_for_insn;
267
268 /* The labels mentioned in non-jump rtl.  Valid during find_basic_blocks.  */
269 /* ??? Should probably be using LABEL_NUSES instead.  It would take a
270    bit of surgery to be able to use or co-opt the routines in jump.  */
271
272 static rtx label_value_list;
273 static rtx tail_recursion_label_list;
274
275 /* Holds information for tracking conditional register life information.  */
276 struct reg_cond_life_info
277 {
278   /* A boolean expression of conditions under which a register is dead.  */
279   rtx condition;
280   /* Conditions under which a register is dead at the basic block end.  */
281   rtx orig_condition;
282
283   /* A boolean expression of conditions under which a register has been
284      stored into.  */
285   rtx stores;
286
287   /* ??? Could store mask of bytes that are dead, so that we could finally
288      track lifetimes of multi-word registers accessed via subregs.  */
289 };
290
291 /* For use in communicating between propagate_block and its subroutines.
292    Holds all information needed to compute life and def-use information.  */
293
294 struct propagate_block_info
295 {
296   /* The basic block we're considering.  */
297   basic_block bb;
298
299   /* Bit N is set if register N is conditionally or unconditionally live.  */
300   regset reg_live;
301
302   /* Bit N is set if register N is set this insn.  */
303   regset new_set;
304
305   /* Element N is the next insn that uses (hard or pseudo) register N
306      within the current basic block; or zero, if there is no such insn.  */
307   rtx *reg_next_use;
308
309   /* Contains a list of all the MEMs we are tracking for dead store
310      elimination.  */
311   rtx mem_set_list;
312
313   /* If non-null, record the set of registers set unconditionally in the
314      basic block.  */
315   regset local_set;
316
317   /* If non-null, record the set of registers set conditionally in the
318      basic block.  */
319   regset cond_local_set;
320
321 #ifdef HAVE_conditional_execution
322   /* Indexed by register number, holds a reg_cond_life_info for each
323      register that is not unconditionally live or dead.  */
324   splay_tree reg_cond_dead;
325
326   /* Bit N is set if register N is in an expression in reg_cond_dead.  */
327   regset reg_cond_reg;
328 #endif
329
330   /* The length of mem_set_list.  */
331   int mem_set_list_len;
332
333   /* Non-zero if the value of CC0 is live.  */
334   int cc0_live;
335
336   /* Flags controling the set of information propagate_block collects.  */
337   int flags;
338 };
339
340 /* Maximum length of pbi->mem_set_list before we start dropping
341    new elements on the floor.  */
342 #define MAX_MEM_SET_LIST_LEN    100
343
344 /* Store the data structures necessary for depth-first search.  */
345 struct depth_first_search_dsS {
346   /* stack for backtracking during the algorithm */
347   basic_block *stack;
348
349   /* number of edges in the stack.  That is, positions 0, ..., sp-1
350      have edges.  */
351   unsigned int sp;
352
353   /* record of basic blocks already seen by depth-first search */
354   sbitmap visited_blocks;
355 };
356 typedef struct depth_first_search_dsS *depth_first_search_ds;
357
358 /* Have print_rtl_and_abort give the same information that fancy_abort
359    does.  */
360 #define print_rtl_and_abort() \
361   print_rtl_and_abort_fcn (__FILE__, __LINE__, __FUNCTION__)
362
363 /* Forward declarations */
364 static int count_basic_blocks           PARAMS ((rtx));
365 static void find_basic_blocks_1         PARAMS ((rtx));
366 static rtx find_label_refs              PARAMS ((rtx, rtx));
367 static void make_edges                  PARAMS ((rtx));
368 static void make_label_edge             PARAMS ((sbitmap *, basic_block,
369                                                  rtx, int));
370 static void make_eh_edge                PARAMS ((sbitmap *, basic_block, rtx));
371
372 static void commit_one_edge_insertion   PARAMS ((edge));
373
374 static void delete_unreachable_blocks   PARAMS ((void));
375 static int can_delete_note_p            PARAMS ((rtx));
376 static void expunge_block               PARAMS ((basic_block));
377 static int can_delete_label_p           PARAMS ((rtx));
378 static int tail_recursion_label_p       PARAMS ((rtx));
379 static int merge_blocks_move_predecessor_nojumps PARAMS ((basic_block,
380                                                           basic_block));
381 static int merge_blocks_move_successor_nojumps PARAMS ((basic_block,
382                                                         basic_block));
383 static int merge_blocks                 PARAMS ((edge,basic_block,basic_block));
384 static void try_merge_blocks            PARAMS ((void));
385 static void tidy_fallthru_edges         PARAMS ((void));
386 static int verify_wide_reg_1            PARAMS ((rtx *, void *));
387 static void verify_wide_reg             PARAMS ((int, rtx, rtx));
388 static void verify_local_live_at_start  PARAMS ((regset, basic_block));
389 static int noop_move_p                  PARAMS ((rtx));
390 static void delete_noop_moves           PARAMS ((rtx));
391 static void notice_stack_pointer_modification_1 PARAMS ((rtx, rtx, void *));
392 static void notice_stack_pointer_modification PARAMS ((rtx));
393 static void mark_reg                    PARAMS ((rtx, void *));
394 static void mark_regs_live_at_end       PARAMS ((regset));
395 static int set_phi_alternative_reg      PARAMS ((rtx, int, int, void *));
396 static void calculate_global_regs_live  PARAMS ((sbitmap, sbitmap, int));
397 static void propagate_block_delete_insn PARAMS ((basic_block, rtx));
398 static rtx propagate_block_delete_libcall PARAMS ((basic_block, rtx, rtx));
399 static int insn_dead_p                  PARAMS ((struct propagate_block_info *,
400                                                  rtx, int, rtx));
401 static int libcall_dead_p               PARAMS ((struct propagate_block_info *,
402                                                  rtx, rtx));
403 static void mark_set_regs               PARAMS ((struct propagate_block_info *,
404                                                  rtx, rtx));
405 static void mark_set_1                  PARAMS ((struct propagate_block_info *,
406                                                  enum rtx_code, rtx, rtx,
407                                                  rtx, int));
408 #ifdef HAVE_conditional_execution
409 static int mark_regno_cond_dead         PARAMS ((struct propagate_block_info *,
410                                                  int, rtx));
411 static void free_reg_cond_life_info     PARAMS ((splay_tree_value));
412 static int flush_reg_cond_reg_1         PARAMS ((splay_tree_node, void *));
413 static void flush_reg_cond_reg          PARAMS ((struct propagate_block_info *,
414                                                  int));
415 static rtx elim_reg_cond                PARAMS ((rtx, unsigned int));
416 static rtx ior_reg_cond                 PARAMS ((rtx, rtx, int));
417 static rtx not_reg_cond                 PARAMS ((rtx));
418 static rtx and_reg_cond                 PARAMS ((rtx, rtx, int));
419 #endif
420 #ifdef AUTO_INC_DEC
421 static void attempt_auto_inc            PARAMS ((struct propagate_block_info *,
422                                                  rtx, rtx, rtx, rtx, rtx));
423 static void find_auto_inc               PARAMS ((struct propagate_block_info *,
424                                                  rtx, rtx));
425 static int try_pre_increment_1          PARAMS ((struct propagate_block_info *,
426                                                  rtx));
427 static int try_pre_increment            PARAMS ((rtx, rtx, HOST_WIDE_INT));
428 #endif
429 static void mark_used_reg               PARAMS ((struct propagate_block_info *,
430                                                  rtx, rtx, rtx));
431 static void mark_used_regs              PARAMS ((struct propagate_block_info *,
432                                                  rtx, rtx, rtx));
433 void dump_flow_info                     PARAMS ((FILE *));
434 void debug_flow_info                    PARAMS ((void));
435 static void print_rtl_and_abort_fcn     PARAMS ((const char *, int,
436                                                  const char *))
437                                         ATTRIBUTE_NORETURN;
438
439 static void invalidate_mems_from_autoinc PARAMS ((struct propagate_block_info *,
440                                                   rtx));
441 static void invalidate_mems_from_set    PARAMS ((struct propagate_block_info *,
442                                                  rtx));
443 static void remove_fake_successors      PARAMS ((basic_block));
444 static void flow_nodes_print            PARAMS ((const char *, const sbitmap,
445                                                  FILE *));
446 static void flow_edge_list_print        PARAMS ((const char *, const edge *,
447                                                  int, FILE *));
448 static void flow_loops_cfg_dump         PARAMS ((const struct loops *,
449                                                  FILE *));
450 static int flow_loop_nested_p           PARAMS ((struct loop *,
451                                                  struct loop *));
452 static int flow_loop_entry_edges_find   PARAMS ((basic_block, const sbitmap,
453                                                  edge **));
454 static int flow_loop_exit_edges_find    PARAMS ((const sbitmap, edge **));
455 static int flow_loop_nodes_find PARAMS ((basic_block, basic_block, sbitmap));
456 static int flow_depth_first_order_compute PARAMS ((int *, int *));
457 static void flow_dfs_compute_reverse_init
458   PARAMS ((depth_first_search_ds));
459 static void flow_dfs_compute_reverse_add_bb
460   PARAMS ((depth_first_search_ds, basic_block));
461 static basic_block flow_dfs_compute_reverse_execute
462   PARAMS ((depth_first_search_ds));
463 static void flow_dfs_compute_reverse_finish
464   PARAMS ((depth_first_search_ds));
465 static void flow_loop_pre_header_scan PARAMS ((struct loop *));
466 static basic_block flow_loop_pre_header_find PARAMS ((basic_block,
467                                                       const sbitmap *));
468 static void flow_loop_tree_node_add     PARAMS ((struct loop *, struct loop *));
469 static void flow_loops_tree_build       PARAMS ((struct loops *));
470 static int flow_loop_level_compute      PARAMS ((struct loop *, int));
471 static int flow_loops_level_compute     PARAMS ((struct loops *));
472 static void allocate_bb_life_data       PARAMS ((void));
473 static void find_sub_basic_blocks       PARAMS ((basic_block));
474 \f
475 /* Find basic blocks of the current function.
476    F is the first insn of the function and NREGS the number of register
477    numbers in use.  */
478
479 void
480 find_basic_blocks (f, nregs, file)
481      rtx f;
482      int nregs ATTRIBUTE_UNUSED;
483      FILE *file ATTRIBUTE_UNUSED;
484 {
485   int max_uid;
486
487   /* Flush out existing data.  */
488   if (basic_block_info != NULL)
489     {
490       int i;
491
492       clear_edges ();
493
494       /* Clear bb->aux on all extant basic blocks.  We'll use this as a
495          tag for reuse during create_basic_block, just in case some pass
496          copies around basic block notes improperly.  */
497       for (i = 0; i < n_basic_blocks; ++i)
498         BASIC_BLOCK (i)->aux = NULL;
499
500       VARRAY_FREE (basic_block_info);
501     }
502
503   n_basic_blocks = count_basic_blocks (f);
504
505   /* Size the basic block table.  The actual structures will be allocated
506      by find_basic_blocks_1, since we want to keep the structure pointers
507      stable across calls to find_basic_blocks.  */
508   /* ??? This whole issue would be much simpler if we called find_basic_blocks
509      exactly once, and thereafter we don't have a single long chain of
510      instructions at all until close to the end of compilation when we
511      actually lay them out.  */
512
513   VARRAY_BB_INIT (basic_block_info, n_basic_blocks, "basic_block_info");
514
515   find_basic_blocks_1 (f);
516
517   /* Record the block to which an insn belongs.  */
518   /* ??? This should be done another way, by which (perhaps) a label is
519      tagged directly with the basic block that it starts.  It is used for
520      more than that currently, but IMO that is the only valid use.  */
521
522   max_uid = get_max_uid ();
523 #ifdef AUTO_INC_DEC
524   /* Leave space for insns life_analysis makes in some cases for auto-inc.
525      These cases are rare, so we don't need too much space.  */
526   max_uid += max_uid / 10;
527 #endif
528
529   compute_bb_for_insn (max_uid);
530
531   /* Discover the edges of our cfg.  */
532   make_edges (label_value_list);
533
534   /* Do very simple cleanup now, for the benefit of code that runs between
535      here and cleanup_cfg, e.g. thread_prologue_and_epilogue_insns.  */
536   tidy_fallthru_edges ();
537
538   mark_critical_edges ();
539
540 #ifdef ENABLE_CHECKING
541   verify_flow_info ();
542 #endif
543 }
544
545 void
546 check_function_return_warnings ()
547 {
548   if (warn_missing_noreturn
549       && !TREE_THIS_VOLATILE (cfun->decl)
550       && EXIT_BLOCK_PTR->pred == NULL
551       && (lang_missing_noreturn_ok_p
552           && !lang_missing_noreturn_ok_p (cfun->decl)))
553     warning ("function might be possible candidate for attribute `noreturn'");
554
555   /* If we have a path to EXIT, then we do return.  */
556   if (TREE_THIS_VOLATILE (cfun->decl)
557       && EXIT_BLOCK_PTR->pred != NULL)
558     warning ("`noreturn' function does return");
559
560   /* If the clobber_return_insn appears in some basic block, then we
561      do reach the end without returning a value.  */
562   else if (warn_return_type
563            && cfun->x_clobber_return_insn != NULL
564            && EXIT_BLOCK_PTR->pred != NULL)
565     {
566       int max_uid = get_max_uid ();
567
568       /* If clobber_return_insn was excised by jump1, then renumber_insns
569          can make max_uid smaller than the number still recorded in our rtx.
570          That's fine, since this is a quick way of verifying that the insn
571          is no longer in the chain.  */
572       if (INSN_UID (cfun->x_clobber_return_insn) < max_uid)
573         {
574           /* Recompute insn->block mapping, since the initial mapping is
575              set before we delete unreachable blocks.  */
576           compute_bb_for_insn (max_uid);
577
578           if (BLOCK_FOR_INSN (cfun->x_clobber_return_insn) != NULL)
579             warning ("control reaches end of non-void function");
580         }
581     }
582 }
583
584 /* Count the basic blocks of the function.  */
585
586 static int
587 count_basic_blocks (f)
588      rtx f;
589 {
590   register rtx insn;
591   register RTX_CODE prev_code;
592   register int count = 0;
593   int saw_abnormal_edge = 0;
594
595   prev_code = JUMP_INSN;
596   for (insn = f; insn; insn = NEXT_INSN (insn))
597     {
598       enum rtx_code code = GET_CODE (insn);
599
600       if (code == CODE_LABEL
601           || (GET_RTX_CLASS (code) == 'i'
602               && (prev_code == JUMP_INSN
603                   || prev_code == BARRIER
604                   || saw_abnormal_edge)))
605         {
606           saw_abnormal_edge = 0;
607           count++;
608         }
609
610       /* Record whether this insn created an edge.  */
611       if (code == CALL_INSN)
612         {
613           rtx note;
614
615           /* If there is a nonlocal goto label and the specified
616              region number isn't -1, we have an edge.  */
617           if (nonlocal_goto_handler_labels
618               && ((note = find_reg_note (insn, REG_EH_REGION, NULL_RTX)) == 0
619                   || INTVAL (XEXP (note, 0)) >= 0))
620             saw_abnormal_edge = 1;
621
622           else if (can_throw_internal (insn))
623             saw_abnormal_edge = 1;
624         }
625       else if (flag_non_call_exceptions
626                && code == INSN
627                && can_throw_internal (insn))
628         saw_abnormal_edge = 1;
629
630       if (code != NOTE)
631         prev_code = code;
632     }
633
634   /* The rest of the compiler works a bit smoother when we don't have to
635      check for the edge case of do-nothing functions with no basic blocks.  */
636   if (count == 0)
637     {
638       emit_insn (gen_rtx_USE (VOIDmode, const0_rtx));
639       count = 1;
640     }
641
642   return count;
643 }
644
645 /* Scan a list of insns for labels referred to other than by jumps.
646    This is used to scan the alternatives of a call placeholder.  */
647 static rtx
648 find_label_refs (f, lvl)
649      rtx f;
650      rtx lvl;
651 {
652   rtx insn;
653
654   for (insn = f; insn; insn = NEXT_INSN (insn))
655     if (INSN_P (insn) && GET_CODE (insn) != JUMP_INSN)
656       {
657         rtx note;
658
659         /* Make a list of all labels referred to other than by jumps
660            (which just don't have the REG_LABEL notes).
661
662            Make a special exception for labels followed by an ADDR*VEC,
663            as this would be a part of the tablejump setup code.
664
665            Make a special exception to registers loaded with label
666            values just before jump insns that use them.  */
667
668         for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
669           if (REG_NOTE_KIND (note) == REG_LABEL)
670             {
671               rtx lab = XEXP (note, 0), next;
672
673               if ((next = next_nonnote_insn (lab)) != NULL
674                        && GET_CODE (next) == JUMP_INSN
675                        && (GET_CODE (PATTERN (next)) == ADDR_VEC
676                            || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
677                 ;
678               else if (GET_CODE (lab) == NOTE)
679                 ;
680               else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
681                        && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab))
682                 ;
683               else
684                 lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl);
685             }
686       }
687
688   return lvl;
689 }
690
691 /* Assume that someone emitted code with control flow instructions to the
692    basic block.  Update the data structure.  */
693 static void
694 find_sub_basic_blocks (bb)
695      basic_block bb;
696 {
697   rtx first_insn = bb->head, insn;
698   rtx end = bb->end;
699   edge succ_list = bb->succ;
700   rtx jump_insn = NULL_RTX;
701   int created = 0;
702   int barrier = 0;
703   edge falltru = 0;
704   basic_block first_bb = bb, last_bb;
705   int i;
706
707   if (GET_CODE (first_insn) == LABEL_REF)
708     first_insn = NEXT_INSN (first_insn);
709   first_insn = NEXT_INSN (first_insn);
710   bb->succ = NULL;
711
712   insn = first_insn;
713   /* Scan insn chain and try to find new basic block boundaries.  */
714   while (insn != end)
715     {
716       enum rtx_code code = GET_CODE (insn);
717       switch (code)
718         {
719         case JUMP_INSN:
720           /* We need some special care for those expressions.  */
721           if (GET_CODE (PATTERN (insn)) == ADDR_VEC
722               || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
723             abort();
724           jump_insn = insn;
725           break;
726         case BARRIER:
727           if (!jump_insn)
728             abort ();
729           barrier = 1;
730           break;
731         /* On code label, split current basic block.  */
732         case CODE_LABEL:
733           falltru = split_block (bb, PREV_INSN (insn));
734           if (jump_insn)
735             bb->end = jump_insn;
736           bb = falltru->dest;
737           if (barrier)
738             remove_edge (falltru);
739           barrier = 0;
740           jump_insn = 0;
741           created = 1;
742           if (LABEL_ALTERNATE_NAME (insn))
743             make_edge (NULL, ENTRY_BLOCK_PTR, bb, 0);
744           break;
745         case INSN:
746           /* In case we've previously split insn on the JUMP_INSN, move the
747              block header to proper place.  */
748           if (jump_insn)
749             {
750               falltru = split_block (bb, PREV_INSN (insn));
751               bb->end = jump_insn;
752               bb = falltru->dest;
753               if (barrier)
754                 abort ();
755               jump_insn = 0;
756             }
757         default:
758           break;
759         }
760       insn = NEXT_INSN (insn);
761     }
762   /* Last basic block must end in the original BB end.  */
763   if (jump_insn)
764     abort ();
765
766   /* Wire in the original edges for last basic block.  */
767   if (created)
768     {
769       bb->succ = succ_list;
770       while (succ_list)
771         succ_list->src = bb, succ_list = succ_list->succ_next;
772     }
773   else
774     bb->succ = succ_list;
775
776   /* Now re-scan and wire in all edges.  This expect simple (conditional)
777      jumps at the end of each new basic blocks.  */
778   last_bb = bb;
779   for (i = first_bb->index; i < last_bb->index; i++)
780     {
781       bb = BASIC_BLOCK (i);
782       if (GET_CODE (bb->end) == JUMP_INSN)
783         {
784           mark_jump_label (PATTERN (bb->end), bb->end, 0, 0);
785           make_label_edge (NULL, bb, JUMP_LABEL (bb->end), 0);
786         }
787       insn = NEXT_INSN (insn);
788     }
789 }
790
791 /* Find all basic blocks of the function whose first insn is F.
792
793    Collect and return a list of labels whose addresses are taken.  This
794    will be used in make_edges for use with computed gotos.  */
795
796 static void
797 find_basic_blocks_1 (f)
798      rtx f;
799 {
800   register rtx insn, next;
801   int i = 0;
802   rtx bb_note = NULL_RTX;
803   rtx lvl = NULL_RTX;
804   rtx trll = NULL_RTX;
805   rtx head = NULL_RTX;
806   rtx end = NULL_RTX;
807
808   /* We process the instructions in a slightly different way than we did
809      previously.  This is so that we see a NOTE_BASIC_BLOCK after we have
810      closed out the previous block, so that it gets attached at the proper
811      place.  Since this form should be equivalent to the previous,
812      count_basic_blocks continues to use the old form as a check.  */
813
814   for (insn = f; insn; insn = next)
815     {
816       enum rtx_code code = GET_CODE (insn);
817
818       next = NEXT_INSN (insn);
819
820       switch (code)
821         {
822         case NOTE:
823           {
824             int kind = NOTE_LINE_NUMBER (insn);
825
826             /* Look for basic block notes with which to keep the
827                basic_block_info pointers stable.  Unthread the note now;
828                we'll put it back at the right place in create_basic_block.
829                Or not at all if we've already found a note in this block.  */
830             if (kind == NOTE_INSN_BASIC_BLOCK)
831               {
832                 if (bb_note == NULL_RTX)
833                   bb_note = insn;
834                 else
835                   next = flow_delete_insn (insn);
836               }
837             break;
838           }
839
840         case CODE_LABEL:
841           /* A basic block starts at a label.  If we've closed one off due
842              to a barrier or some such, no need to do it again.  */
843           if (head != NULL_RTX)
844             {
845               /* While we now have edge lists with which other portions of
846                  the compiler might determine a call ending a basic block
847                  does not imply an abnormal edge, it will be a bit before
848                  everything can be updated.  So continue to emit a noop at
849                  the end of such a block.  */
850               if (GET_CODE (end) == CALL_INSN && ! SIBLING_CALL_P (end))
851                 {
852                   rtx nop = gen_rtx_USE (VOIDmode, const0_rtx);
853                   end = emit_insn_after (nop, end);
854                 }
855
856               create_basic_block (i++, head, end, bb_note);
857               bb_note = NULL_RTX;
858             }
859
860           head = end = insn;
861           break;
862
863         case JUMP_INSN:
864           /* A basic block ends at a jump.  */
865           if (head == NULL_RTX)
866             head = insn;
867           else
868             {
869               /* ??? Make a special check for table jumps.  The way this
870                  happens is truly and amazingly gross.  We are about to
871                  create a basic block that contains just a code label and
872                  an addr*vec jump insn.  Worse, an addr_diff_vec creates
873                  its own natural loop.
874
875                  Prevent this bit of brain damage, pasting things together
876                  correctly in make_edges.
877
878                  The correct solution involves emitting the table directly
879                  on the tablejump instruction as a note, or JUMP_LABEL.  */
880
881               if (GET_CODE (PATTERN (insn)) == ADDR_VEC
882                   || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
883                 {
884                   head = end = NULL;
885                   n_basic_blocks--;
886                   break;
887                 }
888             }
889           end = insn;
890           goto new_bb_inclusive;
891
892         case BARRIER:
893           /* A basic block ends at a barrier.  It may be that an unconditional
894              jump already closed the basic block -- no need to do it again.  */
895           if (head == NULL_RTX)
896             break;
897
898           /* While we now have edge lists with which other portions of the
899              compiler might determine a call ending a basic block does not
900              imply an abnormal edge, it will be a bit before everything can
901              be updated.  So continue to emit a noop at the end of such a
902              block.  */
903           if (GET_CODE (end) == CALL_INSN && ! SIBLING_CALL_P (end))
904             {
905               rtx nop = gen_rtx_USE (VOIDmode, const0_rtx);
906               end = emit_insn_after (nop, end);
907             }
908           goto new_bb_exclusive;
909
910         case CALL_INSN:
911           {
912             /* Record whether this call created an edge.  */
913             rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
914             int region = (note ? INTVAL (XEXP (note, 0)) : 0);
915
916             if (GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
917               {
918                 /* Scan each of the alternatives for label refs.  */
919                 lvl = find_label_refs (XEXP (PATTERN (insn), 0), lvl);
920                 lvl = find_label_refs (XEXP (PATTERN (insn), 1), lvl);
921                 lvl = find_label_refs (XEXP (PATTERN (insn), 2), lvl);
922                 /* Record its tail recursion label, if any.  */
923                 if (XEXP (PATTERN (insn), 3) != NULL_RTX)
924                   trll = alloc_EXPR_LIST (0, XEXP (PATTERN (insn), 3), trll);
925               }
926
927             /* A basic block ends at a call that can either throw or
928                do a non-local goto.  */
929             if ((nonlocal_goto_handler_labels && region >= 0)
930                 || can_throw_internal (insn))
931               {
932               new_bb_inclusive:
933                 if (head == NULL_RTX)
934                   head = insn;
935                 end = insn;
936
937               new_bb_exclusive:
938                 create_basic_block (i++, head, end, bb_note);
939                 head = end = NULL_RTX;
940                 bb_note = NULL_RTX;
941                 break;
942               }
943           }
944           /* Fall through.  */
945
946         case INSN:
947           /* Non-call exceptions generate new blocks just like calls.  */
948           if (flag_non_call_exceptions && can_throw_internal (insn))
949             goto new_bb_inclusive;
950
951           if (head == NULL_RTX)
952             head = insn;
953           end = insn;
954           break;
955
956         default:
957           abort ();
958         }
959
960       if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN)
961         {
962           rtx note;
963
964           /* Make a list of all labels referred to other than by jumps.
965
966              Make a special exception for labels followed by an ADDR*VEC,
967              as this would be a part of the tablejump setup code.
968
969              Make a special exception to registers loaded with label
970              values just before jump insns that use them.  */
971
972           for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
973             if (REG_NOTE_KIND (note) == REG_LABEL)
974               {
975                 rtx lab = XEXP (note, 0), next;
976
977                 if ((next = next_nonnote_insn (lab)) != NULL
978                          && GET_CODE (next) == JUMP_INSN
979                          && (GET_CODE (PATTERN (next)) == ADDR_VEC
980                              || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
981                   ;
982                 else if (GET_CODE (lab) == NOTE)
983                   ;
984                 else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
985                          && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab))
986                   ;
987                 else
988                   lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl);
989               }
990         }
991     }
992
993   if (head != NULL_RTX)
994     create_basic_block (i++, head, end, bb_note);
995   else if (bb_note)
996     flow_delete_insn (bb_note);
997
998   if (i != n_basic_blocks)
999     abort ();
1000
1001   label_value_list = lvl;
1002   tail_recursion_label_list = trll;
1003 }
1004
1005 /* Tidy the CFG by deleting unreachable code and whatnot.  */
1006
1007 void
1008 cleanup_cfg ()
1009 {
1010   delete_unreachable_blocks ();
1011   try_merge_blocks ();
1012   mark_critical_edges ();
1013
1014   /* Kill the data we won't maintain.  */
1015   free_EXPR_LIST_list (&label_value_list);
1016   free_EXPR_LIST_list (&tail_recursion_label_list);
1017 }
1018
1019 /* Create a new basic block consisting of the instructions between
1020    HEAD and END inclusive.  Reuses the note and basic block struct
1021    in BB_NOTE, if any.  */
1022
1023 void
1024 create_basic_block (index, head, end, bb_note)
1025      int index;
1026      rtx head, end, bb_note;
1027 {
1028   basic_block bb;
1029
1030   if (bb_note
1031       && ! RTX_INTEGRATED_P (bb_note)
1032       && (bb = NOTE_BASIC_BLOCK (bb_note)) != NULL
1033       && bb->aux == NULL)
1034     {
1035       /* If we found an existing note, thread it back onto the chain.  */
1036
1037       rtx after;
1038
1039       if (GET_CODE (head) == CODE_LABEL)
1040         after = head;
1041       else
1042         {
1043           after = PREV_INSN (head);
1044           head = bb_note;
1045         }
1046
1047       if (after != bb_note && NEXT_INSN (after) != bb_note)
1048         reorder_insns (bb_note, bb_note, after);
1049     }
1050   else
1051     {
1052       /* Otherwise we must create a note and a basic block structure.
1053          Since we allow basic block structs in rtl, give the struct
1054          the same lifetime by allocating it off the function obstack
1055          rather than using malloc.  */
1056
1057       bb = (basic_block) obstack_alloc (&flow_obstack, sizeof (*bb));
1058       memset (bb, 0, sizeof (*bb));
1059
1060       if (GET_CODE (head) == CODE_LABEL)
1061         bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, head);
1062       else
1063         {
1064           bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, head);
1065           head = bb_note;
1066         }
1067       NOTE_BASIC_BLOCK (bb_note) = bb;
1068     }
1069
1070   /* Always include the bb note in the block.  */
1071   if (NEXT_INSN (end) == bb_note)
1072     end = bb_note;
1073
1074   bb->head = head;
1075   bb->end = end;
1076   bb->index = index;
1077   BASIC_BLOCK (index) = bb;
1078
1079   /* Tag the block so that we know it has been used when considering
1080      other basic block notes.  */
1081   bb->aux = bb;
1082 }
1083 \f
1084 /* Records the basic block struct in BB_FOR_INSN, for every instruction
1085    indexed by INSN_UID.  MAX is the size of the array.  */
1086
1087 void
1088 compute_bb_for_insn (max)
1089      int max;
1090 {
1091   int i;
1092
1093   if (basic_block_for_insn)
1094     VARRAY_FREE (basic_block_for_insn);
1095   VARRAY_BB_INIT (basic_block_for_insn, max, "basic_block_for_insn");
1096
1097   for (i = 0; i < n_basic_blocks; ++i)
1098     {
1099       basic_block bb = BASIC_BLOCK (i);
1100       rtx insn, end;
1101
1102       end = bb->end;
1103       insn = bb->head;
1104       while (1)
1105         {
1106           int uid = INSN_UID (insn);
1107           if (uid < max)
1108             VARRAY_BB (basic_block_for_insn, uid) = bb;
1109           if (insn == end)
1110             break;
1111           insn = NEXT_INSN (insn);
1112         }
1113     }
1114 }
1115
1116 /* Free the memory associated with the edge structures.  */
1117
1118 void
1119 clear_edges ()
1120 {
1121   int i;
1122   edge n, e;
1123
1124   for (i = 0; i < n_basic_blocks; ++i)
1125     {
1126       basic_block bb = BASIC_BLOCK (i);
1127
1128       for (e = bb->succ; e; e = n)
1129         {
1130           n = e->succ_next;
1131           free (e);
1132         }
1133
1134       bb->succ = 0;
1135       bb->pred = 0;
1136     }
1137
1138   for (e = ENTRY_BLOCK_PTR->succ; e; e = n)
1139     {
1140       n = e->succ_next;
1141       free (e);
1142     }
1143
1144   ENTRY_BLOCK_PTR->succ = 0;
1145   EXIT_BLOCK_PTR->pred = 0;
1146
1147   n_edges = 0;
1148 }
1149
1150 /* Identify the edges between basic blocks.
1151
1152    NONLOCAL_LABEL_LIST is a list of non-local labels in the function.  Blocks
1153    that are otherwise unreachable may be reachable with a non-local goto.
1154
1155    BB_EH_END is an array indexed by basic block number in which we record
1156    the list of exception regions active at the end of the basic block.  */
1157
1158 static void
1159 make_edges (label_value_list)
1160      rtx label_value_list;
1161 {
1162   int i;
1163   sbitmap *edge_cache = NULL;
1164
1165   /* Assume no computed jump; revise as we create edges.  */
1166   current_function_has_computed_jump = 0;
1167
1168   /* Heavy use of computed goto in machine-generated code can lead to
1169      nearly fully-connected CFGs.  In that case we spend a significant
1170      amount of time searching the edge lists for duplicates.  */
1171   if (forced_labels || label_value_list)
1172     {
1173       edge_cache = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
1174       sbitmap_vector_zero (edge_cache, n_basic_blocks);
1175     }
1176
1177   /* By nature of the way these get numbered, block 0 is always the entry.  */
1178   make_edge (edge_cache, ENTRY_BLOCK_PTR, BASIC_BLOCK (0), EDGE_FALLTHRU);
1179
1180   for (i = 0; i < n_basic_blocks; ++i)
1181     {
1182       basic_block bb = BASIC_BLOCK (i);
1183       rtx insn, x;
1184       enum rtx_code code;
1185       int force_fallthru = 0;
1186
1187       if (GET_CODE (bb->head) == CODE_LABEL
1188           && LABEL_ALTERNATE_NAME (bb->head))
1189         make_edge (NULL, ENTRY_BLOCK_PTR, bb, 0);
1190
1191       /* Examine the last instruction of the block, and discover the
1192          ways we can leave the block.  */
1193
1194       insn = bb->end;
1195       code = GET_CODE (insn);
1196
1197       /* A branch.  */
1198       if (code == JUMP_INSN)
1199         {
1200           rtx tmp;
1201
1202           /* Recognize exception handling placeholders.  */
1203           if (GET_CODE (PATTERN (insn)) == RESX)
1204             make_eh_edge (edge_cache, bb, insn);
1205
1206           /* Recognize a non-local goto as a branch outside the
1207              current function.  */
1208           else if (find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
1209             ;
1210
1211           /* ??? Recognize a tablejump and do the right thing.  */
1212           else if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
1213                    && (tmp = NEXT_INSN (tmp)) != NULL_RTX
1214                    && GET_CODE (tmp) == JUMP_INSN
1215                    && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
1216                        || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
1217             {
1218               rtvec vec;
1219               int j;
1220
1221               if (GET_CODE (PATTERN (tmp)) == ADDR_VEC)
1222                 vec = XVEC (PATTERN (tmp), 0);
1223               else
1224                 vec = XVEC (PATTERN (tmp), 1);
1225
1226               for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j)
1227                 make_label_edge (edge_cache, bb,
1228                                  XEXP (RTVEC_ELT (vec, j), 0), 0);
1229
1230               /* Some targets (eg, ARM) emit a conditional jump that also
1231                  contains the out-of-range target.  Scan for these and
1232                  add an edge if necessary.  */
1233               if ((tmp = single_set (insn)) != NULL
1234                   && SET_DEST (tmp) == pc_rtx
1235                   && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
1236                   && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
1237                 make_label_edge (edge_cache, bb,
1238                                  XEXP (XEXP (SET_SRC (tmp), 2), 0), 0);
1239
1240 #ifdef CASE_DROPS_THROUGH
1241               /* Silly VAXen.  The ADDR_VEC is going to be in the way of
1242                  us naturally detecting fallthru into the next block.  */
1243               force_fallthru = 1;
1244 #endif
1245             }
1246
1247           /* If this is a computed jump, then mark it as reaching
1248              everything on the label_value_list and forced_labels list.  */
1249           else if (computed_jump_p (insn))
1250             {
1251               current_function_has_computed_jump = 1;
1252
1253               for (x = label_value_list; x; x = XEXP (x, 1))
1254                 make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
1255
1256               for (x = forced_labels; x; x = XEXP (x, 1))
1257                 make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL);
1258             }
1259
1260           /* Returns create an exit out.  */
1261           else if (returnjump_p (insn))
1262             make_edge (edge_cache, bb, EXIT_BLOCK_PTR, 0);
1263
1264           /* Otherwise, we have a plain conditional or unconditional jump.  */
1265           else
1266             {
1267               if (! JUMP_LABEL (insn))
1268                 abort ();
1269               make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0);
1270             }
1271         }
1272
1273       /* If this is a sibling call insn, then this is in effect a
1274          combined call and return, and so we need an edge to the
1275          exit block.  No need to worry about EH edges, since we
1276          wouldn't have created the sibling call in the first place.  */
1277
1278       if (code == CALL_INSN && SIBLING_CALL_P (insn))
1279         make_edge (edge_cache, bb, EXIT_BLOCK_PTR,
1280                    EDGE_ABNORMAL | EDGE_ABNORMAL_CALL);
1281
1282       /* If this is a CALL_INSN, then mark it as reaching the active EH
1283          handler for this CALL_INSN.  If we're handling non-call
1284          exceptions then any insn can reach any of the active handlers.
1285
1286          Also mark the CALL_INSN as reaching any nonlocal goto handler.  */
1287
1288       else if (code == CALL_INSN || flag_non_call_exceptions)
1289         {
1290           /* Add any appropriate EH edges.  */
1291           make_eh_edge (edge_cache, bb, insn);
1292
1293           if (code == CALL_INSN && nonlocal_goto_handler_labels)
1294             {
1295               /* ??? This could be made smarter: in some cases it's possible
1296                  to tell that certain calls will not do a nonlocal goto.
1297
1298                  For example, if the nested functions that do the nonlocal
1299                  gotos do not have their addresses taken, then only calls to
1300                  those functions or to other nested functions that use them
1301                  could possibly do nonlocal gotos.  */
1302               /* We do know that a REG_EH_REGION note with a value less
1303                  than 0 is guaranteed not to perform a non-local goto.  */
1304               rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
1305               if (!note || INTVAL (XEXP (note, 0)) >=  0)
1306                 for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
1307                   make_label_edge (edge_cache, bb, XEXP (x, 0),
1308                                    EDGE_ABNORMAL | EDGE_ABNORMAL_CALL);
1309             }
1310         }
1311
1312       /* Find out if we can drop through to the next block.  */
1313       insn = next_nonnote_insn (insn);
1314       if (!insn || (i + 1 == n_basic_blocks && force_fallthru))
1315         make_edge (edge_cache, bb, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
1316       else if (i + 1 < n_basic_blocks)
1317         {
1318           rtx tmp = BLOCK_HEAD (i + 1);
1319           if (GET_CODE (tmp) == NOTE)
1320             tmp = next_nonnote_insn (tmp);
1321           if (force_fallthru || insn == tmp)
1322             make_edge (edge_cache, bb, BASIC_BLOCK (i + 1), EDGE_FALLTHRU);
1323         }
1324     }
1325
1326   if (edge_cache)
1327     sbitmap_vector_free (edge_cache);
1328 }
1329
1330 /* Create an edge between two basic blocks.  FLAGS are auxiliary information
1331    about the edge that is accumulated between calls.  */
1332
1333 void
1334 make_edge (edge_cache, src, dst, flags)
1335      sbitmap *edge_cache;
1336      basic_block src, dst;
1337      int flags;
1338 {
1339   int use_edge_cache;
1340   edge e;
1341
1342   /* Don't bother with edge cache for ENTRY or EXIT; there aren't that
1343      many edges to them, and we didn't allocate memory for it.  */
1344   use_edge_cache = (edge_cache
1345                     && src != ENTRY_BLOCK_PTR
1346                     && dst != EXIT_BLOCK_PTR);
1347
1348   /* Make sure we don't add duplicate edges.  */
1349   switch (use_edge_cache)
1350     {
1351     default:
1352       /* Quick test for non-existance of the edge.  */
1353       if (! TEST_BIT (edge_cache[src->index], dst->index))
1354         break;
1355
1356       /* The edge exists; early exit if no work to do.  */
1357       if (flags == 0)
1358         return;
1359
1360       /* FALLTHRU */
1361     case 0:
1362       for (e = src->succ; e; e = e->succ_next)
1363         if (e->dest == dst)
1364           {
1365             e->flags |= flags;
1366             return;
1367           }
1368       break;
1369     }
1370
1371   e = (edge) xcalloc (1, sizeof (*e));
1372   n_edges++;
1373
1374   e->succ_next = src->succ;
1375   e->pred_next = dst->pred;
1376   e->src = src;
1377   e->dest = dst;
1378   e->flags = flags;
1379
1380   src->succ = e;
1381   dst->pred = e;
1382
1383   if (use_edge_cache)
1384     SET_BIT (edge_cache[src->index], dst->index);
1385 }
1386
1387 /* Create an edge from a basic block to a label.  */
1388
1389 static void
1390 make_label_edge (edge_cache, src, label, flags)
1391      sbitmap *edge_cache;
1392      basic_block src;
1393      rtx label;
1394      int flags;
1395 {
1396   if (GET_CODE (label) != CODE_LABEL)
1397     abort ();
1398
1399   /* If the label was never emitted, this insn is junk, but avoid a
1400      crash trying to refer to BLOCK_FOR_INSN (label).  This can happen
1401      as a result of a syntax error and a diagnostic has already been
1402      printed.  */
1403
1404   if (INSN_UID (label) == 0)
1405     return;
1406
1407   make_edge (edge_cache, src, BLOCK_FOR_INSN (label), flags);
1408 }
1409
1410 /* Create the edges generated by INSN in REGION.  */
1411
1412 static void
1413 make_eh_edge (edge_cache, src, insn)
1414      sbitmap *edge_cache;
1415      basic_block src;
1416      rtx insn;
1417 {
1418   int is_call = (GET_CODE (insn) == CALL_INSN ? EDGE_ABNORMAL_CALL : 0);
1419   rtx handlers, i;
1420
1421   handlers = reachable_handlers (insn);
1422
1423   for (i = handlers; i; i = XEXP (i, 1))
1424     make_label_edge (edge_cache, src, XEXP (i, 0),
1425                      EDGE_ABNORMAL | EDGE_EH | is_call);
1426
1427   free_INSN_LIST_list (&handlers);
1428 }
1429
1430 /* Identify critical edges and set the bits appropriately.  */
1431
1432 void
1433 mark_critical_edges ()
1434 {
1435   int i, n = n_basic_blocks;
1436   basic_block bb;
1437
1438   /* We begin with the entry block.  This is not terribly important now,
1439      but could be if a front end (Fortran) implemented alternate entry
1440      points.  */
1441   bb = ENTRY_BLOCK_PTR;
1442   i = -1;
1443
1444   while (1)
1445     {
1446       edge e;
1447
1448       /* (1) Critical edges must have a source with multiple successors.  */
1449       if (bb->succ && bb->succ->succ_next)
1450         {
1451           for (e = bb->succ; e; e = e->succ_next)
1452             {
1453               /* (2) Critical edges must have a destination with multiple
1454                  predecessors.  Note that we know there is at least one
1455                  predecessor -- the edge we followed to get here.  */
1456               if (e->dest->pred->pred_next)
1457                 e->flags |= EDGE_CRITICAL;
1458               else
1459                 e->flags &= ~EDGE_CRITICAL;
1460             }
1461         }
1462       else
1463         {
1464           for (e = bb->succ; e; e = e->succ_next)
1465             e->flags &= ~EDGE_CRITICAL;
1466         }
1467
1468       if (++i >= n)
1469         break;
1470       bb = BASIC_BLOCK (i);
1471     }
1472 }
1473 \f
1474 /* Split a block BB after insn INSN creating a new fallthru edge.
1475    Return the new edge.  Note that to keep other parts of the compiler happy,
1476    this function renumbers all the basic blocks so that the new
1477    one has a number one greater than the block split.  */
1478
1479 edge
1480 split_block (bb, insn)
1481      basic_block bb;
1482      rtx insn;
1483 {
1484   basic_block new_bb;
1485   edge new_edge;
1486   edge e;
1487   rtx bb_note;
1488   int i, j;
1489
1490   /* There is no point splitting the block after its end.  */
1491   if (bb->end == insn)
1492     return 0;
1493
1494   /* Create the new structures.  */
1495   new_bb = (basic_block) obstack_alloc (&flow_obstack, sizeof (*new_bb));
1496   new_edge = (edge) xcalloc (1, sizeof (*new_edge));
1497   n_edges++;
1498
1499   memset (new_bb, 0, sizeof (*new_bb));
1500
1501   new_bb->head = NEXT_INSN (insn);
1502   new_bb->end = bb->end;
1503   bb->end = insn;
1504
1505   new_bb->succ = bb->succ;
1506   bb->succ = new_edge;
1507   new_bb->pred = new_edge;
1508   new_bb->count = bb->count;
1509   new_bb->frequency = bb->frequency;
1510   new_bb->loop_depth = bb->loop_depth;
1511
1512   new_edge->src = bb;
1513   new_edge->dest = new_bb;
1514   new_edge->flags = EDGE_FALLTHRU;
1515   new_edge->probability = REG_BR_PROB_BASE;
1516   new_edge->count = bb->count;
1517
1518   /* Redirect the src of the successor edges of bb to point to new_bb.  */
1519   for (e = new_bb->succ; e; e = e->succ_next)
1520     e->src = new_bb;
1521
1522   /* Place the new block just after the block being split.  */
1523   VARRAY_GROW (basic_block_info, ++n_basic_blocks);
1524
1525   /* Some parts of the compiler expect blocks to be number in
1526      sequential order so insert the new block immediately after the
1527      block being split..  */
1528   j = bb->index;
1529   for (i = n_basic_blocks - 1; i > j + 1; --i)
1530     {
1531       basic_block tmp = BASIC_BLOCK (i - 1);
1532       BASIC_BLOCK (i) = tmp;
1533       tmp->index = i;
1534     }
1535
1536   BASIC_BLOCK (i) = new_bb;
1537   new_bb->index = i;
1538
1539   if (GET_CODE (new_bb->head) == CODE_LABEL)
1540     {
1541       /* Create the basic block note.  */
1542       bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK,
1543                                  new_bb->head);
1544       NOTE_BASIC_BLOCK (bb_note) = new_bb;
1545     }
1546   else
1547     {
1548       /* Create the basic block note.  */
1549       bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK,
1550                                   new_bb->head);
1551       NOTE_BASIC_BLOCK (bb_note) = new_bb;
1552       new_bb->head = bb_note;
1553     }
1554
1555   update_bb_for_insn (new_bb);
1556
1557   if (bb->global_live_at_start)
1558     {
1559       new_bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1560       new_bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1561       COPY_REG_SET (new_bb->global_live_at_end, bb->global_live_at_end);
1562
1563       /* We now have to calculate which registers are live at the end
1564          of the split basic block and at the start of the new basic
1565          block.  Start with those registers that are known to be live
1566          at the end of the original basic block and get
1567          propagate_block to determine which registers are live.  */
1568       COPY_REG_SET (new_bb->global_live_at_start, bb->global_live_at_end);
1569       propagate_block (new_bb, new_bb->global_live_at_start, NULL, NULL, 0);
1570       COPY_REG_SET (bb->global_live_at_end,
1571                     new_bb->global_live_at_start);
1572     }
1573
1574   return new_edge;
1575 }
1576
1577
1578 /* Split a (typically critical) edge.  Return the new block.
1579    Abort on abnormal edges.
1580
1581    ??? The code generally expects to be called on critical edges.
1582    The case of a block ending in an unconditional jump to a
1583    block with multiple predecessors is not handled optimally.  */
1584
1585 basic_block
1586 split_edge (edge_in)
1587      edge edge_in;
1588 {
1589   basic_block old_pred, bb, old_succ;
1590   edge edge_out;
1591   rtx bb_note;
1592   int i, j;
1593
1594   /* Abnormal edges cannot be split.  */
1595   if ((edge_in->flags & EDGE_ABNORMAL) != 0)
1596     abort ();
1597
1598   old_pred = edge_in->src;
1599   old_succ = edge_in->dest;
1600
1601   /* Remove the existing edge from the destination's pred list.  */
1602   {
1603     edge *pp;
1604     for (pp = &old_succ->pred; *pp != edge_in; pp = &(*pp)->pred_next)
1605       continue;
1606     *pp = edge_in->pred_next;
1607     edge_in->pred_next = NULL;
1608   }
1609
1610   /* Create the new structures.  */
1611   bb = (basic_block) obstack_alloc (&flow_obstack, sizeof (*bb));
1612   edge_out = (edge) xcalloc (1, sizeof (*edge_out));
1613   n_edges++;
1614
1615   memset (bb, 0, sizeof (*bb));
1616
1617   /* ??? This info is likely going to be out of date very soon.  */
1618   if (old_succ->global_live_at_start)
1619     {
1620       bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1621       bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack);
1622       COPY_REG_SET (bb->global_live_at_start, old_succ->global_live_at_start);
1623       COPY_REG_SET (bb->global_live_at_end, old_succ->global_live_at_start);
1624     }
1625
1626   /* Wire them up.  */
1627   bb->pred = edge_in;
1628   bb->succ = edge_out;
1629   bb->count = edge_in->count;
1630   /* ??? Set bb->frequency.  */
1631
1632   edge_in->dest = bb;
1633   edge_in->flags &= ~EDGE_CRITICAL;
1634
1635   edge_out->pred_next = old_succ->pred;
1636   edge_out->succ_next = NULL;
1637   edge_out->src = bb;
1638   edge_out->dest = old_succ;
1639   edge_out->flags = EDGE_FALLTHRU;
1640   edge_out->probability = REG_BR_PROB_BASE;
1641   edge_out->count = edge_in->count;
1642
1643   old_succ->pred = edge_out;
1644
1645   /* Tricky case -- if there existed a fallthru into the successor
1646      (and we're not it) we must add a new unconditional jump around
1647      the new block we're actually interested in.
1648
1649      Further, if that edge is critical, this means a second new basic
1650      block must be created to hold it.  In order to simplify correct
1651      insn placement, do this before we touch the existing basic block
1652      ordering for the block we were really wanting.  */
1653   if ((edge_in->flags & EDGE_FALLTHRU) == 0)
1654     {
1655       edge e;
1656       for (e = edge_out->pred_next; e; e = e->pred_next)
1657         if (e->flags & EDGE_FALLTHRU)
1658           break;
1659
1660       if (e)
1661         {
1662           basic_block jump_block;
1663           rtx pos;
1664
1665           if ((e->flags & EDGE_CRITICAL) == 0
1666               && e->src != ENTRY_BLOCK_PTR)
1667             {
1668               /* Non critical -- we can simply add a jump to the end
1669                  of the existing predecessor.  */
1670               jump_block = e->src;
1671             }
1672           else
1673             {
1674               /* We need a new block to hold the jump.  The simplest
1675                  way to do the bulk of the work here is to recursively
1676                  call ourselves.  */
1677               jump_block = split_edge (e);
1678               e = jump_block->succ;
1679             }
1680
1681           /* Now add the jump insn ...  */
1682           pos = emit_jump_insn_after (gen_jump (old_succ->head),
1683                                       jump_block->end);
1684           jump_block->end = pos;
1685           if (basic_block_for_insn)
1686             set_block_for_insn (pos, jump_block);
1687           emit_barrier_after (pos);
1688
1689           /* ... let jump know that label is in use, ...  */
1690           JUMP_LABEL (pos) = old_succ->head;
1691           ++LABEL_NUSES (old_succ->head);
1692
1693           /* ... and clear fallthru on the outgoing edge.  */
1694           e->flags &= ~EDGE_FALLTHRU;
1695
1696           /* Continue splitting the interesting edge.  */
1697         }
1698     }
1699
1700   /* Place the new block just in front of the successor.  */
1701   VARRAY_GROW (basic_block_info, ++n_basic_blocks);
1702   if (old_succ == EXIT_BLOCK_PTR)
1703     j = n_basic_blocks - 1;
1704   else
1705     j = old_succ->index;
1706   for (i = n_basic_blocks - 1; i > j; --i)
1707     {
1708       basic_block tmp = BASIC_BLOCK (i - 1);
1709       BASIC_BLOCK (i) = tmp;
1710       tmp->index = i;
1711     }
1712   BASIC_BLOCK (i) = bb;
1713   bb->index = i;
1714
1715   /* Create the basic block note.
1716
1717      Where we place the note can have a noticable impact on the generated
1718      code.  Consider this cfg:
1719
1720                         E
1721                         |
1722                         0
1723                        / \
1724                    +->1-->2--->E
1725                    |  |
1726                    +--+
1727
1728       If we need to insert an insn on the edge from block 0 to block 1,
1729       we want to ensure the instructions we insert are outside of any
1730       loop notes that physically sit between block 0 and block 1.  Otherwise
1731       we confuse the loop optimizer into thinking the loop is a phony.  */
1732   if (old_succ != EXIT_BLOCK_PTR
1733       && PREV_INSN (old_succ->head)
1734       && GET_CODE (PREV_INSN (old_succ->head)) == NOTE
1735       && NOTE_LINE_NUMBER (PREV_INSN (old_succ->head)) == NOTE_INSN_LOOP_BEG)
1736     bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK,
1737                                 PREV_INSN (old_succ->head));
1738   else if (old_succ != EXIT_BLOCK_PTR)
1739     bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, old_succ->head);
1740   else
1741     bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, get_last_insn ());
1742   NOTE_BASIC_BLOCK (bb_note) = bb;
1743   bb->head = bb->end = bb_note;
1744
1745   /* Not quite simple -- for non-fallthru edges, we must adjust the
1746      predecessor's jump instruction to target our new block.  */
1747   if ((edge_in->flags & EDGE_FALLTHRU) == 0)
1748     {
1749       rtx tmp, insn = old_pred->end;
1750       rtx old_label = old_succ->head;
1751       rtx new_label = gen_label_rtx ();
1752
1753       if (GET_CODE (insn) != JUMP_INSN)
1754         abort ();
1755
1756       /* ??? Recognize a tablejump and adjust all matching cases.  */
1757       if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
1758           && (tmp = NEXT_INSN (tmp)) != NULL_RTX
1759           && GET_CODE (tmp) == JUMP_INSN
1760           && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
1761               || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
1762         {
1763           rtvec vec;
1764           int j;
1765
1766           if (GET_CODE (PATTERN (tmp)) == ADDR_VEC)
1767             vec = XVEC (PATTERN (tmp), 0);
1768           else
1769             vec = XVEC (PATTERN (tmp), 1);
1770
1771           for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j)
1772             if (XEXP (RTVEC_ELT (vec, j), 0) == old_label)
1773               {
1774                 RTVEC_ELT (vec, j) = gen_rtx_LABEL_REF (VOIDmode, new_label);
1775                 --LABEL_NUSES (old_label);
1776                 ++LABEL_NUSES (new_label);
1777               }
1778
1779           /* Handle casesi dispatch insns */
1780           if ((tmp = single_set (insn)) != NULL
1781               && SET_DEST (tmp) == pc_rtx
1782               && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
1783               && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF
1784               && XEXP (XEXP (SET_SRC (tmp), 2), 0) == old_label)
1785             {
1786               XEXP (SET_SRC (tmp), 2) = gen_rtx_LABEL_REF (VOIDmode,
1787                                                            new_label);
1788               --LABEL_NUSES (old_label);
1789               ++LABEL_NUSES (new_label);
1790             }
1791         }
1792       else
1793         {
1794           /* This would have indicated an abnormal edge.  */
1795           if (computed_jump_p (insn))
1796             abort ();
1797
1798           /* A return instruction can't be redirected.  */
1799           if (returnjump_p (insn))
1800             abort ();
1801
1802           /* If the insn doesn't go where we think, we're confused.  */
1803           if (JUMP_LABEL (insn) != old_label)
1804             abort ();
1805
1806           redirect_jump (insn, new_label, 0);
1807         }
1808
1809       emit_label_before (new_label, bb_note);
1810       bb->head = new_label;
1811     }
1812
1813   return bb;
1814 }
1815
1816 /* Queue instructions for insertion on an edge between two basic blocks.
1817    The new instructions and basic blocks (if any) will not appear in the
1818    CFG until commit_edge_insertions is called.  */
1819
1820 void
1821 insert_insn_on_edge (pattern, e)
1822      rtx pattern;
1823      edge e;
1824 {
1825   /* We cannot insert instructions on an abnormal critical edge.
1826      It will be easier to find the culprit if we die now.  */
1827   if ((e->flags & (EDGE_ABNORMAL|EDGE_CRITICAL))
1828       == (EDGE_ABNORMAL|EDGE_CRITICAL))
1829     abort ();
1830
1831   if (e->insns == NULL_RTX)
1832     start_sequence ();
1833   else
1834     push_to_sequence (e->insns);
1835
1836   emit_insn (pattern);
1837
1838   e->insns = get_insns ();
1839   end_sequence ();
1840 }
1841
1842 /* Update the CFG for the instructions queued on edge E.  */
1843
1844 static void
1845 commit_one_edge_insertion (e)
1846      edge e;
1847 {
1848   rtx before = NULL_RTX, after = NULL_RTX, insns, tmp, last;
1849   basic_block bb;
1850
1851   /* Pull the insns off the edge now since the edge might go away.  */
1852   insns = e->insns;
1853   e->insns = NULL_RTX;
1854
1855   /* Figure out where to put these things.  If the destination has
1856      one predecessor, insert there.  Except for the exit block.  */
1857   if (e->dest->pred->pred_next == NULL
1858       && e->dest != EXIT_BLOCK_PTR)
1859     {
1860       bb = e->dest;
1861
1862       /* Get the location correct wrt a code label, and "nice" wrt
1863          a basic block note, and before everything else.  */
1864       tmp = bb->head;
1865       if (GET_CODE (tmp) == CODE_LABEL)
1866         tmp = NEXT_INSN (tmp);
1867       if (NOTE_INSN_BASIC_BLOCK_P (tmp))
1868         tmp = NEXT_INSN (tmp);
1869       if (tmp == bb->head)
1870         before = tmp;
1871       else
1872         after = PREV_INSN (tmp);
1873     }
1874
1875   /* If the source has one successor and the edge is not abnormal,
1876      insert there.  Except for the entry block.  */
1877   else if ((e->flags & EDGE_ABNORMAL) == 0
1878            && e->src->succ->succ_next == NULL
1879            && e->src != ENTRY_BLOCK_PTR)
1880     {
1881       bb = e->src;
1882       /* It is possible to have a non-simple jump here.  Consider a target
1883          where some forms of unconditional jumps clobber a register.  This
1884          happens on the fr30 for example.
1885
1886          We know this block has a single successor, so we can just emit
1887          the queued insns before the jump.  */
1888       if (GET_CODE (bb->end) == JUMP_INSN)
1889         {
1890           before = bb->end;
1891         }
1892       else
1893         {
1894           /* We'd better be fallthru, or we've lost track of what's what.  */
1895           if ((e->flags & EDGE_FALLTHRU) == 0)
1896             abort ();
1897
1898           after = bb->end;
1899         }
1900     }
1901
1902   /* Otherwise we must split the edge.  */
1903   else
1904     {
1905       bb = split_edge (e);
1906       after = bb->end;
1907     }
1908
1909   /* Now that we've found the spot, do the insertion.  */
1910
1911   /* Set the new block number for these insns, if structure is allocated.  */
1912   if (basic_block_for_insn)
1913     {
1914       rtx i;
1915       for (i = insns; i != NULL_RTX; i = NEXT_INSN (i))
1916         set_block_for_insn (i, bb);
1917     }
1918
1919   if (before)
1920     {
1921       emit_insns_before (insns, before);
1922       if (before == bb->head)
1923         bb->head = insns;
1924
1925       last = prev_nonnote_insn (before);
1926     }
1927   else
1928     {
1929       last = emit_insns_after (insns, after);
1930       if (after == bb->end)
1931         bb->end = last;
1932     }
1933
1934   if (returnjump_p (last))
1935     {
1936       /* ??? Remove all outgoing edges from BB and add one for EXIT.
1937          This is not currently a problem because this only happens
1938          for the (single) epilogue, which already has a fallthru edge
1939          to EXIT.  */
1940
1941       e = bb->succ;
1942       if (e->dest != EXIT_BLOCK_PTR
1943           || e->succ_next != NULL
1944           || (e->flags & EDGE_FALLTHRU) == 0)
1945         abort ();
1946       e->flags &= ~EDGE_FALLTHRU;
1947
1948       emit_barrier_after (last);
1949       bb->end = last;
1950
1951       if (before)
1952         flow_delete_insn (before);
1953     }
1954   else if (GET_CODE (last) == JUMP_INSN)
1955     abort ();
1956   find_sub_basic_blocks (bb);
1957 }
1958
1959 /* Update the CFG for all queued instructions.  */
1960
1961 void
1962 commit_edge_insertions ()
1963 {
1964   int i;
1965   basic_block bb;
1966
1967 #ifdef ENABLE_CHECKING
1968   verify_flow_info ();
1969 #endif
1970
1971   i = -1;
1972   bb = ENTRY_BLOCK_PTR;
1973   while (1)
1974     {
1975       edge e, next;
1976
1977       for (e = bb->succ; e; e = next)
1978         {
1979           next = e->succ_next;
1980           if (e->insns)
1981             commit_one_edge_insertion (e);
1982         }
1983
1984       if (++i >= n_basic_blocks)
1985         break;
1986       bb = BASIC_BLOCK (i);
1987     }
1988 }
1989
1990 /* Add fake edges to the function exit for any non constant calls in
1991    the bitmap of blocks specified by BLOCKS or to the whole CFG if
1992    BLOCKS is zero.  Return the nuber of blocks that were split.  */
1993
1994 int
1995 flow_call_edges_add (blocks)
1996      sbitmap blocks;
1997 {
1998   int i;
1999   int blocks_split = 0;
2000   int bb_num = 0;
2001   basic_block *bbs;
2002
2003   /* Map bb indicies into basic block pointers since split_block
2004      will renumber the basic blocks.  */
2005
2006   bbs = xmalloc (n_basic_blocks * sizeof (*bbs));
2007
2008   if (! blocks)
2009     {
2010       for (i = 0; i < n_basic_blocks; i++)
2011         bbs[bb_num++] = BASIC_BLOCK (i);
2012     }
2013   else
2014     {
2015       EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, 
2016       {
2017         bbs[bb_num++] = BASIC_BLOCK (i);
2018       });
2019     }
2020
2021
2022   /* Now add fake edges to the function exit for any non constant
2023      calls since there is no way that we can determine if they will
2024      return or not...  */
2025
2026   for (i = 0; i < bb_num; i++)
2027     {
2028       basic_block bb = bbs[i];
2029       rtx insn;
2030       rtx prev_insn;
2031
2032       for (insn = bb->end; ; insn = prev_insn)
2033         {
2034           prev_insn = PREV_INSN (insn);
2035           if (GET_CODE (insn) == CALL_INSN && ! CONST_CALL_P (insn))
2036             {
2037               edge e;
2038
2039               /* Note that the following may create a new basic block
2040                  and renumber the existing basic blocks.  */
2041               e = split_block (bb, insn);
2042               if (e)
2043                 blocks_split++;
2044
2045               make_edge (NULL, bb, EXIT_BLOCK_PTR, EDGE_FAKE);
2046             }
2047           if (insn == bb->head)
2048             break;
2049         }
2050     }
2051
2052   if (blocks_split)
2053     verify_flow_info ();
2054
2055   free (bbs);
2056   return blocks_split;
2057 }
2058 \f
2059 /* Find unreachable blocks.  An unreachable block will have NULL in
2060    block->aux, a non-NULL value indicates the block is reachable.  */
2061
2062 void
2063 find_unreachable_blocks ()
2064 {
2065   edge e;
2066   int i, n;
2067   basic_block *tos, *worklist;
2068
2069   n = n_basic_blocks;
2070   tos = worklist = (basic_block *) xmalloc (sizeof (basic_block) * n);
2071
2072   /* Use basic_block->aux as a marker.  Clear them all.  */
2073
2074   for (i = 0; i < n; ++i)
2075     BASIC_BLOCK (i)->aux = NULL;
2076
2077   /* Add our starting points to the worklist.  Almost always there will
2078      be only one.  It isn't inconcievable that we might one day directly
2079      support Fortran alternate entry points.  */
2080
2081   for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
2082     {
2083       *tos++ = e->dest;
2084
2085       /* Mark the block with a handy non-null value.  */
2086       e->dest->aux = e;
2087     }
2088
2089   /* Iterate: find everything reachable from what we've already seen.  */
2090
2091   while (tos != worklist)
2092     {
2093       basic_block b = *--tos;
2094
2095       for (e = b->succ; e; e = e->succ_next)
2096         if (!e->dest->aux)
2097           {
2098             *tos++ = e->dest;
2099             e->dest->aux = e;
2100           }
2101     }
2102
2103   free (worklist);
2104 }
2105
2106 /* Delete all unreachable basic blocks.   */
2107 static void
2108 delete_unreachable_blocks ()
2109 {
2110   int i;
2111
2112   find_unreachable_blocks ();
2113
2114   /* Delete all unreachable basic blocks.  Count down so that we
2115      don't interfere with the block renumbering that happens in
2116      flow_delete_block.  */
2117
2118   for (i = n_basic_blocks - 1; i >= 0; --i)
2119     {
2120       basic_block b = BASIC_BLOCK (i);
2121
2122       if (b->aux != NULL)
2123         /* This block was found.  Tidy up the mark.  */
2124         b->aux = NULL;
2125       else
2126         flow_delete_block (b);
2127     }
2128
2129   tidy_fallthru_edges ();
2130 }
2131
2132 /* Return true if NOTE is not one of the ones that must be kept paired,
2133    so that we may simply delete them.  */
2134
2135 static int
2136 can_delete_note_p (note)
2137      rtx note;
2138 {
2139   return (NOTE_LINE_NUMBER (note) == NOTE_INSN_DELETED
2140           || NOTE_LINE_NUMBER (note) == NOTE_INSN_BASIC_BLOCK);
2141 }
2142
2143 /* Unlink a chain of insns between START and FINISH, leaving notes
2144    that must be paired.  */
2145
2146 void
2147 flow_delete_insn_chain (start, finish)
2148      rtx start, finish;
2149 {
2150   /* Unchain the insns one by one.  It would be quicker to delete all
2151      of these with a single unchaining, rather than one at a time, but
2152      we need to keep the NOTE's.  */
2153
2154   rtx next;
2155
2156   while (1)
2157     {
2158       next = NEXT_INSN (start);
2159       if (GET_CODE (start) == NOTE && !can_delete_note_p (start))
2160         ;
2161       else if (GET_CODE (start) == CODE_LABEL
2162                && ! can_delete_label_p (start))
2163         {
2164           const char *name = LABEL_NAME (start);
2165           PUT_CODE (start, NOTE);
2166           NOTE_LINE_NUMBER (start) = NOTE_INSN_DELETED_LABEL;
2167           NOTE_SOURCE_FILE (start) = name;
2168         }
2169       else
2170         next = flow_delete_insn (start);
2171
2172       if (start == finish)
2173         break;
2174       start = next;
2175     }
2176 }
2177
2178 /* Delete the insns in a (non-live) block.  We physically delete every
2179    non-deleted-note insn, and update the flow graph appropriately.
2180
2181    Return nonzero if we deleted an exception handler.  */
2182
2183 /* ??? Preserving all such notes strikes me as wrong.  It would be nice
2184    to post-process the stream to remove empty blocks, loops, ranges, etc.  */
2185
2186 int
2187 flow_delete_block (b)
2188      basic_block b;
2189 {
2190   int deleted_handler = 0;
2191   rtx insn, end, tmp;
2192
2193   /* If the head of this block is a CODE_LABEL, then it might be the
2194      label for an exception handler which can't be reached.
2195
2196      We need to remove the label from the exception_handler_label list
2197      and remove the associated NOTE_INSN_EH_REGION_BEG and
2198      NOTE_INSN_EH_REGION_END notes.  */
2199
2200   insn = b->head;
2201
2202   never_reached_warning (insn);
2203
2204   if (GET_CODE (insn) == CODE_LABEL)
2205     maybe_remove_eh_handler (insn);
2206
2207   /* Include any jump table following the basic block.  */
2208   end = b->end;
2209   if (GET_CODE (end) == JUMP_INSN
2210       && (tmp = JUMP_LABEL (end)) != NULL_RTX
2211       && (tmp = NEXT_INSN (tmp)) != NULL_RTX
2212       && GET_CODE (tmp) == JUMP_INSN
2213       && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
2214           || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
2215     end = tmp;
2216
2217   /* Include any barrier that may follow the basic block.  */
2218   tmp = next_nonnote_insn (end);
2219   if (tmp && GET_CODE (tmp) == BARRIER)
2220     end = tmp;
2221
2222   /* Selectively delete the entire chain.  */
2223   flow_delete_insn_chain (insn, end);
2224
2225   /* Remove the edges into and out of this block.  Note that there may
2226      indeed be edges in, if we are removing an unreachable loop.  */
2227   {
2228     edge e, next, *q;
2229
2230     for (e = b->pred; e; e = next)
2231       {
2232         for (q = &e->src->succ; *q != e; q = &(*q)->succ_next)
2233           continue;
2234         *q = e->succ_next;
2235         next = e->pred_next;
2236         n_edges--;
2237         free (e);
2238       }
2239     for (e = b->succ; e; e = next)
2240       {
2241         for (q = &e->dest->pred; *q != e; q = &(*q)->pred_next)
2242           continue;
2243         *q = e->pred_next;
2244         next = e->succ_next;
2245         n_edges--;
2246         free (e);
2247       }
2248
2249     b->pred = NULL;
2250     b->succ = NULL;
2251   }
2252
2253   /* Remove the basic block from the array, and compact behind it.  */
2254   expunge_block (b);
2255
2256   return deleted_handler;
2257 }
2258
2259 /* Remove block B from the basic block array and compact behind it.  */
2260
2261 static void
2262 expunge_block (b)
2263      basic_block b;
2264 {
2265   int i, n = n_basic_blocks;
2266
2267   for (i = b->index; i + 1 < n; ++i)
2268     {
2269       basic_block x = BASIC_BLOCK (i + 1);
2270       BASIC_BLOCK (i) = x;
2271       x->index = i;
2272     }
2273
2274   basic_block_info->num_elements--;
2275   n_basic_blocks--;
2276 }
2277
2278 /* Delete INSN by patching it out.  Return the next insn.  */
2279
2280 rtx
2281 flow_delete_insn (insn)
2282      rtx insn;
2283 {
2284   rtx prev = PREV_INSN (insn);
2285   rtx next = NEXT_INSN (insn);
2286   rtx note;
2287
2288   PREV_INSN (insn) = NULL_RTX;
2289   NEXT_INSN (insn) = NULL_RTX;
2290   INSN_DELETED_P (insn) = 1;
2291
2292   if (prev)
2293     NEXT_INSN (prev) = next;
2294   if (next)
2295     PREV_INSN (next) = prev;
2296   else
2297     set_last_insn (prev);
2298
2299   if (GET_CODE (insn) == CODE_LABEL)
2300     remove_node_from_expr_list (insn, &nonlocal_goto_handler_labels);
2301
2302   /* If deleting a jump, decrement the use count of the label.  Deleting
2303      the label itself should happen in the normal course of block merging.  */
2304   if (GET_CODE (insn) == JUMP_INSN
2305       && JUMP_LABEL (insn)
2306       && GET_CODE (JUMP_LABEL (insn)) == CODE_LABEL)
2307     LABEL_NUSES (JUMP_LABEL (insn))--;
2308
2309   /* Also if deleting an insn that references a label.  */
2310   else if ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)) != NULL_RTX
2311            && GET_CODE (XEXP (note, 0)) == CODE_LABEL)
2312     LABEL_NUSES (XEXP (note, 0))--;
2313
2314   return next;
2315 }
2316
2317 /* True if a given label can be deleted.  */
2318
2319 static int
2320 can_delete_label_p (label)
2321      rtx label;
2322 {
2323   rtx x;
2324
2325   if (LABEL_PRESERVE_P (label))
2326     return 0;
2327
2328   for (x = forced_labels; x; x = XEXP (x, 1))
2329     if (label == XEXP (x, 0))
2330       return 0;
2331   for (x = label_value_list; x; x = XEXP (x, 1))
2332     if (label == XEXP (x, 0))
2333       return 0;
2334   for (x = exception_handler_labels; x; x = XEXP (x, 1))
2335     if (label == XEXP (x, 0))
2336       return 0;
2337
2338   /* User declared labels must be preserved.  */
2339   if (LABEL_NAME (label) != 0)
2340     return 0;
2341
2342   return 1;
2343 }
2344
2345 static int
2346 tail_recursion_label_p (label)
2347      rtx label;
2348 {
2349   rtx x;
2350
2351   for (x = tail_recursion_label_list; x; x = XEXP (x, 1))
2352     if (label == XEXP (x, 0))
2353       return 1;
2354
2355   return 0;
2356 }
2357
2358 /* Blocks A and B are to be merged into a single block A.  The insns
2359    are already contiguous, hence `nomove'.  */
2360
2361 void
2362 merge_blocks_nomove (a, b)
2363      basic_block a, b;
2364 {
2365   edge e;
2366   rtx b_head, b_end, a_end;
2367   rtx del_first = NULL_RTX, del_last = NULL_RTX;
2368   int b_empty = 0;
2369
2370   /* If there was a CODE_LABEL beginning B, delete it.  */
2371   b_head = b->head;
2372   b_end = b->end;
2373   if (GET_CODE (b_head) == CODE_LABEL)
2374     {
2375       /* Detect basic blocks with nothing but a label.  This can happen
2376          in particular at the end of a function.  */
2377       if (b_head == b_end)
2378         b_empty = 1;
2379       del_first = del_last = b_head;
2380       b_head = NEXT_INSN (b_head);
2381     }
2382
2383   /* Delete the basic block note.  */
2384   if (NOTE_INSN_BASIC_BLOCK_P (b_head))
2385     {
2386       if (b_head == b_end)
2387         b_empty = 1;
2388       if (! del_last)
2389         del_first = b_head;
2390       del_last = b_head;
2391       b_head = NEXT_INSN (b_head);
2392     }
2393
2394   /* If there was a jump out of A, delete it.  */
2395   a_end = a->end;
2396   if (GET_CODE (a_end) == JUMP_INSN)
2397     {
2398       rtx prev;
2399
2400       for (prev = PREV_INSN (a_end); ; prev = PREV_INSN (prev))
2401         if (GET_CODE (prev) != NOTE
2402             || NOTE_LINE_NUMBER (prev) == NOTE_INSN_BASIC_BLOCK
2403             || prev == a->head)
2404           break;
2405
2406       del_first = a_end;
2407
2408 #ifdef HAVE_cc0
2409       /* If this was a conditional jump, we need to also delete
2410          the insn that set cc0.  */
2411       if (prev && sets_cc0_p (prev))
2412         {
2413           rtx tmp = prev;
2414           prev = prev_nonnote_insn (prev);
2415           if (!prev)
2416             prev = a->head;
2417           del_first = tmp;
2418         }
2419 #endif
2420
2421       a_end = prev;
2422     }
2423   else if (GET_CODE (NEXT_INSN (a_end)) == BARRIER)
2424     del_first = NEXT_INSN (a_end);
2425
2426   /* Delete everything marked above as well as crap that might be
2427      hanging out between the two blocks.  */
2428   flow_delete_insn_chain (del_first, del_last);
2429
2430   /* Normally there should only be one successor of A and that is B, but
2431      partway though the merge of blocks for conditional_execution we'll
2432      be merging a TEST block with THEN and ELSE successors.  Free the
2433      whole lot of them and hope the caller knows what they're doing.  */
2434   while (a->succ)
2435     remove_edge (a->succ);
2436
2437   /* Adjust the edges out of B for the new owner.  */
2438   for (e = b->succ; e; e = e->succ_next)
2439     e->src = a;
2440   a->succ = b->succ;
2441
2442   /* B hasn't quite yet ceased to exist.  Attempt to prevent mishap.  */
2443   b->pred = b->succ = NULL;
2444
2445   /* Reassociate the insns of B with A.  */
2446   if (!b_empty)
2447     {
2448       if (basic_block_for_insn)
2449         {
2450           BLOCK_FOR_INSN (b_head) = a;
2451           while (b_head != b_end)
2452             {
2453               b_head = NEXT_INSN (b_head);
2454               BLOCK_FOR_INSN (b_head) = a;
2455             }
2456         }
2457       a_end = b_end;
2458     }
2459   a->end = a_end;
2460
2461   expunge_block (b);
2462 }
2463
2464 /* Blocks A and B are to be merged into a single block.  A has no incoming
2465    fallthru edge, so it can be moved before B without adding or modifying
2466    any jumps (aside from the jump from A to B).  */
2467
2468 static int
2469 merge_blocks_move_predecessor_nojumps (a, b)
2470      basic_block a, b;
2471 {
2472   rtx start, end, barrier;
2473   int index;
2474
2475   start = a->head;
2476   end = a->end;
2477
2478   barrier = next_nonnote_insn (end);
2479   if (GET_CODE (barrier) != BARRIER)
2480     abort ();
2481   flow_delete_insn (barrier);
2482
2483   /* Move block and loop notes out of the chain so that we do not
2484      disturb their order.
2485
2486      ??? A better solution would be to squeeze out all the non-nested notes
2487      and adjust the block trees appropriately.   Even better would be to have
2488      a tighter connection between block trees and rtl so that this is not
2489      necessary.  */
2490   start = squeeze_notes (start, end);
2491
2492   /* Scramble the insn chain.  */
2493   if (end != PREV_INSN (b->head))
2494     reorder_insns (start, end, PREV_INSN (b->head));
2495
2496   if (rtl_dump_file)
2497     {
2498       fprintf (rtl_dump_file, "Moved block %d before %d and merged.\n",
2499                a->index, b->index);
2500     }
2501
2502   /* Swap the records for the two blocks around.  Although we are deleting B,
2503      A is now where B was and we want to compact the BB array from where
2504      A used to be.  */
2505   BASIC_BLOCK (a->index) = b;
2506   BASIC_BLOCK (b->index) = a;
2507   index = a->index;
2508   a->index = b->index;
2509   b->index = index;
2510
2511   /* Now blocks A and B are contiguous.  Merge them.  */
2512   merge_blocks_nomove (a, b);
2513
2514   return 1;
2515 }
2516
2517 /* Blocks A and B are to be merged into a single block.  B has no outgoing
2518    fallthru edge, so it can be moved after A without adding or modifying
2519    any jumps (aside from the jump from A to B).  */
2520
2521 static int
2522 merge_blocks_move_successor_nojumps (a, b)
2523      basic_block a, b;
2524 {
2525   rtx start, end, barrier;
2526
2527   start = b->head;
2528   end = b->end;
2529   barrier = NEXT_INSN (end);
2530
2531   /* Recognize a jump table following block B.  */
2532   if (GET_CODE (barrier) == CODE_LABEL
2533       && NEXT_INSN (barrier)
2534       && GET_CODE (NEXT_INSN (barrier)) == JUMP_INSN
2535       && (GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_VEC
2536           || GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_DIFF_VEC))
2537     {
2538       end = NEXT_INSN (barrier);
2539       barrier = NEXT_INSN (end);
2540     }
2541
2542   /* There had better have been a barrier there.  Delete it.  */
2543   if (GET_CODE (barrier) != BARRIER)
2544     abort ();
2545   flow_delete_insn (barrier);
2546
2547   /* Move block and loop notes out of the chain so that we do not
2548      disturb their order.
2549
2550      ??? A better solution would be to squeeze out all the non-nested notes
2551      and adjust the block trees appropriately.   Even better would be to have
2552      a tighter connection between block trees and rtl so that this is not
2553      necessary.  */
2554   start = squeeze_notes (start, end);
2555
2556   /* Scramble the insn chain.  */
2557   reorder_insns (start, end, a->end);
2558
2559   /* Now blocks A and B are contiguous.  Merge them.  */
2560   merge_blocks_nomove (a, b);
2561
2562   if (rtl_dump_file)
2563     {
2564       fprintf (rtl_dump_file, "Moved block %d after %d and merged.\n",
2565                b->index, a->index);
2566     }
2567
2568   return 1;
2569 }
2570
2571 /* Attempt to merge basic blocks that are potentially non-adjacent.
2572    Return true iff the attempt succeeded.  */
2573
2574 static int
2575 merge_blocks (e, b, c)
2576      edge e;
2577      basic_block b, c;
2578 {
2579   /* If C has a tail recursion label, do not merge.  There is no
2580      edge recorded from the call_placeholder back to this label, as
2581      that would make optimize_sibling_and_tail_recursive_calls more
2582      complex for no gain.  */
2583   if (GET_CODE (c->head) == CODE_LABEL
2584       && tail_recursion_label_p (c->head))
2585     return 0;
2586
2587   /* If B has a fallthru edge to C, no need to move anything.  */
2588   if (e->flags & EDGE_FALLTHRU)
2589     {
2590       merge_blocks_nomove (b, c);
2591
2592       if (rtl_dump_file)
2593         {
2594           fprintf (rtl_dump_file, "Merged %d and %d without moving.\n",
2595                    b->index, c->index);
2596         }
2597
2598       return 1;
2599     }
2600   else
2601     {
2602       edge tmp_edge;
2603       int c_has_outgoing_fallthru;
2604       int b_has_incoming_fallthru;
2605
2606       /* We must make sure to not munge nesting of exception regions,
2607          lexical blocks, and loop notes.
2608
2609          The first is taken care of by requiring that the active eh
2610          region at the end of one block always matches the active eh
2611          region at the beginning of the next block.
2612
2613          The later two are taken care of by squeezing out all the notes.  */
2614
2615       /* ???  A throw/catch edge (or any abnormal edge) should be rarely
2616          executed and we may want to treat blocks which have two out
2617          edges, one normal, one abnormal as only having one edge for
2618          block merging purposes.  */
2619
2620       for (tmp_edge = c->succ; tmp_edge; tmp_edge = tmp_edge->succ_next)
2621         if (tmp_edge->flags & EDGE_FALLTHRU)
2622           break;
2623       c_has_outgoing_fallthru = (tmp_edge != NULL);
2624
2625       for (tmp_edge = b->pred; tmp_edge; tmp_edge = tmp_edge->pred_next)
2626         if (tmp_edge->flags & EDGE_FALLTHRU)
2627           break;
2628       b_has_incoming_fallthru = (tmp_edge != NULL);
2629
2630       /* If B does not have an incoming fallthru, then it can be moved
2631          immediately before C without introducing or modifying jumps.
2632          C cannot be the first block, so we do not have to worry about
2633          accessing a non-existent block.  */
2634       if (! b_has_incoming_fallthru)
2635         return merge_blocks_move_predecessor_nojumps (b, c);
2636
2637       /* Otherwise, we're going to try to move C after B.  If C does
2638          not have an outgoing fallthru, then it can be moved
2639          immediately after B without introducing or modifying jumps.  */
2640       if (! c_has_outgoing_fallthru)
2641         return merge_blocks_move_successor_nojumps (b, c);
2642
2643       /* Otherwise, we'll need to insert an extra jump, and possibly
2644          a new block to contain it.  */
2645       /* ??? Not implemented yet.  */
2646
2647       return 0;
2648     }
2649 }
2650
2651 /* Top level driver for merge_blocks.  */
2652
2653 static void
2654 try_merge_blocks ()
2655 {
2656   int i;
2657
2658   /* Attempt to merge blocks as made possible by edge removal.  If a block
2659      has only one successor, and the successor has only one predecessor,
2660      they may be combined.  */
2661
2662   for (i = 0; i < n_basic_blocks;)
2663     {
2664       basic_block c, b = BASIC_BLOCK (i);
2665       edge s;
2666
2667       /* A loop because chains of blocks might be combineable.  */
2668       while ((s = b->succ) != NULL
2669              && s->succ_next == NULL
2670              && (s->flags & EDGE_EH) == 0
2671              && (c = s->dest) != EXIT_BLOCK_PTR
2672              && c->pred->pred_next == NULL
2673              /* If the jump insn has side effects, we can't kill the edge.  */
2674              && (GET_CODE (b->end) != JUMP_INSN
2675                  || onlyjump_p (b->end))
2676              && merge_blocks (s, b, c))
2677         continue;
2678
2679       /* Don't get confused by the index shift caused by deleting blocks.  */
2680       i = b->index + 1;
2681     }
2682 }
2683
2684 /* The given edge should potentially be a fallthru edge.  If that is in
2685    fact true, delete the jump and barriers that are in the way.  */
2686
2687 void
2688 tidy_fallthru_edge (e, b, c)
2689      edge e;
2690      basic_block b, c;
2691 {
2692   rtx q;
2693
2694   /* ??? In a late-running flow pass, other folks may have deleted basic
2695      blocks by nopping out blocks, leaving multiple BARRIERs between here
2696      and the target label. They ought to be chastized and fixed.
2697
2698      We can also wind up with a sequence of undeletable labels between
2699      one block and the next.
2700
2701      So search through a sequence of barriers, labels, and notes for
2702      the head of block C and assert that we really do fall through.  */
2703
2704   if (next_real_insn (b->end) != next_real_insn (PREV_INSN (c->head)))
2705     return;
2706
2707   /* Remove what will soon cease being the jump insn from the source block.
2708      If block B consisted only of this single jump, turn it into a deleted
2709      note.  */
2710   q = b->end;
2711   if (GET_CODE (q) == JUMP_INSN
2712       && onlyjump_p (q)
2713       && (any_uncondjump_p (q)
2714           || (b->succ == e && e->succ_next == NULL)))
2715     {
2716 #ifdef HAVE_cc0
2717       /* If this was a conditional jump, we need to also delete
2718          the insn that set cc0.  */
2719       if (any_condjump_p (q) && sets_cc0_p (PREV_INSN (q)))
2720         q = PREV_INSN (q);
2721 #endif
2722
2723       if (b->head == q)
2724         {
2725           PUT_CODE (q, NOTE);
2726           NOTE_LINE_NUMBER (q) = NOTE_INSN_DELETED;
2727           NOTE_SOURCE_FILE (q) = 0;
2728         }
2729       else
2730         {
2731           q = PREV_INSN (q);
2732
2733           /* We don't want a block to end on a line-number note since that has
2734              the potential of changing the code between -g and not -g.  */
2735           while (GET_CODE (q) == NOTE && NOTE_LINE_NUMBER (q) >= 0)
2736             q = PREV_INSN (q);
2737         }
2738
2739       b->end = q;
2740     }
2741
2742   /* Selectively unlink the sequence.  */
2743   if (q != PREV_INSN (c->head))
2744     flow_delete_insn_chain (NEXT_INSN (q), PREV_INSN (c->head));
2745
2746   e->flags |= EDGE_FALLTHRU;
2747 }
2748
2749 /* Fix up edges that now fall through, or rather should now fall through
2750    but previously required a jump around now deleted blocks.  Simplify
2751    the search by only examining blocks numerically adjacent, since this
2752    is how find_basic_blocks created them.  */
2753
2754 static void
2755 tidy_fallthru_edges ()
2756 {
2757   int i;
2758
2759   for (i = 1; i < n_basic_blocks; ++i)
2760     {
2761       basic_block b = BASIC_BLOCK (i - 1);
2762       basic_block c = BASIC_BLOCK (i);
2763       edge s;
2764
2765       /* We care about simple conditional or unconditional jumps with
2766          a single successor.
2767
2768          If we had a conditional branch to the next instruction when
2769          find_basic_blocks was called, then there will only be one
2770          out edge for the block which ended with the conditional
2771          branch (since we do not create duplicate edges).
2772
2773          Furthermore, the edge will be marked as a fallthru because we
2774          merge the flags for the duplicate edges.  So we do not want to
2775          check that the edge is not a FALLTHRU edge.  */
2776       if ((s = b->succ) != NULL
2777           && ! (s->flags & EDGE_COMPLEX)
2778           && s->succ_next == NULL
2779           && s->dest == c
2780           /* If the jump insn has side effects, we can't tidy the edge.  */
2781           && (GET_CODE (b->end) != JUMP_INSN
2782               || onlyjump_p (b->end)))
2783         tidy_fallthru_edge (s, b, c);
2784     }
2785 }
2786 \f
2787 /* Perform data flow analysis.
2788    F is the first insn of the function; FLAGS is a set of PROP_* flags
2789    to be used in accumulating flow info.  */
2790
2791 void
2792 life_analysis (f, file, flags)
2793      rtx f;
2794      FILE *file;
2795      int flags;
2796 {
2797 #ifdef ELIMINABLE_REGS
2798   register int i;
2799   static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
2800 #endif
2801
2802   /* Record which registers will be eliminated.  We use this in
2803      mark_used_regs.  */
2804
2805   CLEAR_HARD_REG_SET (elim_reg_set);
2806
2807 #ifdef ELIMINABLE_REGS
2808   for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
2809     SET_HARD_REG_BIT (elim_reg_set, eliminables[i].from);
2810 #else
2811   SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
2812 #endif
2813
2814   if (! optimize)
2815     flags &= ~(PROP_LOG_LINKS | PROP_AUTOINC);
2816
2817   /* The post-reload life analysis have (on a global basis) the same
2818      registers live as was computed by reload itself.  elimination
2819      Otherwise offsets and such may be incorrect.
2820
2821      Reload will make some registers as live even though they do not
2822      appear in the rtl.
2823
2824      We don't want to create new auto-incs after reload, since they
2825      are unlikely to be useful and can cause problems with shared
2826      stack slots.  */
2827   if (reload_completed)
2828     flags &= ~(PROP_REG_INFO | PROP_AUTOINC);
2829
2830   /* We want alias analysis information for local dead store elimination.  */
2831   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
2832     init_alias_analysis ();
2833
2834   /* Always remove no-op moves.  Do this before other processing so
2835      that we don't have to keep re-scanning them.  */
2836   delete_noop_moves (f);
2837
2838   /* Some targets can emit simpler epilogues if they know that sp was
2839      not ever modified during the function.  After reload, of course,
2840      we've already emitted the epilogue so there's no sense searching.  */
2841   if (! reload_completed)
2842     notice_stack_pointer_modification (f);
2843
2844   /* Allocate and zero out data structures that will record the
2845      data from lifetime analysis.  */
2846   allocate_reg_life_data ();
2847   allocate_bb_life_data ();
2848
2849   /* Find the set of registers live on function exit.  */
2850   mark_regs_live_at_end (EXIT_BLOCK_PTR->global_live_at_start);
2851
2852   /* "Update" life info from zero.  It'd be nice to begin the
2853      relaxation with just the exit and noreturn blocks, but that set
2854      is not immediately handy.  */
2855
2856   if (flags & PROP_REG_INFO)
2857     memset (regs_ever_live, 0, sizeof (regs_ever_live));
2858   update_life_info (NULL, UPDATE_LIFE_GLOBAL, flags);
2859
2860   /* Clean up.  */
2861   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
2862     end_alias_analysis ();
2863
2864   if (file)
2865     dump_flow_info (file);
2866
2867   free_basic_block_vars (1);
2868
2869 #ifdef ENABLE_CHECKING
2870   {
2871     rtx insn;
2872
2873     /* Search for any REG_LABEL notes which reference deleted labels.  */
2874     for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2875       {
2876         rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX);
2877
2878         if (inote && GET_CODE (inote) == NOTE_INSN_DELETED_LABEL)
2879           abort ();
2880       }
2881   }
2882 #endif
2883 }
2884
2885 /* A subroutine of verify_wide_reg, called through for_each_rtx.
2886    Search for REGNO.  If found, abort if it is not wider than word_mode.  */
2887
2888 static int
2889 verify_wide_reg_1 (px, pregno)
2890      rtx *px;
2891      void *pregno;
2892 {
2893   rtx x = *px;
2894   unsigned int regno = *(int *) pregno;
2895
2896   if (GET_CODE (x) == REG && REGNO (x) == regno)
2897     {
2898       if (GET_MODE_BITSIZE (GET_MODE (x)) <= BITS_PER_WORD)
2899         abort ();
2900       return 1;
2901     }
2902   return 0;
2903 }
2904
2905 /* A subroutine of verify_local_live_at_start.  Search through insns
2906    between HEAD and END looking for register REGNO.  */
2907
2908 static void
2909 verify_wide_reg (regno, head, end)
2910      int regno;
2911      rtx head, end;
2912 {
2913   while (1)
2914     {
2915       if (INSN_P (head)
2916           && for_each_rtx (&PATTERN (head), verify_wide_reg_1, &regno))
2917         return;
2918       if (head == end)
2919         break;
2920       head = NEXT_INSN (head);
2921     }
2922
2923   /* We didn't find the register at all.  Something's way screwy.  */
2924   if (rtl_dump_file)
2925     fprintf (rtl_dump_file, "Aborting in verify_wide_reg; reg %d\n", regno);
2926   print_rtl_and_abort ();
2927 }
2928
2929 /* A subroutine of update_life_info.  Verify that there are no untoward
2930    changes in live_at_start during a local update.  */
2931
2932 static void
2933 verify_local_live_at_start (new_live_at_start, bb)
2934      regset new_live_at_start;
2935      basic_block bb;
2936 {
2937   if (reload_completed)
2938     {
2939       /* After reload, there are no pseudos, nor subregs of multi-word
2940          registers.  The regsets should exactly match.  */
2941       if (! REG_SET_EQUAL_P (new_live_at_start, bb->global_live_at_start))
2942         {
2943           if (rtl_dump_file)
2944             {
2945               fprintf (rtl_dump_file,
2946                        "live_at_start mismatch in bb %d, aborting\n",
2947                        bb->index);
2948               debug_bitmap_file (rtl_dump_file, bb->global_live_at_start);
2949               debug_bitmap_file (rtl_dump_file, new_live_at_start);
2950             }
2951           print_rtl_and_abort ();
2952         }
2953     }
2954   else
2955     {
2956       int i;
2957
2958       /* Find the set of changed registers.  */
2959       XOR_REG_SET (new_live_at_start, bb->global_live_at_start);
2960
2961       EXECUTE_IF_SET_IN_REG_SET (new_live_at_start, 0, i,
2962         {
2963           /* No registers should die.  */
2964           if (REGNO_REG_SET_P (bb->global_live_at_start, i))
2965             {
2966               if (rtl_dump_file)
2967                 fprintf (rtl_dump_file,
2968                          "Register %d died unexpectedly in block %d\n", i,
2969                          bb->index);
2970               print_rtl_and_abort ();
2971             }
2972
2973           /* Verify that the now-live register is wider than word_mode.  */
2974           verify_wide_reg (i, bb->head, bb->end);
2975         });
2976     }
2977 }
2978
2979 /* Updates life information starting with the basic blocks set in BLOCKS.
2980    If BLOCKS is null, consider it to be the universal set.
2981
2982    If EXTENT is UPDATE_LIFE_LOCAL, such as after splitting or peepholeing,
2983    we are only expecting local modifications to basic blocks.  If we find
2984    extra registers live at the beginning of a block, then we either killed
2985    useful data, or we have a broken split that wants data not provided.
2986    If we find registers removed from live_at_start, that means we have
2987    a broken peephole that is killing a register it shouldn't.
2988
2989    ??? This is not true in one situation -- when a pre-reload splitter
2990    generates subregs of a multi-word pseudo, current life analysis will
2991    lose the kill.  So we _can_ have a pseudo go live.  How irritating.
2992
2993    Including PROP_REG_INFO does not properly refresh regs_ever_live
2994    unless the caller resets it to zero.  */
2995
2996 void
2997 update_life_info (blocks, extent, prop_flags)
2998      sbitmap blocks;
2999      enum update_life_extent extent;
3000      int prop_flags;
3001 {
3002   regset tmp;
3003   regset_head tmp_head;
3004   int i;
3005
3006   tmp = INITIALIZE_REG_SET (tmp_head);
3007
3008   /* For a global update, we go through the relaxation process again.  */
3009   if (extent != UPDATE_LIFE_LOCAL)
3010     {
3011       calculate_global_regs_live (blocks, blocks,
3012                                   prop_flags & PROP_SCAN_DEAD_CODE);
3013
3014       /* If asked, remove notes from the blocks we'll update.  */
3015       if (extent == UPDATE_LIFE_GLOBAL_RM_NOTES)
3016         count_or_remove_death_notes (blocks, 1);
3017     }
3018
3019   if (blocks)
3020     {
3021       EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i,
3022         {
3023           basic_block bb = BASIC_BLOCK (i);
3024
3025           COPY_REG_SET (tmp, bb->global_live_at_end);
3026           propagate_block (bb, tmp, NULL, NULL, prop_flags);
3027
3028           if (extent == UPDATE_LIFE_LOCAL)
3029             verify_local_live_at_start (tmp, bb);
3030         });
3031     }
3032   else
3033     {
3034       for (i = n_basic_blocks - 1; i >= 0; --i)
3035         {
3036           basic_block bb = BASIC_BLOCK (i);
3037
3038           COPY_REG_SET (tmp, bb->global_live_at_end);
3039           propagate_block (bb, tmp, NULL, NULL, prop_flags);
3040
3041           if (extent == UPDATE_LIFE_LOCAL)
3042             verify_local_live_at_start (tmp, bb);
3043         }
3044     }
3045
3046   FREE_REG_SET (tmp);
3047
3048   if (prop_flags & PROP_REG_INFO)
3049     {
3050       /* The only pseudos that are live at the beginning of the function
3051          are those that were not set anywhere in the function.  local-alloc
3052          doesn't know how to handle these correctly, so mark them as not
3053          local to any one basic block.  */
3054       EXECUTE_IF_SET_IN_REG_SET (ENTRY_BLOCK_PTR->global_live_at_end,
3055                                  FIRST_PSEUDO_REGISTER, i,
3056                                  { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
3057
3058       /* We have a problem with any pseudoreg that lives across the setjmp.
3059          ANSI says that if a user variable does not change in value between
3060          the setjmp and the longjmp, then the longjmp preserves it.  This
3061          includes longjmp from a place where the pseudo appears dead.
3062          (In principle, the value still exists if it is in scope.)
3063          If the pseudo goes in a hard reg, some other value may occupy
3064          that hard reg where this pseudo is dead, thus clobbering the pseudo.
3065          Conclusion: such a pseudo must not go in a hard reg.  */
3066       EXECUTE_IF_SET_IN_REG_SET (regs_live_at_setjmp,
3067                                  FIRST_PSEUDO_REGISTER, i,
3068                                  {
3069                                    if (regno_reg_rtx[i] != 0)
3070                                      {
3071                                        REG_LIVE_LENGTH (i) = -1;
3072                                        REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
3073                                      }
3074                                  });
3075     }
3076 }
3077
3078 /* Free the variables allocated by find_basic_blocks.
3079
3080    KEEP_HEAD_END_P is non-zero if basic_block_info is not to be freed.  */
3081
3082 void
3083 free_basic_block_vars (keep_head_end_p)
3084      int keep_head_end_p;
3085 {
3086   if (basic_block_for_insn)
3087     {
3088       VARRAY_FREE (basic_block_for_insn);
3089       basic_block_for_insn = NULL;
3090     }
3091
3092   if (! keep_head_end_p)
3093     {
3094       if (basic_block_info)
3095         {
3096           clear_edges ();
3097           VARRAY_FREE (basic_block_info);
3098         }
3099       n_basic_blocks = 0;
3100
3101       ENTRY_BLOCK_PTR->aux = NULL;
3102       ENTRY_BLOCK_PTR->global_live_at_end = NULL;
3103       EXIT_BLOCK_PTR->aux = NULL;
3104       EXIT_BLOCK_PTR->global_live_at_start = NULL;
3105     }
3106 }
3107
3108 /* Return nonzero if an insn consists only of SETs, each of which only sets a
3109    value to itself.  */
3110
3111 static int
3112 noop_move_p (insn)
3113      rtx insn;
3114 {
3115   rtx pat = PATTERN (insn);
3116
3117   /* Insns carrying these notes are useful later on.  */
3118   if (find_reg_note (insn, REG_EQUAL, NULL_RTX))
3119     return 0;
3120
3121   if (GET_CODE (pat) == SET && set_noop_p (pat))
3122     return 1;
3123
3124   if (GET_CODE (pat) == PARALLEL)
3125     {
3126       int i;
3127       /* If nothing but SETs of registers to themselves,
3128          this insn can also be deleted.  */
3129       for (i = 0; i < XVECLEN (pat, 0); i++)
3130         {
3131           rtx tem = XVECEXP (pat, 0, i);
3132
3133           if (GET_CODE (tem) == USE
3134               || GET_CODE (tem) == CLOBBER)
3135             continue;
3136
3137           if (GET_CODE (tem) != SET || ! set_noop_p (tem))
3138             return 0;
3139         }
3140
3141       return 1;
3142     }
3143   return 0;
3144 }
3145
3146 /* Delete any insns that copy a register to itself.  */
3147
3148 static void
3149 delete_noop_moves (f)
3150      rtx f;
3151 {
3152   rtx insn;
3153   for (insn = f; insn; insn = NEXT_INSN (insn))
3154     {
3155       if (GET_CODE (insn) == INSN && noop_move_p (insn))
3156         {
3157           PUT_CODE (insn, NOTE);
3158           NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
3159           NOTE_SOURCE_FILE (insn) = 0;
3160         }
3161     }
3162 }
3163
3164 /* Determine if the stack pointer is constant over the life of the function.
3165    Only useful before prologues have been emitted.  */
3166
3167 static void
3168 notice_stack_pointer_modification_1 (x, pat, data)
3169      rtx x;
3170      rtx pat ATTRIBUTE_UNUSED;
3171      void *data ATTRIBUTE_UNUSED;
3172 {
3173   if (x == stack_pointer_rtx
3174       /* The stack pointer is only modified indirectly as the result
3175          of a push until later in flow.  See the comments in rtl.texi
3176          regarding Embedded Side-Effects on Addresses.  */
3177       || (GET_CODE (x) == MEM
3178           && GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == 'a'
3179           && XEXP (XEXP (x, 0), 0) == stack_pointer_rtx))
3180     current_function_sp_is_unchanging = 0;
3181 }
3182
3183 static void
3184 notice_stack_pointer_modification (f)
3185      rtx f;
3186 {
3187   rtx insn;
3188
3189   /* Assume that the stack pointer is unchanging if alloca hasn't
3190      been used.  */
3191   current_function_sp_is_unchanging = !current_function_calls_alloca;
3192   if (! current_function_sp_is_unchanging)
3193     return;
3194
3195   for (insn = f; insn; insn = NEXT_INSN (insn))
3196     {
3197       if (INSN_P (insn))
3198         {
3199           /* Check if insn modifies the stack pointer.  */
3200           note_stores (PATTERN (insn), notice_stack_pointer_modification_1,
3201                        NULL);
3202           if (! current_function_sp_is_unchanging)
3203             return;
3204         }
3205     }
3206 }
3207
3208 /* Mark a register in SET.  Hard registers in large modes get all
3209    of their component registers set as well.  */
3210
3211 static void
3212 mark_reg (reg, xset)
3213      rtx reg;
3214      void *xset;
3215 {
3216   regset set = (regset) xset;
3217   int regno = REGNO (reg);
3218
3219   if (GET_MODE (reg) == BLKmode)
3220     abort ();
3221
3222   SET_REGNO_REG_SET (set, regno);
3223   if (regno < FIRST_PSEUDO_REGISTER)
3224     {
3225       int n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
3226       while (--n > 0)
3227         SET_REGNO_REG_SET (set, regno + n);
3228     }
3229 }
3230
3231 /* Mark those regs which are needed at the end of the function as live
3232    at the end of the last basic block.  */
3233
3234 static void
3235 mark_regs_live_at_end (set)
3236      regset set;
3237 {
3238   int i;
3239
3240   /* If exiting needs the right stack value, consider the stack pointer
3241      live at the end of the function.  */
3242   if ((HAVE_epilogue && reload_completed)
3243       || ! EXIT_IGNORE_STACK
3244       || (! FRAME_POINTER_REQUIRED
3245           && ! current_function_calls_alloca
3246           && flag_omit_frame_pointer)
3247       || current_function_sp_is_unchanging)
3248     {
3249       SET_REGNO_REG_SET (set, STACK_POINTER_REGNUM);
3250     }
3251
3252   /* Mark the frame pointer if needed at the end of the function.  If
3253      we end up eliminating it, it will be removed from the live list
3254      of each basic block by reload.  */
3255
3256   if (! reload_completed || frame_pointer_needed)
3257     {
3258       SET_REGNO_REG_SET (set, FRAME_POINTER_REGNUM);
3259 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
3260       /* If they are different, also mark the hard frame pointer as live.  */
3261       if (! LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM))
3262         SET_REGNO_REG_SET (set, HARD_FRAME_POINTER_REGNUM);
3263 #endif
3264     }
3265
3266 #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
3267   /* Many architectures have a GP register even without flag_pic.
3268      Assume the pic register is not in use, or will be handled by
3269      other means, if it is not fixed.  */
3270   if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
3271       && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
3272     SET_REGNO_REG_SET (set, PIC_OFFSET_TABLE_REGNUM);
3273 #endif
3274
3275   /* Mark all global registers, and all registers used by the epilogue
3276      as being live at the end of the function since they may be
3277      referenced by our caller.  */
3278   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3279     if (global_regs[i] || EPILOGUE_USES (i))
3280       SET_REGNO_REG_SET (set, i);
3281
3282   if (HAVE_epilogue && reload_completed)
3283     {
3284       /* Mark all call-saved registers that we actually used.  */
3285       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3286         if (regs_ever_live[i] && ! call_used_regs[i] && ! LOCAL_REGNO (i))
3287           SET_REGNO_REG_SET (set, i);
3288     }
3289
3290 #ifdef EH_RETURN_DATA_REGNO
3291   /* Mark the registers that will contain data for the handler.  */
3292   if (reload_completed && current_function_calls_eh_return)
3293     for (i = 0; ; ++i)
3294       {
3295         unsigned regno = EH_RETURN_DATA_REGNO(i);
3296         if (regno == INVALID_REGNUM)
3297           break;
3298         SET_REGNO_REG_SET (set, regno);
3299       }
3300 #endif
3301 #ifdef EH_RETURN_STACKADJ_RTX
3302   if ((! HAVE_epilogue || ! reload_completed)
3303       && current_function_calls_eh_return)
3304     {
3305       rtx tmp = EH_RETURN_STACKADJ_RTX;
3306       if (tmp && REG_P (tmp))
3307         mark_reg (tmp, set);
3308     }
3309 #endif
3310 #ifdef EH_RETURN_HANDLER_RTX
3311   if ((! HAVE_epilogue || ! reload_completed)
3312       && current_function_calls_eh_return)
3313     {
3314       rtx tmp = EH_RETURN_HANDLER_RTX;
3315       if (tmp && REG_P (tmp))
3316         mark_reg (tmp, set);
3317     }
3318 #endif
3319
3320   /* Mark function return value.  */
3321   diddle_return_value (mark_reg, set);
3322 }
3323
3324 /* Callback function for for_each_successor_phi.  DATA is a regset.
3325    Sets the SRC_REGNO, the regno of the phi alternative for phi node
3326    INSN, in the regset.  */
3327
3328 static int
3329 set_phi_alternative_reg (insn, dest_regno, src_regno, data)
3330      rtx insn ATTRIBUTE_UNUSED;
3331      int dest_regno ATTRIBUTE_UNUSED;
3332      int src_regno;
3333      void *data;
3334 {
3335   regset live = (regset) data;
3336   SET_REGNO_REG_SET (live, src_regno);
3337   return 0;
3338 }
3339
3340 /* Propagate global life info around the graph of basic blocks.  Begin
3341    considering blocks with their corresponding bit set in BLOCKS_IN.
3342    If BLOCKS_IN is null, consider it the universal set.
3343
3344    BLOCKS_OUT is set for every block that was changed.  */
3345
3346 static void
3347 calculate_global_regs_live (blocks_in, blocks_out, flags)
3348      sbitmap blocks_in, blocks_out;
3349      int flags;
3350 {
3351   basic_block *queue, *qhead, *qtail, *qend;
3352   regset tmp, new_live_at_end, call_used;
3353   regset_head tmp_head, call_used_head;
3354   regset_head new_live_at_end_head;
3355   int i;
3356
3357   tmp = INITIALIZE_REG_SET (tmp_head);
3358   new_live_at_end = INITIALIZE_REG_SET (new_live_at_end_head);
3359   call_used = INITIALIZE_REG_SET (call_used_head);
3360
3361   /* Inconveniently, this is only redily available in hard reg set form.  */
3362   for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
3363     if (call_used_regs[i])
3364       SET_REGNO_REG_SET (call_used, i);
3365
3366   /* Create a worklist.  Allocate an extra slot for ENTRY_BLOCK, and one
3367      because the `head == tail' style test for an empty queue doesn't
3368      work with a full queue.  */
3369   queue = (basic_block *) xmalloc ((n_basic_blocks + 2) * sizeof (*queue));
3370   qtail = queue;
3371   qhead = qend = queue + n_basic_blocks + 2;
3372
3373   /* Queue the blocks set in the initial mask.  Do this in reverse block
3374      number order so that we are more likely for the first round to do
3375      useful work.  We use AUX non-null to flag that the block is queued.  */
3376   if (blocks_in)
3377     {
3378       /* Clear out the garbage that might be hanging out in bb->aux.  */
3379       for (i = n_basic_blocks - 1; i >= 0; --i)
3380         BASIC_BLOCK (i)->aux = NULL;
3381
3382       EXECUTE_IF_SET_IN_SBITMAP (blocks_in, 0, i,
3383         {
3384           basic_block bb = BASIC_BLOCK (i);
3385           *--qhead = bb;
3386           bb->aux = bb;
3387         });
3388     }
3389   else
3390     {
3391       for (i = 0; i < n_basic_blocks; ++i)
3392         {
3393           basic_block bb = BASIC_BLOCK (i);
3394           *--qhead = bb;
3395           bb->aux = bb;
3396         }
3397     }
3398
3399   if (blocks_out)
3400     sbitmap_zero (blocks_out);
3401
3402   /* We work through the queue until there are no more blocks.  What
3403      is live at the end of this block is precisely the union of what
3404      is live at the beginning of all its successors.  So, we set its
3405      GLOBAL_LIVE_AT_END field based on the GLOBAL_LIVE_AT_START field
3406      for its successors.  Then, we compute GLOBAL_LIVE_AT_START for
3407      this block by walking through the instructions in this block in
3408      reverse order and updating as we go.  If that changed
3409      GLOBAL_LIVE_AT_START, we add the predecessors of the block to the
3410      queue; they will now need to recalculate GLOBAL_LIVE_AT_END.
3411
3412      We are guaranteed to terminate, because GLOBAL_LIVE_AT_START
3413      never shrinks.  If a register appears in GLOBAL_LIVE_AT_START, it
3414      must either be live at the end of the block, or used within the
3415      block.  In the latter case, it will certainly never disappear
3416      from GLOBAL_LIVE_AT_START.  In the former case, the register
3417      could go away only if it disappeared from GLOBAL_LIVE_AT_START
3418      for one of the successor blocks.  By induction, that cannot
3419      occur.  */
3420   while (qhead != qtail)
3421     {
3422       int rescan, changed;
3423       basic_block bb;
3424       edge e;
3425
3426       bb = *qhead++;
3427       if (qhead == qend)
3428         qhead = queue;
3429       bb->aux = NULL;
3430
3431       /* Begin by propagating live_at_start from the successor blocks.  */
3432       CLEAR_REG_SET (new_live_at_end);
3433       for (e = bb->succ; e; e = e->succ_next)
3434         {
3435           basic_block sb = e->dest;
3436
3437           /* Call-clobbered registers die across exception and call edges.  */
3438           /* ??? Abnormal call edges ignored for the moment, as this gets
3439              confused by sibling call edges, which crashes reg-stack.  */
3440           if (e->flags & EDGE_EH)
3441             {
3442               bitmap_operation (tmp, sb->global_live_at_start,
3443                                 call_used, BITMAP_AND_COMPL);
3444               IOR_REG_SET (new_live_at_end, tmp);
3445             }
3446           else
3447             IOR_REG_SET (new_live_at_end, sb->global_live_at_start);
3448         }
3449
3450       /* The all-important stack pointer must always be live.  */
3451       SET_REGNO_REG_SET (new_live_at_end, STACK_POINTER_REGNUM);
3452
3453       /* Before reload, there are a few registers that must be forced
3454          live everywhere -- which might not already be the case for
3455          blocks within infinite loops.  */
3456       if (! reload_completed)
3457         {
3458           /* Any reference to any pseudo before reload is a potential
3459              reference of the frame pointer.  */
3460           SET_REGNO_REG_SET (new_live_at_end, FRAME_POINTER_REGNUM);
3461
3462 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3463           /* Pseudos with argument area equivalences may require
3464              reloading via the argument pointer.  */
3465           if (fixed_regs[ARG_POINTER_REGNUM])
3466             SET_REGNO_REG_SET (new_live_at_end, ARG_POINTER_REGNUM);
3467 #endif
3468
3469           /* Any constant, or pseudo with constant equivalences, may
3470              require reloading from memory using the pic register.  */
3471           if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
3472               && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
3473             SET_REGNO_REG_SET (new_live_at_end, PIC_OFFSET_TABLE_REGNUM);
3474         }
3475
3476       /* Regs used in phi nodes are not included in
3477          global_live_at_start, since they are live only along a
3478          particular edge.  Set those regs that are live because of a
3479          phi node alternative corresponding to this particular block.  */
3480       if (in_ssa_form)
3481         for_each_successor_phi (bb, &set_phi_alternative_reg,
3482                                 new_live_at_end);
3483
3484       if (bb == ENTRY_BLOCK_PTR)
3485         {
3486           COPY_REG_SET (bb->global_live_at_end, new_live_at_end);
3487           continue;
3488         }
3489
3490       /* On our first pass through this block, we'll go ahead and continue.
3491          Recognize first pass by local_set NULL.  On subsequent passes, we
3492          get to skip out early if live_at_end wouldn't have changed.  */
3493
3494       if (bb->local_set == NULL)
3495         {
3496           bb->local_set = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3497           bb->cond_local_set = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3498           rescan = 1;
3499         }
3500       else
3501         {
3502           /* If any bits were removed from live_at_end, we'll have to
3503              rescan the block.  This wouldn't be necessary if we had
3504              precalculated local_live, however with PROP_SCAN_DEAD_CODE
3505              local_live is really dependent on live_at_end.  */
3506           CLEAR_REG_SET (tmp);
3507           rescan = bitmap_operation (tmp, bb->global_live_at_end,
3508                                      new_live_at_end, BITMAP_AND_COMPL);
3509
3510           if (! rescan)
3511             {
3512               /* If any of the registers in the new live_at_end set are
3513                  conditionally set in this basic block, we must rescan.
3514                  This is because conditional lifetimes at the end of the
3515                  block do not just take the live_at_end set into account,
3516                  but also the liveness at the start of each successor
3517                  block.  We can miss changes in those sets if we only
3518                  compare the new live_at_end against the previous one.  */
3519               CLEAR_REG_SET (tmp);
3520               rescan = bitmap_operation (tmp, new_live_at_end,
3521                                          bb->cond_local_set, BITMAP_AND);
3522             }
3523
3524           if (! rescan)
3525             {
3526               /* Find the set of changed bits.  Take this opportunity
3527                  to notice that this set is empty and early out.  */
3528               CLEAR_REG_SET (tmp);
3529               changed = bitmap_operation (tmp, bb->global_live_at_end,
3530                                           new_live_at_end, BITMAP_XOR);
3531               if (! changed)
3532                 continue;
3533
3534               /* If any of the changed bits overlap with local_set,
3535                  we'll have to rescan the block.  Detect overlap by
3536                  the AND with ~local_set turning off bits.  */
3537               rescan = bitmap_operation (tmp, tmp, bb->local_set,
3538                                          BITMAP_AND_COMPL);
3539             }
3540         }
3541
3542       /* Let our caller know that BB changed enough to require its
3543          death notes updated.  */
3544       if (blocks_out)
3545         SET_BIT (blocks_out, bb->index);
3546
3547       if (! rescan)
3548         {
3549           /* Add to live_at_start the set of all registers in
3550              new_live_at_end that aren't in the old live_at_end.  */
3551
3552           bitmap_operation (tmp, new_live_at_end, bb->global_live_at_end,
3553                             BITMAP_AND_COMPL);
3554           COPY_REG_SET (bb->global_live_at_end, new_live_at_end);
3555
3556           changed = bitmap_operation (bb->global_live_at_start,
3557                                       bb->global_live_at_start,
3558                                       tmp, BITMAP_IOR);
3559           if (! changed)
3560             continue;
3561         }
3562       else
3563         {
3564           COPY_REG_SET (bb->global_live_at_end, new_live_at_end);
3565
3566           /* Rescan the block insn by insn to turn (a copy of) live_at_end
3567              into live_at_start.  */
3568           propagate_block (bb, new_live_at_end, bb->local_set,
3569                            bb->cond_local_set, flags);
3570
3571           /* If live_at start didn't change, no need to go farther.  */
3572           if (REG_SET_EQUAL_P (bb->global_live_at_start, new_live_at_end))
3573             continue;
3574
3575           COPY_REG_SET (bb->global_live_at_start, new_live_at_end);
3576         }
3577
3578       /* Queue all predecessors of BB so that we may re-examine
3579          their live_at_end.  */
3580       for (e = bb->pred; e; e = e->pred_next)
3581         {
3582           basic_block pb = e->src;
3583           if (pb->aux == NULL)
3584             {
3585               *qtail++ = pb;
3586               if (qtail == qend)
3587                 qtail = queue;
3588               pb->aux = pb;
3589             }
3590         }
3591     }
3592
3593   FREE_REG_SET (tmp);
3594   FREE_REG_SET (new_live_at_end);
3595   FREE_REG_SET (call_used);
3596
3597   if (blocks_out)
3598     {
3599       EXECUTE_IF_SET_IN_SBITMAP (blocks_out, 0, i,
3600         {
3601           basic_block bb = BASIC_BLOCK (i);
3602           FREE_REG_SET (bb->local_set);
3603           FREE_REG_SET (bb->cond_local_set);
3604         });
3605     }
3606   else
3607     {
3608       for (i = n_basic_blocks - 1; i >= 0; --i)
3609         {
3610           basic_block bb = BASIC_BLOCK (i);
3611           FREE_REG_SET (bb->local_set);
3612           FREE_REG_SET (bb->cond_local_set);
3613         }
3614     }
3615
3616   free (queue);
3617 }
3618 \f
3619 /* Subroutines of life analysis.  */
3620
3621 /* Allocate the permanent data structures that represent the results
3622    of life analysis.  Not static since used also for stupid life analysis.  */
3623
3624 static void
3625 allocate_bb_life_data ()
3626 {
3627   register int i;
3628
3629   for (i = 0; i < n_basic_blocks; i++)
3630     {
3631       basic_block bb = BASIC_BLOCK (i);
3632
3633       bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3634       bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3635     }
3636
3637   ENTRY_BLOCK_PTR->global_live_at_end
3638     = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3639   EXIT_BLOCK_PTR->global_live_at_start
3640     = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3641
3642   regs_live_at_setjmp = OBSTACK_ALLOC_REG_SET (&flow_obstack);
3643 }
3644
3645 void
3646 allocate_reg_life_data ()
3647 {
3648   int i;
3649
3650   max_regno = max_reg_num ();
3651
3652   /* Recalculate the register space, in case it has grown.  Old style
3653      vector oriented regsets would set regset_{size,bytes} here also.  */
3654   allocate_reg_info (max_regno, FALSE, FALSE);
3655
3656   /* Reset all the data we'll collect in propagate_block and its
3657      subroutines.  */
3658   for (i = 0; i < max_regno; i++)
3659     {
3660       REG_N_SETS (i) = 0;
3661       REG_N_REFS (i) = 0;
3662       REG_N_DEATHS (i) = 0;
3663       REG_N_CALLS_CROSSED (i) = 0;
3664       REG_LIVE_LENGTH (i) = 0;
3665       REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
3666     }
3667 }
3668
3669 /* Delete dead instructions for propagate_block.  */
3670
3671 static void
3672 propagate_block_delete_insn (bb, insn)
3673      basic_block bb;
3674      rtx insn;
3675 {
3676   rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX);
3677
3678   /* If the insn referred to a label, and that label was attached to
3679      an ADDR_VEC, it's safe to delete the ADDR_VEC.  In fact, it's
3680      pretty much mandatory to delete it, because the ADDR_VEC may be
3681      referencing labels that no longer exist.
3682
3683      INSN may reference a deleted label, particularly when a jump
3684      table has been optimized into a direct jump.  There's no
3685      real good way to fix up the reference to the deleted label
3686      when the label is deleted, so we just allow it here.
3687
3688      After dead code elimination is complete, we do search for
3689      any REG_LABEL notes which reference deleted labels as a
3690      sanity check.  */
3691
3692   if (inote && GET_CODE (inote) == CODE_LABEL)
3693     {
3694       rtx label = XEXP (inote, 0);
3695       rtx next;
3696
3697       /* The label may be forced if it has been put in the constant
3698          pool.  If that is the only use we must discard the table
3699          jump following it, but not the label itself.  */
3700       if (LABEL_NUSES (label) == 1 + LABEL_PRESERVE_P (label)
3701           && (next = next_nonnote_insn (label)) != NULL
3702           && GET_CODE (next) == JUMP_INSN
3703           && (GET_CODE (PATTERN (next)) == ADDR_VEC
3704               || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
3705         {
3706           rtx pat = PATTERN (next);
3707           int diff_vec_p = GET_CODE (pat) == ADDR_DIFF_VEC;
3708           int len = XVECLEN (pat, diff_vec_p);
3709           int i;
3710
3711           for (i = 0; i < len; i++)
3712             LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
3713
3714           flow_delete_insn (next);
3715         }
3716     }
3717
3718   if (bb->end == insn)
3719     bb->end = PREV_INSN (insn);
3720   flow_delete_insn (insn);
3721 }
3722
3723 /* Delete dead libcalls for propagate_block.  Return the insn
3724    before the libcall.  */
3725
3726 static rtx
3727 propagate_block_delete_libcall (bb, insn, note)
3728      basic_block bb;
3729      rtx insn, note;
3730 {
3731   rtx first = XEXP (note, 0);
3732   rtx before = PREV_INSN (first);
3733
3734   if (insn == bb->end)
3735     bb->end = before;
3736
3737   flow_delete_insn_chain (first, insn);
3738   return before;
3739 }
3740
3741 /* Update the life-status of regs for one insn.  Return the previous insn.  */
3742
3743 rtx
3744 propagate_one_insn (pbi, insn)
3745      struct propagate_block_info *pbi;
3746      rtx insn;
3747 {
3748   rtx prev = PREV_INSN (insn);
3749   int flags = pbi->flags;
3750   int insn_is_dead = 0;
3751   int libcall_is_dead = 0;
3752   rtx note;
3753   int i;
3754
3755   if (! INSN_P (insn))
3756     return prev;
3757
3758   note = find_reg_note (insn, REG_RETVAL, NULL_RTX);
3759   if (flags & PROP_SCAN_DEAD_CODE)
3760     {
3761       insn_is_dead = insn_dead_p (pbi, PATTERN (insn), 0, REG_NOTES (insn));
3762       libcall_is_dead = (insn_is_dead && note != 0
3763                          && libcall_dead_p (pbi, note, insn));
3764     }
3765
3766   /* If an instruction consists of just dead store(s) on final pass,
3767      delete it.  */
3768   if ((flags & PROP_KILL_DEAD_CODE) && insn_is_dead)
3769     {
3770       /* If we're trying to delete a prologue or epilogue instruction
3771          that isn't flagged as possibly being dead, something is wrong.
3772          But if we are keeping the stack pointer depressed, we might well
3773          be deleting insns that are used to compute the amount to update
3774          it by, so they are fine.  */
3775       if (reload_completed
3776           && !(TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
3777                 && (TYPE_RETURNS_STACK_DEPRESSED
3778                     (TREE_TYPE (current_function_decl))))
3779           && (((HAVE_epilogue || HAVE_prologue)
3780                && prologue_epilogue_contains (insn))
3781               || (HAVE_sibcall_epilogue
3782                   && sibcall_epilogue_contains (insn)))
3783           && find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0)
3784         abort ();
3785
3786       /* Record sets.  Do this even for dead instructions, since they
3787          would have killed the values if they hadn't been deleted.  */
3788       mark_set_regs (pbi, PATTERN (insn), insn);
3789
3790       /* CC0 is now known to be dead.  Either this insn used it,
3791          in which case it doesn't anymore, or clobbered it,
3792          so the next insn can't use it.  */
3793       pbi->cc0_live = 0;
3794
3795       if (libcall_is_dead)
3796         prev = propagate_block_delete_libcall (pbi->bb, insn, note);
3797       else
3798         propagate_block_delete_insn (pbi->bb, insn);
3799
3800       return prev;
3801     }
3802
3803   /* See if this is an increment or decrement that can be merged into
3804      a following memory address.  */
3805 #ifdef AUTO_INC_DEC
3806   {
3807     register rtx x = single_set (insn);
3808
3809     /* Does this instruction increment or decrement a register?  */
3810     if ((flags & PROP_AUTOINC)
3811         && x != 0
3812         && GET_CODE (SET_DEST (x)) == REG
3813         && (GET_CODE (SET_SRC (x)) == PLUS
3814             || GET_CODE (SET_SRC (x)) == MINUS)
3815         && XEXP (SET_SRC (x), 0) == SET_DEST (x)
3816         && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
3817         /* Ok, look for a following memory ref we can combine with.
3818            If one is found, change the memory ref to a PRE_INC
3819            or PRE_DEC, cancel this insn, and return 1.
3820            Return 0 if nothing has been done.  */
3821         && try_pre_increment_1 (pbi, insn))
3822       return prev;
3823   }
3824 #endif /* AUTO_INC_DEC */
3825
3826   CLEAR_REG_SET (pbi->new_set);
3827
3828   /* If this is not the final pass, and this insn is copying the value of
3829      a library call and it's dead, don't scan the insns that perform the
3830      library call, so that the call's arguments are not marked live.  */
3831   if (libcall_is_dead)
3832     {
3833       /* Record the death of the dest reg.  */
3834       mark_set_regs (pbi, PATTERN (insn), insn);
3835
3836       insn = XEXP (note, 0);
3837       return PREV_INSN (insn);
3838     }
3839   else if (GET_CODE (PATTERN (insn)) == SET
3840            && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
3841            && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
3842            && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
3843            && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
3844     /* We have an insn to pop a constant amount off the stack.
3845        (Such insns use PLUS regardless of the direction of the stack,
3846        and any insn to adjust the stack by a constant is always a pop.)
3847        These insns, if not dead stores, have no effect on life.  */
3848     ;
3849   else
3850     {
3851       /* Any regs live at the time of a call instruction must not go
3852          in a register clobbered by calls.  Find all regs now live and
3853          record this for them.  */
3854
3855       if (GET_CODE (insn) == CALL_INSN && (flags & PROP_REG_INFO))
3856         EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
3857                                    { REG_N_CALLS_CROSSED (i)++; });
3858
3859       /* Record sets.  Do this even for dead instructions, since they
3860          would have killed the values if they hadn't been deleted.  */
3861       mark_set_regs (pbi, PATTERN (insn), insn);
3862
3863       if (GET_CODE (insn) == CALL_INSN)
3864         {
3865           register int i;
3866           rtx note, cond;
3867
3868           cond = NULL_RTX;
3869           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
3870             cond = COND_EXEC_TEST (PATTERN (insn));
3871
3872           /* Non-constant calls clobber memory.  */
3873           if (! CONST_CALL_P (insn))
3874             {
3875               free_EXPR_LIST_list (&pbi->mem_set_list);
3876               pbi->mem_set_list_len = 0;
3877             }
3878
3879           /* There may be extra registers to be clobbered.  */
3880           for (note = CALL_INSN_FUNCTION_USAGE (insn);
3881                note;
3882                note = XEXP (note, 1))
3883             if (GET_CODE (XEXP (note, 0)) == CLOBBER)
3884               mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0),
3885                           cond, insn, pbi->flags);
3886
3887           /* Calls change all call-used and global registers.  */
3888           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3889             if (call_used_regs[i] && ! global_regs[i]
3890                 && ! fixed_regs[i])
3891               {
3892                 /* We do not want REG_UNUSED notes for these registers.  */
3893                 mark_set_1 (pbi, CLOBBER, gen_rtx_REG (reg_raw_mode[i], i),
3894                             cond, insn,
3895                             pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO));
3896               }
3897         }
3898
3899       /* If an insn doesn't use CC0, it becomes dead since we assume
3900          that every insn clobbers it.  So show it dead here;
3901          mark_used_regs will set it live if it is referenced.  */
3902       pbi->cc0_live = 0;
3903
3904       /* Record uses.  */
3905       if (! insn_is_dead)
3906         mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn);
3907
3908       /* Sometimes we may have inserted something before INSN (such as a move)
3909          when we make an auto-inc.  So ensure we will scan those insns.  */
3910 #ifdef AUTO_INC_DEC
3911       prev = PREV_INSN (insn);
3912 #endif
3913
3914       if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
3915         {
3916           register int i;
3917           rtx note, cond;
3918
3919           cond = NULL_RTX;
3920           if (GET_CODE (PATTERN (insn)) == COND_EXEC)
3921             cond = COND_EXEC_TEST (PATTERN (insn));
3922
3923           /* Calls use their arguments.  */
3924           for (note = CALL_INSN_FUNCTION_USAGE (insn);
3925                note;
3926                note = XEXP (note, 1))
3927             if (GET_CODE (XEXP (note, 0)) == USE)
3928               mark_used_regs (pbi, XEXP (XEXP (note, 0), 0),
3929                               cond, insn);
3930
3931           /* The stack ptr is used (honorarily) by a CALL insn.  */
3932           SET_REGNO_REG_SET (pbi->reg_live, STACK_POINTER_REGNUM);
3933
3934           /* Calls may also reference any of the global registers,
3935              so they are made live.  */
3936           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3937             if (global_regs[i])
3938               mark_used_reg (pbi, gen_rtx_REG (reg_raw_mode[i], i),
3939                              cond, insn);
3940         }
3941     }
3942
3943   /* On final pass, update counts of how many insns in which each reg
3944      is live.  */
3945   if (flags & PROP_REG_INFO)
3946     EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
3947                                { REG_LIVE_LENGTH (i)++; });
3948
3949   return prev;
3950 }
3951
3952 /* Initialize a propagate_block_info struct for public consumption.
3953    Note that the structure itself is opaque to this file, but that
3954    the user can use the regsets provided here.  */
3955
3956 struct propagate_block_info *
3957 init_propagate_block_info (bb, live, local_set, cond_local_set, flags)
3958      basic_block bb;
3959      regset live, local_set, cond_local_set;
3960      int flags;
3961 {
3962   struct propagate_block_info *pbi = xmalloc (sizeof (*pbi));
3963
3964   pbi->bb = bb;
3965   pbi->reg_live = live;
3966   pbi->mem_set_list = NULL_RTX;
3967   pbi->mem_set_list_len = 0;
3968   pbi->local_set = local_set;
3969   pbi->cond_local_set = cond_local_set;
3970   pbi->cc0_live = 0;
3971   pbi->flags = flags;
3972
3973   if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
3974     pbi->reg_next_use = (rtx *) xcalloc (max_reg_num (), sizeof (rtx));
3975   else
3976     pbi->reg_next_use = NULL;
3977
3978   pbi->new_set = BITMAP_XMALLOC ();
3979
3980 #ifdef HAVE_conditional_execution
3981   pbi->reg_cond_dead = splay_tree_new (splay_tree_compare_ints, NULL,
3982                                        free_reg_cond_life_info);
3983   pbi->reg_cond_reg = BITMAP_XMALLOC ();
3984
3985   /* If this block ends in a conditional branch, for each register live
3986      from one side of the branch and not the other, record the register
3987      as conditionally dead.  */
3988   if (GET_CODE (bb->end) == JUMP_INSN
3989       && any_condjump_p (bb->end))
3990     {
3991       regset_head diff_head;
3992       regset diff = INITIALIZE_REG_SET (diff_head);
3993       basic_block bb_true, bb_false;
3994       rtx cond_true, cond_false, set_src;
3995       int i;
3996
3997       /* Identify the successor blocks.  */
3998       bb_true = bb->succ->dest;
3999       if (bb->succ->succ_next != NULL)
4000         {
4001           bb_false = bb->succ->succ_next->dest;
4002
4003           if (bb->succ->flags & EDGE_FALLTHRU)
4004             {
4005               basic_block t = bb_false;
4006               bb_false = bb_true;
4007               bb_true = t;
4008             }
4009           else if (! (bb->succ->succ_next->flags & EDGE_FALLTHRU))
4010             abort ();
4011         }
4012       else
4013         {
4014           /* This can happen with a conditional jump to the next insn.  */
4015           if (JUMP_LABEL (bb->end) != bb_true->head)
4016             abort ();
4017
4018           /* Simplest way to do nothing.  */
4019           bb_false = bb_true;
4020         }
4021
4022       /* Extract the condition from the branch.  */
4023       set_src = SET_SRC (pc_set (bb->end));
4024       cond_true = XEXP (set_src, 0);
4025       cond_false = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
4026                                    GET_MODE (cond_true), XEXP (cond_true, 0),
4027                                    XEXP (cond_true, 1));
4028       if (GET_CODE (XEXP (set_src, 1)) == PC)
4029         {
4030           rtx t = cond_false;
4031           cond_false = cond_true;
4032           cond_true = t;
4033         }
4034
4035       /* Compute which register lead different lives in the successors.  */
4036       if (bitmap_operation (diff, bb_true->global_live_at_start,
4037                             bb_false->global_live_at_start, BITMAP_XOR))
4038         {
4039           rtx reg = XEXP (cond_true, 0);
4040
4041           if (GET_CODE (reg) == SUBREG)
4042             reg = SUBREG_REG (reg);
4043
4044           if (GET_CODE (reg) != REG)
4045             abort ();
4046
4047           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (reg));
4048
4049           /* For each such register, mark it conditionally dead.  */
4050           EXECUTE_IF_SET_IN_REG_SET
4051             (diff, 0, i,
4052              {
4053                struct reg_cond_life_info *rcli;
4054                rtx cond;
4055
4056                rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
4057
4058                if (REGNO_REG_SET_P (bb_true->global_live_at_start, i))
4059                  cond = cond_false;
4060                else
4061                  cond = cond_true;
4062                rcli->condition = cond;
4063                rcli->stores = const0_rtx;
4064                rcli->orig_condition = cond;
4065
4066                splay_tree_insert (pbi->reg_cond_dead, i,
4067                                   (splay_tree_value) rcli);
4068              });
4069         }
4070
4071       FREE_REG_SET (diff);
4072     }
4073 #endif
4074
4075   /* If this block has no successors, any stores to the frame that aren't
4076      used later in the block are dead.  So make a pass over the block
4077      recording any such that are made and show them dead at the end.  We do
4078      a very conservative and simple job here.  */
4079   if (optimize
4080       && ! (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
4081             && (TYPE_RETURNS_STACK_DEPRESSED
4082                 (TREE_TYPE (current_function_decl))))
4083       && (flags & PROP_SCAN_DEAD_CODE)
4084       && (bb->succ == NULL
4085           || (bb->succ->succ_next == NULL
4086               && bb->succ->dest == EXIT_BLOCK_PTR
4087               && ! current_function_calls_eh_return)))
4088     {
4089       rtx insn, set;
4090       for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn))
4091         if (GET_CODE (insn) == INSN
4092             && (set = single_set (insn))
4093             && GET_CODE (SET_DEST (set)) == MEM)
4094           {
4095             rtx mem = SET_DEST (set);
4096             rtx canon_mem = canon_rtx (mem);
4097
4098             /* This optimization is performed by faking a store to the
4099                memory at the end of the block.  This doesn't work for
4100                unchanging memories because multiple stores to unchanging
4101                memory is illegal and alias analysis doesn't consider it.  */
4102             if (RTX_UNCHANGING_P (canon_mem))
4103               continue;
4104
4105             if (XEXP (canon_mem, 0) == frame_pointer_rtx
4106                 || (GET_CODE (XEXP (canon_mem, 0)) == PLUS
4107                     && XEXP (XEXP (canon_mem, 0), 0) == frame_pointer_rtx
4108                     && GET_CODE (XEXP (XEXP (canon_mem, 0), 1)) == CONST_INT))
4109               {
4110 #ifdef AUTO_INC_DEC
4111                 /* Store a copy of mem, otherwise the address may be scrogged
4112                    by find_auto_inc.  This matters because insn_dead_p uses
4113                    an rtx_equal_p check to determine if two addresses are
4114                    the same.  This works before find_auto_inc, but fails
4115                    after find_auto_inc, causing discrepencies between the
4116                    set of live registers calculated during the
4117                    calculate_global_regs_live phase and what actually exists
4118                    after flow completes, leading to aborts.  */
4119                 if (flags & PROP_AUTOINC)
4120                   mem = shallow_copy_rtx (mem);
4121 #endif
4122                 pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
4123                 if (++pbi->mem_set_list_len >= MAX_MEM_SET_LIST_LEN)
4124                   break;
4125               }
4126           }
4127     }
4128
4129   return pbi;
4130 }
4131
4132 /* Release a propagate_block_info struct.  */
4133
4134 void
4135 free_propagate_block_info (pbi)
4136      struct propagate_block_info *pbi;
4137 {
4138   free_EXPR_LIST_list (&pbi->mem_set_list);
4139
4140   BITMAP_XFREE (pbi->new_set);
4141
4142 #ifdef HAVE_conditional_execution
4143   splay_tree_delete (pbi->reg_cond_dead);
4144   BITMAP_XFREE (pbi->reg_cond_reg);
4145 #endif
4146
4147   if (pbi->reg_next_use)
4148     free (pbi->reg_next_use);
4149
4150   free (pbi);
4151 }
4152
4153 /* Compute the registers live at the beginning of a basic block BB from
4154    those live at the end.
4155
4156    When called, REG_LIVE contains those live at the end.  On return, it
4157    contains those live at the beginning.
4158
4159    LOCAL_SET, if non-null, will be set with all registers killed
4160    unconditionally by this basic block.
4161    Likewise, COND_LOCAL_SET, if non-null, will be set with all registers
4162    killed conditionally by this basic block.  If there is any unconditional
4163    set of a register, then the corresponding bit will be set in LOCAL_SET
4164    and cleared in COND_LOCAL_SET.
4165    It is valid for LOCAL_SET and COND_LOCAL_SET to be the same set.  In this
4166    case, the resulting set will be equal to the union of the two sets that
4167    would otherwise be computed.  */
4168
4169 void
4170 propagate_block (bb, live, local_set, cond_local_set, flags)
4171      basic_block bb;
4172      regset live;
4173      regset local_set;
4174      regset cond_local_set;
4175      int flags;
4176 {
4177   struct propagate_block_info *pbi;
4178   rtx insn, prev;
4179
4180   pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags);
4181
4182   if (flags & PROP_REG_INFO)
4183     {
4184       register int i;
4185
4186       /* Process the regs live at the end of the block.
4187          Mark them as not local to any one basic block.  */
4188       EXECUTE_IF_SET_IN_REG_SET (live, 0, i,
4189                                  { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
4190     }
4191
4192   /* Scan the block an insn at a time from end to beginning.  */
4193
4194   for (insn = bb->end;; insn = prev)
4195     {
4196       /* If this is a call to `setjmp' et al, warn if any
4197          non-volatile datum is live.  */
4198       if ((flags & PROP_REG_INFO)
4199           && GET_CODE (insn) == NOTE
4200           && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
4201         IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live);
4202
4203       prev = propagate_one_insn (pbi, insn);
4204
4205       if (insn == bb->head)
4206         break;
4207     }
4208
4209   free_propagate_block_info (pbi);
4210 }
4211 \f
4212 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
4213    (SET expressions whose destinations are registers dead after the insn).
4214    NEEDED is the regset that says which regs are alive after the insn.
4215
4216    Unless CALL_OK is non-zero, an insn is needed if it contains a CALL.
4217
4218    If X is the entire body of an insn, NOTES contains the reg notes
4219    pertaining to the insn.  */
4220
4221 static int
4222 insn_dead_p (pbi, x, call_ok, notes)
4223      struct propagate_block_info *pbi;
4224      rtx x;
4225      int call_ok;
4226      rtx notes ATTRIBUTE_UNUSED;
4227 {
4228   enum rtx_code code = GET_CODE (x);
4229
4230 #ifdef AUTO_INC_DEC
4231   /* If flow is invoked after reload, we must take existing AUTO_INC
4232      expresions into account.  */
4233   if (reload_completed)
4234     {
4235       for (; notes; notes = XEXP (notes, 1))
4236         {
4237           if (REG_NOTE_KIND (notes) == REG_INC)
4238             {
4239               int regno = REGNO (XEXP (notes, 0));
4240
4241               /* Don't delete insns to set global regs.  */
4242               if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
4243                   || REGNO_REG_SET_P (pbi->reg_live, regno))
4244                 return 0;
4245             }
4246         }
4247     }
4248 #endif
4249
4250   /* If setting something that's a reg or part of one,
4251      see if that register's altered value will be live.  */
4252
4253   if (code == SET)
4254     {
4255       rtx r = SET_DEST (x);
4256
4257 #ifdef HAVE_cc0
4258       if (GET_CODE (r) == CC0)
4259         return ! pbi->cc0_live;
4260 #endif
4261
4262       /* A SET that is a subroutine call cannot be dead.  */
4263       if (GET_CODE (SET_SRC (x)) == CALL)
4264         {
4265           if (! call_ok)
4266             return 0;
4267         }
4268
4269       /* Don't eliminate loads from volatile memory or volatile asms.  */
4270       else if (volatile_refs_p (SET_SRC (x)))
4271         return 0;
4272
4273       if (GET_CODE (r) == MEM)
4274         {
4275           rtx temp;
4276
4277           if (MEM_VOLATILE_P (r))
4278             return 0;
4279
4280           /* Walk the set of memory locations we are currently tracking
4281              and see if one is an identical match to this memory location.
4282              If so, this memory write is dead (remember, we're walking
4283              backwards from the end of the block to the start).  Since
4284              rtx_equal_p does not check the alias set or flags, we also
4285              must have the potential for them to conflict (anti_dependence). */
4286           for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
4287             if (anti_dependence (r, XEXP (temp, 0)))
4288               {
4289                 rtx mem = XEXP (temp, 0);
4290
4291                 if (rtx_equal_p (mem, r))
4292                   return 1;
4293 #ifdef AUTO_INC_DEC
4294                 /* Check if memory reference matches an auto increment. Only
4295                    post increment/decrement or modify are valid.  */
4296                 if (GET_MODE (mem) == GET_MODE (r)
4297                     && (GET_CODE (XEXP (mem, 0)) == POST_DEC
4298                         || GET_CODE (XEXP (mem, 0)) == POST_INC
4299                         || GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
4300                     && GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
4301                     && rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
4302                   return 1;
4303 #endif
4304               }
4305         }
4306       else
4307         {
4308           while (GET_CODE (r) == SUBREG
4309                  || GET_CODE (r) == STRICT_LOW_PART
4310                  || GET_CODE (r) == ZERO_EXTRACT)
4311             r = XEXP (r, 0);
4312
4313           if (GET_CODE (r) == REG)
4314             {
4315               int regno = REGNO (r);
4316
4317               /* Obvious.  */
4318               if (REGNO_REG_SET_P (pbi->reg_live, regno))
4319                 return 0;
4320
4321               /* If this is a hard register, verify that subsequent
4322                  words are not needed.  */
4323               if (regno < FIRST_PSEUDO_REGISTER)
4324                 {
4325                   int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
4326
4327                   while (--n > 0)
4328                     if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
4329                       return 0;
4330                 }
4331
4332               /* Don't delete insns to set global regs.  */
4333               if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
4334                 return 0;
4335
4336               /* Make sure insns to set the stack pointer aren't deleted.  */
4337               if (regno == STACK_POINTER_REGNUM)
4338                 return 0;
4339
4340               /* ??? These bits might be redundant with the force live bits
4341                  in calculate_global_regs_live.  We would delete from
4342                  sequential sets; whether this actually affects real code
4343                  for anything but the stack pointer I don't know.  */
4344               /* Make sure insns to set the frame pointer aren't deleted.  */
4345               if (regno == FRAME_POINTER_REGNUM
4346                   && (! reload_completed || frame_pointer_needed))
4347                 return 0;
4348 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
4349               if (regno == HARD_FRAME_POINTER_REGNUM
4350                   && (! reload_completed || frame_pointer_needed))
4351                 return 0;
4352 #endif
4353
4354 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4355               /* Make sure insns to set arg pointer are never deleted
4356                  (if the arg pointer isn't fixed, there will be a USE
4357                  for it, so we can treat it normally).  */
4358               if (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
4359                 return 0;
4360 #endif
4361
4362               /* Otherwise, the set is dead.  */
4363               return 1;
4364             }
4365         }
4366     }
4367
4368   /* If performing several activities, insn is dead if each activity
4369      is individually dead.  Also, CLOBBERs and USEs can be ignored; a
4370      CLOBBER or USE that's inside a PARALLEL doesn't make the insn
4371      worth keeping.  */
4372   else if (code == PARALLEL)
4373     {
4374       int i = XVECLEN (x, 0);
4375
4376       for (i--; i >= 0; i--)
4377         if (GET_CODE (XVECEXP (x, 0, i)) != CLOBBER
4378             && GET_CODE (XVECEXP (x, 0, i)) != USE
4379             && ! insn_dead_p (pbi, XVECEXP (x, 0, i), call_ok, NULL_RTX))
4380           return 0;
4381
4382       return 1;
4383     }
4384
4385   /* A CLOBBER of a pseudo-register that is dead serves no purpose.  That
4386      is not necessarily true for hard registers.  */
4387   else if (code == CLOBBER && GET_CODE (XEXP (x, 0)) == REG
4388            && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER
4389            && ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
4390     return 1;
4391
4392   /* We do not check other CLOBBER or USE here.  An insn consisting of just
4393      a CLOBBER or just a USE should not be deleted.  */
4394   return 0;
4395 }
4396
4397 /* If INSN is the last insn in a libcall, and assuming INSN is dead,
4398    return 1 if the entire library call is dead.
4399    This is true if INSN copies a register (hard or pseudo)
4400    and if the hard return reg of the call insn is dead.
4401    (The caller should have tested the destination of the SET inside
4402    INSN already for death.)
4403
4404    If this insn doesn't just copy a register, then we don't
4405    have an ordinary libcall.  In that case, cse could not have
4406    managed to substitute the source for the dest later on,
4407    so we can assume the libcall is dead.
4408
4409    PBI is the block info giving pseudoregs live before this insn.
4410    NOTE is the REG_RETVAL note of the insn.  */
4411
4412 static int
4413 libcall_dead_p (pbi, note, insn)
4414      struct propagate_block_info *pbi;
4415      rtx note;
4416      rtx insn;
4417 {
4418   rtx x = single_set (insn);
4419
4420   if (x)
4421     {
4422       register rtx r = SET_SRC (x);
4423       if (GET_CODE (r) == REG)
4424         {
4425           rtx call = XEXP (note, 0);
4426           rtx call_pat;
4427           register int i;
4428
4429           /* Find the call insn.  */
4430           while (call != insn && GET_CODE (call) != CALL_INSN)
4431             call = NEXT_INSN (call);
4432
4433           /* If there is none, do nothing special,
4434              since ordinary death handling can understand these insns.  */
4435           if (call == insn)
4436             return 0;
4437
4438           /* See if the hard reg holding the value is dead.
4439              If this is a PARALLEL, find the call within it.  */
4440           call_pat = PATTERN (call);
4441           if (GET_CODE (call_pat) == PARALLEL)
4442             {
4443               for (i = XVECLEN (call_pat, 0) - 1; i >= 0; i--)
4444                 if (GET_CODE (XVECEXP (call_pat, 0, i)) == SET
4445                     && GET_CODE (SET_SRC (XVECEXP (call_pat, 0, i))) == CALL)
4446                   break;
4447
4448               /* This may be a library call that is returning a value
4449                  via invisible pointer.  Do nothing special, since
4450                  ordinary death handling can understand these insns.  */
4451               if (i < 0)
4452                 return 0;
4453
4454               call_pat = XVECEXP (call_pat, 0, i);
4455             }
4456
4457           return insn_dead_p (pbi, call_pat, 1, REG_NOTES (call));
4458         }
4459     }
4460   return 1;
4461 }
4462
4463 /* Return 1 if register REGNO was used before it was set, i.e. if it is
4464    live at function entry.  Don't count global register variables, variables
4465    in registers that can be used for function arg passing, or variables in
4466    fixed hard registers.  */
4467
4468 int
4469 regno_uninitialized (regno)
4470      int regno;
4471 {
4472   if (n_basic_blocks == 0
4473       || (regno < FIRST_PSEUDO_REGISTER
4474           && (global_regs[regno]
4475               || fixed_regs[regno]
4476               || FUNCTION_ARG_REGNO_P (regno))))
4477     return 0;
4478
4479   return REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno);
4480 }
4481
4482 /* 1 if register REGNO was alive at a place where `setjmp' was called
4483    and was set more than once or is an argument.
4484    Such regs may be clobbered by `longjmp'.  */
4485
4486 int
4487 regno_clobbered_at_setjmp (regno)
4488      int regno;
4489 {
4490   if (n_basic_blocks == 0)
4491     return 0;
4492
4493   return ((REG_N_SETS (regno) > 1
4494            || REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, regno))
4495           && REGNO_REG_SET_P (regs_live_at_setjmp, regno));
4496 }
4497 \f
4498 /* INSN references memory, possibly using autoincrement addressing modes.
4499    Find any entries on the mem_set_list that need to be invalidated due
4500    to an address change.  */
4501
4502 static void
4503 invalidate_mems_from_autoinc (pbi, insn)
4504      struct propagate_block_info *pbi;
4505      rtx insn;
4506 {
4507   rtx note = REG_NOTES (insn);
4508   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
4509     {
4510       if (REG_NOTE_KIND (note) == REG_INC)
4511         {
4512           rtx temp = pbi->mem_set_list;
4513           rtx prev = NULL_RTX;
4514           rtx next;
4515
4516           while (temp)
4517             {
4518               next = XEXP (temp, 1);
4519               if (reg_overlap_mentioned_p (XEXP (note, 0), XEXP (temp, 0)))
4520                 {
4521                   /* Splice temp out of list.  */
4522                   if (prev)
4523                     XEXP (prev, 1) = next;
4524                   else
4525                     pbi->mem_set_list = next;
4526                   free_EXPR_LIST_node (temp);
4527                   pbi->mem_set_list_len--;
4528                 }
4529               else
4530                 prev = temp;
4531               temp = next;
4532             }
4533         }
4534     }
4535 }
4536
4537 /* EXP is either a MEM or a REG.  Remove any dependant entries
4538    from pbi->mem_set_list.  */
4539
4540 static void
4541 invalidate_mems_from_set (pbi, exp)
4542      struct propagate_block_info *pbi;
4543      rtx exp;
4544 {
4545   rtx temp = pbi->mem_set_list;
4546   rtx prev = NULL_RTX;
4547   rtx next;
4548
4549   while (temp)
4550     {
4551       next = XEXP (temp, 1);
4552       if ((GET_CODE (exp) == MEM
4553            && output_dependence (XEXP (temp, 0), exp))
4554           || (GET_CODE (exp) == REG
4555               && reg_overlap_mentioned_p (exp, XEXP (temp, 0))))
4556         {
4557           /* Splice this entry out of the list.  */
4558           if (prev)
4559             XEXP (prev, 1) = next;
4560           else
4561             pbi->mem_set_list = next;
4562           free_EXPR_LIST_node (temp);
4563           pbi->mem_set_list_len--;
4564         }
4565       else
4566         prev = temp;
4567       temp = next;
4568     }
4569 }
4570
4571 /* Process the registers that are set within X.  Their bits are set to
4572    1 in the regset DEAD, because they are dead prior to this insn.
4573
4574    If INSN is nonzero, it is the insn being processed.
4575
4576    FLAGS is the set of operations to perform.  */
4577
4578 static void
4579 mark_set_regs (pbi, x, insn)
4580      struct propagate_block_info *pbi;
4581      rtx x, insn;
4582 {
4583   rtx cond = NULL_RTX;
4584   rtx link;
4585   enum rtx_code code;
4586
4587   if (insn)
4588     for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
4589       {
4590         if (REG_NOTE_KIND (link) == REG_INC)
4591           mark_set_1 (pbi, SET, XEXP (link, 0),
4592                       (GET_CODE (x) == COND_EXEC
4593                        ? COND_EXEC_TEST (x) : NULL_RTX),
4594                       insn, pbi->flags);
4595       }
4596  retry:
4597   switch (code = GET_CODE (x))
4598     {
4599     case SET:
4600     case CLOBBER:
4601       mark_set_1 (pbi, code, SET_DEST (x), cond, insn, pbi->flags);
4602       return;
4603
4604     case COND_EXEC:
4605       cond = COND_EXEC_TEST (x);
4606       x = COND_EXEC_CODE (x);
4607       goto retry;
4608
4609     case PARALLEL:
4610       {
4611         register int i;
4612         for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
4613           {
4614             rtx sub = XVECEXP (x, 0, i);
4615             switch (code = GET_CODE (sub))
4616               {
4617               case COND_EXEC:
4618                 if (cond != NULL_RTX)
4619                   abort ();
4620
4621                 cond = COND_EXEC_TEST (sub);
4622                 sub = COND_EXEC_CODE (sub);
4623                 if (GET_CODE (sub) != SET && GET_CODE (sub) != CLOBBER)
4624                   break;
4625                 /* Fall through.  */
4626
4627               case SET:
4628               case CLOBBER:
4629                 mark_set_1 (pbi, code, SET_DEST (sub), cond, insn, pbi->flags);
4630                 break;
4631
4632               default:
4633                 break;
4634               }
4635           }
4636         break;
4637       }
4638
4639     default:
4640       break;
4641     }
4642 }
4643
4644 /* Process a single set, which appears in INSN.  REG (which may not
4645    actually be a REG, it may also be a SUBREG, PARALLEL, etc.) is
4646    being set using the CODE (which may be SET, CLOBBER, or COND_EXEC).
4647    If the set is conditional (because it appear in a COND_EXEC), COND
4648    will be the condition.  */
4649
4650 static void
4651 mark_set_1 (pbi, code, reg, cond, insn, flags)
4652      struct propagate_block_info *pbi;
4653      enum rtx_code code;
4654      rtx reg, cond, insn;
4655      int flags;
4656 {
4657   int regno_first = -1, regno_last = -1;
4658   unsigned long not_dead = 0;
4659   int i;
4660
4661   /* Modifying just one hardware register of a multi-reg value or just a
4662      byte field of a register does not mean the value from before this insn
4663      is now dead.  Of course, if it was dead after it's unused now.  */
4664
4665   switch (GET_CODE (reg))
4666     {
4667     case PARALLEL:
4668       /* Some targets place small structures in registers for return values of
4669          functions.  We have to detect this case specially here to get correct
4670          flow information.  */
4671       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
4672         if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
4673           mark_set_1 (pbi, code, XEXP (XVECEXP (reg, 0, i), 0), cond, insn,
4674                       flags);
4675       return;
4676
4677     case ZERO_EXTRACT:
4678     case SIGN_EXTRACT:
4679     case STRICT_LOW_PART:
4680       /* ??? Assumes STRICT_LOW_PART not used on multi-word registers.  */
4681       do
4682         reg = XEXP (reg, 0);
4683       while (GET_CODE (reg) == SUBREG
4684              || GET_CODE (reg) == ZERO_EXTRACT
4685              || GET_CODE (reg) == SIGN_EXTRACT
4686              || GET_CODE (reg) == STRICT_LOW_PART);
4687       if (GET_CODE (reg) == MEM)
4688         break;
4689       not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live, REGNO (reg));
4690       /* Fall through.  */
4691
4692     case REG:
4693       regno_last = regno_first = REGNO (reg);
4694       if (regno_first < FIRST_PSEUDO_REGISTER)
4695         regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
4696       break;
4697
4698     case SUBREG:
4699       if (GET_CODE (SUBREG_REG (reg)) == REG)
4700         {
4701           enum machine_mode outer_mode = GET_MODE (reg);
4702           enum machine_mode inner_mode = GET_MODE (SUBREG_REG (reg));
4703
4704           /* Identify the range of registers affected.  This is moderately
4705              tricky for hard registers.  See alter_subreg.  */
4706
4707           regno_last = regno_first = REGNO (SUBREG_REG (reg));
4708           if (regno_first < FIRST_PSEUDO_REGISTER)
4709             {
4710               regno_first += subreg_regno_offset (regno_first, inner_mode,
4711                                                   SUBREG_BYTE (reg),
4712                                                   outer_mode);
4713               regno_last = (regno_first
4714                             + HARD_REGNO_NREGS (regno_first, outer_mode) - 1);
4715
4716               /* Since we've just adjusted the register number ranges, make
4717                  sure REG matches.  Otherwise some_was_live will be clear
4718                  when it shouldn't have been, and we'll create incorrect
4719                  REG_UNUSED notes.  */
4720               reg = gen_rtx_REG (outer_mode, regno_first);
4721             }
4722           else
4723             {
4724               /* If the number of words in the subreg is less than the number
4725                  of words in the full register, we have a well-defined partial
4726                  set.  Otherwise the high bits are undefined.
4727
4728                  This is only really applicable to pseudos, since we just took
4729                  care of multi-word hard registers.  */
4730               if (((GET_MODE_SIZE (outer_mode)
4731                     + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
4732                   < ((GET_MODE_SIZE (inner_mode)
4733                       + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
4734                 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live,
4735                                                             regno_first);
4736
4737               reg = SUBREG_REG (reg);
4738             }
4739         }
4740       else
4741         reg = SUBREG_REG (reg);
4742       break;
4743
4744     default:
4745       break;
4746     }
4747
4748   /* If this set is a MEM, then it kills any aliased writes.
4749      If this set is a REG, then it kills any MEMs which use the reg.  */
4750   if (optimize && (flags & PROP_SCAN_DEAD_CODE))
4751     {
4752       if (GET_CODE (reg) == MEM || GET_CODE (reg) == REG)
4753         invalidate_mems_from_set (pbi, reg);
4754
4755       /* If the memory reference had embedded side effects (autoincrement
4756          address modes.  Then we may need to kill some entries on the
4757          memory set list.  */
4758       if (insn && GET_CODE (reg) == MEM)
4759         invalidate_mems_from_autoinc (pbi, insn);
4760
4761       if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN
4762           && GET_CODE (reg) == MEM && ! side_effects_p (reg)
4763           /* ??? With more effort we could track conditional memory life.  */
4764           && ! cond
4765           /* We do not know the size of a BLKmode store, so we do not track
4766              them for redundant store elimination.  */
4767           && GET_MODE (reg) != BLKmode
4768           /* There are no REG_INC notes for SP, so we can't assume we'll see
4769              everything that invalidates it.  To be safe, don't eliminate any
4770              stores though SP; none of them should be redundant anyway.  */
4771           && ! reg_mentioned_p (stack_pointer_rtx, reg))
4772         {
4773 #ifdef AUTO_INC_DEC
4774           /* Store a copy of mem, otherwise the address may be
4775              scrogged by find_auto_inc.  */
4776           if (flags & PROP_AUTOINC)
4777             reg = shallow_copy_rtx (reg);
4778 #endif
4779           pbi->mem_set_list = alloc_EXPR_LIST (0, reg, pbi->mem_set_list);
4780           pbi->mem_set_list_len++;
4781         }
4782     }
4783
4784   if (GET_CODE (reg) == REG
4785       && ! (regno_first == FRAME_POINTER_REGNUM
4786             && (! reload_completed || frame_pointer_needed))
4787 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
4788       && ! (regno_first == HARD_FRAME_POINTER_REGNUM
4789             && (! reload_completed || frame_pointer_needed))
4790 #endif
4791 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4792       && ! (regno_first == ARG_POINTER_REGNUM && fixed_regs[regno_first])
4793 #endif
4794       )
4795     {
4796       int some_was_live = 0, some_was_dead = 0;
4797
4798       for (i = regno_first; i <= regno_last; ++i)
4799         {
4800           int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
4801           if (pbi->local_set)
4802             {
4803               /* Order of the set operation matters here since both
4804                  sets may be the same.  */
4805               CLEAR_REGNO_REG_SET (pbi->cond_local_set, i);
4806               if (cond != NULL_RTX
4807                   && ! REGNO_REG_SET_P (pbi->local_set, i))
4808                 SET_REGNO_REG_SET (pbi->cond_local_set, i);
4809               else
4810                 SET_REGNO_REG_SET (pbi->local_set, i);
4811             }
4812           if (code != CLOBBER)
4813             SET_REGNO_REG_SET (pbi->new_set, i);
4814
4815           some_was_live |= needed_regno;
4816           some_was_dead |= ! needed_regno;
4817         }
4818
4819 #ifdef HAVE_conditional_execution
4820       /* Consider conditional death in deciding that the register needs
4821          a death note.  */
4822       if (some_was_live && ! not_dead
4823           /* The stack pointer is never dead.  Well, not strictly true,
4824              but it's very difficult to tell from here.  Hopefully
4825              combine_stack_adjustments will fix up the most egregious
4826              errors.  */
4827           && regno_first != STACK_POINTER_REGNUM)
4828         {
4829           for (i = regno_first; i <= regno_last; ++i)
4830             if (! mark_regno_cond_dead (pbi, i, cond))
4831               not_dead |= ((unsigned long) 1) << (i - regno_first);
4832         }
4833 #endif
4834
4835       /* Additional data to record if this is the final pass.  */
4836       if (flags & (PROP_LOG_LINKS | PROP_REG_INFO
4837                    | PROP_DEATH_NOTES | PROP_AUTOINC))
4838         {
4839           register rtx y;
4840           register int blocknum = pbi->bb->index;
4841
4842           y = NULL_RTX;
4843           if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
4844             {
4845               y = pbi->reg_next_use[regno_first];
4846
4847               /* The next use is no longer next, since a store intervenes.  */
4848               for (i = regno_first; i <= regno_last; ++i)
4849                 pbi->reg_next_use[i] = 0;
4850             }
4851
4852           if (flags & PROP_REG_INFO)
4853             {
4854               for (i = regno_first; i <= regno_last; ++i)
4855                 {
4856                   /* Count (weighted) references, stores, etc.  This counts a
4857                      register twice if it is modified, but that is correct.  */
4858                   REG_N_SETS (i) += 1;
4859                   REG_N_REFS (i) += 1;
4860                   REG_FREQ (i) += (optimize_size ? 1 : pbi->bb->loop_depth + 1);
4861
4862                   /* The insns where a reg is live are normally counted
4863                      elsewhere, but we want the count to include the insn
4864                      where the reg is set, and the normal counting mechanism
4865                      would not count it.  */
4866                   REG_LIVE_LENGTH (i) += 1;
4867                 }
4868
4869               /* If this is a hard reg, record this function uses the reg.  */
4870               if (regno_first < FIRST_PSEUDO_REGISTER)
4871                 {
4872                   for (i = regno_first; i <= regno_last; i++)
4873                     regs_ever_live[i] = 1;
4874                 }
4875               else
4876                 {
4877                   /* Keep track of which basic blocks each reg appears in.  */
4878                   if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
4879                     REG_BASIC_BLOCK (regno_first) = blocknum;
4880                   else if (REG_BASIC_BLOCK (regno_first) != blocknum)
4881                     REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
4882                 }
4883             }
4884
4885           if (! some_was_dead)
4886             {
4887               if (flags & PROP_LOG_LINKS)
4888                 {
4889                   /* Make a logical link from the next following insn
4890                      that uses this register, back to this insn.
4891                      The following insns have already been processed.
4892
4893                      We don't build a LOG_LINK for hard registers containing
4894                      in ASM_OPERANDs.  If these registers get replaced,
4895                      we might wind up changing the semantics of the insn,
4896                      even if reload can make what appear to be valid
4897                      assignments later.  */
4898                   if (y && (BLOCK_NUM (y) == blocknum)
4899                       && (regno_first >= FIRST_PSEUDO_REGISTER
4900                           || asm_noperands (PATTERN (y)) < 0))
4901                     LOG_LINKS (y) = alloc_INSN_LIST (insn, LOG_LINKS (y));
4902                 }
4903             }
4904           else if (not_dead)
4905             ;
4906           else if (! some_was_live)
4907             {
4908               if (flags & PROP_REG_INFO)
4909                 REG_N_DEATHS (regno_first) += 1;
4910
4911               if (flags & PROP_DEATH_NOTES)
4912                 {
4913                   /* Note that dead stores have already been deleted
4914                      when possible.  If we get here, we have found a
4915                      dead store that cannot be eliminated (because the
4916                      same insn does something useful).  Indicate this
4917                      by marking the reg being set as dying here.  */
4918                   REG_NOTES (insn)
4919                     = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
4920                 }
4921             }
4922           else
4923             {
4924               if (flags & PROP_DEATH_NOTES)
4925                 {
4926                   /* This is a case where we have a multi-word hard register
4927                      and some, but not all, of the words of the register are
4928                      needed in subsequent insns.  Write REG_UNUSED notes
4929                      for those parts that were not needed.  This case should
4930                      be rare.  */
4931
4932                   for (i = regno_first; i <= regno_last; ++i)
4933                     if (! REGNO_REG_SET_P (pbi->reg_live, i))
4934                       REG_NOTES (insn)
4935                         = alloc_EXPR_LIST (REG_UNUSED,
4936                                            gen_rtx_REG (reg_raw_mode[i], i),
4937                                            REG_NOTES (insn));
4938                 }
4939             }
4940         }
4941
4942       /* Mark the register as being dead.  */
4943       if (some_was_live
4944           /* The stack pointer is never dead.  Well, not strictly true,
4945              but it's very difficult to tell from here.  Hopefully
4946              combine_stack_adjustments will fix up the most egregious
4947              errors.  */
4948           && regno_first != STACK_POINTER_REGNUM)
4949         {
4950           for (i = regno_first; i <= regno_last; ++i)
4951             if (!(not_dead & (((unsigned long) 1) << (i - regno_first))))
4952               CLEAR_REGNO_REG_SET (pbi->reg_live, i);
4953         }
4954     }
4955   else if (GET_CODE (reg) == REG)
4956     {
4957       if (flags & (PROP_LOG_LINKS | PROP_AUTOINC))
4958         pbi->reg_next_use[regno_first] = 0;
4959     }
4960
4961   /* If this is the last pass and this is a SCRATCH, show it will be dying
4962      here and count it.  */
4963   else if (GET_CODE (reg) == SCRATCH)
4964     {
4965       if (flags & PROP_DEATH_NOTES)
4966         REG_NOTES (insn)
4967           = alloc_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
4968     }
4969 }
4970 \f
4971 #ifdef HAVE_conditional_execution
4972 /* Mark REGNO conditionally dead.
4973    Return true if the register is now unconditionally dead.  */
4974
4975 static int
4976 mark_regno_cond_dead (pbi, regno, cond)
4977      struct propagate_block_info *pbi;
4978      int regno;
4979      rtx cond;
4980 {
4981   /* If this is a store to a predicate register, the value of the
4982      predicate is changing, we don't know that the predicate as seen
4983      before is the same as that seen after.  Flush all dependent
4984      conditions from reg_cond_dead.  This will make all such
4985      conditionally live registers unconditionally live.  */
4986   if (REGNO_REG_SET_P (pbi->reg_cond_reg, regno))
4987     flush_reg_cond_reg (pbi, regno);
4988
4989   /* If this is an unconditional store, remove any conditional
4990      life that may have existed.  */
4991   if (cond == NULL_RTX)
4992     splay_tree_remove (pbi->reg_cond_dead, regno);
4993   else
4994     {
4995       splay_tree_node node;
4996       struct reg_cond_life_info *rcli;
4997       rtx ncond;
4998
4999       /* Otherwise this is a conditional set.  Record that fact.
5000          It may have been conditionally used, or there may be a
5001          subsequent set with a complimentary condition.  */
5002
5003       node = splay_tree_lookup (pbi->reg_cond_dead, regno);
5004       if (node == NULL)
5005         {
5006           /* The register was unconditionally live previously.
5007              Record the current condition as the condition under
5008              which it is dead.  */
5009           rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
5010           rcli->condition = cond;
5011           rcli->stores = cond;
5012           rcli->orig_condition = const0_rtx;
5013           splay_tree_insert (pbi->reg_cond_dead, regno,
5014                              (splay_tree_value) rcli);
5015
5016           SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
5017
5018           /* Not unconditionaly dead.  */
5019           return 0;
5020         }
5021       else
5022         {
5023           /* The register was conditionally live previously.
5024              Add the new condition to the old.  */
5025           rcli = (struct reg_cond_life_info *) node->value;
5026           ncond = rcli->condition;
5027           ncond = ior_reg_cond (ncond, cond, 1);
5028           if (rcli->stores == const0_rtx)
5029             rcli->stores = cond;
5030           else if (rcli->stores != const1_rtx)
5031             rcli->stores = ior_reg_cond (rcli->stores, cond, 1);
5032
5033           /* If the register is now unconditionally dead, remove the entry
5034              in the splay_tree.  A register is unconditionally dead if the
5035              dead condition ncond is true.  A register is also unconditionally
5036              dead if the sum of all conditional stores is an unconditional
5037              store (stores is true), and the dead condition is identically the
5038              same as the original dead condition initialized at the end of
5039              the block.  This is a pointer compare, not an rtx_equal_p
5040              compare.  */
5041           if (ncond == const1_rtx
5042               || (ncond == rcli->orig_condition && rcli->stores == const1_rtx))
5043             splay_tree_remove (pbi->reg_cond_dead, regno);
5044           else
5045             {
5046               rcli->condition = ncond;
5047
5048               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
5049
5050               /* Not unconditionaly dead.  */
5051               return 0;
5052             }
5053         }
5054     }
5055
5056   return 1;
5057 }
5058
5059 /* Called from splay_tree_delete for pbi->reg_cond_life.  */
5060
5061 static void
5062 free_reg_cond_life_info (value)
5063      splay_tree_value value;
5064 {
5065   struct reg_cond_life_info *rcli = (struct reg_cond_life_info *) value;
5066   free (rcli);
5067 }
5068
5069 /* Helper function for flush_reg_cond_reg.  */
5070
5071 static int
5072 flush_reg_cond_reg_1 (node, data)
5073      splay_tree_node node;
5074      void *data;
5075 {
5076   struct reg_cond_life_info *rcli;
5077   int *xdata = (int *) data;
5078   unsigned int regno = xdata[0];
5079
5080   /* Don't need to search if last flushed value was farther on in
5081      the in-order traversal.  */
5082   if (xdata[1] >= (int) node->key)
5083     return 0;
5084
5085   /* Splice out portions of the expression that refer to regno.  */
5086   rcli = (struct reg_cond_life_info *) node->value;
5087   rcli->condition = elim_reg_cond (rcli->condition, regno);
5088   if (rcli->stores != const0_rtx && rcli->stores != const1_rtx)
5089     rcli->stores = elim_reg_cond (rcli->stores, regno);
5090
5091   /* If the entire condition is now false, signal the node to be removed.  */
5092   if (rcli->condition == const0_rtx)
5093     {
5094       xdata[1] = node->key;
5095       return -1;
5096     }
5097   else if (rcli->condition == const1_rtx)
5098     abort ();
5099
5100   return 0;
5101 }
5102
5103 /* Flush all (sub) expressions referring to REGNO from REG_COND_LIVE.  */
5104
5105 static void
5106 flush_reg_cond_reg (pbi, regno)
5107      struct propagate_block_info *pbi;
5108      int regno;
5109 {
5110   int pair[2];
5111
5112   pair[0] = regno;
5113   pair[1] = -1;
5114   while (splay_tree_foreach (pbi->reg_cond_dead,
5115                              flush_reg_cond_reg_1, pair) == -1)
5116     splay_tree_remove (pbi->reg_cond_dead, pair[1]);
5117
5118   CLEAR_REGNO_REG_SET (pbi->reg_cond_reg, regno);
5119 }
5120
5121 /* Logical arithmetic on predicate conditions.  IOR, NOT and AND.
5122    For ior/and, the ADD flag determines whether we want to add the new
5123    condition X to the old one unconditionally.  If it is zero, we will
5124    only return a new expression if X allows us to simplify part of
5125    OLD, otherwise we return OLD unchanged to the caller.
5126    If ADD is nonzero, we will return a new condition in all cases.  The
5127    toplevel caller of one of these functions should always pass 1 for
5128    ADD.  */
5129
5130 static rtx
5131 ior_reg_cond (old, x, add)
5132      rtx old, x;
5133      int add;
5134 {
5135   rtx op0, op1;
5136
5137   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
5138     {
5139       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
5140           && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
5141           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
5142         return const1_rtx;
5143       if (GET_CODE (x) == GET_CODE (old)
5144           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
5145         return old;
5146       if (! add)
5147         return old;
5148       return gen_rtx_IOR (0, old, x);
5149     }
5150
5151   switch (GET_CODE (old))
5152     {
5153     case IOR:
5154       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
5155       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
5156       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
5157         {
5158           if (op0 == const0_rtx)
5159             return op1;
5160           if (op1 == const0_rtx)
5161             return op0;
5162           if (op0 == const1_rtx || op1 == const1_rtx)
5163             return const1_rtx;
5164           if (op0 == XEXP (old, 0))
5165             op0 = gen_rtx_IOR (0, op0, x);
5166           else
5167             op1 = gen_rtx_IOR (0, op1, x);
5168           return gen_rtx_IOR (0, op0, op1);
5169         }
5170       if (! add)
5171         return old;
5172       return gen_rtx_IOR (0, old, x);
5173
5174     case AND:
5175       op0 = ior_reg_cond (XEXP (old, 0), x, 0);
5176       op1 = ior_reg_cond (XEXP (old, 1), x, 0);
5177       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
5178         {
5179           if (op0 == const1_rtx)
5180             return op1;
5181           if (op1 == const1_rtx)
5182             return op0;
5183           if (op0 == const0_rtx || op1 == const0_rtx)
5184             return const0_rtx;
5185           if (op0 == XEXP (old, 0))
5186             op0 = gen_rtx_IOR (0, op0, x);
5187           else
5188             op1 = gen_rtx_IOR (0, op1, x);
5189           return gen_rtx_AND (0, op0, op1);
5190         }
5191       if (! add)
5192         return old;
5193       return gen_rtx_IOR (0, old, x);
5194
5195     case NOT:
5196       op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
5197       if (op0 != XEXP (old, 0))
5198         return not_reg_cond (op0);
5199       if (! add)
5200         return old;
5201       return gen_rtx_IOR (0, old, x);
5202
5203     default:
5204       abort ();
5205     }
5206 }
5207
5208 static rtx
5209 not_reg_cond (x)
5210      rtx x;
5211 {
5212   enum rtx_code x_code;
5213
5214   if (x == const0_rtx)
5215     return const1_rtx;
5216   else if (x == const1_rtx)
5217     return const0_rtx;
5218   x_code = GET_CODE (x);
5219   if (x_code == NOT)
5220     return XEXP (x, 0);
5221   if (GET_RTX_CLASS (x_code) == '<'
5222       && GET_CODE (XEXP (x, 0)) == REG)
5223     {
5224       if (XEXP (x, 1) != const0_rtx)
5225         abort ();
5226
5227       return gen_rtx_fmt_ee (reverse_condition (x_code),
5228                              VOIDmode, XEXP (x, 0), const0_rtx);
5229     }
5230   return gen_rtx_NOT (0, x);
5231 }
5232
5233 static rtx
5234 and_reg_cond (old, x, add)
5235      rtx old, x;
5236      int add;
5237 {
5238   rtx op0, op1;
5239
5240   if (GET_RTX_CLASS (GET_CODE (old)) == '<')
5241     {
5242       if (GET_RTX_CLASS (GET_CODE (x)) == '<'
5243           && GET_CODE (x) == reverse_condition (GET_CODE (old))
5244           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
5245         return const0_rtx;
5246       if (GET_CODE (x) == GET_CODE (old)
5247           && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
5248         return old;
5249       if (! add)
5250         return old;
5251       return gen_rtx_AND (0, old, x);
5252     }
5253
5254   switch (GET_CODE (old))
5255     {
5256     case IOR:
5257       op0 = and_reg_cond (XEXP (old, 0), x, 0);
5258       op1 = and_reg_cond (XEXP (old, 1), x, 0);
5259       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
5260         {
5261           if (op0 == const0_rtx)
5262             return op1;
5263           if (op1 == const0_rtx)
5264             return op0;
5265           if (op0 == const1_rtx || op1 == const1_rtx)
5266             return const1_rtx;
5267           if (op0 == XEXP (old, 0))
5268             op0 = gen_rtx_AND (0, op0, x);
5269           else
5270             op1 = gen_rtx_AND (0, op1, x);
5271           return gen_rtx_IOR (0, op0, op1);
5272         }
5273       if (! add)
5274         return old;
5275       return gen_rtx_AND (0, old, x);
5276
5277     case AND:
5278       op0 = and_reg_cond (XEXP (old, 0), x, 0);
5279       op1 = and_reg_cond (XEXP (old, 1), x, 0);
5280       if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1))
5281         {
5282           if (op0 == const1_rtx)
5283             return op1;
5284           if (op1 == const1_rtx)
5285             return op0;
5286           if (op0 == const0_rtx || op1 == const0_rtx)
5287             return const0_rtx;
5288           if (op0 == XEXP (old, 0))
5289             op0 = gen_rtx_AND (0, op0, x);
5290           else
5291             op1 = gen_rtx_AND (0, op1, x);
5292           return gen_rtx_AND (0, op0, op1);
5293         }
5294       if (! add)
5295         return old;
5296
5297       /* If X is identical to one of the existing terms of the AND,
5298          then just return what we already have.  */
5299       /* ??? There really should be some sort of recursive check here in
5300          case there are nested ANDs.  */
5301       if ((GET_CODE (XEXP (old, 0)) == GET_CODE (x)
5302            && REGNO (XEXP (XEXP (old, 0), 0)) == REGNO (XEXP (x, 0)))
5303           || (GET_CODE (XEXP (old, 1)) == GET_CODE (x)
5304               && REGNO (XEXP (XEXP (old, 1), 0)) == REGNO (XEXP (x, 0))))
5305         return old;
5306
5307       return gen_rtx_AND (0, old, x);
5308
5309     case NOT:
5310       op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0);
5311       if (op0 != XEXP (old, 0))
5312         return not_reg_cond (op0);
5313       if (! add)
5314         return old;
5315       return gen_rtx_AND (0, old, x);
5316
5317     default:
5318       abort ();
5319     }
5320 }
5321
5322 /* Given a condition X, remove references to reg REGNO and return the
5323    new condition.  The removal will be done so that all conditions
5324    involving REGNO are considered to evaluate to false.  This function
5325    is used when the value of REGNO changes.  */
5326
5327 static rtx
5328 elim_reg_cond (x, regno)
5329      rtx x;
5330      unsigned int regno;
5331 {
5332   rtx op0, op1;
5333
5334   if (GET_RTX_CLASS (GET_CODE (x)) == '<')
5335     {
5336       if (REGNO (XEXP (x, 0)) == regno)
5337         return const0_rtx;
5338       return x;
5339     }
5340
5341   switch (GET_CODE (x))
5342     {
5343     case AND:
5344       op0 = elim_reg_cond (XEXP (x, 0), regno);
5345       op1 = elim_reg_cond (XEXP (x, 1), regno);
5346       if (op0 == const0_rtx || op1 == const0_rtx)
5347         return const0_rtx;
5348       if (op0 == const1_rtx)
5349         return op1;
5350       if (op1 == const1_rtx)
5351         return op0;
5352       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
5353         return x;
5354       return gen_rtx_AND (0, op0, op1);
5355
5356     case IOR:
5357       op0 = elim_reg_cond (XEXP (x, 0), regno);
5358       op1 = elim_reg_cond (XEXP (x, 1), regno);
5359       if (op0 == const1_rtx || op1 == const1_rtx)
5360         return const1_rtx;
5361       if (op0 == const0_rtx)
5362         return op1;
5363       if (op1 == const0_rtx)
5364         return op0;
5365       if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1))
5366         return x;
5367       return gen_rtx_IOR (0, op0, op1);
5368
5369     case NOT:
5370       op0 = elim_reg_cond (XEXP (x, 0), regno);
5371       if (op0 == const0_rtx)
5372         return const1_rtx;
5373       if (op0 == const1_rtx)
5374         return const0_rtx;
5375       if (op0 != XEXP (x, 0))
5376         return not_reg_cond (op0);
5377       return x;
5378
5379     default:
5380       abort ();
5381     }
5382 }
5383 #endif /* HAVE_conditional_execution */
5384 \f
5385 #ifdef AUTO_INC_DEC
5386
5387 /* Try to substitute the auto-inc expression INC as the address inside
5388    MEM which occurs in INSN.  Currently, the address of MEM is an expression
5389    involving INCR_REG, and INCR is the next use of INCR_REG; it is an insn
5390    that has a single set whose source is a PLUS of INCR_REG and something
5391    else.  */
5392
5393 static void
5394 attempt_auto_inc (pbi, inc, insn, mem, incr, incr_reg)
5395      struct propagate_block_info *pbi;
5396      rtx inc, insn, mem, incr, incr_reg;
5397 {
5398   int regno = REGNO (incr_reg);
5399   rtx set = single_set (incr);
5400   rtx q = SET_DEST (set);
5401   rtx y = SET_SRC (set);
5402   int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
5403
5404   /* Make sure this reg appears only once in this insn.  */
5405   if (count_occurrences (PATTERN (insn), incr_reg, 1) != 1)
5406     return;
5407
5408   if (dead_or_set_p (incr, incr_reg)
5409       /* Mustn't autoinc an eliminable register.  */
5410       && (regno >= FIRST_PSEUDO_REGISTER
5411           || ! TEST_HARD_REG_BIT (elim_reg_set, regno)))
5412     {
5413       /* This is the simple case.  Try to make the auto-inc.  If
5414          we can't, we are done.  Otherwise, we will do any
5415          needed updates below.  */
5416       if (! validate_change (insn, &XEXP (mem, 0), inc, 0))
5417         return;
5418     }
5419   else if (GET_CODE (q) == REG
5420            /* PREV_INSN used here to check the semi-open interval
5421               [insn,incr).  */
5422            && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
5423            /* We must also check for sets of q as q may be
5424               a call clobbered hard register and there may
5425               be a call between PREV_INSN (insn) and incr.  */
5426            && ! reg_set_between_p (q,  PREV_INSN (insn), incr))
5427     {
5428       /* We have *p followed sometime later by q = p+size.
5429          Both p and q must be live afterward,
5430          and q is not used between INSN and its assignment.
5431          Change it to q = p, ...*q..., q = q+size.
5432          Then fall into the usual case.  */
5433       rtx insns, temp;
5434
5435       start_sequence ();
5436       emit_move_insn (q, incr_reg);
5437       insns = get_insns ();
5438       end_sequence ();
5439
5440       if (basic_block_for_insn)
5441         for (temp = insns; temp; temp = NEXT_INSN (temp))
5442           set_block_for_insn (temp, pbi->bb);
5443
5444       /* If we can't make the auto-inc, or can't make the
5445          replacement into Y, exit.  There's no point in making
5446          the change below if we can't do the auto-inc and doing
5447          so is not correct in the pre-inc case.  */
5448
5449       XEXP (inc, 0) = q;
5450       validate_change (insn, &XEXP (mem, 0), inc, 1);
5451       validate_change (incr, &XEXP (y, opnum), q, 1);
5452       if (! apply_change_group ())
5453         return;
5454
5455       /* We now know we'll be doing this change, so emit the
5456          new insn(s) and do the updates.  */
5457       emit_insns_before (insns, insn);
5458
5459       if (pbi->bb->head == insn)
5460         pbi->bb->head = insns;
5461
5462       /* INCR will become a NOTE and INSN won't contain a
5463          use of INCR_REG.  If a use of INCR_REG was just placed in
5464          the insn before INSN, make that the next use.
5465          Otherwise, invalidate it.  */
5466       if (GET_CODE (PREV_INSN (insn)) == INSN
5467           && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
5468           && SET_SRC (PATTERN (PREV_INSN (insn))) == incr_reg)
5469         pbi->reg_next_use[regno] = PREV_INSN (insn);
5470       else
5471         pbi->reg_next_use[regno] = 0;
5472
5473       incr_reg = q;
5474       regno = REGNO (q);
5475
5476       /* REGNO is now used in INCR which is below INSN, but
5477          it previously wasn't live here.  If we don't mark
5478          it as live, we'll put a REG_DEAD note for it
5479          on this insn, which is incorrect.  */
5480       SET_REGNO_REG_SET (pbi->reg_live, regno);
5481
5482       /* If there are any calls between INSN and INCR, show
5483          that REGNO now crosses them.  */
5484       for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
5485         if (GET_CODE (temp) == CALL_INSN)
5486           REG_N_CALLS_CROSSED (regno)++;
5487     }
5488   else
5489     return;
5490
5491   /* If we haven't returned, it means we were able to make the
5492      auto-inc, so update the status.  First, record that this insn
5493      has an implicit side effect.  */
5494
5495   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, incr_reg, REG_NOTES (insn));
5496
5497   /* Modify the old increment-insn to simply copy
5498      the already-incremented value of our register.  */
5499   if (! validate_change (incr, &SET_SRC (set), incr_reg, 0))
5500     abort ();
5501
5502   /* If that makes it a no-op (copying the register into itself) delete
5503      it so it won't appear to be a "use" and a "set" of this
5504      register.  */
5505   if (REGNO (SET_DEST (set)) == REGNO (incr_reg))
5506     {
5507       /* If the original source was dead, it's dead now.  */
5508       rtx note;
5509
5510       while ((note = find_reg_note (incr, REG_DEAD, NULL_RTX)) != NULL_RTX)
5511         {
5512           remove_note (incr, note);
5513           if (XEXP (note, 0) != incr_reg)
5514             CLEAR_REGNO_REG_SET (pbi->reg_live, REGNO (XEXP (note, 0)));
5515         }
5516
5517       PUT_CODE (incr, NOTE);
5518       NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
5519       NOTE_SOURCE_FILE (incr) = 0;
5520     }
5521
5522   if (regno >= FIRST_PSEUDO_REGISTER)
5523     {
5524       /* Count an extra reference to the reg.  When a reg is
5525          incremented, spilling it is worse, so we want to make
5526          that less likely.  */
5527       REG_FREQ (regno) += (optimize_size ? 1 : pbi->bb->loop_depth + 1);
5528
5529       /* Count the increment as a setting of the register,
5530          even though it isn't a SET in rtl.  */
5531       REG_N_SETS (regno)++;
5532     }
5533 }
5534
5535 /* X is a MEM found in INSN.  See if we can convert it into an auto-increment
5536    reference.  */
5537
5538 static void
5539 find_auto_inc (pbi, x, insn)
5540      struct propagate_block_info *pbi;
5541      rtx x;
5542      rtx insn;
5543 {
5544   rtx addr = XEXP (x, 0);
5545   HOST_WIDE_INT offset = 0;
5546   rtx set, y, incr, inc_val;
5547   int regno;
5548   int size = GET_MODE_SIZE (GET_MODE (x));
5549
5550   if (GET_CODE (insn) == JUMP_INSN)
5551     return;
5552
5553   /* Here we detect use of an index register which might be good for
5554      postincrement, postdecrement, preincrement, or predecrement.  */
5555
5556   if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
5557     offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
5558
5559   if (GET_CODE (addr) != REG)
5560     return;
5561
5562   regno = REGNO (addr);
5563
5564   /* Is the next use an increment that might make auto-increment? */
5565   incr = pbi->reg_next_use[regno];
5566   if (incr == 0 || BLOCK_NUM (incr) != BLOCK_NUM (insn))
5567     return;
5568   set = single_set (incr);
5569   if (set == 0 || GET_CODE (set) != SET)
5570     return;
5571   y = SET_SRC (set);
5572
5573   if (GET_CODE (y) != PLUS)
5574     return;
5575
5576   if (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) == REGNO (addr))
5577     inc_val = XEXP (y, 1);
5578   else if (REG_P (XEXP (y, 1)) && REGNO (XEXP (y, 1)) == REGNO (addr))
5579     inc_val = XEXP (y, 0);
5580   else
5581     return;
5582
5583   if (GET_CODE (inc_val) == CONST_INT)
5584     {
5585       if (HAVE_POST_INCREMENT
5586           && (INTVAL (inc_val) == size && offset == 0))
5587         attempt_auto_inc (pbi, gen_rtx_POST_INC (Pmode, addr), insn, x,
5588                           incr, addr);
5589       else if (HAVE_POST_DECREMENT
5590                && (INTVAL (inc_val) == -size && offset == 0))
5591         attempt_auto_inc (pbi, gen_rtx_POST_DEC (Pmode, addr), insn, x,
5592                           incr, addr);
5593       else if (HAVE_PRE_INCREMENT
5594                && (INTVAL (inc_val) == size && offset == size))
5595         attempt_auto_inc (pbi, gen_rtx_PRE_INC (Pmode, addr), insn, x,
5596                           incr, addr);
5597       else if (HAVE_PRE_DECREMENT
5598                && (INTVAL (inc_val) == -size && offset == -size))
5599         attempt_auto_inc (pbi, gen_rtx_PRE_DEC (Pmode, addr), insn, x,
5600                           incr, addr);
5601       else if (HAVE_POST_MODIFY_DISP && offset == 0)
5602         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
5603                                                     gen_rtx_PLUS (Pmode,
5604                                                                   addr,
5605                                                                   inc_val)),
5606                           insn, x, incr, addr);
5607     }
5608   else if (GET_CODE (inc_val) == REG
5609            && ! reg_set_between_p (inc_val, PREV_INSN (insn),
5610                                    NEXT_INSN (incr)))
5611
5612     {
5613       if (HAVE_POST_MODIFY_REG && offset == 0)
5614         attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
5615                                                     gen_rtx_PLUS (Pmode,
5616                                                                   addr,
5617                                                                   inc_val)),
5618                           insn, x, incr, addr);
5619     }
5620 }
5621
5622 #endif /* AUTO_INC_DEC */
5623 \f
5624 static void
5625 mark_used_reg (pbi, reg, cond, insn)
5626      struct propagate_block_info *pbi;
5627      rtx reg;
5628      rtx cond ATTRIBUTE_UNUSED;
5629      rtx insn;
5630 {
5631   unsigned int regno_first, regno_last, i;
5632   int some_was_live, some_was_dead, some_not_set;
5633
5634   regno_last = regno_first = REGNO (reg);
5635   if (regno_first < FIRST_PSEUDO_REGISTER)
5636     regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
5637
5638   /* Find out if any of this register is live after this instruction.  */
5639   some_was_live = some_was_dead = 0;
5640   for (i = regno_first; i <= regno_last; ++i)
5641     {
5642       int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
5643       some_was_live |= needed_regno;
5644       some_was_dead |= ! needed_regno;
5645     }
5646
5647   /* Find out if any of the register was set this insn.  */
5648   some_not_set = 0;
5649   for (i = regno_first; i <= regno_last; ++i)
5650     some_not_set |= ! REGNO_REG_SET_P (pbi->new_set, i);
5651
5652   if (pbi->flags & (PROP_LOG_LINKS | PROP_AUTOINC))
5653     {
5654       /* Record where each reg is used, so when the reg is set we know
5655          the next insn that uses it.  */
5656       pbi->reg_next_use[regno_first] = insn;
5657     }
5658
5659   if (pbi->flags & PROP_REG_INFO)
5660     {
5661       if (regno_first < FIRST_PSEUDO_REGISTER)
5662         {
5663           /* If this is a register we are going to try to eliminate,
5664              don't mark it live here.  If we are successful in
5665              eliminating it, it need not be live unless it is used for
5666              pseudos, in which case it will have been set live when it
5667              was allocated to the pseudos.  If the register will not
5668              be eliminated, reload will set it live at that point.
5669
5670              Otherwise, record that this function uses this register.  */
5671           /* ??? The PPC backend tries to "eliminate" on the pic
5672              register to itself.  This should be fixed.  In the mean
5673              time, hack around it.  */
5674
5675           if (! (TEST_HARD_REG_BIT (elim_reg_set, regno_first)
5676                  && (regno_first == FRAME_POINTER_REGNUM
5677                      || regno_first == ARG_POINTER_REGNUM)))
5678             for (i = regno_first; i <= regno_last; ++i)
5679               regs_ever_live[i] = 1;
5680         }
5681       else
5682         {
5683           /* Keep track of which basic block each reg appears in.  */
5684
5685           register int blocknum = pbi->bb->index;
5686           if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN)
5687             REG_BASIC_BLOCK (regno_first) = blocknum;
5688           else if (REG_BASIC_BLOCK (regno_first) != blocknum)
5689             REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL;
5690
5691           /* Count (weighted) number of uses of each reg.  */
5692           REG_FREQ (regno_first)
5693             += (optimize_size ? 1 : pbi->bb->loop_depth + 1);
5694           REG_N_REFS (regno_first)++;
5695         }
5696     }
5697
5698   /* Record and count the insns in which a reg dies.  If it is used in
5699      this insn and was dead below the insn then it dies in this insn.
5700      If it was set in this insn, we do not make a REG_DEAD note;
5701      likewise if we already made such a note.  */
5702   if ((pbi->flags & (PROP_DEATH_NOTES | PROP_REG_INFO))
5703       && some_was_dead
5704       && some_not_set)
5705     {
5706       /* Check for the case where the register dying partially
5707          overlaps the register set by this insn.  */
5708       if (regno_first != regno_last)
5709         for (i = regno_first; i <= regno_last; ++i)
5710           some_was_live |= REGNO_REG_SET_P (pbi->new_set, i);
5711
5712       /* If none of the words in X is needed, make a REG_DEAD note.
5713          Otherwise, we must make partial REG_DEAD notes.  */
5714       if (! some_was_live)
5715         {
5716           if ((pbi->flags & PROP_DEATH_NOTES)
5717               && ! find_regno_note (insn, REG_DEAD, regno_first))
5718             REG_NOTES (insn)
5719               = alloc_EXPR_LIST (REG_DEAD, reg, REG_NOTES (insn));
5720
5721           if (pbi->flags & PROP_REG_INFO)
5722             REG_N_DEATHS (regno_first)++;
5723         }
5724       else
5725         {
5726           /* Don't make a REG_DEAD note for a part of a register
5727              that is set in the insn.  */
5728           for (i = regno_first; i <= regno_last; ++i)
5729             if (! REGNO_REG_SET_P (pbi->reg_live, i)
5730                 && ! dead_or_set_regno_p (insn, i))
5731               REG_NOTES (insn)
5732                 = alloc_EXPR_LIST (REG_DEAD,
5733                                    gen_rtx_REG (reg_raw_mode[i], i),
5734                                    REG_NOTES (insn));
5735         }
5736     }
5737
5738   /* Mark the register as being live.  */
5739   for (i = regno_first; i <= regno_last; ++i)
5740     {
5741       SET_REGNO_REG_SET (pbi->reg_live, i);
5742
5743 #ifdef HAVE_conditional_execution
5744       /* If this is a conditional use, record that fact.  If it is later
5745          conditionally set, we'll know to kill the register.  */
5746       if (cond != NULL_RTX)
5747         {
5748           splay_tree_node node;
5749           struct reg_cond_life_info *rcli;
5750           rtx ncond;
5751
5752           if (some_was_live)
5753             {
5754               node = splay_tree_lookup (pbi->reg_cond_dead, i);
5755               if (node == NULL)
5756                 {
5757                   /* The register was unconditionally live previously.
5758                      No need to do anything.  */
5759                 }
5760               else
5761                 {
5762                   /* The register was conditionally live previously.
5763                      Subtract the new life cond from the old death cond.  */
5764                   rcli = (struct reg_cond_life_info *) node->value;
5765                   ncond = rcli->condition;
5766                   ncond = and_reg_cond (ncond, not_reg_cond (cond), 1);
5767
5768                   /* If the register is now unconditionally live,
5769                      remove the entry in the splay_tree.  */
5770                   if (ncond == const0_rtx)
5771                     splay_tree_remove (pbi->reg_cond_dead, i);
5772                   else
5773                     {
5774                       rcli->condition = ncond;
5775                       SET_REGNO_REG_SET (pbi->reg_cond_reg,
5776                                          REGNO (XEXP (cond, 0)));
5777                     }
5778                 }
5779             }
5780           else
5781             {
5782               /* The register was not previously live at all.  Record
5783                  the condition under which it is still dead.  */
5784               rcli = (struct reg_cond_life_info *) xmalloc (sizeof (*rcli));
5785               rcli->condition = not_reg_cond (cond);
5786               rcli->stores = const0_rtx;
5787               rcli->orig_condition = const0_rtx;
5788               splay_tree_insert (pbi->reg_cond_dead, i,
5789                                  (splay_tree_value) rcli);
5790
5791               SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
5792             }
5793         }
5794       else if (some_was_live)
5795         {
5796           /* The register may have been conditionally live previously, but
5797              is now unconditionally live.  Remove it from the conditionally
5798              dead list, so that a conditional set won't cause us to think
5799              it dead.  */
5800           splay_tree_remove (pbi->reg_cond_dead, i);
5801         }
5802 #endif
5803     }
5804 }
5805
5806 /* Scan expression X and store a 1-bit in NEW_LIVE for each reg it uses.
5807    This is done assuming the registers needed from X are those that
5808    have 1-bits in PBI->REG_LIVE.
5809
5810    INSN is the containing instruction.  If INSN is dead, this function
5811    is not called.  */
5812
5813 static void
5814 mark_used_regs (pbi, x, cond, insn)
5815      struct propagate_block_info *pbi;
5816      rtx x, cond, insn;
5817 {
5818   register RTX_CODE code;
5819   register int regno;
5820   int flags = pbi->flags;
5821
5822  retry:
5823   code = GET_CODE (x);
5824   switch (code)
5825     {
5826     case LABEL_REF:
5827     case SYMBOL_REF:
5828     case CONST_INT:
5829     case CONST:
5830     case CONST_DOUBLE:
5831     case PC:
5832     case ADDR_VEC:
5833     case ADDR_DIFF_VEC:
5834       return;
5835
5836 #ifdef HAVE_cc0
5837     case CC0:
5838       pbi->cc0_live = 1;
5839       return;
5840 #endif
5841
5842     case CLOBBER:
5843       /* If we are clobbering a MEM, mark any registers inside the address
5844          as being used.  */
5845       if (GET_CODE (XEXP (x, 0)) == MEM)
5846         mark_used_regs (pbi, XEXP (XEXP (x, 0), 0), cond, insn);
5847       return;
5848
5849     case MEM:
5850       /* Don't bother watching stores to mems if this is not the
5851          final pass.  We'll not be deleting dead stores this round.  */
5852       if (optimize && (flags & PROP_SCAN_DEAD_CODE))
5853         {
5854           /* Invalidate the data for the last MEM stored, but only if MEM is
5855              something that can be stored into.  */
5856           if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
5857               && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
5858             /* Needn't clear the memory set list.  */
5859             ;
5860           else
5861             {
5862               rtx temp = pbi->mem_set_list;
5863               rtx prev = NULL_RTX;
5864               rtx next;
5865
5866               while (temp)
5867                 {
5868                   next = XEXP (temp, 1);
5869                   if (anti_dependence (XEXP (temp, 0), x))
5870                     {
5871                       /* Splice temp out of the list.  */
5872                       if (prev)
5873                         XEXP (prev, 1) = next;
5874                       else
5875                         pbi->mem_set_list = next;
5876                       free_EXPR_LIST_node (temp);
5877                       pbi->mem_set_list_len--;
5878                     }
5879                   else
5880                     prev = temp;
5881                   temp = next;
5882                 }
5883             }
5884
5885           /* If the memory reference had embedded side effects (autoincrement
5886              address modes.  Then we may need to kill some entries on the
5887              memory set list.  */
5888           if (insn)
5889             invalidate_mems_from_autoinc (pbi, insn);
5890         }
5891
5892 #ifdef AUTO_INC_DEC
5893       if (flags & PROP_AUTOINC)
5894         find_auto_inc (pbi, x, insn);
5895 #endif
5896       break;
5897
5898     case SUBREG:
5899 #ifdef CLASS_CANNOT_CHANGE_MODE
5900       if (GET_CODE (SUBREG_REG (x)) == REG
5901           && REGNO (SUBREG_REG (x)) >= FIRST_PSEUDO_REGISTER
5902           && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (x),
5903                                          GET_MODE (SUBREG_REG (x))))
5904         REG_CHANGES_MODE (REGNO (SUBREG_REG (x))) = 1;
5905 #endif
5906
5907       /* While we're here, optimize this case.  */
5908       x = SUBREG_REG (x);
5909       if (GET_CODE (x) != REG)
5910         goto retry;
5911       /* Fall through.  */
5912
5913     case REG:
5914       /* See a register other than being set => mark it as needed.  */
5915       mark_used_reg (pbi, x, cond, insn);
5916       return;
5917
5918     case SET:
5919       {
5920         register rtx testreg = SET_DEST (x);
5921         int mark_dest = 0;
5922
5923         /* If storing into MEM, don't show it as being used.  But do
5924            show the address as being used.  */
5925         if (GET_CODE (testreg) == MEM)
5926           {
5927 #ifdef AUTO_INC_DEC
5928             if (flags & PROP_AUTOINC)
5929               find_auto_inc (pbi, testreg, insn);
5930 #endif
5931             mark_used_regs (pbi, XEXP (testreg, 0), cond, insn);
5932             mark_used_regs (pbi, SET_SRC (x), cond, insn);
5933             return;
5934           }
5935
5936         /* Storing in STRICT_LOW_PART is like storing in a reg
5937            in that this SET might be dead, so ignore it in TESTREG.
5938            but in some other ways it is like using the reg.
5939
5940            Storing in a SUBREG or a bit field is like storing the entire
5941            register in that if the register's value is not used
5942            then this SET is not needed.  */
5943         while (GET_CODE (testreg) == STRICT_LOW_PART
5944                || GET_CODE (testreg) == ZERO_EXTRACT
5945                || GET_CODE (testreg) == SIGN_EXTRACT
5946                || GET_CODE (testreg) == SUBREG)
5947           {
5948 #ifdef CLASS_CANNOT_CHANGE_MODE
5949             if (GET_CODE (testreg) == SUBREG
5950                 && GET_CODE (SUBREG_REG (testreg)) == REG
5951                 && REGNO (SUBREG_REG (testreg)) >= FIRST_PSEUDO_REGISTER
5952                 && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (testreg)),
5953                                                GET_MODE (testreg)))
5954               REG_CHANGES_MODE (REGNO (SUBREG_REG (testreg))) = 1;
5955 #endif
5956
5957             /* Modifying a single register in an alternate mode
5958                does not use any of the old value.  But these other
5959                ways of storing in a register do use the old value.  */
5960             if (GET_CODE (testreg) == SUBREG
5961                 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
5962               ;
5963             else
5964               mark_dest = 1;
5965
5966             testreg = XEXP (testreg, 0);
5967           }
5968
5969         /* If this is a store into a register or group of registers,
5970            recursively scan the value being stored.  */
5971
5972         if ((GET_CODE (testreg) == PARALLEL
5973              && GET_MODE (testreg) == BLKmode)
5974             || (GET_CODE (testreg) == REG
5975                 && (regno = REGNO (testreg),
5976                     ! (regno == FRAME_POINTER_REGNUM
5977                        && (! reload_completed || frame_pointer_needed)))
5978 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
5979                 && ! (regno == HARD_FRAME_POINTER_REGNUM
5980                       && (! reload_completed || frame_pointer_needed))
5981 #endif
5982 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
5983                 && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
5984 #endif
5985                 ))
5986           {
5987             if (mark_dest)
5988               mark_used_regs (pbi, SET_DEST (x), cond, insn);
5989             mark_used_regs (pbi, SET_SRC (x), cond, insn);
5990             return;
5991           }
5992       }
5993       break;
5994
5995     case ASM_OPERANDS:
5996     case UNSPEC_VOLATILE:
5997     case TRAP_IF:
5998     case ASM_INPUT:
5999       {
6000         /* Traditional and volatile asm instructions must be considered to use
6001            and clobber all hard registers, all pseudo-registers and all of
6002            memory.  So must TRAP_IF and UNSPEC_VOLATILE operations.
6003
6004            Consider for instance a volatile asm that changes the fpu rounding
6005            mode.  An insn should not be moved across this even if it only uses
6006            pseudo-regs because it might give an incorrectly rounded result.
6007
6008            ?!? Unfortunately, marking all hard registers as live causes massive
6009            problems for the register allocator and marking all pseudos as live
6010            creates mountains of uninitialized variable warnings.
6011
6012            So for now, just clear the memory set list and mark any regs
6013            we can find in ASM_OPERANDS as used.  */
6014         if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
6015           {
6016             free_EXPR_LIST_list (&pbi->mem_set_list);
6017             pbi->mem_set_list_len = 0;
6018           }
6019
6020         /* For all ASM_OPERANDS, we must traverse the vector of input operands.
6021            We can not just fall through here since then we would be confused
6022            by the ASM_INPUT rtx inside ASM_OPERANDS, which do not indicate
6023            traditional asms unlike their normal usage.  */
6024         if (code == ASM_OPERANDS)
6025           {
6026             int j;
6027
6028             for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++)
6029               mark_used_regs (pbi, ASM_OPERANDS_INPUT (x, j), cond, insn);
6030           }
6031         break;
6032       }
6033
6034     case COND_EXEC:
6035       if (cond != NULL_RTX)
6036         abort ();
6037
6038       mark_used_regs (pbi, COND_EXEC_TEST (x), NULL_RTX, insn);
6039
6040       cond = COND_EXEC_TEST (x);
6041       x = COND_EXEC_CODE (x);
6042       goto retry;
6043
6044     case PHI:
6045       /* We _do_not_ want to scan operands of phi nodes.  Operands of
6046          a phi function are evaluated only when control reaches this
6047          block along a particular edge.  Therefore, regs that appear
6048          as arguments to phi should not be added to the global live at
6049          start.  */
6050       return;
6051
6052     default:
6053       break;
6054     }
6055
6056   /* Recursively scan the operands of this expression.  */
6057
6058   {
6059     register const char *fmt = GET_RTX_FORMAT (code);
6060     register int i;
6061
6062     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6063       {
6064         if (fmt[i] == 'e')
6065           {
6066             /* Tail recursive case: save a function call level.  */
6067             if (i == 0)
6068               {
6069                 x = XEXP (x, 0);
6070                 goto retry;
6071               }
6072             mark_used_regs (pbi, XEXP (x, i), cond, insn);
6073           }
6074         else if (fmt[i] == 'E')
6075           {
6076             register int j;
6077             for (j = 0; j < XVECLEN (x, i); j++)
6078               mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn);
6079           }
6080       }
6081   }
6082 }
6083 \f
6084 #ifdef AUTO_INC_DEC
6085
6086 static int
6087 try_pre_increment_1 (pbi, insn)
6088      struct propagate_block_info *pbi;
6089      rtx insn;
6090 {
6091   /* Find the next use of this reg.  If in same basic block,
6092      make it do pre-increment or pre-decrement if appropriate.  */
6093   rtx x = single_set (insn);
6094   HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
6095                           * INTVAL (XEXP (SET_SRC (x), 1)));
6096   int regno = REGNO (SET_DEST (x));
6097   rtx y = pbi->reg_next_use[regno];
6098   if (y != 0
6099       && SET_DEST (x) != stack_pointer_rtx
6100       && BLOCK_NUM (y) == BLOCK_NUM (insn)
6101       /* Don't do this if the reg dies, or gets set in y; a standard addressing
6102          mode would be better.  */
6103       && ! dead_or_set_p (y, SET_DEST (x))
6104       && try_pre_increment (y, SET_DEST (x), amount))
6105     {
6106       /* We have found a suitable auto-increment and already changed
6107          insn Y to do it.  So flush this increment instruction.  */
6108       propagate_block_delete_insn (pbi->bb, insn);
6109
6110       /* Count a reference to this reg for the increment insn we are
6111          deleting.  When a reg is incremented, spilling it is worse,
6112          so we want to make that less likely.  */
6113       if (regno >= FIRST_PSEUDO_REGISTER)
6114         {
6115           REG_FREQ (regno) += (optimize_size ? 1 : pbi->bb->loop_depth + 1);
6116           REG_N_SETS (regno)++;
6117         }
6118
6119       /* Flush any remembered memories depending on the value of
6120          the incremented register.  */
6121       invalidate_mems_from_set (pbi, SET_DEST (x));
6122
6123       return 1;
6124     }
6125   return 0;
6126 }
6127
6128 /* Try to change INSN so that it does pre-increment or pre-decrement
6129    addressing on register REG in order to add AMOUNT to REG.
6130    AMOUNT is negative for pre-decrement.
6131    Returns 1 if the change could be made.
6132    This checks all about the validity of the result of modifying INSN.  */
6133
6134 static int
6135 try_pre_increment (insn, reg, amount)
6136      rtx insn, reg;
6137      HOST_WIDE_INT amount;
6138 {
6139   register rtx use;
6140
6141   /* Nonzero if we can try to make a pre-increment or pre-decrement.
6142      For example, addl $4,r1; movl (r1),... can become movl +(r1),...  */
6143   int pre_ok = 0;
6144   /* Nonzero if we can try to make a post-increment or post-decrement.
6145      For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
6146      It is possible for both PRE_OK and POST_OK to be nonzero if the machine
6147      supports both pre-inc and post-inc, or both pre-dec and post-dec.  */
6148   int post_ok = 0;
6149
6150   /* Nonzero if the opportunity actually requires post-inc or post-dec.  */
6151   int do_post = 0;
6152
6153   /* From the sign of increment, see which possibilities are conceivable
6154      on this target machine.  */
6155   if (HAVE_PRE_INCREMENT && amount > 0)
6156     pre_ok = 1;
6157   if (HAVE_POST_INCREMENT && amount > 0)
6158     post_ok = 1;
6159
6160   if (HAVE_PRE_DECREMENT && amount < 0)
6161     pre_ok = 1;
6162   if (HAVE_POST_DECREMENT && amount < 0)
6163     post_ok = 1;
6164
6165   if (! (pre_ok || post_ok))
6166     return 0;
6167
6168   /* It is not safe to add a side effect to a jump insn
6169      because if the incremented register is spilled and must be reloaded
6170      there would be no way to store the incremented value back in memory.  */
6171
6172   if (GET_CODE (insn) == JUMP_INSN)
6173     return 0;
6174
6175   use = 0;
6176   if (pre_ok)
6177     use = find_use_as_address (PATTERN (insn), reg, 0);
6178   if (post_ok && (use == 0 || use == (rtx) 1))
6179     {
6180       use = find_use_as_address (PATTERN (insn), reg, -amount);
6181       do_post = 1;
6182     }
6183
6184   if (use == 0 || use == (rtx) 1)
6185     return 0;
6186
6187   if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
6188     return 0;
6189
6190   /* See if this combination of instruction and addressing mode exists.  */
6191   if (! validate_change (insn, &XEXP (use, 0),
6192                          gen_rtx_fmt_e (amount > 0
6193                                         ? (do_post ? POST_INC : PRE_INC)
6194                                         : (do_post ? POST_DEC : PRE_DEC),
6195                                         Pmode, reg), 0))
6196     return 0;
6197
6198   /* Record that this insn now has an implicit side effect on X.  */
6199   REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, reg, REG_NOTES (insn));
6200   return 1;
6201 }
6202
6203 #endif /* AUTO_INC_DEC */
6204 \f
6205 /* Find the place in the rtx X where REG is used as a memory address.
6206    Return the MEM rtx that so uses it.
6207    If PLUSCONST is nonzero, search instead for a memory address equivalent to
6208    (plus REG (const_int PLUSCONST)).
6209
6210    If such an address does not appear, return 0.
6211    If REG appears more than once, or is used other than in such an address,
6212    return (rtx)1.  */
6213
6214 rtx
6215 find_use_as_address (x, reg, plusconst)
6216      register rtx x;
6217      rtx reg;
6218      HOST_WIDE_INT plusconst;
6219 {
6220   enum rtx_code code = GET_CODE (x);
6221   const char *fmt = GET_RTX_FORMAT (code);
6222   register int i;
6223   register rtx value = 0;
6224   register rtx tem;
6225
6226   if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
6227     return x;
6228
6229   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
6230       && XEXP (XEXP (x, 0), 0) == reg
6231       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
6232       && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
6233     return x;
6234
6235   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
6236     {
6237       /* If REG occurs inside a MEM used in a bit-field reference,
6238          that is unacceptable.  */
6239       if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
6240         return (rtx) (HOST_WIDE_INT) 1;
6241     }
6242
6243   if (x == reg)
6244     return (rtx) (HOST_WIDE_INT) 1;
6245
6246   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6247     {
6248       if (fmt[i] == 'e')
6249         {
6250           tem = find_use_as_address (XEXP (x, i), reg, plusconst);
6251           if (value == 0)
6252             value = tem;
6253           else if (tem != 0)
6254             return (rtx) (HOST_WIDE_INT) 1;
6255         }
6256       else if (fmt[i] == 'E')
6257         {
6258           register int j;
6259           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
6260             {
6261               tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
6262               if (value == 0)
6263                 value = tem;
6264               else if (tem != 0)
6265                 return (rtx) (HOST_WIDE_INT) 1;
6266             }
6267         }
6268     }
6269
6270   return value;
6271 }
6272 \f
6273 /* Write information about registers and basic blocks into FILE.
6274    This is part of making a debugging dump.  */
6275
6276 void
6277 dump_regset (r, outf)
6278      regset r;
6279      FILE *outf;
6280 {
6281   int i;
6282   if (r == NULL)
6283     {
6284       fputs (" (nil)", outf);
6285       return;
6286     }
6287
6288   EXECUTE_IF_SET_IN_REG_SET (r, 0, i,
6289     {
6290       fprintf (outf, " %d", i);
6291       if (i < FIRST_PSEUDO_REGISTER)
6292         fprintf (outf, " [%s]",
6293                  reg_names[i]);
6294     });
6295 }
6296
6297 /* Print a human-reaable representation of R on the standard error
6298    stream.  This function is designed to be used from within the
6299    debugger.  */
6300
6301 void
6302 debug_regset (r)
6303      regset r;
6304 {
6305   dump_regset (r, stderr);
6306   putc ('\n', stderr);
6307 }
6308
6309 void
6310 dump_flow_info (file)
6311      FILE *file;
6312 {
6313   register int i;
6314   static const char * const reg_class_names[] = REG_CLASS_NAMES;
6315
6316   fprintf (file, "%d registers.\n", max_regno);
6317   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
6318     if (REG_N_REFS (i))
6319       {
6320         enum reg_class class, altclass;
6321         fprintf (file, "\nRegister %d used %d times across %d insns",
6322                  i, REG_N_REFS (i), REG_LIVE_LENGTH (i));
6323         if (REG_BASIC_BLOCK (i) >= 0)
6324           fprintf (file, " in block %d", REG_BASIC_BLOCK (i));
6325         if (REG_N_SETS (i))
6326           fprintf (file, "; set %d time%s", REG_N_SETS (i),
6327                    (REG_N_SETS (i) == 1) ? "" : "s");
6328         if (REG_USERVAR_P (regno_reg_rtx[i]))
6329           fprintf (file, "; user var");
6330         if (REG_N_DEATHS (i) != 1)
6331           fprintf (file, "; dies in %d places", REG_N_DEATHS (i));
6332         if (REG_N_CALLS_CROSSED (i) == 1)
6333           fprintf (file, "; crosses 1 call");
6334         else if (REG_N_CALLS_CROSSED (i))
6335           fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i));
6336         if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
6337           fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
6338         class = reg_preferred_class (i);
6339         altclass = reg_alternate_class (i);
6340         if (class != GENERAL_REGS || altclass != ALL_REGS)
6341           {
6342             if (altclass == ALL_REGS || class == ALL_REGS)
6343               fprintf (file, "; pref %s", reg_class_names[(int) class]);
6344             else if (altclass == NO_REGS)
6345               fprintf (file, "; %s or none", reg_class_names[(int) class]);
6346             else
6347               fprintf (file, "; pref %s, else %s",
6348                        reg_class_names[(int) class],
6349                        reg_class_names[(int) altclass]);
6350           }
6351         if (REG_POINTER (regno_reg_rtx[i]))
6352           fprintf (file, "; pointer");
6353         fprintf (file, ".\n");
6354       }
6355
6356   fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges);
6357   for (i = 0; i < n_basic_blocks; i++)
6358     {
6359       register basic_block bb = BASIC_BLOCK (i);
6360       register edge e;
6361
6362       fprintf (file, "\nBasic block %d: first insn %d, last %d, loop_depth %d, count ",
6363                i, INSN_UID (bb->head), INSN_UID (bb->end), bb->loop_depth);
6364       fprintf (file, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) bb->count);
6365       fprintf (file, ", freq %i.\n", bb->frequency);
6366
6367       fprintf (file, "Predecessors: ");
6368       for (e = bb->pred; e; e = e->pred_next)
6369         dump_edge_info (file, e, 0);
6370
6371       fprintf (file, "\nSuccessors: ");
6372       for (e = bb->succ; e; e = e->succ_next)
6373         dump_edge_info (file, e, 1);
6374
6375       fprintf (file, "\nRegisters live at start:");
6376       dump_regset (bb->global_live_at_start, file);
6377
6378       fprintf (file, "\nRegisters live at end:");
6379       dump_regset (bb->global_live_at_end, file);
6380
6381       putc ('\n', file);
6382     }
6383
6384   putc ('\n', file);
6385 }
6386
6387 void
6388 debug_flow_info ()
6389 {
6390   dump_flow_info (stderr);
6391 }
6392
6393 void
6394 dump_edge_info (file, e, do_succ)
6395      FILE *file;
6396      edge e;
6397      int do_succ;
6398 {
6399   basic_block side = (do_succ ? e->dest : e->src);
6400
6401   if (side == ENTRY_BLOCK_PTR)
6402     fputs (" ENTRY", file);
6403   else if (side == EXIT_BLOCK_PTR)
6404     fputs (" EXIT", file);
6405   else
6406     fprintf (file, " %d", side->index);
6407
6408   if (e->probability)
6409     fprintf (file, " [%.1f%%] ", e->probability * 100.0 / REG_BR_PROB_BASE);
6410
6411   if (e->count)
6412     {
6413       fprintf (file, " count:");
6414       fprintf (file, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) e->count);
6415     }
6416
6417   if (e->flags)
6418     {
6419       static const char * const bitnames[] = {
6420         "fallthru", "crit", "ab", "abcall", "eh", "fake"
6421       };
6422       int comma = 0;
6423       int i, flags = e->flags;
6424
6425       fputc (' ', file);
6426       fputc ('(', file);
6427       for (i = 0; flags; i++)
6428         if (flags & (1 << i))
6429           {
6430             flags &= ~(1 << i);
6431
6432             if (comma)
6433               fputc (',', file);
6434             if (i < (int) ARRAY_SIZE (bitnames))
6435               fputs (bitnames[i], file);
6436             else
6437               fprintf (file, "%d", i);
6438             comma = 1;
6439           }
6440       fputc (')', file);
6441     }
6442 }
6443 \f
6444 /* Print out one basic block with live information at start and end.  */
6445
6446 void
6447 dump_bb (bb, outf)
6448      basic_block bb;
6449      FILE *outf;
6450 {
6451   rtx insn;
6452   rtx last;
6453   edge e;
6454
6455   fprintf (outf, ";; Basic block %d, loop depth %d, count ",
6456            bb->index, bb->loop_depth, bb->count);
6457   fprintf (outf, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) bb->count);
6458   putc ('\n', outf);
6459
6460   fputs (";; Predecessors: ", outf);
6461   for (e = bb->pred; e; e = e->pred_next)
6462     dump_edge_info (outf, e, 0);
6463   putc ('\n', outf);
6464
6465   fputs (";; Registers live at start:", outf);
6466   dump_regset (bb->global_live_at_start, outf);
6467   putc ('\n', outf);
6468
6469   for (insn = bb->head, last = NEXT_INSN (bb->end);
6470        insn != last;
6471        insn = NEXT_INSN (insn))
6472     print_rtl_single (outf, insn);
6473
6474   fputs (";; Registers live at end:", outf);
6475   dump_regset (bb->global_live_at_end, outf);
6476   putc ('\n', outf);
6477
6478   fputs (";; Successors: ", outf);
6479   for (e = bb->succ; e; e = e->succ_next)
6480     dump_edge_info (outf, e, 1);
6481   putc ('\n', outf);
6482 }
6483
6484 void
6485 debug_bb (bb)
6486      basic_block bb;
6487 {
6488   dump_bb (bb, stderr);
6489 }
6490
6491 void
6492 debug_bb_n (n)
6493      int n;
6494 {
6495   dump_bb (BASIC_BLOCK (n), stderr);
6496 }
6497
6498 /* Like print_rtl, but also print out live information for the start of each
6499    basic block.  */
6500
6501 void
6502 print_rtl_with_bb (outf, rtx_first)
6503      FILE *outf;
6504      rtx rtx_first;
6505 {
6506   register rtx tmp_rtx;
6507
6508   if (rtx_first == 0)
6509     fprintf (outf, "(nil)\n");
6510   else
6511     {
6512       int i;
6513       enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB };
6514       int max_uid = get_max_uid ();
6515       basic_block *start = (basic_block *)
6516         xcalloc (max_uid, sizeof (basic_block));
6517       basic_block *end = (basic_block *)
6518         xcalloc (max_uid, sizeof (basic_block));
6519       enum bb_state *in_bb_p = (enum bb_state *)
6520         xcalloc (max_uid, sizeof (enum bb_state));
6521
6522       for (i = n_basic_blocks - 1; i >= 0; i--)
6523         {
6524           basic_block bb = BASIC_BLOCK (i);
6525           rtx x;
6526
6527           start[INSN_UID (bb->head)] = bb;
6528           end[INSN_UID (bb->end)] = bb;
6529           for (x = bb->head; x != NULL_RTX; x = NEXT_INSN (x))
6530             {
6531               enum bb_state state = IN_MULTIPLE_BB;
6532               if (in_bb_p[INSN_UID (x)] == NOT_IN_BB)
6533                 state = IN_ONE_BB;
6534               in_bb_p[INSN_UID (x)] = state;
6535
6536               if (x == bb->end)
6537                 break;
6538             }
6539         }
6540
6541       for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx))
6542         {
6543           int did_output;
6544           basic_block bb;
6545
6546           if ((bb = start[INSN_UID (tmp_rtx)]) != NULL)
6547             {
6548               fprintf (outf, ";; Start of basic block %d, registers live:",
6549                        bb->index);
6550               dump_regset (bb->global_live_at_start, outf);
6551               putc ('\n', outf);
6552             }
6553
6554           if (in_bb_p[INSN_UID (tmp_rtx)] == NOT_IN_BB
6555               && GET_CODE (tmp_rtx) != NOTE
6556               && GET_CODE (tmp_rtx) != BARRIER)
6557             fprintf (outf, ";; Insn is not within a basic block\n");
6558           else if (in_bb_p[INSN_UID (tmp_rtx)] == IN_MULTIPLE_BB)
6559             fprintf (outf, ";; Insn is in multiple basic blocks\n");
6560
6561           did_output = print_rtl_single (outf, tmp_rtx);
6562
6563           if ((bb = end[INSN_UID (tmp_rtx)]) != NULL)
6564             {
6565               fprintf (outf, ";; End of basic block %d, registers live:\n",
6566                        bb->index);
6567               dump_regset (bb->global_live_at_end, outf);
6568               putc ('\n', outf);
6569             }
6570
6571           if (did_output)
6572             putc ('\n', outf);
6573         }
6574
6575       free (start);
6576       free (end);
6577       free (in_bb_p);
6578     }
6579
6580   if (current_function_epilogue_delay_list != 0)
6581     {
6582       fprintf (outf, "\n;; Insns in epilogue delay list:\n\n");
6583       for (tmp_rtx = current_function_epilogue_delay_list; tmp_rtx != 0;
6584            tmp_rtx = XEXP (tmp_rtx, 1))
6585         print_rtl_single (outf, XEXP (tmp_rtx, 0));
6586     }
6587 }
6588
6589 /* Dump the rtl into the current debugging dump file, then abort.  */
6590
6591 static void
6592 print_rtl_and_abort_fcn (file, line, function)
6593      const char *file;
6594      int line;
6595      const char *function;
6596 {
6597   if (rtl_dump_file)
6598     {
6599       print_rtl_with_bb (rtl_dump_file, get_insns ());
6600       fclose (rtl_dump_file);
6601     }
6602
6603   fancy_abort (file, line, function);
6604 }
6605
6606 /* Recompute register set/reference counts immediately prior to register
6607    allocation.
6608
6609    This avoids problems with set/reference counts changing to/from values
6610    which have special meanings to the register allocators.
6611
6612    Additionally, the reference counts are the primary component used by the
6613    register allocators to prioritize pseudos for allocation to hard regs.
6614    More accurate reference counts generally lead to better register allocation.
6615
6616    F is the first insn to be scanned.
6617
6618    LOOP_STEP denotes how much loop_depth should be incremented per
6619    loop nesting level in order to increase the ref count more for
6620    references in a loop.
6621
6622    It might be worthwhile to update REG_LIVE_LENGTH, REG_BASIC_BLOCK and
6623    possibly other information which is used by the register allocators.  */
6624
6625 void
6626 recompute_reg_usage (f, loop_step)
6627      rtx f ATTRIBUTE_UNUSED;
6628      int loop_step ATTRIBUTE_UNUSED;
6629 {
6630   allocate_reg_life_data ();
6631   update_life_info (NULL, UPDATE_LIFE_LOCAL, PROP_REG_INFO);
6632 }
6633
6634 /* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of
6635    blocks.  If BLOCKS is NULL, assume the universal set.  Returns a count
6636    of the number of registers that died.  */
6637
6638 int
6639 count_or_remove_death_notes (blocks, kill)
6640      sbitmap blocks;
6641      int kill;
6642 {
6643   int i, count = 0;
6644
6645   for (i = n_basic_blocks - 1; i >= 0; --i)
6646     {
6647       basic_block bb;
6648       rtx insn;
6649
6650       if (blocks && ! TEST_BIT (blocks, i))
6651         continue;
6652
6653       bb = BASIC_BLOCK (i);
6654
6655       for (insn = bb->head;; insn = NEXT_INSN (insn))
6656         {
6657           if (INSN_P (insn))
6658             {
6659               rtx *pprev = &REG_NOTES (insn);
6660               rtx link = *pprev;
6661
6662               while (link)
6663                 {
6664                   switch (REG_NOTE_KIND (link))
6665                     {
6666                     case REG_DEAD:
6667                       if (GET_CODE (XEXP (link, 0)) == REG)
6668                         {
6669                           rtx reg = XEXP (link, 0);
6670                           int n;
6671
6672                           if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
6673                             n = 1;
6674                           else
6675                             n = HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg));
6676                           count += n;
6677                         }
6678                       /* Fall through.  */
6679
6680                     case REG_UNUSED:
6681                       if (kill)
6682                         {
6683                           rtx next = XEXP (link, 1);
6684                           free_EXPR_LIST_node (link);
6685                           *pprev = link = next;
6686                           break;
6687                         }
6688                       /* Fall through.  */
6689
6690                     default:
6691                       pprev = &XEXP (link, 1);
6692                       link = *pprev;
6693                       break;
6694                     }
6695                 }
6696             }
6697
6698           if (insn == bb->end)
6699             break;
6700         }
6701     }
6702
6703   return count;
6704 }
6705
6706
6707 /* Update insns block within BB.  */
6708
6709 void
6710 update_bb_for_insn (bb)
6711      basic_block bb;
6712 {
6713   rtx insn;
6714
6715   if (! basic_block_for_insn)
6716     return;
6717
6718   for (insn = bb->head; ; insn = NEXT_INSN (insn))
6719     {
6720       set_block_for_insn (insn, bb);
6721
6722       if (insn == bb->end)
6723         break;
6724     }
6725 }
6726
6727
6728 /* Record INSN's block as BB.  */
6729
6730 void
6731 set_block_for_insn (insn, bb)
6732      rtx insn;
6733      basic_block bb;
6734 {
6735   size_t uid = INSN_UID (insn);
6736   if (uid >= basic_block_for_insn->num_elements)
6737     {
6738       int new_size;
6739
6740       /* Add one-eighth the size so we don't keep calling xrealloc.  */
6741       new_size = uid + (uid + 7) / 8;
6742
6743       VARRAY_GROW (basic_block_for_insn, new_size);
6744     }
6745   VARRAY_BB (basic_block_for_insn, uid) = bb;
6746 }
6747
6748 /* When a new insn has been inserted into an existing block, it will
6749    sometimes emit more than a single insn. This routine will set the
6750    block number for the specified insn, and look backwards in the insn
6751    chain to see if there are any other uninitialized insns immediately 
6752    previous to this one, and set the block number for them too.  */
6753
6754 void
6755 set_block_for_new_insns (insn, bb)
6756      rtx insn;
6757      basic_block bb;
6758 {
6759   set_block_for_insn (insn, bb);
6760
6761   /* Scan the previous instructions setting the block number until we find 
6762      an instruction that has the block number set, or we find a note 
6763      of any kind.  */
6764   for (insn = PREV_INSN (insn); insn != NULL_RTX; insn = PREV_INSN (insn))
6765     {
6766       if (GET_CODE (insn) == NOTE)
6767         break;
6768       if (INSN_UID (insn) >= basic_block_for_insn->num_elements 
6769           || BLOCK_FOR_INSN (insn) == 0)
6770         set_block_for_insn (insn, bb);
6771       else
6772         break;
6773     }
6774 }
6775 \f
6776 /* Verify the CFG consistency.  This function check some CFG invariants and
6777    aborts when something is wrong.  Hope that this function will help to
6778    convert many optimization passes to preserve CFG consistent.
6779
6780    Currently it does following checks:
6781
6782    - test head/end pointers
6783    - overlapping of basic blocks
6784    - edge list corectness
6785    - headers of basic blocks (the NOTE_INSN_BASIC_BLOCK note)
6786    - tails of basic blocks (ensure that boundary is necesary)
6787    - scans body of the basic block for JUMP_INSN, CODE_LABEL
6788      and NOTE_INSN_BASIC_BLOCK
6789    - check that all insns are in the basic blocks
6790    (except the switch handling code, barriers and notes)
6791    - check that all returns are followed by barriers
6792
6793    In future it can be extended check a lot of other stuff as well
6794    (reachability of basic blocks, life information, etc. etc.).  */
6795
6796 void
6797 verify_flow_info ()
6798 {
6799   const int max_uid = get_max_uid ();
6800   const rtx rtx_first = get_insns ();
6801   rtx last_head = get_last_insn ();
6802   basic_block *bb_info;
6803   rtx x;
6804   int i, last_bb_num_seen, num_bb_notes, err = 0;
6805
6806   bb_info = (basic_block *) xcalloc (max_uid, sizeof (basic_block));
6807
6808   for (i = n_basic_blocks - 1; i >= 0; i--)
6809     {
6810       basic_block bb = BASIC_BLOCK (i);
6811       rtx head = bb->head;
6812       rtx end = bb->end;
6813
6814       /* Verify the end of the basic block is in the INSN chain.  */
6815       for (x = last_head; x != NULL_RTX; x = PREV_INSN (x))
6816         if (x == end)
6817           break;
6818       if (!x)
6819         {
6820           error ("End insn %d for block %d not found in the insn stream.",
6821                  INSN_UID (end), bb->index);
6822           err = 1;
6823         }
6824
6825       /* Work backwards from the end to the head of the basic block
6826          to verify the head is in the RTL chain.  */
6827       for (; x != NULL_RTX; x = PREV_INSN (x))
6828         {
6829           /* While walking over the insn chain, verify insns appear
6830              in only one basic block and initialize the BB_INFO array
6831              used by other passes.  */
6832           if (bb_info[INSN_UID (x)] != NULL)
6833             {
6834               error ("Insn %d is in multiple basic blocks (%d and %d)",
6835                      INSN_UID (x), bb->index, bb_info[INSN_UID (x)]->index);
6836               err = 1;
6837             }
6838           bb_info[INSN_UID (x)] = bb;
6839
6840           if (x == head)
6841             break;
6842         }
6843       if (!x)
6844         {
6845           error ("Head insn %d for block %d not found in the insn stream.",
6846                  INSN_UID (head), bb->index);
6847           err = 1;
6848         }
6849
6850       last_head = x;
6851     }
6852
6853   /* Now check the basic blocks (boundaries etc.) */
6854   for (i = n_basic_blocks - 1; i >= 0; i--)
6855     {
6856       basic_block bb = BASIC_BLOCK (i);
6857       /* Check corectness of edge lists */
6858       edge e;
6859
6860       e = bb->succ;
6861       while (e)
6862         {
6863           if (e->src != bb)
6864             {
6865               fprintf (stderr,
6866                        "verify_flow_info: Basic block %d succ edge is corrupted\n",
6867                        bb->index);
6868               fprintf (stderr, "Predecessor: ");
6869               dump_edge_info (stderr, e, 0);
6870               fprintf (stderr, "\nSuccessor: ");
6871               dump_edge_info (stderr, e, 1);
6872               fflush (stderr);
6873               err = 1;
6874             }
6875           if (e->dest != EXIT_BLOCK_PTR)
6876             {
6877               edge e2 = e->dest->pred;
6878               while (e2 && e2 != e)
6879                 e2 = e2->pred_next;
6880               if (!e2)
6881                 {
6882                   error ("Basic block %i edge lists are corrupted", bb->index);
6883                   err = 1;
6884                 }
6885             }
6886           e = e->succ_next;
6887         }
6888
6889       e = bb->pred;
6890       while (e)
6891         {
6892           if (e->dest != bb)
6893             {
6894               error ("Basic block %d pred edge is corrupted", bb->index);
6895               fputs ("Predecessor: ", stderr);
6896               dump_edge_info (stderr, e, 0);
6897               fputs ("\nSuccessor: ", stderr);
6898               dump_edge_info (stderr, e, 1);
6899               fputc ('\n', stderr);
6900               err = 1;
6901             }
6902           if (e->src != ENTRY_BLOCK_PTR)
6903             {
6904               edge e2 = e->src->succ;
6905               while (e2 && e2 != e)
6906                 e2 = e2->succ_next;
6907               if (!e2)
6908                 {
6909                   error ("Basic block %i edge lists are corrupted", bb->index);
6910                   err = 1;
6911                 }
6912             }
6913           e = e->pred_next;
6914         }
6915
6916       /* OK pointers are correct.  Now check the header of basic
6917          block.  It ought to contain optional CODE_LABEL followed
6918          by NOTE_BASIC_BLOCK.  */
6919       x = bb->head;
6920       if (GET_CODE (x) == CODE_LABEL)
6921         {
6922           if (bb->end == x)
6923             {
6924               error ("NOTE_INSN_BASIC_BLOCK is missing for block %d",
6925                      bb->index);
6926               err = 1;
6927             }
6928           x = NEXT_INSN (x);
6929         }
6930       if (!NOTE_INSN_BASIC_BLOCK_P (x) || NOTE_BASIC_BLOCK (x) != bb)
6931         {
6932           error ("NOTE_INSN_BASIC_BLOCK is missing for block %d\n",
6933                  bb->index);
6934           err = 1;
6935         }
6936
6937       if (bb->end == x)
6938         {
6939           /* Do checks for empty blocks here */
6940         }
6941       else
6942         {
6943           x = NEXT_INSN (x);
6944           while (x)
6945             {
6946               if (NOTE_INSN_BASIC_BLOCK_P (x))
6947                 {
6948                   error ("NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d",
6949                          INSN_UID (x), bb->index);
6950                   err = 1;
6951                 }
6952
6953               if (x == bb->end)
6954                 break;
6955
6956               if (GET_CODE (x) == JUMP_INSN
6957                   || GET_CODE (x) == CODE_LABEL
6958                   || GET_CODE (x) == BARRIER)
6959                 {
6960                   error ("In basic block %d:", bb->index);
6961                   fatal_insn ("Flow control insn inside a basic block", x);
6962                 }
6963
6964               x = NEXT_INSN (x);
6965             }
6966         }
6967     }
6968
6969   last_bb_num_seen = -1;
6970   num_bb_notes = 0;
6971   x = rtx_first;
6972   while (x)
6973     {
6974       if (NOTE_INSN_BASIC_BLOCK_P (x))
6975         {
6976           basic_block bb = NOTE_BASIC_BLOCK (x);
6977           num_bb_notes++;
6978           if (bb->index != last_bb_num_seen + 1)
6979             /* Basic blocks not numbered consecutively.  */
6980             abort ();
6981                
6982           last_bb_num_seen = bb->index;
6983         }
6984
6985       if (!bb_info[INSN_UID (x)])
6986         {
6987           switch (GET_CODE (x))
6988             {
6989             case BARRIER:
6990             case NOTE:
6991               break;
6992
6993             case CODE_LABEL:
6994               /* An addr_vec is placed outside any block block.  */
6995               if (NEXT_INSN (x)
6996                   && GET_CODE (NEXT_INSN (x)) == JUMP_INSN
6997                   && (GET_CODE (PATTERN (NEXT_INSN (x))) == ADDR_DIFF_VEC
6998                       || GET_CODE (PATTERN (NEXT_INSN (x))) == ADDR_VEC))
6999                 {
7000                   x = NEXT_INSN (x);
7001                 }
7002
7003               /* But in any case, non-deletable labels can appear anywhere.  */
7004               break;
7005
7006             default:
7007               fatal_insn ("Insn outside basic block", x);
7008             }
7009         }
7010
7011       if (INSN_P (x)
7012           && GET_CODE (x) == JUMP_INSN
7013           && returnjump_p (x) && ! condjump_p (x)
7014           && ! (NEXT_INSN (x) && GET_CODE (NEXT_INSN (x)) == BARRIER))
7015             fatal_insn ("Return not followed by barrier", x);
7016
7017       x = NEXT_INSN (x);
7018     }
7019
7020   if (num_bb_notes != n_basic_blocks)
7021     internal_error
7022       ("number of bb notes in insn chain (%d) != n_basic_blocks (%d)",
7023        num_bb_notes, n_basic_blocks);
7024
7025   if (err)
7026     abort ();
7027
7028   /* Clean up.  */
7029   free (bb_info);
7030 }
7031 \f
7032 /* Functions to access an edge list with a vector representation.
7033    Enough data is kept such that given an index number, the
7034    pred and succ that edge represents can be determined, or
7035    given a pred and a succ, its index number can be returned.
7036    This allows algorithms which consume a lot of memory to
7037    represent the normally full matrix of edge (pred,succ) with a
7038    single indexed vector,  edge (EDGE_INDEX (pred, succ)), with no
7039    wasted space in the client code due to sparse flow graphs.  */
7040
7041 /* This functions initializes the edge list. Basically the entire
7042    flowgraph is processed, and all edges are assigned a number,
7043    and the data structure is filled in.  */
7044
7045 struct edge_list *
7046 create_edge_list ()
7047 {
7048   struct edge_list *elist;
7049   edge e;
7050   int num_edges;
7051   int x;
7052   int block_count;
7053
7054   block_count = n_basic_blocks + 2;   /* Include the entry and exit blocks.  */
7055
7056   num_edges = 0;
7057
7058   /* Determine the number of edges in the flow graph by counting successor
7059      edges on each basic block.  */
7060   for (x = 0; x < n_basic_blocks; x++)
7061     {
7062       basic_block bb = BASIC_BLOCK (x);
7063
7064       for (e = bb->succ; e; e = e->succ_next)
7065         num_edges++;
7066     }
7067   /* Don't forget successors of the entry block.  */
7068   for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
7069     num_edges++;
7070
7071   elist = (struct edge_list *) xmalloc (sizeof (struct edge_list));
7072   elist->num_blocks = block_count;
7073   elist->num_edges = num_edges;
7074   elist->index_to_edge = (edge *) xmalloc (sizeof (edge) * num_edges);
7075
7076   num_edges = 0;
7077
7078   /* Follow successors of the entry block, and register these edges.  */
7079   for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
7080     {
7081       elist->index_to_edge[num_edges] = e;
7082       num_edges++;
7083     }
7084
7085   for (x = 0; x < n_basic_blocks; x++)
7086     {
7087       basic_block bb = BASIC_BLOCK (x);
7088
7089       /* Follow all successors of blocks, and register these edges.  */
7090       for (e = bb->succ; e; e = e->succ_next)
7091         {
7092           elist->index_to_edge[num_edges] = e;
7093           num_edges++;
7094         }
7095     }
7096   return elist;
7097 }
7098
7099 /* This function free's memory associated with an edge list.  */
7100
7101 void
7102 free_edge_list (elist)
7103      struct edge_list *elist;
7104 {
7105   if (elist)
7106     {
7107       free (elist->index_to_edge);
7108       free (elist);
7109     }
7110 }
7111
7112 /* This function provides debug output showing an edge list.  */
7113
7114 void
7115 print_edge_list (f, elist)
7116      FILE *f;
7117      struct edge_list *elist;
7118 {
7119   int x;
7120   fprintf (f, "Compressed edge list, %d BBs + entry & exit, and %d edges\n",
7121            elist->num_blocks - 2, elist->num_edges);
7122
7123   for (x = 0; x < elist->num_edges; x++)
7124     {
7125       fprintf (f, " %-4d - edge(", x);
7126       if (INDEX_EDGE_PRED_BB (elist, x) == ENTRY_BLOCK_PTR)
7127         fprintf (f, "entry,");
7128       else
7129         fprintf (f, "%d,", INDEX_EDGE_PRED_BB (elist, x)->index);
7130
7131       if (INDEX_EDGE_SUCC_BB (elist, x) == EXIT_BLOCK_PTR)
7132         fprintf (f, "exit)\n");
7133       else
7134         fprintf (f, "%d)\n", INDEX_EDGE_SUCC_BB (elist, x)->index);
7135     }
7136 }
7137
7138 /* This function provides an internal consistency check of an edge list,
7139    verifying that all edges are present, and that there are no
7140    extra edges.  */
7141
7142 void
7143 verify_edge_list (f, elist)
7144      FILE *f;
7145      struct edge_list *elist;
7146 {
7147   int x, pred, succ, index;
7148   edge e;
7149
7150   for (x = 0; x < n_basic_blocks; x++)
7151     {
7152       basic_block bb = BASIC_BLOCK (x);
7153
7154       for (e = bb->succ; e; e = e->succ_next)
7155         {
7156           pred = e->src->index;
7157           succ = e->dest->index;
7158           index = EDGE_INDEX (elist, e->src, e->dest);
7159           if (index == EDGE_INDEX_NO_EDGE)
7160             {
7161               fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ);
7162               continue;
7163             }
7164           if (INDEX_EDGE_PRED_BB (elist, index)->index != pred)
7165             fprintf (f, "*p* Pred for index %d should be %d not %d\n",
7166                      index, pred, INDEX_EDGE_PRED_BB (elist, index)->index);
7167           if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ)
7168             fprintf (f, "*p* Succ for index %d should be %d not %d\n",
7169                      index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index);
7170         }
7171     }
7172   for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
7173     {
7174       pred = e->src->index;
7175       succ = e->dest->index;
7176       index = EDGE_INDEX (elist, e->src, e->dest);
7177       if (index == EDGE_INDEX_NO_EDGE)
7178         {
7179           fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ);
7180           continue;
7181         }
7182       if (INDEX_EDGE_PRED_BB (elist, index)->index != pred)
7183         fprintf (f, "*p* Pred for index %d should be %d not %d\n",
7184                  index, pred, INDEX_EDGE_PRED_BB (elist, index)->index);
7185       if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ)
7186         fprintf (f, "*p* Succ for index %d should be %d not %d\n",
7187                  index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index);
7188     }
7189   /* We've verified that all the edges are in the list, no lets make sure
7190      there are no spurious edges in the list.  */
7191
7192   for (pred = 0; pred < n_basic_blocks; pred++)
7193     for (succ = 0; succ < n_basic_blocks; succ++)
7194       {
7195         basic_block p = BASIC_BLOCK (pred);
7196         basic_block s = BASIC_BLOCK (succ);
7197
7198         int found_edge = 0;
7199
7200         for (e = p->succ; e; e = e->succ_next)
7201           if (e->dest == s)
7202             {
7203               found_edge = 1;
7204               break;
7205             }
7206         for (e = s->pred; e; e = e->pred_next)
7207           if (e->src == p)
7208             {
7209               found_edge = 1;
7210               break;
7211             }
7212         if (EDGE_INDEX (elist, BASIC_BLOCK (pred), BASIC_BLOCK (succ))
7213             == EDGE_INDEX_NO_EDGE && found_edge != 0)
7214           fprintf (f, "*** Edge (%d, %d) appears to not have an index\n",
7215                    pred, succ);
7216         if (EDGE_INDEX (elist, BASIC_BLOCK (pred), BASIC_BLOCK (succ))
7217             != EDGE_INDEX_NO_EDGE && found_edge == 0)
7218           fprintf (f, "*** Edge (%d, %d) has index %d, but there is no edge\n",
7219                    pred, succ, EDGE_INDEX (elist, BASIC_BLOCK (pred),
7220                                            BASIC_BLOCK (succ)));
7221       }
7222   for (succ = 0; succ < n_basic_blocks; succ++)
7223     {
7224       basic_block p = ENTRY_BLOCK_PTR;
7225       basic_block s = BASIC_BLOCK (succ);
7226
7227       int found_edge = 0;
7228
7229       for (e = p->succ; e; e = e->succ_next)
7230         if (e->dest == s)
7231           {
7232             found_edge = 1;
7233             break;
7234           }
7235       for (e = s->pred; e; e = e->pred_next)
7236         if (e->src == p)
7237           {
7238             found_edge = 1;
7239             break;
7240           }
7241       if (EDGE_INDEX (elist, ENTRY_BLOCK_PTR, BASIC_BLOCK (succ))
7242           == EDGE_INDEX_NO_EDGE && found_edge != 0)
7243         fprintf (f, "*** Edge (entry, %d) appears to not have an index\n",
7244                  succ);
7245       if (EDGE_INDEX (elist, ENTRY_BLOCK_PTR, BASIC_BLOCK (succ))
7246           != EDGE_INDEX_NO_EDGE && found_edge == 0)
7247         fprintf (f, "*** Edge (entry, %d) has index %d, but no edge exists\n",
7248                  succ, EDGE_INDEX (elist, ENTRY_BLOCK_PTR,
7249                                    BASIC_BLOCK (succ)));
7250     }
7251   for (pred = 0; pred < n_basic_blocks; pred++)
7252     {
7253       basic_block p = BASIC_BLOCK (pred);
7254       basic_block s = EXIT_BLOCK_PTR;
7255
7256       int found_edge = 0;
7257
7258       for (e = p->succ; e; e = e->succ_next)
7259         if (e->dest == s)
7260           {
7261             found_edge = 1;
7262             break;
7263           }
7264       for (e = s->pred; e; e = e->pred_next)
7265         if (e->src == p)
7266           {
7267             found_edge = 1;
7268             break;
7269           }
7270       if (EDGE_INDEX (elist, BASIC_BLOCK (pred), EXIT_BLOCK_PTR)
7271           == EDGE_INDEX_NO_EDGE && found_edge != 0)
7272         fprintf (f, "*** Edge (%d, exit) appears to not have an index\n",
7273                  pred);
7274       if (EDGE_INDEX (elist, BASIC_BLOCK (pred), EXIT_BLOCK_PTR)
7275           != EDGE_INDEX_NO_EDGE && found_edge == 0)
7276         fprintf (f, "*** Edge (%d, exit) has index %d, but no edge exists\n",
7277                  pred, EDGE_INDEX (elist, BASIC_BLOCK (pred),
7278                                    EXIT_BLOCK_PTR));
7279     }
7280 }
7281
7282 /* This routine will determine what, if any, edge there is between
7283    a specified predecessor and successor.  */
7284
7285 int
7286 find_edge_index (edge_list, pred, succ)
7287      struct edge_list *edge_list;
7288      basic_block pred, succ;
7289 {
7290   int x;
7291   for (x = 0; x < NUM_EDGES (edge_list); x++)
7292     {
7293       if (INDEX_EDGE_PRED_BB (edge_list, x) == pred
7294           && INDEX_EDGE_SUCC_BB (edge_list, x) == succ)
7295         return x;
7296     }
7297   return (EDGE_INDEX_NO_EDGE);
7298 }
7299
7300 /* This function will remove an edge from the flow graph.  */
7301
7302 void
7303 remove_edge (e)
7304      edge e;
7305 {
7306   edge last_pred = NULL;
7307   edge last_succ = NULL;
7308   edge tmp;
7309   basic_block src, dest;
7310   src = e->src;
7311   dest = e->dest;
7312   for (tmp = src->succ; tmp && tmp != e; tmp = tmp->succ_next)
7313     last_succ = tmp;
7314
7315   if (!tmp)
7316     abort ();
7317   if (last_succ)
7318     last_succ->succ_next = e->succ_next;
7319   else
7320     src->succ = e->succ_next;
7321
7322   for (tmp = dest->pred; tmp && tmp != e; tmp = tmp->pred_next)
7323     last_pred = tmp;
7324
7325   if (!tmp)
7326     abort ();
7327   if (last_pred)
7328     last_pred->pred_next = e->pred_next;
7329   else
7330     dest->pred = e->pred_next;
7331
7332   n_edges--;
7333   free (e);
7334 }
7335
7336 /* This routine will remove any fake successor edges for a basic block.
7337    When the edge is removed, it is also removed from whatever predecessor
7338    list it is in.  */
7339
7340 static void
7341 remove_fake_successors (bb)
7342      basic_block bb;
7343 {
7344   edge e;
7345   for (e = bb->succ; e;)
7346     {
7347       edge tmp = e;
7348       e = e->succ_next;
7349       if ((tmp->flags & EDGE_FAKE) == EDGE_FAKE)
7350         remove_edge (tmp);
7351     }
7352 }
7353
7354 /* This routine will remove all fake edges from the flow graph.  If
7355    we remove all fake successors, it will automatically remove all
7356    fake predecessors.  */
7357
7358 void
7359 remove_fake_edges ()
7360 {
7361   int x;
7362
7363   for (x = 0; x < n_basic_blocks; x++)
7364     remove_fake_successors (BASIC_BLOCK (x));
7365
7366   /* We've handled all successors except the entry block's.  */
7367   remove_fake_successors (ENTRY_BLOCK_PTR);
7368 }
7369
7370 /* This function will add a fake edge between any block which has no
7371    successors, and the exit block. Some data flow equations require these
7372    edges to exist.  */
7373
7374 void
7375 add_noreturn_fake_exit_edges ()
7376 {
7377   int x;
7378
7379   for (x = 0; x < n_basic_blocks; x++)
7380     if (BASIC_BLOCK (x)->succ == NULL)
7381       make_edge (NULL, BASIC_BLOCK (x), EXIT_BLOCK_PTR, EDGE_FAKE);
7382 }
7383
7384 /* This function adds a fake edge between any infinite loops to the
7385    exit block.  Some optimizations require a path from each node to
7386    the exit node.
7387
7388    See also Morgan, Figure 3.10, pp. 82-83.
7389
7390    The current implementation is ugly, not attempting to minimize the
7391    number of inserted fake edges.  To reduce the number of fake edges
7392    to insert, add fake edges from _innermost_ loops containing only
7393    nodes not reachable from the exit block.  */
7394
7395 void
7396 connect_infinite_loops_to_exit ()
7397 {
7398   basic_block unvisited_block;
7399
7400   /* Perform depth-first search in the reverse graph to find nodes
7401      reachable from the exit block.  */
7402   struct depth_first_search_dsS dfs_ds;
7403
7404   flow_dfs_compute_reverse_init (&dfs_ds);
7405   flow_dfs_compute_reverse_add_bb (&dfs_ds, EXIT_BLOCK_PTR);
7406
7407   /* Repeatedly add fake edges, updating the unreachable nodes.  */
7408   while (1)
7409     {
7410       unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds);
7411       if (!unvisited_block)
7412         break;
7413       make_edge (NULL, unvisited_block, EXIT_BLOCK_PTR, EDGE_FAKE);
7414       flow_dfs_compute_reverse_add_bb (&dfs_ds, unvisited_block);
7415     }
7416
7417   flow_dfs_compute_reverse_finish (&dfs_ds);
7418
7419   return;
7420 }
7421
7422 /* Redirect an edge's successor from one block to another.  */
7423
7424 void
7425 redirect_edge_succ (e, new_succ)
7426      edge e;
7427      basic_block new_succ;
7428 {
7429   edge *pe;
7430
7431   /* Disconnect the edge from the old successor block.  */
7432   for (pe = &e->dest->pred; *pe != e; pe = &(*pe)->pred_next)
7433     continue;
7434   *pe = (*pe)->pred_next;
7435
7436   /* Reconnect the edge to the new successor block.  */
7437   e->pred_next = new_succ->pred;
7438   new_succ->pred = e;
7439   e->dest = new_succ;
7440 }
7441
7442 /* Redirect an edge's predecessor from one block to another.  */
7443
7444 void
7445 redirect_edge_pred (e, new_pred)
7446      edge e;
7447      basic_block new_pred;
7448 {
7449   edge *pe;
7450
7451   /* Disconnect the edge from the old predecessor block.  */
7452   for (pe = &e->src->succ; *pe != e; pe = &(*pe)->succ_next)
7453     continue;
7454   *pe = (*pe)->succ_next;
7455
7456   /* Reconnect the edge to the new predecessor block.  */
7457   e->succ_next = new_pred->succ;
7458   new_pred->succ = e;
7459   e->src = new_pred;
7460 }
7461 \f
7462 /* Dump the list of basic blocks in the bitmap NODES.  */
7463
7464 static void
7465 flow_nodes_print (str, nodes, file)
7466      const char *str;
7467      const sbitmap nodes;
7468      FILE *file;
7469 {
7470   int node;
7471
7472   if (! nodes)
7473     return;
7474
7475   fprintf (file, "%s { ", str);
7476   EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, {fprintf (file, "%d ", node);});
7477   fputs ("}\n", file);
7478 }
7479
7480
7481 /* Dump the list of edges in the array EDGE_LIST.  */
7482
7483 static void
7484 flow_edge_list_print (str, edge_list, num_edges, file)
7485      const char *str;
7486      const edge *edge_list;
7487      int num_edges;
7488      FILE *file;
7489 {
7490   int i;
7491
7492   if (! edge_list)
7493     return;
7494
7495   fprintf (file, "%s { ", str);
7496   for (i = 0; i < num_edges; i++)
7497     fprintf (file, "%d->%d ", edge_list[i]->src->index,
7498              edge_list[i]->dest->index);
7499   fputs ("}\n", file);
7500 }
7501
7502
7503 /* Dump loop related CFG information.  */
7504
7505 static void
7506 flow_loops_cfg_dump (loops, file)
7507      const struct loops *loops;
7508      FILE *file;
7509 {
7510   int i;
7511
7512   if (! loops->num || ! file || ! loops->cfg.dom)
7513     return;
7514
7515   for (i = 0; i < n_basic_blocks; i++)
7516     {
7517       edge succ;
7518
7519       fprintf (file, ";; %d succs { ", i);
7520       for (succ = BASIC_BLOCK (i)->succ; succ; succ = succ->succ_next)
7521         fprintf (file, "%d ", succ->dest->index);
7522       flow_nodes_print ("} dom", loops->cfg.dom[i], file);
7523     }
7524
7525   /* Dump the DFS node order.  */
7526   if (loops->cfg.dfs_order)
7527     {
7528       fputs (";; DFS order: ", file);
7529       for (i = 0; i < n_basic_blocks; i++)
7530         fprintf (file, "%d ", loops->cfg.dfs_order[i]);
7531       fputs ("\n", file);
7532     }
7533   /* Dump the reverse completion node order.  */
7534   if (loops->cfg.rc_order)
7535     {
7536       fputs (";; RC order: ", file);
7537       for (i = 0; i < n_basic_blocks; i++)
7538         fprintf (file, "%d ", loops->cfg.rc_order[i]);
7539       fputs ("\n", file);
7540     }
7541 }
7542
7543 /* Return non-zero if the nodes of LOOP are a subset of OUTER.  */
7544
7545 static int
7546 flow_loop_nested_p (outer, loop)
7547      struct loop *outer;
7548      struct loop *loop;
7549 {
7550   return sbitmap_a_subset_b_p (loop->nodes, outer->nodes);
7551 }
7552
7553
7554 /* Dump the loop information specified by LOOP to the stream FILE
7555    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
7556 void
7557 flow_loop_dump (loop, file, loop_dump_aux, verbose)
7558      const struct loop *loop;
7559      FILE *file;
7560      void (*loop_dump_aux) PARAMS((const struct loop *, FILE *, int));
7561      int verbose;
7562 {
7563   if (! loop || ! loop->header)
7564     return;
7565
7566   fprintf (file, ";;\n;; Loop %d (%d to %d):%s%s\n",
7567            loop->num, INSN_UID (loop->first->head),
7568            INSN_UID (loop->last->end),
7569            loop->shared ? " shared" : "",
7570            loop->invalid ? " invalid" : "");
7571   fprintf (file, ";;  header %d, latch %d, pre-header %d, first %d, last %d\n",
7572            loop->header->index, loop->latch->index,
7573            loop->pre_header ? loop->pre_header->index : -1,
7574            loop->first->index, loop->last->index);
7575   fprintf (file, ";;  depth %d, level %d, outer %ld\n",
7576            loop->depth, loop->level,
7577            (long) (loop->outer ? loop->outer->num : -1));
7578
7579   if (loop->pre_header_edges)
7580     flow_edge_list_print (";;  pre-header edges", loop->pre_header_edges,
7581                           loop->num_pre_header_edges, file);
7582   flow_edge_list_print (";;  entry edges", loop->entry_edges,
7583                         loop->num_entries, file);
7584   fprintf (file, ";;  %d", loop->num_nodes);
7585   flow_nodes_print (" nodes", loop->nodes, file);
7586   flow_edge_list_print (";;  exit edges", loop->exit_edges,
7587                         loop->num_exits, file);
7588   if (loop->exits_doms)
7589     flow_nodes_print (";;  exit doms", loop->exits_doms, file);
7590   if (loop_dump_aux)
7591     loop_dump_aux (loop, file, verbose);
7592 }
7593
7594
7595 /* Dump the loop information specified by LOOPS to the stream FILE,
7596    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
7597 void
7598 flow_loops_dump (loops, file, loop_dump_aux, verbose)
7599      const struct loops *loops;
7600      FILE *file;
7601      void (*loop_dump_aux) PARAMS((const struct loop *, FILE *, int));
7602      int verbose;
7603 {
7604   int i;
7605   int num_loops;
7606
7607   num_loops = loops->num;
7608   if (! num_loops || ! file)
7609     return;
7610
7611   fprintf (file, ";; %d loops found, %d levels\n",
7612            num_loops, loops->levels);
7613
7614   for (i = 0; i < num_loops; i++)
7615     {
7616       struct loop *loop = &loops->array[i];
7617
7618       flow_loop_dump (loop, file, loop_dump_aux, verbose);
7619
7620       if (loop->shared)
7621         {
7622           int j;
7623
7624           for (j = 0; j < i; j++)
7625             {
7626               struct loop *oloop = &loops->array[j];
7627
7628               if (loop->header == oloop->header)
7629                 {
7630                   int disjoint;
7631                   int smaller;
7632
7633                   smaller = loop->num_nodes < oloop->num_nodes;
7634
7635                   /* If the union of LOOP and OLOOP is different than
7636                      the larger of LOOP and OLOOP then LOOP and OLOOP
7637                      must be disjoint.  */
7638                   disjoint = ! flow_loop_nested_p (smaller ? loop : oloop,
7639                                                    smaller ? oloop : loop);
7640                   fprintf (file,
7641                            ";; loop header %d shared by loops %d, %d %s\n",
7642                            loop->header->index, i, j,
7643                            disjoint ? "disjoint" : "nested");
7644                 }
7645             }
7646         }
7647     }
7648
7649   if (verbose)
7650     flow_loops_cfg_dump (loops, file);
7651 }
7652
7653
7654 /* Free all the memory allocated for LOOPS.  */
7655
7656 void
7657 flow_loops_free (loops)
7658      struct loops *loops;
7659 {
7660   if (loops->array)
7661     {
7662       int i;
7663
7664       if (! loops->num)
7665         abort ();
7666
7667       /* Free the loop descriptors.  */
7668       for (i = 0; i < loops->num; i++)
7669         {
7670           struct loop *loop = &loops->array[i];
7671
7672           if (loop->pre_header_edges)
7673             free (loop->pre_header_edges);
7674           if (loop->nodes)
7675             sbitmap_free (loop->nodes);
7676           if (loop->entry_edges)
7677             free (loop->entry_edges);
7678           if (loop->exit_edges)
7679             free (loop->exit_edges);
7680           if (loop->exits_doms)
7681             sbitmap_free (loop->exits_doms);
7682         }
7683       free (loops->array);
7684       loops->array = NULL;
7685
7686       if (loops->cfg.dom)
7687         sbitmap_vector_free (loops->cfg.dom);
7688       if (loops->cfg.dfs_order)
7689         free (loops->cfg.dfs_order);
7690
7691       if (loops->shared_headers)
7692         sbitmap_free (loops->shared_headers);
7693     }
7694 }
7695
7696
7697 /* Find the entry edges into the loop with header HEADER and nodes
7698    NODES and store in ENTRY_EDGES array.  Return the number of entry
7699    edges from the loop.  */
7700
7701 static int
7702 flow_loop_entry_edges_find (header, nodes, entry_edges)
7703      basic_block header;
7704      const sbitmap nodes;
7705      edge **entry_edges;
7706 {
7707   edge e;
7708   int num_entries;
7709
7710   *entry_edges = NULL;
7711
7712   num_entries = 0;
7713   for (e = header->pred; e; e = e->pred_next)
7714     {
7715       basic_block src = e->src;
7716
7717       if (src == ENTRY_BLOCK_PTR || ! TEST_BIT (nodes, src->index))
7718         num_entries++;
7719     }
7720
7721   if (! num_entries)
7722     abort ();
7723
7724   *entry_edges = (edge *) xmalloc (num_entries * sizeof (edge *));
7725
7726   num_entries = 0;
7727   for (e = header->pred; e; e = e->pred_next)
7728     {
7729       basic_block src = e->src;
7730
7731       if (src == ENTRY_BLOCK_PTR || ! TEST_BIT (nodes, src->index))
7732         (*entry_edges)[num_entries++] = e;
7733     }
7734
7735   return num_entries;
7736 }
7737
7738
7739 /* Find the exit edges from the loop using the bitmap of loop nodes
7740    NODES and store in EXIT_EDGES array.  Return the number of
7741    exit edges from the loop.  */
7742
7743 static int
7744 flow_loop_exit_edges_find (nodes, exit_edges)
7745      const sbitmap nodes;
7746      edge **exit_edges;
7747 {
7748   edge e;
7749   int node;
7750   int num_exits;
7751
7752   *exit_edges = NULL;
7753
7754   /* Check all nodes within the loop to see if there are any
7755      successors not in the loop.  Note that a node may have multiple
7756      exiting edges ?????  A node can have one jumping edge and one fallthru
7757      edge so only one of these can exit the loop.  */
7758   num_exits = 0;
7759   EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, {
7760     for (e = BASIC_BLOCK (node)->succ; e; e = e->succ_next)
7761       {
7762         basic_block dest = e->dest;
7763
7764         if (dest == EXIT_BLOCK_PTR || ! TEST_BIT (nodes, dest->index))
7765             num_exits++;
7766       }
7767   });
7768
7769   if (! num_exits)
7770     return 0;
7771
7772   *exit_edges = (edge *) xmalloc (num_exits * sizeof (edge *));
7773
7774   /* Store all exiting edges into an array.  */
7775   num_exits = 0;
7776   EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, {
7777     for (e = BASIC_BLOCK (node)->succ; e; e = e->succ_next)
7778       {
7779         basic_block dest = e->dest;
7780
7781         if (dest == EXIT_BLOCK_PTR || ! TEST_BIT (nodes, dest->index))
7782           (*exit_edges)[num_exits++] = e;
7783       }
7784   });
7785
7786   return num_exits;
7787 }
7788
7789
7790 /* Find the nodes contained within the loop with header HEADER and
7791    latch LATCH and store in NODES.  Return the number of nodes within
7792    the loop.  */
7793
7794 static int
7795 flow_loop_nodes_find (header, latch, nodes)
7796      basic_block header;
7797      basic_block latch;
7798      sbitmap nodes;
7799 {
7800   basic_block *stack;
7801   int sp;
7802   int num_nodes = 0;
7803
7804   stack = (basic_block *) xmalloc (n_basic_blocks * sizeof (basic_block));
7805   sp = 0;
7806
7807   /* Start with only the loop header in the set of loop nodes.  */
7808   sbitmap_zero (nodes);
7809   SET_BIT (nodes, header->index);
7810   num_nodes++;
7811   header->loop_depth++;
7812
7813   /* Push the loop latch on to the stack.  */
7814   if (! TEST_BIT (nodes, latch->index))
7815     {
7816       SET_BIT (nodes, latch->index);
7817       latch->loop_depth++;
7818       num_nodes++;
7819       stack[sp++] = latch;
7820     }
7821
7822   while (sp)
7823     {
7824       basic_block node;
7825       edge e;
7826
7827       node = stack[--sp];
7828       for (e = node->pred; e; e = e->pred_next)
7829         {
7830           basic_block ancestor = e->src;
7831
7832           /* If each ancestor not marked as part of loop, add to set of
7833              loop nodes and push on to stack.  */
7834           if (ancestor != ENTRY_BLOCK_PTR
7835               && ! TEST_BIT (nodes, ancestor->index))
7836             {
7837               SET_BIT (nodes, ancestor->index);
7838               ancestor->loop_depth++;
7839               num_nodes++;
7840               stack[sp++] = ancestor;
7841             }
7842         }
7843     }
7844   free (stack);
7845   return num_nodes;
7846 }
7847
7848 /* Compute the depth first search order and store in the array
7849   DFS_ORDER if non-zero, marking the nodes visited in VISITED.  If
7850   RC_ORDER is non-zero, return the reverse completion number for each
7851   node.  Returns the number of nodes visited.  A depth first search
7852   tries to get as far away from the starting point as quickly as
7853   possible.  */
7854
7855 static int
7856 flow_depth_first_order_compute (dfs_order, rc_order)
7857      int *dfs_order;
7858      int *rc_order;
7859 {
7860   edge *stack;
7861   int sp;
7862   int dfsnum = 0;
7863   int rcnum = n_basic_blocks - 1;
7864   sbitmap visited;
7865
7866   /* Allocate stack for back-tracking up CFG.  */
7867   stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge));
7868   sp = 0;
7869
7870   /* Allocate bitmap to track nodes that have been visited.  */
7871   visited = sbitmap_alloc (n_basic_blocks);
7872
7873   /* None of the nodes in the CFG have been visited yet.  */
7874   sbitmap_zero (visited);
7875
7876   /* Push the first edge on to the stack.  */
7877   stack[sp++] = ENTRY_BLOCK_PTR->succ;
7878
7879   while (sp)
7880     {
7881       edge e;
7882       basic_block src;
7883       basic_block dest;
7884
7885       /* Look at the edge on the top of the stack.  */
7886       e = stack[sp - 1];
7887       src = e->src;
7888       dest = e->dest;
7889
7890       /* Check if the edge destination has been visited yet.  */
7891       if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
7892         {
7893           /* Mark that we have visited the destination.  */
7894           SET_BIT (visited, dest->index);
7895
7896           if (dfs_order)
7897             dfs_order[dfsnum++] = dest->index;
7898
7899           if (dest->succ)
7900             {
7901               /* Since the DEST node has been visited for the first
7902                  time, check its successors.  */
7903               stack[sp++] = dest->succ;
7904             }
7905           else
7906             {
7907               /* There are no successors for the DEST node so assign
7908                  its reverse completion number.  */
7909               if (rc_order)
7910                 rc_order[rcnum--] = dest->index;
7911             }
7912         }
7913       else
7914         {
7915           if (! e->succ_next && src != ENTRY_BLOCK_PTR)
7916             {
7917               /* There are no more successors for the SRC node
7918                  so assign its reverse completion number.  */
7919               if (rc_order)
7920                 rc_order[rcnum--] = src->index;
7921             }
7922
7923           if (e->succ_next)
7924             stack[sp - 1] = e->succ_next;
7925           else
7926             sp--;
7927         }
7928     }
7929
7930   free (stack);
7931   sbitmap_free (visited);
7932
7933   /* The number of nodes visited should not be greater than
7934      n_basic_blocks.  */
7935   if (dfsnum > n_basic_blocks)
7936     abort ();
7937
7938   /* There are some nodes left in the CFG that are unreachable.  */
7939   if (dfsnum < n_basic_blocks)
7940     abort ();
7941   return dfsnum;
7942 }
7943
7944 /* Compute the depth first search order on the _reverse_ graph and
7945    store in the array DFS_ORDER, marking the nodes visited in VISITED.
7946    Returns the number of nodes visited.
7947
7948    The computation is split into three pieces:
7949
7950    flow_dfs_compute_reverse_init () creates the necessary data
7951    structures.
7952
7953    flow_dfs_compute_reverse_add_bb () adds a basic block to the data
7954    structures.  The block will start the search.
7955
7956    flow_dfs_compute_reverse_execute () continues (or starts) the
7957    search using the block on the top of the stack, stopping when the
7958    stack is empty.
7959
7960    flow_dfs_compute_reverse_finish () destroys the necessary data
7961    structures.
7962
7963    Thus, the user will probably call ..._init(), call ..._add_bb() to
7964    add a beginning basic block to the stack, call ..._execute(),
7965    possibly add another bb to the stack and again call ..._execute(),
7966    ..., and finally call _finish().  */
7967
7968 /* Initialize the data structures used for depth-first search on the
7969    reverse graph.  If INITIALIZE_STACK is nonzero, the exit block is
7970    added to the basic block stack.  DATA is the current depth-first
7971    search context.  If INITIALIZE_STACK is non-zero, there is an
7972    element on the stack.  */
7973
7974 static void
7975 flow_dfs_compute_reverse_init (data)
7976      depth_first_search_ds data;
7977 {
7978   /* Allocate stack for back-tracking up CFG.  */
7979   data->stack =
7980     (basic_block *) xmalloc ((n_basic_blocks - (INVALID_BLOCK + 1))
7981                              * sizeof (basic_block));
7982   data->sp = 0;
7983
7984   /* Allocate bitmap to track nodes that have been visited.  */
7985   data->visited_blocks = sbitmap_alloc (n_basic_blocks - (INVALID_BLOCK + 1));
7986
7987   /* None of the nodes in the CFG have been visited yet.  */
7988   sbitmap_zero (data->visited_blocks);
7989
7990   return;
7991 }
7992
7993 /* Add the specified basic block to the top of the dfs data
7994    structures.  When the search continues, it will start at the
7995    block.  */
7996
7997 static void
7998 flow_dfs_compute_reverse_add_bb (data, bb)
7999      depth_first_search_ds data;
8000      basic_block bb;
8001 {
8002   data->stack[data->sp++] = bb;
8003   return;
8004 }
8005
8006 /* Continue the depth-first search through the reverse graph starting
8007    with the block at the stack's top and ending when the stack is
8008    empty.  Visited nodes are marked.  Returns an unvisited basic
8009    block, or NULL if there is none available.  */
8010
8011 static basic_block
8012 flow_dfs_compute_reverse_execute (data)
8013      depth_first_search_ds data;
8014 {
8015   basic_block bb;
8016   edge e;
8017   int i;
8018
8019   while (data->sp > 0)
8020     {
8021       bb = data->stack[--data->sp];
8022
8023       /* Mark that we have visited this node.  */
8024       if (!TEST_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1)))
8025         {
8026           SET_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1));
8027
8028           /* Perform depth-first search on adjacent vertices.  */
8029           for (e = bb->pred; e; e = e->pred_next)
8030             flow_dfs_compute_reverse_add_bb (data, e->src);
8031         }
8032     }
8033
8034   /* Determine if there are unvisited basic blocks.  */
8035   for (i = n_basic_blocks - (INVALID_BLOCK + 1); --i >= 0;)
8036     if (!TEST_BIT (data->visited_blocks, i))
8037       return BASIC_BLOCK (i + (INVALID_BLOCK + 1));
8038   return NULL;
8039 }
8040
8041 /* Destroy the data structures needed for depth-first search on the
8042    reverse graph.  */
8043
8044 static void
8045 flow_dfs_compute_reverse_finish (data)
8046      depth_first_search_ds data;
8047 {
8048   free (data->stack);
8049   sbitmap_free (data->visited_blocks);
8050   return;
8051 }
8052
8053
8054 /* Find the root node of the loop pre-header extended basic block and
8055    the edges along the trace from the root node to the loop header.  */
8056
8057 static void
8058 flow_loop_pre_header_scan (loop)
8059      struct loop *loop;
8060 {
8061   int num = 0;
8062   basic_block ebb;
8063
8064   loop->num_pre_header_edges = 0;
8065
8066   if (loop->num_entries != 1)
8067      return;
8068
8069   ebb = loop->entry_edges[0]->src;
8070
8071   if (ebb != ENTRY_BLOCK_PTR)
8072     {
8073       edge e;
8074
8075       /* Count number of edges along trace from loop header to
8076          root of pre-header extended basic block.  Usually this is
8077          only one or two edges. */
8078       num++;
8079       while (ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next)
8080         {
8081           ebb = ebb->pred->src;
8082           num++;
8083         }
8084
8085       loop->pre_header_edges = (edge *) xmalloc (num * sizeof (edge *));
8086       loop->num_pre_header_edges = num;
8087
8088       /* Store edges in order that they are followed.   The source
8089          of the first edge is the root node of the pre-header extended
8090          basic block and the destination of the last last edge is
8091          the loop header.  */
8092       for (e = loop->entry_edges[0]; num; e = e->src->pred)
8093         {
8094           loop->pre_header_edges[--num] = e;
8095         }
8096     }
8097 }
8098
8099
8100 /* Return the block for the pre-header of the loop with header
8101    HEADER where DOM specifies the dominator information.  Return NULL if
8102    there is no pre-header.  */
8103
8104 static basic_block
8105 flow_loop_pre_header_find (header, dom)
8106      basic_block header;
8107      const sbitmap *dom;
8108 {
8109   basic_block pre_header;
8110   edge e;
8111
8112   /* If block p is a predecessor of the header and is the only block
8113      that the header does not dominate, then it is the pre-header.  */
8114   pre_header = NULL;
8115   for (e = header->pred; e; e = e->pred_next)
8116     {
8117       basic_block node = e->src;
8118
8119       if (node != ENTRY_BLOCK_PTR
8120           && ! TEST_BIT (dom[node->index], header->index))
8121         {
8122           if (pre_header == NULL)
8123             pre_header = node;
8124           else
8125             {
8126               /* There are multiple edges into the header from outside
8127                  the loop so there is no pre-header block.  */
8128               pre_header = NULL;
8129               break;
8130             }
8131         }
8132     }
8133   return pre_header;
8134 }
8135
8136 /* Add LOOP to the loop hierarchy tree where PREVLOOP was the loop
8137    previously added.  The insertion algorithm assumes that the loops
8138    are added in the order found by a depth first search of the CFG.  */
8139
8140 static void
8141 flow_loop_tree_node_add (prevloop, loop)
8142      struct loop *prevloop;
8143      struct loop *loop;
8144 {
8145
8146   if (flow_loop_nested_p (prevloop, loop))
8147     {
8148       prevloop->inner = loop;
8149       loop->outer = prevloop;
8150       return;
8151     }
8152
8153   while (prevloop->outer)
8154     {
8155       if (flow_loop_nested_p (prevloop->outer, loop))
8156         {
8157           prevloop->next = loop;
8158           loop->outer = prevloop->outer;
8159           return;
8160         }
8161       prevloop = prevloop->outer;
8162     }
8163
8164   prevloop->next = loop;
8165   loop->outer = NULL;
8166 }
8167
8168 /* Build the loop hierarchy tree for LOOPS.  */
8169
8170 static void
8171 flow_loops_tree_build (loops)
8172      struct loops *loops;
8173 {
8174   int i;
8175   int num_loops;
8176
8177   num_loops = loops->num;
8178   if (! num_loops)
8179     return;
8180
8181   /* Root the loop hierarchy tree with the first loop found.
8182      Since we used a depth first search this should be the
8183      outermost loop.  */
8184   loops->tree = &loops->array[0];
8185   loops->tree->outer = loops->tree->inner = loops->tree->next = NULL;
8186
8187   /* Add the remaining loops to the tree.  */
8188   for (i = 1; i < num_loops; i++)
8189     flow_loop_tree_node_add (&loops->array[i - 1], &loops->array[i]);
8190 }
8191
8192 /* Helper function to compute loop nesting depth and enclosed loop level
8193    for the natural loop specified by LOOP at the loop depth DEPTH.
8194    Returns the loop level.  */
8195
8196 static int
8197 flow_loop_level_compute (loop, depth)
8198      struct loop *loop;
8199      int depth;
8200 {
8201   struct loop *inner;
8202   int level = 1;
8203
8204   if (! loop)
8205     return 0;
8206
8207   /* Traverse loop tree assigning depth and computing level as the
8208      maximum level of all the inner loops of this loop.  The loop
8209      level is equivalent to the height of the loop in the loop tree
8210      and corresponds to the number of enclosed loop levels (including
8211      itself).  */
8212   for (inner = loop->inner; inner; inner = inner->next)
8213     {
8214       int ilevel;
8215
8216       ilevel = flow_loop_level_compute (inner, depth + 1) + 1;
8217
8218       if (ilevel > level)
8219         level = ilevel;
8220     }
8221   loop->level = level;
8222   loop->depth = depth;
8223   return level;
8224 }
8225
8226 /* Compute the loop nesting depth and enclosed loop level for the loop
8227    hierarchy tree specfied by LOOPS.  Return the maximum enclosed loop
8228    level.  */
8229
8230 static int
8231 flow_loops_level_compute (loops)
8232      struct loops *loops;
8233 {
8234   struct loop *loop;
8235   int level;
8236   int levels = 0;
8237
8238   /* Traverse all the outer level loops.  */
8239   for (loop = loops->tree; loop; loop = loop->next)
8240     {
8241       level = flow_loop_level_compute (loop, 1);
8242       if (level > levels)
8243         levels = level;
8244     }
8245   return levels;
8246 }
8247
8248
8249 /* Scan a single natural loop specified by LOOP collecting information
8250    about it specified by FLAGS.  */
8251
8252 int
8253 flow_loop_scan (loops, loop, flags)
8254      struct loops *loops;
8255      struct loop *loop;
8256      int flags;
8257 {
8258   /* Determine prerequisites.  */
8259   if ((flags & LOOP_EXITS_DOMS) && ! loop->exit_edges)
8260     flags |= LOOP_EXIT_EDGES;
8261
8262   if (flags & LOOP_ENTRY_EDGES)
8263     {
8264       /* Find edges which enter the loop header.
8265          Note that the entry edges should only
8266          enter the header of a natural loop.  */
8267       loop->num_entries
8268         = flow_loop_entry_edges_find (loop->header,
8269                                       loop->nodes,
8270                                       &loop->entry_edges);
8271     }
8272
8273   if (flags & LOOP_EXIT_EDGES)
8274     {
8275       /* Find edges which exit the loop.  */
8276       loop->num_exits
8277         = flow_loop_exit_edges_find (loop->nodes,
8278                                      &loop->exit_edges);
8279     }
8280
8281   if (flags & LOOP_EXITS_DOMS)
8282     {
8283       int j;
8284
8285       /* Determine which loop nodes dominate all the exits
8286          of the loop.  */
8287       loop->exits_doms = sbitmap_alloc (n_basic_blocks);
8288       sbitmap_copy (loop->exits_doms, loop->nodes);
8289       for (j = 0; j < loop->num_exits; j++)
8290         sbitmap_a_and_b (loop->exits_doms, loop->exits_doms,
8291                          loops->cfg.dom[loop->exit_edges[j]->src->index]);
8292       
8293       /* The header of a natural loop must dominate
8294          all exits.  */
8295       if (! TEST_BIT (loop->exits_doms, loop->header->index))
8296         abort ();
8297     }
8298   
8299   if (flags & LOOP_PRE_HEADER)
8300     {
8301       /* Look to see if the loop has a pre-header node.  */
8302       loop->pre_header
8303         = flow_loop_pre_header_find (loop->header, loops->cfg.dom);
8304
8305       /* Find the blocks within the extended basic block of
8306          the loop pre-header.  */
8307       flow_loop_pre_header_scan (loop);
8308     }
8309   return 1;
8310 }
8311
8312
8313 /* Find all the natural loops in the function and save in LOOPS structure
8314    and recalculate loop_depth information in basic block structures.
8315    FLAGS controls which loop information is collected.
8316    Return the number of natural loops found.  */
8317
8318 int
8319 flow_loops_find (loops, flags)
8320      struct loops *loops;
8321      int flags;
8322 {
8323   int i;
8324   int b;
8325   int num_loops;
8326   edge e;
8327   sbitmap headers;
8328   sbitmap *dom;
8329   int *dfs_order;
8330   int *rc_order;
8331
8332   /* This function cannot be repeatedly called with different
8333      flags to build up the loop information.  The loop tree
8334      must always be built if this function is called.  */
8335   if (! (flags & LOOP_TREE))
8336     abort ();
8337
8338   memset (loops, 0, sizeof (*loops));
8339
8340   /* Taking care of this degenerate case makes the rest of
8341      this code simpler.  */
8342   if (n_basic_blocks == 0)
8343     return 0;
8344
8345   dfs_order = NULL;
8346   rc_order = NULL;
8347
8348   /* Compute the dominators.  */
8349   dom = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
8350   calculate_dominance_info (NULL, dom, CDI_DOMINATORS);
8351
8352   /* Count the number of loop edges (back edges).  This should be the
8353      same as the number of natural loops.  */
8354
8355   num_loops = 0;
8356   for (b = 0; b < n_basic_blocks; b++)
8357     {
8358       basic_block header;
8359
8360       header = BASIC_BLOCK (b);
8361       header->loop_depth = 0;
8362
8363       for (e = header->pred; e; e = e->pred_next)
8364         {
8365           basic_block latch = e->src;
8366
8367           /* Look for back edges where a predecessor is dominated
8368              by this block.  A natural loop has a single entry
8369              node (header) that dominates all the nodes in the
8370              loop.  It also has single back edge to the header
8371              from a latch node.  Note that multiple natural loops
8372              may share the same header.  */
8373           if (b != header->index)
8374             abort ();
8375
8376           if (latch != ENTRY_BLOCK_PTR && TEST_BIT (dom[latch->index], b))
8377             num_loops++;
8378         }
8379     }
8380
8381   if (num_loops)
8382     {
8383       /* Compute depth first search order of the CFG so that outer
8384          natural loops will be found before inner natural loops.  */
8385       dfs_order = (int *) xmalloc (n_basic_blocks * sizeof (int));
8386       rc_order = (int *) xmalloc (n_basic_blocks * sizeof (int));
8387       flow_depth_first_order_compute (dfs_order, rc_order);
8388
8389       /* Save CFG derived information to avoid recomputing it.  */
8390       loops->cfg.dom = dom;
8391       loops->cfg.dfs_order = dfs_order;
8392       loops->cfg.rc_order = rc_order;
8393
8394       /* Allocate loop structures.  */
8395       loops->array
8396         = (struct loop *) xcalloc (num_loops, sizeof (struct loop));
8397
8398       headers = sbitmap_alloc (n_basic_blocks);
8399       sbitmap_zero (headers);
8400
8401       loops->shared_headers = sbitmap_alloc (n_basic_blocks);
8402       sbitmap_zero (loops->shared_headers);
8403
8404       /* Find and record information about all the natural loops
8405          in the CFG.  */
8406       num_loops = 0;
8407       for (b = 0; b < n_basic_blocks; b++)
8408         {
8409           basic_block header;
8410
8411           /* Search the nodes of the CFG in reverse completion order
8412              so that we can find outer loops first.  */
8413           header = BASIC_BLOCK (rc_order[b]);
8414
8415           /* Look for all the possible latch blocks for this header.  */
8416           for (e = header->pred; e; e = e->pred_next)
8417             {
8418               basic_block latch = e->src;
8419
8420               /* Look for back edges where a predecessor is dominated
8421                  by this block.  A natural loop has a single entry
8422                  node (header) that dominates all the nodes in the
8423                  loop.  It also has single back edge to the header
8424                  from a latch node.  Note that multiple natural loops
8425                  may share the same header.  */
8426               if (latch != ENTRY_BLOCK_PTR
8427                   && TEST_BIT (dom[latch->index], header->index))
8428                 {
8429                   struct loop *loop;
8430
8431                   loop = loops->array + num_loops;
8432
8433                   loop->header = header;
8434                   loop->latch = latch;
8435                   loop->num = num_loops;
8436
8437                   num_loops++;
8438                 }
8439             }
8440         }
8441
8442       for (i = 0; i < num_loops; i++)
8443         {
8444           struct loop *loop = &loops->array[i];
8445
8446           /* Keep track of blocks that are loop headers so
8447              that we can tell which loops should be merged.  */
8448           if (TEST_BIT (headers, loop->header->index))
8449             SET_BIT (loops->shared_headers, loop->header->index);
8450           SET_BIT (headers, loop->header->index);
8451
8452           /* Find nodes contained within the loop.  */
8453           loop->nodes = sbitmap_alloc (n_basic_blocks);
8454           loop->num_nodes
8455             = flow_loop_nodes_find (loop->header, loop->latch, loop->nodes);
8456
8457           /* Compute first and last blocks within the loop.
8458              These are often the same as the loop header and
8459              loop latch respectively, but this is not always
8460              the case.  */
8461           loop->first
8462             = BASIC_BLOCK (sbitmap_first_set_bit (loop->nodes));
8463           loop->last
8464             = BASIC_BLOCK (sbitmap_last_set_bit (loop->nodes));
8465
8466           flow_loop_scan (loops, loop, flags);
8467         }
8468
8469       /* Natural loops with shared headers may either be disjoint or
8470          nested.  Disjoint loops with shared headers cannot be inner
8471          loops and should be merged.  For now just mark loops that share
8472          headers.  */
8473       for (i = 0; i < num_loops; i++)
8474         if (TEST_BIT (loops->shared_headers, loops->array[i].header->index))
8475           loops->array[i].shared = 1;
8476
8477       sbitmap_free (headers);
8478     }
8479
8480   loops->num = num_loops;
8481
8482   /* Build the loop hierarchy tree.  */
8483   flow_loops_tree_build (loops);
8484
8485   /* Assign the loop nesting depth and enclosed loop level for each
8486      loop.  */
8487   loops->levels = flow_loops_level_compute (loops);
8488
8489   return num_loops;
8490 }
8491
8492
8493 /* Update the information regarding the loops in the CFG
8494    specified by LOOPS.  */
8495 int
8496 flow_loops_update (loops, flags)
8497      struct loops *loops;
8498      int flags;
8499 {
8500   /* One day we may want to update the current loop data.  For now
8501      throw away the old stuff and rebuild what we need.  */
8502   if (loops->array)
8503     flow_loops_free (loops);
8504
8505   return flow_loops_find (loops, flags);
8506 }
8507
8508
8509 /* Return non-zero if edge E enters header of LOOP from outside of LOOP.  */
8510
8511 int
8512 flow_loop_outside_edge_p (loop, e)
8513      const struct loop *loop;
8514      edge e;
8515 {
8516   if (e->dest != loop->header)
8517     abort ();
8518   return (e->src == ENTRY_BLOCK_PTR)
8519     || ! TEST_BIT (loop->nodes, e->src->index);
8520 }
8521
8522 /* Clear LOG_LINKS fields of insns in a chain.
8523    Also clear the global_live_at_{start,end} fields of the basic block
8524    structures.  */
8525
8526 void
8527 clear_log_links (insns)
8528      rtx insns;
8529 {
8530   rtx i;
8531   int b;
8532
8533   for (i = insns; i; i = NEXT_INSN (i))
8534     if (INSN_P (i))
8535       LOG_LINKS (i) = 0;
8536
8537   for (b = 0; b < n_basic_blocks; b++)
8538     {
8539       basic_block bb = BASIC_BLOCK (b);
8540
8541       bb->global_live_at_start = NULL;
8542       bb->global_live_at_end = NULL;
8543     }
8544
8545   ENTRY_BLOCK_PTR->global_live_at_end = NULL;
8546   EXIT_BLOCK_PTR->global_live_at_start = NULL;
8547 }
8548
8549 /* Given a register bitmap, turn on the bits in a HARD_REG_SET that
8550    correspond to the hard registers, if any, set in that map.  This
8551    could be done far more efficiently by having all sorts of special-cases
8552    with moving single words, but probably isn't worth the trouble.  */
8553
8554 void
8555 reg_set_to_hard_reg_set (to, from)
8556      HARD_REG_SET *to;
8557      bitmap from;
8558 {
8559   int i;
8560
8561   EXECUTE_IF_SET_IN_BITMAP
8562     (from, 0, i,
8563      {
8564        if (i >= FIRST_PSEUDO_REGISTER)
8565          return;
8566        SET_HARD_REG_BIT (*to, i);
8567      });
8568 }
8569
8570 /* Called once at intialization time.  */
8571
8572 void
8573 init_flow ()
8574 {
8575   static int initialized;
8576
8577   if (!initialized)
8578     {
8579       gcc_obstack_init (&flow_obstack);
8580       flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0);
8581       initialized = 1;
8582     }
8583   else
8584     {
8585       obstack_free (&flow_obstack, flow_firstobj);
8586       flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0);
8587     }
8588 }