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