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