]> gcc.gnu.org Git - gcc.git/blob - gcc/flow.c
*** empty log message ***
[gcc.git] / gcc / flow.c
1 /* Data flow analysis for GNU compiler.
2 Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20
21 /* This file contains the data flow analysis pass of the compiler.
22 It computes data flow information
23 which tells combine_instructions which insns to consider combining
24 and controls register allocation.
25
26 Additional data flow information that is too bulky to record
27 is generated during the analysis, and is used at that time to
28 create 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
37 into basic blocks. It records the beginnings and ends of the
38 basic blocks in the vectors basic_block_head and basic_block_end,
39 and the number of blocks in n_basic_blocks.
40
41 find_basic_blocks also finds any unreachable loops
42 and deletes them.
43
44 ** life_analysis **
45
46 life_analysis is called immediately after find_basic_blocks.
47 It uses the basic block information to determine where each
48 hard or pseudo register is live.
49
50 ** live-register info **
51
52 The information about where each register is live is in two parts:
53 the REG_NOTES of insns, and the vector basic_block_live_at_start.
54
55 basic_block_live_at_start has an element for each basic block,
56 and the element is a bit-vector with a bit for each hard or pseudo
57 register. The bit is 1 if the register is live at the beginning
58 of the basic block.
59
60 Two types of elements can be added to an insn's REG_NOTES.
61 A REG_DEAD note is added to an insn's REG_NOTES for any register
62 that meets both of two conditions: The value in the register is not
63 needed in subsequent insns and the insn does not replace the value in
64 the register (in the case of multi-word hard registers, the value in
65 each register must be replaced by the insn to avoid a REG_DEAD note).
66
67 In the vast majority of cases, an object in a REG_DEAD note will be
68 used somewhere in the insn. The (rare) exception to this is if an
69 insn uses a multi-word hard register and only some of the registers are
70 needed in subsequent insns. In that case, REG_DEAD notes will be
71 provided for those hard registers that are not subsequently needed.
72 Partial REG_DEAD notes of this type do not occur when an insn sets
73 only some of the hard registers used in such a multi-word operand;
74 omitting REG_DEAD notes for objects stored in an insn is optional and
75 the desire to do so does not justify the complexity of the partial
76 REG_DEAD notes.
77
78 REG_UNUSED notes are added for each register that is set by the insn
79 but is unused subsequently (if every register set by the insn is unused
80 and the insn does not reference memory or have some other side-effect,
81 the insn is deleted instead). If only part of a multi-word hard
82 register is used in a subsequent insn, REG_UNUSED notes are made for
83 the parts that will not be used.
84
85 To determine which registers are live after any insn, one can
86 start from the beginning of the basic block and scan insns, noting
87 which registers are set by each insn and which die there.
88
89 ** Other actions of life_analysis **
90
91 life_analysis sets up the LOG_LINKS fields of insns because the
92 information needed to do so is readily available.
93
94 life_analysis deletes insns whose only effect is to store a value
95 that is never used.
96
97 life_analysis notices cases where a reference to a register as
98 a memory address can be combined with a preceding or following
99 incrementation or decrementation of the register. The separate
100 instruction to increment or decrement is deleted and the address
101 is changed to a POST_INC or similar rtx.
102
103 Each time an incrementing or decrementing address is created,
104 a REG_INC element is added to the insn's REG_NOTES list.
105
106 life_analysis fills in certain vectors containing information about
107 register usage: reg_n_refs, reg_n_deaths, reg_n_sets, reg_live_length,
108 reg_n_calls_crosses and reg_basic_block. */
109 \f
110 #include <stdio.h>
111 #include "config.h"
112 #include "rtl.h"
113 #include "basic-block.h"
114 #include "insn-config.h"
115 #include "regs.h"
116 #include "hard-reg-set.h"
117 #include "flags.h"
118 #include "output.h"
119
120 #include "obstack.h"
121 #define obstack_chunk_alloc xmalloc
122 #define obstack_chunk_free free
123
124 extern int xmalloc ();
125 extern void free ();
126
127 /* List of labels that must never be deleted. */
128 extern rtx forced_labels;
129
130 /* Get the basic block number of an insn.
131 This info should not be expected to remain available
132 after the end of life_analysis. */
133
134 /* This is the limit of the allocated space in the following two arrays. */
135
136 static int max_uid_for_flow;
137
138 #define BLOCK_NUM(INSN) uid_block_number[INSN_UID (INSN)]
139
140 /* This is where the BLOCK_NUM values are really stored.
141 This is set up by find_basic_blocks and used there and in life_analysis,
142 and then freed. */
143
144 static short *uid_block_number;
145
146 /* INSN_VOLATILE (insn) is 1 if the insn refers to anything volatile. */
147
148 #define INSN_VOLATILE(INSN) uid_volatile[INSN_UID (INSN)]
149 static char *uid_volatile;
150
151 /* Number of basic blocks in the current function. */
152
153 int n_basic_blocks;
154
155 /* Maximum register number used in this function, plus one. */
156
157 int max_regno;
158
159 /* Maximum number of SCRATCH rtx's used in any basic block of this function. */
160
161 int max_scratch;
162
163 /* Number of SCRATCH rtx's in the current block. */
164
165 static int num_scratch;
166
167 /* Indexed by n, gives number of basic block that (REG n) is used in.
168 If the value is REG_BLOCK_GLOBAL (-2),
169 it means (REG n) is used in more than one basic block.
170 REG_BLOCK_UNKNOWN (-1) means it hasn't been seen yet so we don't know.
171 This information remains valid for the rest of the compilation
172 of the current function; it is used to control register allocation. */
173
174 short *reg_basic_block;
175
176 /* Indexed by n, gives number of times (REG n) is used or set, each
177 weighted by its loop-depth.
178 This information remains valid for the rest of the compilation
179 of the current function; it is used to control register allocation. */
180
181 int *reg_n_refs;
182
183 /* Indexed by N, gives number of places register N dies.
184 This information remains valid for the rest of the compilation
185 of the current function; it is used to control register allocation. */
186
187 short *reg_n_deaths;
188
189 /* Indexed by N, gives 1 if that reg is live across any CALL_INSNs.
190 This information remains valid for the rest of the compilation
191 of the current function; it is used to control register allocation. */
192
193 int *reg_n_calls_crossed;
194
195 /* Total number of instructions at which (REG n) is live.
196 The larger this is, the less priority (REG n) gets for
197 allocation in a real register.
198 This information remains valid for the rest of the compilation
199 of the current function; it is used to control register allocation.
200
201 local-alloc.c may alter this number to change the priority.
202
203 Negative values are special.
204 -1 is used to mark a pseudo reg which has a constant or memory equivalent
205 and is used infrequently enough that it should not get a hard register.
206 -2 is used to mark a pseudo reg for a parameter, when a frame pointer
207 is not required. global-alloc.c makes an allocno for this but does
208 not try to assign a hard register to it. */
209
210 int *reg_live_length;
211
212 /* Element N is the next insn that uses (hard or pseudo) register number N
213 within the current basic block; or zero, if there is no such insn.
214 This is valid only during the final backward scan in propagate_block. */
215
216 static rtx *reg_next_use;
217
218 /* Size of a regset for the current function,
219 in (1) bytes and (2) elements. */
220
221 int regset_bytes;
222 int regset_size;
223
224 /* Element N is first insn in basic block N.
225 This info lasts until we finish compiling the function. */
226
227 rtx *basic_block_head;
228
229 /* Element N is last insn in basic block N.
230 This info lasts until we finish compiling the function. */
231
232 rtx *basic_block_end;
233
234 /* Element N is a regset describing the registers live
235 at the start of basic block N.
236 This info lasts until we finish compiling the function. */
237
238 regset *basic_block_live_at_start;
239
240 /* Regset of regs live when calls to `setjmp'-like functions happen. */
241
242 regset regs_live_at_setjmp;
243
244 /* List made of EXPR_LIST rtx's which gives pairs of pseudo registers
245 that have to go in the same hard reg.
246 The first two regs in the list are a pair, and the next two
247 are another pair, etc. */
248 rtx regs_may_share;
249
250 /* Element N is nonzero if control can drop into basic block N
251 from the preceding basic block. Freed after life_analysis. */
252
253 static char *basic_block_drops_in;
254
255 /* Element N is depth within loops of the last insn in basic block number N.
256 Freed after life_analysis. */
257
258 static short *basic_block_loop_depth;
259
260 /* Element N nonzero if basic block N can actually be reached.
261 Vector exists only during find_basic_blocks. */
262
263 static char *block_live_static;
264
265 /* Depth within loops of basic block being scanned for lifetime analysis,
266 plus one. This is the weight attached to references to registers. */
267
268 static int loop_depth;
269
270 /* During propagate_block, this is non-zero if the value of CC0 is live. */
271
272 static int cc0_live;
273
274 /* During propagate_block, this contains the last MEM stored into. It
275 is used to eliminate consecutive stores to the same location. */
276
277 static rtx last_mem_set;
278
279 /* Set of registers that may be eliminable. These are handled specially
280 in updating regs_ever_live. */
281
282 static HARD_REG_SET elim_reg_set;
283
284 /* Forward declarations */
285 static void find_basic_blocks ();
286 static void life_analysis ();
287 static void mark_label_ref ();
288 void allocate_for_life_analysis (); /* Used also in stupid_life_analysis */
289 static void init_regset_vector ();
290 static void propagate_block ();
291 static void mark_set_regs ();
292 static void mark_used_regs ();
293 static int insn_dead_p ();
294 static int libcall_dead_p ();
295 static int try_pre_increment ();
296 static int try_pre_increment_1 ();
297 static rtx find_use_as_address ();
298 void dump_flow_info ();
299 \f
300 /* Find basic blocks of the current function and perform data flow analysis.
301 F is the first insn of the function and NREGS the number of register numbers
302 in use. */
303
304 void
305 flow_analysis (f, nregs, file)
306 rtx f;
307 int nregs;
308 FILE *file;
309 {
310 register rtx insn;
311 register int i;
312
313 #ifdef ELIMINABLE_REGS
314 static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
315 #endif
316
317 /* Record which registers will be eliminated. We use this in
318 mark_used_regs. */
319
320 CLEAR_HARD_REG_SET (elim_reg_set);
321
322 #ifdef ELIMINABLE_REGS
323 for (i = 0; i < sizeof eliminables / sizeof eliminables[0]; i++)
324 SET_HARD_REG_BIT (elim_reg_set, eliminables[i].from);
325 #else
326 SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
327 #endif
328
329 /* Count the basic blocks. Also find maximum insn uid value used. */
330
331 {
332 register RTX_CODE prev_code = JUMP_INSN;
333 register RTX_CODE code;
334
335 max_uid_for_flow = 0;
336
337 for (insn = f, i = 0; insn; insn = NEXT_INSN (insn))
338 {
339 code = GET_CODE (insn);
340 if (INSN_UID (insn) > max_uid_for_flow)
341 max_uid_for_flow = INSN_UID (insn);
342 if (code == CODE_LABEL
343 || (prev_code != INSN && prev_code != CALL_INSN
344 && prev_code != CODE_LABEL
345 && GET_RTX_CLASS (code) == 'i'))
346 i++;
347 if (code != NOTE)
348 prev_code = code;
349 }
350 }
351
352 #ifdef AUTO_INC_DEC
353 /* Leave space for insns we make in some cases for auto-inc. These cases
354 are rare, so we don't need too much space. */
355 max_uid_for_flow += max_uid_for_flow / 10;
356 #endif
357
358 /* Allocate some tables that last till end of compiling this function
359 and some needed only in find_basic_blocks and life_analysis. */
360
361 n_basic_blocks = i;
362 basic_block_head = (rtx *) oballoc (n_basic_blocks * sizeof (rtx));
363 basic_block_end = (rtx *) oballoc (n_basic_blocks * sizeof (rtx));
364 basic_block_drops_in = (char *) alloca (n_basic_blocks);
365 basic_block_loop_depth = (short *) alloca (n_basic_blocks * sizeof (short));
366 uid_block_number
367 = (short *) alloca ((max_uid_for_flow + 1) * sizeof (short));
368 uid_volatile = (char *) alloca (max_uid_for_flow + 1);
369 bzero (uid_volatile, max_uid_for_flow + 1);
370
371 find_basic_blocks (f);
372 life_analysis (f, nregs);
373 if (file)
374 dump_flow_info (file);
375
376 basic_block_drops_in = 0;
377 uid_block_number = 0;
378 basic_block_loop_depth = 0;
379 }
380 \f
381 /* Find all basic blocks of the function whose first insn is F.
382 Store the correct data in the tables that describe the basic blocks,
383 set up the chains of references for each CODE_LABEL, and
384 delete any entire basic blocks that cannot be reached. */
385
386 static void
387 find_basic_blocks (f)
388 rtx f;
389 {
390 register rtx insn;
391 register int i;
392 register char *block_live = (char *) alloca (n_basic_blocks);
393 register char *block_marked = (char *) alloca (n_basic_blocks);
394 /* List of label_refs to all labels whose addresses are taken
395 and used as data. */
396 rtx label_value_list = 0;
397
398 block_live_static = block_live;
399 bzero (block_live, n_basic_blocks);
400 bzero (block_marked, n_basic_blocks);
401
402 /* Initialize with just block 0 reachable and no blocks marked. */
403 if (n_basic_blocks > 0)
404 block_live[0] = 1;
405
406 /* Initialize the ref chain of each label to 0. */
407 /* Record where all the blocks start and end and their depth in loops. */
408 /* For each insn, record the block it is in. */
409 /* Also mark as reachable any blocks headed by labels that
410 must not be deleted. */
411
412 {
413 register RTX_CODE prev_code = JUMP_INSN;
414 register RTX_CODE code;
415 int depth = 1;
416
417 for (insn = f, i = -1; insn; insn = NEXT_INSN (insn))
418 {
419 code = GET_CODE (insn);
420 if (code == NOTE)
421 {
422 if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
423 depth++;
424 else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
425 depth--;
426 }
427 else if (code == CODE_LABEL
428 || (prev_code != INSN && prev_code != CALL_INSN
429 && prev_code != CODE_LABEL
430 && GET_RTX_CLASS (code) == 'i'))
431 {
432 basic_block_head[++i] = insn;
433 basic_block_end[i] = insn;
434 basic_block_loop_depth[i] = depth;
435 if (code == CODE_LABEL)
436 {
437 LABEL_REFS (insn) = insn;
438 /* Any label that cannot be deleted
439 is considered to start a reachable block. */
440 if (LABEL_PRESERVE_P (insn))
441 block_live[i] = 1;
442 }
443 }
444 else if (GET_RTX_CLASS (code) == 'i')
445 {
446 basic_block_end[i] = insn;
447 basic_block_loop_depth[i] = depth;
448 }
449
450 /* Make a list of all labels referred to other than by jumps. */
451 if (code == INSN || code == CALL_INSN)
452 {
453 rtx note = find_reg_note (insn, REG_LABEL, 0);
454 if (note != 0)
455 label_value_list = gen_rtx (EXPR_LIST, VOIDmode, XEXP (note, 0),
456 label_value_list);
457 }
458
459 BLOCK_NUM (insn) = i;
460 if (code != NOTE)
461 prev_code = code;
462 }
463 if (i + 1 != n_basic_blocks)
464 abort ();
465 }
466
467 /* Record which basic blocks control can drop in to. */
468
469 {
470 register int i;
471 for (i = 0; i < n_basic_blocks; i++)
472 {
473 register rtx insn = PREV_INSN (basic_block_head[i]);
474 /* TEMP1 is used to avoid a bug in Sequent's compiler. */
475 register int temp1;
476 while (insn && GET_CODE (insn) == NOTE)
477 insn = PREV_INSN (insn);
478 temp1 = insn && GET_CODE (insn) != BARRIER;
479 basic_block_drops_in[i] = temp1;
480 }
481 }
482
483 /* Now find which basic blocks can actually be reached
484 and put all jump insns' LABEL_REFS onto the ref-chains
485 of their target labels. */
486
487 if (n_basic_blocks > 0)
488 {
489 int something_marked = 1;
490
491 /* Find all indirect jump insns and mark them as possibly jumping
492 to all the labels whose addresses are explicitly used.
493 This is because, when there are computed gotos,
494 we can't tell which labels they jump to, of all the possibilities. */
495
496 for (insn = f; insn; insn = NEXT_INSN (insn))
497 if (GET_CODE (insn) == JUMP_INSN
498 && GET_CODE (PATTERN (insn)) == SET
499 && SET_DEST (PATTERN (insn)) == pc_rtx
500 && GET_CODE (SET_SRC (PATTERN (insn))) == REG)
501 {
502 rtx x;
503 for (x = label_value_list; x; x = XEXP (x, 1))
504 mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
505 insn, 0);
506 for (x = forced_labels; x; x = XEXP (x, 1))
507 mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
508 insn, 0);
509 }
510
511 /* Pass over all blocks, marking each block that is reachable
512 and has not yet been marked.
513 Keep doing this until, in one pass, no blocks have been marked.
514 Then blocks_live and blocks_marked are identical and correct.
515 In addition, all jumps actually reachable have been marked. */
516
517 while (something_marked)
518 {
519 something_marked = 0;
520 for (i = 0; i < n_basic_blocks; i++)
521 if (block_live[i] && !block_marked[i])
522 {
523 block_marked[i] = 1;
524 something_marked = 1;
525 if (i + 1 < n_basic_blocks && basic_block_drops_in[i + 1])
526 block_live[i + 1] = 1;
527 insn = basic_block_end[i];
528 if (GET_CODE (insn) == JUMP_INSN)
529 mark_label_ref (PATTERN (insn), insn, 0);
530 }
531 }
532
533 /* Now delete the code for any basic blocks that can't be reached.
534 They can occur because jump_optimize does not recognize
535 unreachable loops as unreachable. */
536
537 for (i = 0; i < n_basic_blocks; i++)
538 if (!block_live[i])
539 {
540 insn = basic_block_head[i];
541 while (1)
542 {
543 if (GET_CODE (insn) == BARRIER)
544 abort ();
545 if (GET_CODE (insn) != NOTE)
546 {
547 PUT_CODE (insn, NOTE);
548 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
549 NOTE_SOURCE_FILE (insn) = 0;
550 }
551 if (insn == basic_block_end[i])
552 {
553 /* BARRIERs are between basic blocks, not part of one.
554 Delete a BARRIER if the preceding jump is deleted.
555 We cannot alter a BARRIER into a NOTE
556 because it is too short; but we can really delete
557 it because it is not part of a basic block. */
558 if (NEXT_INSN (insn) != 0
559 && GET_CODE (NEXT_INSN (insn)) == BARRIER)
560 delete_insn (NEXT_INSN (insn));
561 break;
562 }
563 insn = NEXT_INSN (insn);
564 }
565 /* Each time we delete some basic blocks,
566 see if there is a jump around them that is
567 being turned into a no-op. If so, delete it. */
568
569 if (block_live[i - 1])
570 {
571 register int j;
572 for (j = i; j < n_basic_blocks; j++)
573 if (block_live[j])
574 {
575 rtx label;
576 insn = basic_block_end[i - 1];
577 if (GET_CODE (insn) == JUMP_INSN
578 /* An unconditional jump is the only possibility
579 we must check for, since a conditional one
580 would make these blocks live. */
581 && simplejump_p (insn)
582 && (label = XEXP (SET_SRC (PATTERN (insn)), 0), 1)
583 && INSN_UID (label) != 0
584 && BLOCK_NUM (label) == j)
585 {
586 PUT_CODE (insn, NOTE);
587 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
588 NOTE_SOURCE_FILE (insn) = 0;
589 if (GET_CODE (NEXT_INSN (insn)) != BARRIER)
590 abort ();
591 delete_insn (NEXT_INSN (insn));
592 }
593 break;
594 }
595 }
596 }
597 }
598 }
599 \f
600 /* Check expression X for label references;
601 if one is found, add INSN to the label's chain of references.
602
603 CHECKDUP means check for and avoid creating duplicate references
604 from the same insn. Such duplicates do no serious harm but
605 can slow life analysis. CHECKDUP is set only when duplicates
606 are likely. */
607
608 static void
609 mark_label_ref (x, insn, checkdup)
610 rtx x, insn;
611 int checkdup;
612 {
613 register RTX_CODE code;
614 register int i;
615 register char *fmt;
616
617 /* We can be called with NULL when scanning label_value_list. */
618 if (x == 0)
619 return;
620
621 code = GET_CODE (x);
622 if (code == LABEL_REF)
623 {
624 register rtx label = XEXP (x, 0);
625 register rtx y;
626 if (GET_CODE (label) != CODE_LABEL)
627 abort ();
628 /* If the label was never emitted, this insn is junk,
629 but avoid a crash trying to refer to BLOCK_NUM (label).
630 This can happen as a result of a syntax error
631 and a diagnostic has already been printed. */
632 if (INSN_UID (label) == 0)
633 return;
634 CONTAINING_INSN (x) = insn;
635 /* if CHECKDUP is set, check for duplicate ref from same insn
636 and don't insert. */
637 if (checkdup)
638 for (y = LABEL_REFS (label); y != label; y = LABEL_NEXTREF (y))
639 if (CONTAINING_INSN (y) == insn)
640 return;
641 LABEL_NEXTREF (x) = LABEL_REFS (label);
642 LABEL_REFS (label) = x;
643 block_live_static[BLOCK_NUM (label)] = 1;
644 return;
645 }
646
647 fmt = GET_RTX_FORMAT (code);
648 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
649 {
650 if (fmt[i] == 'e')
651 mark_label_ref (XEXP (x, i), insn, 0);
652 if (fmt[i] == 'E')
653 {
654 register int j;
655 for (j = 0; j < XVECLEN (x, i); j++)
656 mark_label_ref (XVECEXP (x, i, j), insn, 1);
657 }
658 }
659 }
660 \f
661 /* Determine which registers are live at the start of each
662 basic block of the function whose first insn is F.
663 NREGS is the number of registers used in F.
664 We allocate the vector basic_block_live_at_start
665 and the regsets that it points to, and fill them with the data.
666 regset_size and regset_bytes are also set here. */
667
668 static void
669 life_analysis (f, nregs)
670 rtx f;
671 int nregs;
672 {
673 register regset tem;
674 int first_pass;
675 int changed;
676 /* For each basic block, a bitmask of regs
677 live on exit from the block. */
678 regset *basic_block_live_at_end;
679 /* For each basic block, a bitmask of regs
680 live on entry to a successor-block of this block.
681 If this does not match basic_block_live_at_end,
682 that must be updated, and the block must be rescanned. */
683 regset *basic_block_new_live_at_end;
684 /* For each basic block, a bitmask of regs
685 whose liveness at the end of the basic block
686 can make a difference in which regs are live on entry to the block.
687 These are the regs that are set within the basic block,
688 possibly excluding those that are used after they are set. */
689 regset *basic_block_significant;
690 register int i;
691 rtx insn;
692
693 struct obstack flow_obstack;
694
695 gcc_obstack_init (&flow_obstack);
696
697 max_regno = nregs;
698
699 bzero (regs_ever_live, sizeof regs_ever_live);
700
701 /* Allocate and zero out many data structures
702 that will record the data from lifetime analysis. */
703
704 allocate_for_life_analysis ();
705
706 reg_next_use = (rtx *) alloca (nregs * sizeof (rtx));
707 bzero (reg_next_use, nregs * sizeof (rtx));
708
709 /* Set up several regset-vectors used internally within this function.
710 Their meanings are documented above, with their declarations. */
711
712 basic_block_live_at_end = (regset *) alloca (n_basic_blocks * sizeof (regset));
713 /* Don't use alloca since that leads to a crash rather than an error message
714 if there isn't enough space.
715 Don't use oballoc since we may need to allocate other things during
716 this function on the temporary obstack. */
717 tem = (regset) obstack_alloc (&flow_obstack, n_basic_blocks * regset_bytes);
718 bzero (tem, n_basic_blocks * regset_bytes);
719 init_regset_vector (basic_block_live_at_end, tem, n_basic_blocks, regset_bytes);
720
721 basic_block_new_live_at_end = (regset *) alloca (n_basic_blocks * sizeof (regset));
722 tem = (regset) obstack_alloc (&flow_obstack, n_basic_blocks * regset_bytes);
723 bzero (tem, n_basic_blocks * regset_bytes);
724 init_regset_vector (basic_block_new_live_at_end, tem, n_basic_blocks, regset_bytes);
725
726 basic_block_significant = (regset *) alloca (n_basic_blocks * sizeof (regset));
727 tem = (regset) obstack_alloc (&flow_obstack, n_basic_blocks * regset_bytes);
728 bzero (tem, n_basic_blocks * regset_bytes);
729 init_regset_vector (basic_block_significant, tem, n_basic_blocks, regset_bytes);
730
731 /* Record which insns refer to any volatile memory
732 or for any reason can't be deleted just because they are dead stores.
733 Also, delete any insns that copy a register to itself. */
734
735 for (insn = f; insn; insn = NEXT_INSN (insn))
736 {
737 enum rtx_code code1 = GET_CODE (insn);
738 if (code1 == CALL_INSN)
739 INSN_VOLATILE (insn) = 1;
740 else if (code1 == INSN || code1 == JUMP_INSN)
741 {
742 /* Delete (in effect) any obvious no-op moves. */
743 if (GET_CODE (PATTERN (insn)) == SET
744 && GET_CODE (SET_DEST (PATTERN (insn))) == REG
745 && GET_CODE (SET_SRC (PATTERN (insn))) == REG
746 && REGNO (SET_DEST (PATTERN (insn))) ==
747 REGNO (SET_SRC (PATTERN (insn)))
748 /* Insns carrying these notes are useful later on. */
749 && ! find_reg_note (insn, REG_EQUAL, 0))
750 {
751 PUT_CODE (insn, NOTE);
752 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
753 NOTE_SOURCE_FILE (insn) = 0;
754 }
755 else if (GET_CODE (PATTERN (insn)) == PARALLEL)
756 {
757 /* If nothing but SETs of registers to themselves,
758 this insn can also be deleted. */
759 for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
760 {
761 rtx tem = XVECEXP (PATTERN (insn), 0, i);
762
763 if (GET_CODE (tem) == USE
764 || GET_CODE (tem) == CLOBBER)
765 continue;
766
767 if (GET_CODE (tem) != SET
768 || GET_CODE (SET_DEST (tem)) != REG
769 || GET_CODE (SET_SRC (tem)) != REG
770 || REGNO (SET_DEST (tem)) != REGNO (SET_SRC (tem)))
771 break;
772 }
773
774 if (i == XVECLEN (PATTERN (insn), 0)
775 /* Insns carrying these notes are useful later on. */
776 && ! find_reg_note (insn, REG_EQUAL, 0))
777 {
778 PUT_CODE (insn, NOTE);
779 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
780 NOTE_SOURCE_FILE (insn) = 0;
781 }
782 else
783 INSN_VOLATILE (insn) = volatile_refs_p (PATTERN (insn));
784 }
785 else if (GET_CODE (PATTERN (insn)) != USE)
786 INSN_VOLATILE (insn) = volatile_refs_p (PATTERN (insn));
787 /* A SET that makes space on the stack cannot be dead.
788 (Such SETs occur only for allocating variable-size data,
789 so they will always have a PLUS or MINUS according to the
790 direction of stack growth.)
791 Even if this function never uses this stack pointer value,
792 signal handlers do! */
793 else if (code1 == INSN && GET_CODE (PATTERN (insn)) == SET
794 && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
795 #ifdef STACK_GROWS_DOWNWARD
796 && GET_CODE (SET_SRC (PATTERN (insn))) == MINUS
797 #else
798 && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
799 #endif
800 && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx)
801 INSN_VOLATILE (insn) = 1;
802 }
803 }
804
805 if (n_basic_blocks > 0)
806 #ifdef EXIT_IGNORE_STACK
807 if (! EXIT_IGNORE_STACK
808 || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
809 #endif
810 {
811 /* If exiting needs the right stack value,
812 consider the stack pointer live at the end of the function. */
813 basic_block_live_at_end[n_basic_blocks - 1]
814 [STACK_POINTER_REGNUM / REGSET_ELT_BITS]
815 |= 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
816 basic_block_new_live_at_end[n_basic_blocks - 1]
817 [STACK_POINTER_REGNUM / REGSET_ELT_BITS]
818 |= 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
819 }
820
821 /* Mark all global registers as being live at the end of the function
822 since they may be referenced by our caller. */
823
824 if (n_basic_blocks > 0)
825 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
826 if (global_regs[i])
827 {
828 basic_block_live_at_end[n_basic_blocks - 1]
829 [i / REGSET_ELT_BITS] |= 1 << (i % REGSET_ELT_BITS);
830 basic_block_new_live_at_end[n_basic_blocks - 1]
831 [i / REGSET_ELT_BITS] |= 1 << (i % REGSET_ELT_BITS);
832 }
833
834 /* Propagate life info through the basic blocks
835 around the graph of basic blocks.
836
837 This is a relaxation process: each time a new register
838 is live at the end of the basic block, we must scan the block
839 to determine which registers are, as a consequence, live at the beginning
840 of that block. These registers must then be marked live at the ends
841 of all the blocks that can transfer control to that block.
842 The process continues until it reaches a fixed point. */
843
844 first_pass = 1;
845 changed = 1;
846 while (changed)
847 {
848 changed = 0;
849 for (i = n_basic_blocks - 1; i >= 0; i--)
850 {
851 int consider = first_pass;
852 int must_rescan = first_pass;
853 register int j;
854
855 if (!first_pass)
856 {
857 /* Set CONSIDER if this block needs thinking about at all
858 (that is, if the regs live now at the end of it
859 are not the same as were live at the end of it when
860 we last thought about it).
861 Set must_rescan if it needs to be thought about
862 instruction by instruction (that is, if any additional
863 reg that is live at the end now but was not live there before
864 is one of the significant regs of this basic block). */
865
866 for (j = 0; j < regset_size; j++)
867 {
868 register int x = (basic_block_new_live_at_end[i][j]
869 & ~basic_block_live_at_end[i][j]);
870 if (x)
871 consider = 1;
872 if (x & basic_block_significant[i][j])
873 {
874 must_rescan = 1;
875 consider = 1;
876 break;
877 }
878 }
879
880 if (! consider)
881 continue;
882 }
883
884 /* The live_at_start of this block may be changing,
885 so another pass will be required after this one. */
886 changed = 1;
887
888 if (! must_rescan)
889 {
890 /* No complete rescan needed;
891 just record those variables newly known live at end
892 as live at start as well. */
893 for (j = 0; j < regset_size; j++)
894 {
895 register int x = basic_block_new_live_at_end[i][j]
896 & ~basic_block_live_at_end[i][j];
897 basic_block_live_at_start[i][j] |= x;
898 basic_block_live_at_end[i][j] |= x;
899 }
900 }
901 else
902 {
903 /* Update the basic_block_live_at_start
904 by propagation backwards through the block. */
905 bcopy (basic_block_new_live_at_end[i],
906 basic_block_live_at_end[i], regset_bytes);
907 bcopy (basic_block_live_at_end[i],
908 basic_block_live_at_start[i], regset_bytes);
909 propagate_block (basic_block_live_at_start[i],
910 basic_block_head[i], basic_block_end[i], 0,
911 first_pass ? basic_block_significant[i] : 0,
912 i);
913 }
914
915 {
916 register rtx jump, head;
917 /* Update the basic_block_new_live_at_end's of the block
918 that falls through into this one (if any). */
919 head = basic_block_head[i];
920 jump = PREV_INSN (head);
921 if (basic_block_drops_in[i])
922 {
923 register int from_block = BLOCK_NUM (jump);
924 register int j;
925 for (j = 0; j < regset_size; j++)
926 basic_block_new_live_at_end[from_block][j]
927 |= basic_block_live_at_start[i][j];
928 }
929 /* Update the basic_block_new_live_at_end's of
930 all the blocks that jump to this one. */
931 if (GET_CODE (head) == CODE_LABEL)
932 for (jump = LABEL_REFS (head);
933 jump != head;
934 jump = LABEL_NEXTREF (jump))
935 {
936 register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
937 register int j;
938 for (j = 0; j < regset_size; j++)
939 basic_block_new_live_at_end[from_block][j]
940 |= basic_block_live_at_start[i][j];
941 }
942 }
943 #ifdef USE_C_ALLOCA
944 alloca (0);
945 #endif
946 }
947 first_pass = 0;
948 }
949
950 /* The only pseudos that are live at the beginning of the function are
951 those that were not set anywhere in the function. local-alloc doesn't
952 know how to handle these correctly, so mark them as not local to any
953 one basic block. */
954
955 if (n_basic_blocks > 0)
956 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
957 if (basic_block_live_at_start[0][i / REGSET_ELT_BITS]
958 & (1 << (i % REGSET_ELT_BITS)))
959 reg_basic_block[i] = REG_BLOCK_GLOBAL;
960
961 /* Now the life information is accurate.
962 Make one more pass over each basic block
963 to delete dead stores, create autoincrement addressing
964 and record how many times each register is used, is set, or dies.
965
966 To save time, we operate directly in basic_block_live_at_end[i],
967 thus destroying it (in fact, converting it into a copy of
968 basic_block_live_at_start[i]). This is ok now because
969 basic_block_live_at_end[i] is no longer used past this point. */
970
971 max_scratch = 0;
972
973 for (i = 0; i < n_basic_blocks; i++)
974 {
975 propagate_block (basic_block_live_at_end[i],
976 basic_block_head[i], basic_block_end[i], 1, 0, i);
977 #ifdef USE_C_ALLOCA
978 alloca (0);
979 #endif
980 }
981
982 #if 0
983 /* Something live during a setjmp should not be put in a register
984 on certain machines which restore regs from stack frames
985 rather than from the jmpbuf.
986 But we don't need to do this for the user's variables, since
987 ANSI says only volatile variables need this. */
988 #ifdef LONGJMP_RESTORE_FROM_STACK
989 for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
990 if (regs_live_at_setjmp[i / REGSET_ELT_BITS] & (1 << (i % REGSET_ELT_BITS))
991 && regno_reg_rtx[i] != 0 && ! REG_USERVAR_P (regno_reg_rtx[i]))
992 {
993 reg_live_length[i] = -1;
994 reg_basic_block[i] = -1;
995 }
996 #endif
997 #endif
998
999 /* We have a problem with any pseudoreg that
1000 lives across the setjmp. ANSI says that if a
1001 user variable does not change in value
1002 between the setjmp and the longjmp, then the longjmp preserves it.
1003 This includes longjmp from a place where the pseudo appears dead.
1004 (In principle, the value still exists if it is in scope.)
1005 If the pseudo goes in a hard reg, some other value may occupy
1006 that hard reg where this pseudo is dead, thus clobbering the pseudo.
1007 Conclusion: such a pseudo must not go in a hard reg. */
1008 for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++)
1009 if (regs_live_at_setjmp[i / REGSET_ELT_BITS] & (1 << (i % REGSET_ELT_BITS))
1010 && regno_reg_rtx[i] != 0)
1011 {
1012 reg_live_length[i] = -1;
1013 reg_basic_block[i] = -1;
1014 }
1015
1016 obstack_free (&flow_obstack, 0);
1017 }
1018 \f
1019 /* Subroutines of life analysis. */
1020
1021 /* Allocate the permanent data structures that represent the results
1022 of life analysis. Not static since used also for stupid life analysis. */
1023
1024 void
1025 allocate_for_life_analysis ()
1026 {
1027 register int i;
1028 register regset tem;
1029
1030 regset_size = ((max_regno + REGSET_ELT_BITS - 1) / REGSET_ELT_BITS);
1031 regset_bytes = regset_size * sizeof (*(regset)0);
1032
1033 reg_n_refs = (int *) oballoc (max_regno * sizeof (int));
1034 bzero (reg_n_refs, max_regno * sizeof (int));
1035
1036 reg_n_sets = (short *) oballoc (max_regno * sizeof (short));
1037 bzero (reg_n_sets, max_regno * sizeof (short));
1038
1039 reg_n_deaths = (short *) oballoc (max_regno * sizeof (short));
1040 bzero (reg_n_deaths, max_regno * sizeof (short));
1041
1042 reg_live_length = (int *) oballoc (max_regno * sizeof (int));
1043 bzero (reg_live_length, max_regno * sizeof (int));
1044
1045 reg_n_calls_crossed = (int *) oballoc (max_regno * sizeof (int));
1046 bzero (reg_n_calls_crossed, max_regno * sizeof (int));
1047
1048 reg_basic_block = (short *) oballoc (max_regno * sizeof (short));
1049 for (i = 0; i < max_regno; i++)
1050 reg_basic_block[i] = REG_BLOCK_UNKNOWN;
1051
1052 basic_block_live_at_start = (regset *) oballoc (n_basic_blocks * sizeof (regset));
1053 tem = (regset) oballoc (n_basic_blocks * regset_bytes);
1054 bzero (tem, n_basic_blocks * regset_bytes);
1055 init_regset_vector (basic_block_live_at_start, tem, n_basic_blocks, regset_bytes);
1056
1057 regs_live_at_setjmp = (regset) oballoc (regset_bytes);
1058 bzero (regs_live_at_setjmp, regset_bytes);
1059 }
1060
1061 /* Make each element of VECTOR point at a regset,
1062 taking the space for all those regsets from SPACE.
1063 SPACE is of type regset, but it is really as long as NELTS regsets.
1064 BYTES_PER_ELT is the number of bytes in one regset. */
1065
1066 static void
1067 init_regset_vector (vector, space, nelts, bytes_per_elt)
1068 regset *vector;
1069 regset space;
1070 int nelts;
1071 int bytes_per_elt;
1072 {
1073 register int i;
1074 register regset p = space;
1075
1076 for (i = 0; i < nelts; i++)
1077 {
1078 vector[i] = p;
1079 p += bytes_per_elt / sizeof (*p);
1080 }
1081 }
1082 \f
1083 /* Compute the registers live at the beginning of a basic block
1084 from those live at the end.
1085
1086 When called, OLD contains those live at the end.
1087 On return, it contains those live at the beginning.
1088 FIRST and LAST are the first and last insns of the basic block.
1089
1090 FINAL is nonzero if we are doing the final pass which is not
1091 for computing the life info (since that has already been done)
1092 but for acting on it. On this pass, we delete dead stores,
1093 set up the logical links and dead-variables lists of instructions,
1094 and merge instructions for autoincrement and autodecrement addresses.
1095
1096 SIGNIFICANT is nonzero only the first time for each basic block.
1097 If it is nonzero, it points to a regset in which we store
1098 a 1 for each register that is set within the block.
1099
1100 BNUM is the number of the basic block. */
1101
1102 static void
1103 propagate_block (old, first, last, final, significant, bnum)
1104 register regset old;
1105 rtx first;
1106 rtx last;
1107 int final;
1108 regset significant;
1109 int bnum;
1110 {
1111 register rtx insn;
1112 rtx prev;
1113 regset live;
1114 regset dead;
1115
1116 /* The following variables are used only if FINAL is nonzero. */
1117 /* This vector gets one element for each reg that has been live
1118 at any point in the basic block that has been scanned so far.
1119 SOMETIMES_MAX says how many elements are in use so far.
1120 In each element, OFFSET is the byte-number within a regset
1121 for the register described by the element, and BIT is a mask
1122 for that register's bit within the byte. */
1123 register struct foo { short offset; short bit; } *regs_sometimes_live;
1124 int sometimes_max = 0;
1125 /* This regset has 1 for each reg that we have seen live so far.
1126 It and REGS_SOMETIMES_LIVE are updated together. */
1127 regset maxlive;
1128
1129 /* The loop depth may change in the middle of a basic block. Since we
1130 scan from end to beginning, we start with the depth at the end of the
1131 current basic block, and adjust as we pass ends and starts of loops. */
1132 loop_depth = basic_block_loop_depth[bnum];
1133
1134 dead = (regset) alloca (regset_bytes);
1135 live = (regset) alloca (regset_bytes);
1136
1137 cc0_live = 0;
1138 last_mem_set = 0;
1139
1140 /* Include any notes at the end of the block in the scan.
1141 This is in case the block ends with a call to setjmp. */
1142
1143 while (NEXT_INSN (last) != 0 && GET_CODE (NEXT_INSN (last)) == NOTE)
1144 {
1145 /* Look for loop boundaries, we are going forward here. */
1146 last = NEXT_INSN (last);
1147 if (NOTE_LINE_NUMBER (last) == NOTE_INSN_LOOP_BEG)
1148 loop_depth++;
1149 else if (NOTE_LINE_NUMBER (last) == NOTE_INSN_LOOP_END)
1150 loop_depth--;
1151 }
1152
1153 if (final)
1154 {
1155 register int i, offset, bit;
1156
1157 num_scratch = 0;
1158 maxlive = (regset) alloca (regset_bytes);
1159 bcopy (old, maxlive, regset_bytes);
1160 regs_sometimes_live
1161 = (struct foo *) alloca (max_regno * sizeof (struct foo));
1162
1163 /* Process the regs live at the end of the block.
1164 Enter them in MAXLIVE and REGS_SOMETIMES_LIVE.
1165 Also mark them as not local to any one basic block. */
1166
1167 for (offset = 0, i = 0; offset < regset_size; offset++)
1168 for (bit = 1; bit; bit <<= 1, i++)
1169 {
1170 if (i == max_regno)
1171 break;
1172 if (old[offset] & bit)
1173 {
1174 reg_basic_block[i] = REG_BLOCK_GLOBAL;
1175 regs_sometimes_live[sometimes_max].offset = offset;
1176 regs_sometimes_live[sometimes_max].bit = i % REGSET_ELT_BITS;
1177 sometimes_max++;
1178 }
1179 }
1180 }
1181
1182 /* Scan the block an insn at a time from end to beginning. */
1183
1184 for (insn = last; ; insn = prev)
1185 {
1186 prev = PREV_INSN (insn);
1187
1188 /* Look for loop boundaries, remembering that we are going backwards. */
1189 if (GET_CODE (insn) == NOTE
1190 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
1191 loop_depth++;
1192 else if (GET_CODE (insn) == NOTE
1193 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
1194 loop_depth--;
1195
1196 /* If we have LOOP_DEPTH == 0, there has been a bookkeeping error.
1197 Abort now rather than setting register status incorrectly. */
1198 if (loop_depth == 0)
1199 abort ();
1200
1201 /* If this is a call to `setjmp' et al,
1202 warn if any non-volatile datum is live. */
1203
1204 if (final && GET_CODE (insn) == NOTE
1205 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
1206 {
1207 int i;
1208 for (i = 0; i < regset_size; i++)
1209 regs_live_at_setjmp[i] |= old[i];
1210 }
1211
1212 /* Update the life-status of regs for this insn.
1213 First DEAD gets which regs are set in this insn
1214 then LIVE gets which regs are used in this insn.
1215 Then the regs live before the insn
1216 are those live after, with DEAD regs turned off,
1217 and then LIVE regs turned on. */
1218
1219 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1220 {
1221 register int i;
1222 rtx note = find_reg_note (insn, REG_RETVAL, 0);
1223 int insn_is_dead
1224 = (insn_dead_p (PATTERN (insn), old, 0)
1225 /* Don't delete something that refers to volatile storage! */
1226 && ! INSN_VOLATILE (insn));
1227 int libcall_is_dead
1228 = (insn_is_dead && note != 0
1229 && libcall_dead_p (PATTERN (insn), old, note, insn));
1230
1231 /* If an instruction consists of just dead store(s) on final pass,
1232 "delete" it by turning it into a NOTE of type NOTE_INSN_DELETED.
1233 We could really delete it with delete_insn, but that
1234 can cause trouble for first or last insn in a basic block. */
1235 if (final && insn_is_dead)
1236 {
1237 PUT_CODE (insn, NOTE);
1238 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
1239 NOTE_SOURCE_FILE (insn) = 0;
1240
1241 /* If this insn is copying the return value from a library call,
1242 delete the entire library call. */
1243 if (libcall_is_dead)
1244 {
1245 rtx first = XEXP (note, 0);
1246 rtx p = insn;
1247 while (INSN_DELETED_P (first))
1248 first = NEXT_INSN (first);
1249 while (p != first)
1250 {
1251 p = PREV_INSN (p);
1252 PUT_CODE (p, NOTE);
1253 NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED;
1254 NOTE_SOURCE_FILE (p) = 0;
1255 }
1256 }
1257 goto flushed;
1258 }
1259
1260 for (i = 0; i < regset_size; i++)
1261 {
1262 dead[i] = 0; /* Faster than bzero here */
1263 live[i] = 0; /* since regset_size is usually small */
1264 }
1265
1266 /* See if this is an increment or decrement that can be
1267 merged into a following memory address. */
1268 #ifdef AUTO_INC_DEC
1269 {
1270 register rtx x = PATTERN (insn);
1271 /* Does this instruction increment or decrement a register? */
1272 if (final && GET_CODE (x) == SET
1273 && GET_CODE (SET_DEST (x)) == REG
1274 && (GET_CODE (SET_SRC (x)) == PLUS
1275 || GET_CODE (SET_SRC (x)) == MINUS)
1276 && XEXP (SET_SRC (x), 0) == SET_DEST (x)
1277 && GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
1278 /* Ok, look for a following memory ref we can combine with.
1279 If one is found, change the memory ref to a PRE_INC
1280 or PRE_DEC, cancel this insn, and return 1.
1281 Return 0 if nothing has been done. */
1282 && try_pre_increment_1 (insn))
1283 goto flushed;
1284 }
1285 #endif /* AUTO_INC_DEC */
1286
1287 /* If this is not the final pass, and this insn is copying the
1288 value of a library call and it's dead, don't scan the
1289 insns that perform the library call, so that the call's
1290 arguments are not marked live. */
1291 if (libcall_is_dead)
1292 {
1293 /* Mark the dest reg as `significant'. */
1294 mark_set_regs (old, dead, PATTERN (insn), 0, significant);
1295
1296 insn = XEXP (note, 0);
1297 prev = PREV_INSN (insn);
1298 }
1299 else if (GET_CODE (PATTERN (insn)) == SET
1300 && SET_DEST (PATTERN (insn)) == stack_pointer_rtx
1301 && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
1302 && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
1303 && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
1304 /* We have an insn to pop a constant amount off the stack.
1305 (Such insns use PLUS regardless of the direction of the stack,
1306 and any insn to adjust the stack by a constant is always a pop.)
1307 These insns, if not dead stores, have no effect on life. */
1308 ;
1309 else
1310 {
1311 /* LIVE gets the regs used in INSN;
1312 DEAD gets those set by it. Dead insns don't make anything
1313 live. */
1314
1315 mark_set_regs (old, dead, PATTERN (insn), final ? insn : 0,
1316 significant);
1317
1318 /* If an insn doesn't use CC0, it becomes dead since we
1319 assume that every insn clobbers it. So show it dead here;
1320 mark_used_regs will set it live if it is referenced. */
1321 cc0_live = 0;
1322
1323 if (! insn_is_dead)
1324 mark_used_regs (old, live, PATTERN (insn), final, insn);
1325
1326 /* Sometimes we may have inserted something before INSN (such as
1327 a move) when we make an auto-inc. So ensure we will scan
1328 those insns. */
1329 #ifdef AUTO_INC_DEC
1330 prev = PREV_INSN (insn);
1331 #endif
1332
1333 if (! insn_is_dead && GET_CODE (insn) == CALL_INSN)
1334 {
1335 register int i;
1336
1337 /* Each call clobbers all call-clobbered regs that are not
1338 global. Note that the function-value reg is a
1339 call-clobbered reg, and mark_set_regs has already had
1340 a chance to handle it. */
1341
1342 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1343 if (call_used_regs[i] && ! global_regs[i])
1344 dead[i / REGSET_ELT_BITS]
1345 |= (1 << (i % REGSET_ELT_BITS));
1346
1347 /* The stack ptr is used (honorarily) by a CALL insn. */
1348 live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
1349 |= (1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS));
1350
1351 /* Calls may also reference any of the global registers,
1352 so they are made live. */
1353
1354 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1355 if (global_regs[i])
1356 live[i / REGSET_ELT_BITS]
1357 |= (1 << (i % REGSET_ELT_BITS));
1358
1359 /* Calls also clobber memory. */
1360 last_mem_set = 0;
1361 }
1362
1363 /* Update OLD for the registers used or set. */
1364 for (i = 0; i < regset_size; i++)
1365 {
1366 old[i] &= ~dead[i];
1367 old[i] |= live[i];
1368 }
1369
1370 if (GET_CODE (insn) == CALL_INSN && final)
1371 {
1372 /* Any regs live at the time of a call instruction
1373 must not go in a register clobbered by calls.
1374 Find all regs now live and record this for them. */
1375
1376 register struct foo *p = regs_sometimes_live;
1377
1378 for (i = 0; i < sometimes_max; i++, p++)
1379 if (old[p->offset] & (1 << p->bit))
1380 reg_n_calls_crossed[p->offset * REGSET_ELT_BITS + p->bit]+= 1;
1381 }
1382 }
1383
1384 /* On final pass, add any additional sometimes-live regs
1385 into MAXLIVE and REGS_SOMETIMES_LIVE.
1386 Also update counts of how many insns each reg is live at. */
1387
1388 if (final)
1389 {
1390 for (i = 0; i < regset_size; i++)
1391 {
1392 register int diff = live[i] & ~maxlive[i];
1393
1394 if (diff)
1395 {
1396 register int regno;
1397 maxlive[i] |= diff;
1398 for (regno = 0; diff && regno < REGSET_ELT_BITS; regno++)
1399 if (diff & (1 << regno))
1400 {
1401 regs_sometimes_live[sometimes_max].offset = i;
1402 regs_sometimes_live[sometimes_max].bit = regno;
1403 diff &= ~ (1 << regno);
1404 sometimes_max++;
1405 }
1406 }
1407 }
1408
1409 {
1410 register struct foo *p = regs_sometimes_live;
1411 for (i = 0; i < sometimes_max; i++, p++)
1412 {
1413 if (old[p->offset] & (1 << p->bit))
1414 reg_live_length[p->offset * REGSET_ELT_BITS + p->bit]++;
1415 }
1416 }
1417 }
1418 }
1419 flushed: ;
1420 if (insn == first)
1421 break;
1422 }
1423
1424 if (num_scratch > max_scratch)
1425 max_scratch = num_scratch;
1426 }
1427 \f
1428 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
1429 (SET expressions whose destinations are registers dead after the insn).
1430 NEEDED is the regset that says which regs are alive after the insn.
1431
1432 Unless CALL_OK is non-zero, an insn is needed if it contains a CALL. */
1433
1434 static int
1435 insn_dead_p (x, needed, call_ok)
1436 rtx x;
1437 regset needed;
1438 int call_ok;
1439 {
1440 register RTX_CODE code = GET_CODE (x);
1441 /* If setting something that's a reg or part of one,
1442 see if that register's altered value will be live. */
1443
1444 if (code == SET)
1445 {
1446 register rtx r = SET_DEST (x);
1447 /* A SET that is a subroutine call cannot be dead. */
1448 if (! call_ok && GET_CODE (SET_SRC (x)) == CALL)
1449 return 0;
1450
1451 #ifdef HAVE_cc0
1452 if (GET_CODE (r) == CC0)
1453 return ! cc0_live;
1454 #endif
1455
1456 if (GET_CODE (r) == MEM && last_mem_set && ! MEM_VOLATILE_P (r)
1457 && rtx_equal_p (r, last_mem_set))
1458 return 1;
1459
1460 while (GET_CODE (r) == SUBREG
1461 || GET_CODE (r) == STRICT_LOW_PART
1462 || GET_CODE (r) == ZERO_EXTRACT
1463 || GET_CODE (r) == SIGN_EXTRACT)
1464 r = SUBREG_REG (r);
1465
1466 if (GET_CODE (r) == REG)
1467 {
1468 register int regno = REGNO (r);
1469 register int offset = regno / REGSET_ELT_BITS;
1470 register int bit = 1 << (regno % REGSET_ELT_BITS);
1471
1472 if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1473 /* Make sure insns to set frame pointer aren't deleted. */
1474 || regno == FRAME_POINTER_REGNUM
1475 /* Make sure insns to set arg pointer are never deleted. */
1476 || regno == ARG_POINTER_REGNUM
1477 || (needed[offset] & bit) != 0)
1478 return 0;
1479
1480 /* If this is a hard register, verify that subsequent words are
1481 not needed. */
1482 if (regno < FIRST_PSEUDO_REGISTER)
1483 {
1484 int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
1485
1486 while (--n > 0)
1487 if ((needed[(regno + n) / REGSET_ELT_BITS]
1488 & 1 << ((regno + n) % REGSET_ELT_BITS)) != 0)
1489 return 0;
1490 }
1491
1492 return 1;
1493 }
1494 }
1495 /* If performing several activities,
1496 insn is dead if each activity is individually dead.
1497 Also, CLOBBERs and USEs can be ignored; a CLOBBER or USE
1498 that's inside a PARALLEL doesn't make the insn worth keeping. */
1499 else if (code == PARALLEL)
1500 {
1501 register int i = XVECLEN (x, 0);
1502 for (i--; i >= 0; i--)
1503 {
1504 rtx elt = XVECEXP (x, 0, i);
1505 if (!insn_dead_p (elt, needed, call_ok)
1506 && GET_CODE (elt) != CLOBBER
1507 && GET_CODE (elt) != USE)
1508 return 0;
1509 }
1510 return 1;
1511 }
1512 /* We do not check CLOBBER or USE here.
1513 An insn consisting of just a CLOBBER or just a USE
1514 should not be deleted. */
1515 return 0;
1516 }
1517
1518 /* If X is the pattern of the last insn in a libcall, and assuming X is dead,
1519 return 1 if the entire library call is dead.
1520 This is true if X copies a register (hard or pseudo)
1521 and if the hard return reg of the call insn is dead.
1522 (The caller should have tested the destination of X already for death.)
1523
1524 If this insn doesn't just copy a register, then we don't
1525 have an ordinary libcall. In that case, cse could not have
1526 managed to substitute the source for the dest later on,
1527 so we can assume the libcall is dead.
1528
1529 NEEDED is the bit vector of pseudoregs live before this insn.
1530 NOTE is the REG_RETVAL note of the insn. INSN is the insn itself. */
1531
1532 static int
1533 libcall_dead_p (x, needed, note, insn)
1534 rtx x;
1535 regset needed;
1536 rtx note;
1537 rtx insn;
1538 {
1539 register RTX_CODE code = GET_CODE (x);
1540
1541 if (code == SET)
1542 {
1543 register rtx r = SET_SRC (x);
1544 if (GET_CODE (r) == REG)
1545 {
1546 rtx call = XEXP (note, 0);
1547 register int i;
1548
1549 /* Find the call insn. */
1550 while (call != insn && GET_CODE (call) != CALL_INSN)
1551 call = NEXT_INSN (call);
1552
1553 /* If there is none, do nothing special,
1554 since ordinary death handling can understand these insns. */
1555 if (call == insn)
1556 return 0;
1557
1558 /* See if the hard reg holding the value is dead.
1559 If this is a PARALLEL, find the call within it. */
1560 call = PATTERN (call);
1561 if (GET_CODE (call) == PARALLEL)
1562 {
1563 for (i = XVECLEN (call, 0) - 1; i >= 0; i--)
1564 if (GET_CODE (XVECEXP (call, 0, i)) == SET
1565 && GET_CODE (SET_SRC (XVECEXP (call, 0, i))) == CALL)
1566 break;
1567
1568 if (i < 0)
1569 abort ();
1570
1571 call = XVECEXP (call, 0, i);
1572 }
1573
1574 return insn_dead_p (call, needed, 1);
1575 }
1576 }
1577 return 1;
1578 }
1579
1580 /* Return 1 if register REGNO was used before it was set.
1581 In other words, if it is live at function entry. */
1582
1583 int
1584 regno_uninitialized (regno)
1585 int regno;
1586 {
1587 if (n_basic_blocks == 0)
1588 return 0;
1589
1590 return (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1591 & (1 << (regno % REGSET_ELT_BITS)));
1592 }
1593
1594 /* 1 if register REGNO was alive at a place where `setjmp' was called
1595 and was set more than once or is an argument.
1596 Such regs may be clobbered by `longjmp'. */
1597
1598 int
1599 regno_clobbered_at_setjmp (regno)
1600 int regno;
1601 {
1602 if (n_basic_blocks == 0)
1603 return 0;
1604
1605 return ((reg_n_sets[regno] > 1
1606 || (basic_block_live_at_start[0][regno / REGSET_ELT_BITS]
1607 & (1 << (regno % REGSET_ELT_BITS))))
1608 && (regs_live_at_setjmp[regno / REGSET_ELT_BITS]
1609 & (1 << (regno % REGSET_ELT_BITS))));
1610 }
1611 \f
1612 /* Process the registers that are set within X.
1613 Their bits are set to 1 in the regset DEAD,
1614 because they are dead prior to this insn.
1615
1616 If INSN is nonzero, it is the insn being processed
1617 and the fact that it is nonzero implies this is the FINAL pass
1618 in propagate_block. In this case, various info about register
1619 usage is stored, LOG_LINKS fields of insns are set up. */
1620
1621 static void mark_set_1 ();
1622
1623 static void
1624 mark_set_regs (needed, dead, x, insn, significant)
1625 regset needed;
1626 regset dead;
1627 rtx x;
1628 rtx insn;
1629 regset significant;
1630 {
1631 register RTX_CODE code = GET_CODE (x);
1632
1633 if (code == SET || code == CLOBBER)
1634 mark_set_1 (needed, dead, x, insn, significant);
1635 else if (code == PARALLEL)
1636 {
1637 register int i;
1638 for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
1639 {
1640 code = GET_CODE (XVECEXP (x, 0, i));
1641 if (code == SET || code == CLOBBER)
1642 mark_set_1 (needed, dead, XVECEXP (x, 0, i), insn, significant);
1643 }
1644 }
1645 }
1646
1647 /* Process a single SET rtx, X. */
1648
1649 static void
1650 mark_set_1 (needed, dead, x, insn, significant)
1651 regset needed;
1652 regset dead;
1653 rtx x;
1654 rtx insn;
1655 regset significant;
1656 {
1657 register int regno;
1658 register rtx reg = SET_DEST (x);
1659
1660 /* Modifying just one hardware register of a multi-reg value
1661 or just a byte field of a register
1662 does not mean the value from before this insn is now dead.
1663 But it does mean liveness of that register at the end of the block
1664 is significant.
1665
1666 Within mark_set_1, however, we treat it as if the register is
1667 indeed modified. mark_used_regs will, however, also treat this
1668 register as being used. Thus, we treat these insns as setting a
1669 new value for the register as a function of its old value. This
1670 cases LOG_LINKS to be made appropriately and this will help combine. */
1671
1672 while (GET_CODE (reg) == SUBREG || GET_CODE (reg) == ZERO_EXTRACT
1673 || GET_CODE (reg) == SIGN_EXTRACT
1674 || GET_CODE (reg) == STRICT_LOW_PART)
1675 reg = XEXP (reg, 0);
1676
1677 /* If we are writing into memory or into a register mentioned in the
1678 address of the last thing stored into memory, show we don't know
1679 what the last store was. If we are writing memory, save the address
1680 unless it is volatile. */
1681 if (GET_CODE (reg) == MEM
1682 || (GET_CODE (reg) == REG
1683 && last_mem_set != 0 && reg_overlap_mentioned_p (reg, last_mem_set)))
1684 last_mem_set = 0;
1685
1686 if (GET_CODE (reg) == MEM && ! side_effects_p (reg)
1687 /* There are no REG_INC notes for SP, so we can't assume we'll see
1688 everything that invalidates it. To be safe, don't eliminate any
1689 stores though SP; none of them should be redundant anyway. */
1690 && ! reg_mentioned_p (stack_pointer_rtx, reg))
1691 last_mem_set = reg;
1692
1693 if (GET_CODE (reg) == REG
1694 && (regno = REGNO (reg), regno != FRAME_POINTER_REGNUM)
1695 && regno != ARG_POINTER_REGNUM
1696 && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
1697 /* && regno != STACK_POINTER_REGNUM) -- let's try without this. */
1698 {
1699 register int offset = regno / REGSET_ELT_BITS;
1700 register int bit = 1 << (regno % REGSET_ELT_BITS);
1701 int all_needed = (needed[offset] & bit) != 0;
1702 int some_needed = (needed[offset] & bit) != 0;
1703
1704 /* Mark it as a significant register for this basic block. */
1705 if (significant)
1706 significant[offset] |= bit;
1707
1708 /* Mark it as as dead before this insn. */
1709 dead[offset] |= bit;
1710
1711 /* A hard reg in a wide mode may really be multiple registers.
1712 If so, mark all of them just like the first. */
1713 if (regno < FIRST_PSEUDO_REGISTER)
1714 {
1715 int n;
1716
1717 /* Nothing below is needed for the stack pointer; get out asap.
1718 Eg, log links aren't needed, since combine won't use them. */
1719 if (regno == STACK_POINTER_REGNUM)
1720 return;
1721
1722 n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
1723 while (--n > 0)
1724 {
1725 if (significant)
1726 significant[(regno + n) / REGSET_ELT_BITS]
1727 |= 1 << ((regno + n) % REGSET_ELT_BITS);
1728 dead[(regno + n) / REGSET_ELT_BITS]
1729 |= 1 << ((regno + n) % REGSET_ELT_BITS);
1730 some_needed |= (needed[(regno + n) / REGSET_ELT_BITS]
1731 & 1 << ((regno + n) % REGSET_ELT_BITS));
1732 all_needed &= (needed[(regno + n) / REGSET_ELT_BITS]
1733 & 1 << ((regno + n) % REGSET_ELT_BITS));
1734 }
1735 }
1736 /* Additional data to record if this is the final pass. */
1737 if (insn)
1738 {
1739 register rtx y = reg_next_use[regno];
1740 register int blocknum = BLOCK_NUM (insn);
1741
1742 /* If this is a hard reg, record this function uses the reg. */
1743
1744 if (regno < FIRST_PSEUDO_REGISTER)
1745 {
1746 register int i;
1747 int endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
1748
1749 for (i = regno; i < endregno; i++)
1750 {
1751 regs_ever_live[i] = 1;
1752 reg_n_sets[i]++;
1753 }
1754 }
1755 else
1756 {
1757 /* Keep track of which basic blocks each reg appears in. */
1758
1759 if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
1760 reg_basic_block[regno] = blocknum;
1761 else if (reg_basic_block[regno] != blocknum)
1762 reg_basic_block[regno] = REG_BLOCK_GLOBAL;
1763
1764 /* Count (weighted) references, stores, etc. This counts a
1765 register twice if it is modified, but that is correct. */
1766 reg_n_sets[regno]++;
1767
1768 reg_n_refs[regno] += loop_depth;
1769
1770 /* The insns where a reg is live are normally counted
1771 elsewhere, but we want the count to include the insn
1772 where the reg is set, and the normal counting mechanism
1773 would not count it. */
1774 reg_live_length[regno]++;
1775 }
1776
1777 /* The next use is no longer "next", since a store intervenes. */
1778 reg_next_use[regno] = 0;
1779
1780 if (all_needed)
1781 {
1782 /* Make a logical link from the next following insn
1783 that uses this register, back to this insn.
1784 The following insns have already been processed.
1785
1786 We don't build a LOG_LINK for hard registers containing
1787 in ASM_OPERANDs. If these registers get replaced,
1788 we might wind up changing the semantics of the insn,
1789 even if reload can make what appear to be valid assignments
1790 later. */
1791 if (y && (BLOCK_NUM (y) == blocknum)
1792 && (regno >= FIRST_PSEUDO_REGISTER
1793 || asm_noperands (PATTERN (y)) < 0))
1794 LOG_LINKS (y)
1795 = gen_rtx (INSN_LIST, VOIDmode, insn, LOG_LINKS (y));
1796 }
1797 else if (! some_needed)
1798 {
1799 /* Note that dead stores have already been deleted when possible
1800 If we get here, we have found a dead store that cannot
1801 be eliminated (because the same insn does something useful).
1802 Indicate this by marking the reg being set as dying here. */
1803 REG_NOTES (insn)
1804 = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
1805 reg_n_deaths[REGNO (reg)]++;
1806 }
1807 else
1808 {
1809 /* This is a case where we have a multi-word hard register
1810 and some, but not all, of the words of the register are
1811 needed in subsequent insns. Write REG_UNUSED notes
1812 for those parts that were not needed. This case should
1813 be rare. */
1814
1815 int i;
1816
1817 for (i = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1;
1818 i >= 0; i--)
1819 if ((needed[(regno + i) / REGSET_ELT_BITS]
1820 & 1 << ((regno + i) % REGSET_ELT_BITS)) == 0)
1821 REG_NOTES (insn)
1822 = gen_rtx (EXPR_LIST, REG_UNUSED,
1823 gen_rtx (REG, word_mode, regno + i),
1824 REG_NOTES (insn));
1825 }
1826 }
1827 }
1828
1829 /* If this is the last pass and this is a SCRATCH, show it will be dying
1830 here and count it. */
1831 else if (GET_CODE (reg) == SCRATCH && insn != 0)
1832 {
1833 REG_NOTES (insn)
1834 = gen_rtx (EXPR_LIST, REG_UNUSED, reg, REG_NOTES (insn));
1835 num_scratch++;
1836 }
1837 }
1838 \f
1839 #ifdef AUTO_INC_DEC
1840
1841 /* X is a MEM found in INSN. See if we can convert it into an auto-increment
1842 reference. */
1843
1844 static void
1845 find_auto_inc (needed, x, insn)
1846 regset needed;
1847 rtx x;
1848 rtx insn;
1849 {
1850 rtx addr = XEXP (x, 0);
1851 int offset = 0;
1852
1853 /* Here we detect use of an index register which might be good for
1854 postincrement, postdecrement, preincrement, or predecrement. */
1855
1856 if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST_INT)
1857 offset = INTVAL (XEXP (addr, 1)), addr = XEXP (addr, 0);
1858
1859 if (GET_CODE (addr) == REG)
1860 {
1861 register rtx y;
1862 register int size = GET_MODE_SIZE (GET_MODE (x));
1863 rtx use;
1864 rtx incr;
1865 int regno = REGNO (addr);
1866
1867 /* Is the next use an increment that might make auto-increment? */
1868 incr = reg_next_use[regno];
1869 if (incr && GET_CODE (PATTERN (incr)) == SET
1870 && BLOCK_NUM (incr) == BLOCK_NUM (insn)
1871 /* Can't add side effects to jumps; if reg is spilled and
1872 reloaded, there's no way to store back the altered value. */
1873 && GET_CODE (insn) != JUMP_INSN
1874 && (y = SET_SRC (PATTERN (incr)), GET_CODE (y) == PLUS)
1875 && XEXP (y, 0) == addr
1876 && GET_CODE (XEXP (y, 1)) == CONST_INT
1877 && (0
1878 #ifdef HAVE_POST_INCREMENT
1879 || (INTVAL (XEXP (y, 1)) == size && offset == 0)
1880 #endif
1881 #ifdef HAVE_POST_DECREMENT
1882 || (INTVAL (XEXP (y, 1)) == - size && offset == 0)
1883 #endif
1884 #ifdef HAVE_PRE_INCREMENT
1885 || (INTVAL (XEXP (y, 1)) == size && offset == size)
1886 #endif
1887 #ifdef HAVE_PRE_DECREMENT
1888 || (INTVAL (XEXP (y, 1)) == - size && offset == - size)
1889 #endif
1890 )
1891 /* Make sure this reg appears only once in this insn. */
1892 && (use = find_use_as_address (PATTERN (insn), addr, offset),
1893 use != 0 && use != (rtx) 1))
1894 {
1895 int win = 0;
1896 rtx q = SET_DEST (PATTERN (incr));
1897
1898 if (dead_or_set_p (incr, addr))
1899 win = 1;
1900 else if (GET_CODE (q) == REG && ! reg_used_between_p (q, insn, incr))
1901 {
1902 /* We have *p followed by q = p+size.
1903 Both p and q must be live afterward,
1904 and q must be dead before.
1905 Change it to q = p, ...*q..., q = q+size.
1906 Then fall into the usual case. */
1907 rtx insns, temp;
1908
1909 start_sequence ();
1910 emit_move_insn (q, addr);
1911 insns = get_insns ();
1912 end_sequence ();
1913
1914 /* If anything in INSNS have UID's that don't fit within the
1915 extra space we allocate earlier, we can't make this auto-inc.
1916 This should never happen. */
1917 for (temp = insns; temp; temp = NEXT_INSN (temp))
1918 {
1919 if (INSN_UID (temp) > max_uid_for_flow)
1920 return;
1921 BLOCK_NUM (temp) = BLOCK_NUM (insn);
1922 }
1923
1924 emit_insns_before (insns, insn);
1925
1926 if (basic_block_head[BLOCK_NUM (insn)] == insn)
1927 basic_block_head[BLOCK_NUM (insn)] = insns;
1928
1929 XEXP (x, 0) = q;
1930 XEXP (y, 0) = q;
1931
1932 /* INCR will become a NOTE and INSN won't contain a
1933 use of ADDR. If a use of ADDR was just placed in
1934 the insn before INSN, make that the next use.
1935 Otherwise, invalidate it. */
1936 if (GET_CODE (PREV_INSN (insn)) == INSN
1937 && GET_CODE (PATTERN (PREV_INSN (insn))) == SET
1938 && SET_SRC (PATTERN (PREV_INSN (insn))) == addr)
1939 reg_next_use[regno] = PREV_INSN (insn);
1940 else
1941 reg_next_use[regno] = 0;
1942
1943 addr = q;
1944 regno = REGNO (q);
1945 win = 1;
1946
1947 /* REGNO is now used in INCR which is below INSN, but
1948 it previously wasn't live here. If we don't mark
1949 it as needed, we'll put a REG_DEAD note for it
1950 on this insn, which is incorrect. */
1951 needed[regno / REGSET_ELT_BITS]
1952 |= 1 << (regno % REGSET_ELT_BITS);
1953
1954 /* If there are any calls between INSN and INCR, show
1955 that REGNO now crosses them. */
1956 for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
1957 if (GET_CODE (temp) == CALL_INSN)
1958 reg_n_calls_crossed[regno]++;
1959 }
1960
1961 if (win)
1962 {
1963 /* We have found a suitable auto-increment: do POST_INC around
1964 the register here, and patch out the increment instruction
1965 that follows. */
1966 XEXP (x, 0) = gen_rtx ((INTVAL (XEXP (y, 1)) == size
1967 ? (offset ? PRE_INC : POST_INC)
1968 : (offset ? PRE_DEC : POST_DEC)),
1969 Pmode, addr);
1970
1971 /* Record that this insn has an implicit side effect. */
1972 REG_NOTES (insn)
1973 = gen_rtx (EXPR_LIST, REG_INC, addr, REG_NOTES (insn));
1974
1975 /* Modify the old increment-insn to simply copy
1976 the already-incremented value of our register. */
1977 SET_SRC (PATTERN (incr)) = addr;
1978 /* Indicate insn must be re-recognized. */
1979 INSN_CODE (incr) = -1;
1980
1981 /* If that makes it a no-op (copying the register into itself)
1982 then delete it so it won't appear to be a "use" and a "set"
1983 of this register. */
1984 if (SET_DEST (PATTERN (incr)) == addr)
1985 {
1986 PUT_CODE (incr, NOTE);
1987 NOTE_LINE_NUMBER (incr) = NOTE_INSN_DELETED;
1988 NOTE_SOURCE_FILE (incr) = 0;
1989 }
1990
1991 if (regno >= FIRST_PSEUDO_REGISTER)
1992 {
1993 /* Count an extra reference to the reg. When a reg is
1994 incremented, spilling it is worse, so we want to make
1995 that less likely. */
1996 reg_n_refs[regno] += loop_depth;
1997 /* Count the increment as a setting of the register,
1998 even though it isn't a SET in rtl. */
1999 reg_n_sets[regno]++;
2000 }
2001 }
2002 }
2003 }
2004 }
2005 #endif /* AUTO_INC_DEC */
2006 \f
2007 /* Scan expression X and store a 1-bit in LIVE for each reg it uses.
2008 This is done assuming the registers needed from X
2009 are those that have 1-bits in NEEDED.
2010
2011 On the final pass, FINAL is 1. This means try for autoincrement
2012 and count the uses and deaths of each pseudo-reg.
2013
2014 INSN is the containing instruction. If INSN is dead, this function is not
2015 called. */
2016
2017 static void
2018 mark_used_regs (needed, live, x, final, insn)
2019 regset needed;
2020 regset live;
2021 rtx x;
2022 rtx insn;
2023 int final;
2024 {
2025 register RTX_CODE code;
2026 register int regno;
2027 int i;
2028
2029 retry:
2030 code = GET_CODE (x);
2031 switch (code)
2032 {
2033 case LABEL_REF:
2034 case SYMBOL_REF:
2035 case CONST_INT:
2036 case CONST:
2037 case CONST_DOUBLE:
2038 case PC:
2039 case CLOBBER:
2040 case ADDR_VEC:
2041 case ADDR_DIFF_VEC:
2042 case ASM_INPUT:
2043 return;
2044
2045 #ifdef HAVE_cc0
2046 case CC0:
2047 cc0_live = 1;
2048 return;
2049 #endif
2050
2051 case MEM:
2052 /* Invalidate the data for the last MEM stored. We could do this only
2053 if the addresses conflict, but this doesn't seem worthwhile. */
2054 last_mem_set = 0;
2055
2056 #ifdef AUTO_INC_DEC
2057 if (final)
2058 find_auto_inc (needed, x, insn);
2059 #endif
2060 break;
2061
2062 case REG:
2063 /* See a register other than being set
2064 => mark it as needed. */
2065
2066 regno = REGNO (x);
2067 {
2068 register int offset = regno / REGSET_ELT_BITS;
2069 register int bit = 1 << (regno % REGSET_ELT_BITS);
2070 int all_needed = (needed[offset] & bit) != 0;
2071 int some_needed = (needed[offset] & bit) != 0;
2072
2073 live[offset] |= bit;
2074 /* A hard reg in a wide mode may really be multiple registers.
2075 If so, mark all of them just like the first. */
2076 if (regno < FIRST_PSEUDO_REGISTER)
2077 {
2078 int n;
2079
2080 /* For stack ptr or arg pointer,
2081 nothing below can be necessary, so waste no more time. */
2082 if (regno == STACK_POINTER_REGNUM
2083 || regno == ARG_POINTER_REGNUM
2084 || regno == FRAME_POINTER_REGNUM)
2085 {
2086 /* If this is a register we are going to try to eliminate,
2087 don't mark it live here. If we are successful in
2088 eliminating it, it need not be live unless it is used for
2089 pseudos, in which case it will have been set live when
2090 it was allocated to the pseudos. If the register will not
2091 be eliminated, reload will set it live at that point. */
2092
2093 if (! TEST_HARD_REG_BIT (elim_reg_set, regno))
2094 regs_ever_live[regno] = 1;
2095 return;
2096 }
2097 /* No death notes for global register variables;
2098 their values are live after this function exits. */
2099 if (global_regs[regno])
2100 return;
2101
2102 n = HARD_REGNO_NREGS (regno, GET_MODE (x));
2103 while (--n > 0)
2104 {
2105 live[(regno + n) / REGSET_ELT_BITS]
2106 |= 1 << ((regno + n) % REGSET_ELT_BITS);
2107 some_needed |= (needed[(regno + n) / REGSET_ELT_BITS]
2108 & 1 << ((regno + n) % REGSET_ELT_BITS));
2109 all_needed &= (needed[(regno + n) / REGSET_ELT_BITS]
2110 & 1 << ((regno + n) % REGSET_ELT_BITS));
2111 }
2112 }
2113 if (final)
2114 {
2115 /* Record where each reg is used, so when the reg
2116 is set we know the next insn that uses it. */
2117
2118 reg_next_use[regno] = insn;
2119
2120 if (regno < FIRST_PSEUDO_REGISTER)
2121 {
2122 /* If a hard reg is being used,
2123 record that this function does use it. */
2124
2125 i = HARD_REGNO_NREGS (regno, GET_MODE (x));
2126 if (i == 0)
2127 i = 1;
2128 do
2129 regs_ever_live[regno + --i] = 1;
2130 while (i > 0);
2131 }
2132 else
2133 {
2134 /* Keep track of which basic block each reg appears in. */
2135
2136 register int blocknum = BLOCK_NUM (insn);
2137
2138 if (reg_basic_block[regno] == REG_BLOCK_UNKNOWN)
2139 reg_basic_block[regno] = blocknum;
2140 else if (reg_basic_block[regno] != blocknum)
2141 reg_basic_block[regno] = REG_BLOCK_GLOBAL;
2142
2143 /* Count (weighted) number of uses of each reg. */
2144
2145 reg_n_refs[regno] += loop_depth;
2146 }
2147
2148 /* Record and count the insns in which a reg dies.
2149 If it is used in this insn and was dead below the insn
2150 then it dies in this insn. If it was set in this insn,
2151 we do not make a REG_DEAD note; likewise if we already
2152 made such a note. */
2153
2154 if (! all_needed
2155 && ! dead_or_set_p (insn, x)
2156 #if 0
2157 && (regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
2158 #endif
2159 )
2160 {
2161 /* If none of the words in X is needed, make a REG_DEAD
2162 note. Otherwise, we must make partial REG_DEAD notes. */
2163 if (! some_needed)
2164 {
2165 REG_NOTES (insn)
2166 = gen_rtx (EXPR_LIST, REG_DEAD, x, REG_NOTES (insn));
2167 reg_n_deaths[regno]++;
2168 }
2169 else
2170 {
2171 int i;
2172
2173 /* Don't make a REG_DEAD note for a part of a register
2174 that is set in the insn. */
2175
2176 for (i = HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1;
2177 i >= 0; i--)
2178 if ((needed[(regno + i) / REGSET_ELT_BITS]
2179 & 1 << ((regno + i) % REGSET_ELT_BITS)) == 0
2180 && ! dead_or_set_regno_p (insn, regno + i))
2181 REG_NOTES (insn)
2182 = gen_rtx (EXPR_LIST, REG_DEAD,
2183 gen_rtx (REG, word_mode, regno + i),
2184 REG_NOTES (insn));
2185 }
2186 }
2187 }
2188 }
2189 return;
2190
2191 case SET:
2192 {
2193 register rtx testreg = SET_DEST (x);
2194 int mark_dest = 0;
2195
2196 /* If storing into MEM, don't show it as being used. But do
2197 show the address as being used. */
2198 if (GET_CODE (testreg) == MEM)
2199 {
2200 #ifdef AUTO_INC_DEC
2201 if (final)
2202 find_auto_inc (needed, testreg, insn);
2203 #endif
2204 mark_used_regs (needed, live, XEXP (testreg, 0), final, insn);
2205 mark_used_regs (needed, live, SET_SRC (x), final, insn);
2206 return;
2207 }
2208
2209 /* Storing in STRICT_LOW_PART is like storing in a reg
2210 in that this SET might be dead, so ignore it in TESTREG.
2211 but in some other ways it is like using the reg.
2212
2213 Storing in a SUBREG or a bit field is like storing the entire
2214 register in that if the register's value is not used
2215 then this SET is not needed. */
2216 while (GET_CODE (testreg) == STRICT_LOW_PART
2217 || GET_CODE (testreg) == ZERO_EXTRACT
2218 || GET_CODE (testreg) == SIGN_EXTRACT
2219 || GET_CODE (testreg) == SUBREG)
2220 {
2221 /* Modifying a single register in an alternate mode
2222 does not use any of the old value. But these other
2223 ways of storing in a register do use the old value. */
2224 if (GET_CODE (testreg) == SUBREG
2225 && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg)))
2226 ;
2227 else
2228 mark_dest = 1;
2229
2230 testreg = XEXP (testreg, 0);
2231 }
2232
2233 /* If this is a store into a register,
2234 recursively scan the value being stored. */
2235
2236 if (GET_CODE (testreg) == REG
2237 && (regno = REGNO (testreg), regno != FRAME_POINTER_REGNUM)
2238 && regno != ARG_POINTER_REGNUM
2239 && ! (regno < FIRST_PSEUDO_REGISTER && global_regs[regno]))
2240 {
2241 mark_used_regs (needed, live, SET_SRC (x), final, insn);
2242 if (mark_dest)
2243 mark_used_regs (needed, live, SET_DEST (x), final, insn);
2244 return;
2245 }
2246 }
2247 break;
2248
2249 case RETURN:
2250 /* If exiting needs the right stack value, consider this insn as
2251 using the stack pointer. In any event, consider it as using
2252 all global registers. */
2253
2254 #ifdef EXIT_IGNORE_STACK
2255 if (! EXIT_IGNORE_STACK
2256 || (! FRAME_POINTER_REQUIRED && flag_omit_frame_pointer))
2257 #endif
2258 live[STACK_POINTER_REGNUM / REGSET_ELT_BITS]
2259 |= 1 << (STACK_POINTER_REGNUM % REGSET_ELT_BITS);
2260
2261 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2262 if (global_regs[i])
2263 live[i / REGSET_ELT_BITS] |= 1 << (i % REGSET_ELT_BITS);
2264 break;
2265 }
2266
2267 /* Recursively scan the operands of this expression. */
2268
2269 {
2270 register char *fmt = GET_RTX_FORMAT (code);
2271 register int i;
2272
2273 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2274 {
2275 if (fmt[i] == 'e')
2276 {
2277 /* Tail recursive case: save a function call level. */
2278 if (i == 0)
2279 {
2280 x = XEXP (x, 0);
2281 goto retry;
2282 }
2283 mark_used_regs (needed, live, XEXP (x, i), final, insn);
2284 }
2285 else if (fmt[i] == 'E')
2286 {
2287 register int j;
2288 for (j = 0; j < XVECLEN (x, i); j++)
2289 mark_used_regs (needed, live, XVECEXP (x, i, j), final, insn);
2290 }
2291 }
2292 }
2293 }
2294 \f
2295 #ifdef AUTO_INC_DEC
2296
2297 static int
2298 try_pre_increment_1 (insn)
2299 rtx insn;
2300 {
2301 /* Find the next use of this reg. If in same basic block,
2302 make it do pre-increment or pre-decrement if appropriate. */
2303 rtx x = PATTERN (insn);
2304 int amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
2305 * INTVAL (XEXP (SET_SRC (x), 1)));
2306 int regno = REGNO (SET_DEST (x));
2307 rtx y = reg_next_use[regno];
2308 if (y != 0
2309 && BLOCK_NUM (y) == BLOCK_NUM (insn)
2310 && try_pre_increment (y, SET_DEST (PATTERN (insn)),
2311 amount))
2312 {
2313 /* We have found a suitable auto-increment
2314 and already changed insn Y to do it.
2315 So flush this increment-instruction. */
2316 PUT_CODE (insn, NOTE);
2317 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
2318 NOTE_SOURCE_FILE (insn) = 0;
2319 /* Count a reference to this reg for the increment
2320 insn we are deleting. When a reg is incremented.
2321 spilling it is worse, so we want to make that
2322 less likely. */
2323 if (regno >= FIRST_PSEUDO_REGISTER)
2324 {
2325 reg_n_refs[regno] += loop_depth;
2326 reg_n_sets[regno]++;
2327 }
2328 return 1;
2329 }
2330 return 0;
2331 }
2332
2333 /* Try to change INSN so that it does pre-increment or pre-decrement
2334 addressing on register REG in order to add AMOUNT to REG.
2335 AMOUNT is negative for pre-decrement.
2336 Returns 1 if the change could be made.
2337 This checks all about the validity of the result of modifying INSN. */
2338
2339 static int
2340 try_pre_increment (insn, reg, amount)
2341 rtx insn, reg;
2342 int amount;
2343 {
2344 register rtx use;
2345
2346 /* Nonzero if we can try to make a pre-increment or pre-decrement.
2347 For example, addl $4,r1; movl (r1),... can become movl +(r1),... */
2348 int pre_ok = 0;
2349 /* Nonzero if we can try to make a post-increment or post-decrement.
2350 For example, addl $4,r1; movl -4(r1),... can become movl (r1)+,...
2351 It is possible for both PRE_OK and POST_OK to be nonzero if the machine
2352 supports both pre-inc and post-inc, or both pre-dec and post-dec. */
2353 int post_ok = 0;
2354
2355 /* Nonzero if the opportunity actually requires post-inc or post-dec. */
2356 int do_post = 0;
2357
2358 /* From the sign of increment, see which possibilities are conceivable
2359 on this target machine. */
2360 #ifdef HAVE_PRE_INCREMENT
2361 if (amount > 0)
2362 pre_ok = 1;
2363 #endif
2364 #ifdef HAVE_POST_INCREMENT
2365 if (amount > 0)
2366 post_ok = 1;
2367 #endif
2368
2369 #ifdef HAVE_PRE_DECREMENT
2370 if (amount < 0)
2371 pre_ok = 1;
2372 #endif
2373 #ifdef HAVE_POST_DECREMENT
2374 if (amount < 0)
2375 post_ok = 1;
2376 #endif
2377
2378 if (! (pre_ok || post_ok))
2379 return 0;
2380
2381 /* It is not safe to add a side effect to a jump insn
2382 because if the incremented register is spilled and must be reloaded
2383 there would be no way to store the incremented value back in memory. */
2384
2385 if (GET_CODE (insn) == JUMP_INSN)
2386 return 0;
2387
2388 use = 0;
2389 if (pre_ok)
2390 use = find_use_as_address (PATTERN (insn), reg, 0);
2391 if (post_ok && (use == 0 || use == (rtx) 1))
2392 {
2393 use = find_use_as_address (PATTERN (insn), reg, -amount);
2394 do_post = 1;
2395 }
2396
2397 if (use == 0 || use == (rtx) 1)
2398 return 0;
2399
2400 if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount))
2401 return 0;
2402
2403 XEXP (use, 0) = gen_rtx (amount > 0
2404 ? (do_post ? POST_INC : PRE_INC)
2405 : (do_post ? POST_DEC : PRE_DEC),
2406 Pmode, reg);
2407
2408 /* Record that this insn now has an implicit side effect on X. */
2409 REG_NOTES (insn) = gen_rtx (EXPR_LIST, REG_INC, reg, REG_NOTES (insn));
2410 return 1;
2411 }
2412
2413 #endif /* AUTO_INC_DEC */
2414 \f
2415 /* Find the place in the rtx X where REG is used as a memory address.
2416 Return the MEM rtx that so uses it.
2417 If PLUSCONST is nonzero, search instead for a memory address equivalent to
2418 (plus REG (const_int PLUSCONST)).
2419
2420 If such an address does not appear, return 0.
2421 If REG appears more than once, or is used other than in such an address,
2422 return (rtx)1. */
2423
2424 static rtx
2425 find_use_as_address (x, reg, plusconst)
2426 register rtx x;
2427 rtx reg;
2428 int plusconst;
2429 {
2430 enum rtx_code code = GET_CODE (x);
2431 char *fmt = GET_RTX_FORMAT (code);
2432 register int i;
2433 register rtx value = 0;
2434 register rtx tem;
2435
2436 if (code == MEM && XEXP (x, 0) == reg && plusconst == 0)
2437 return x;
2438
2439 if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
2440 && XEXP (XEXP (x, 0), 0) == reg
2441 && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
2442 && INTVAL (XEXP (XEXP (x, 0), 1)) == plusconst)
2443 return x;
2444
2445 if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
2446 {
2447 /* If REG occurs inside a MEM used in a bit-field reference,
2448 that is unacceptable. */
2449 if (find_use_as_address (XEXP (x, 0), reg, 0) != 0)
2450 return (rtx) 1;
2451 }
2452
2453 if (x == reg)
2454 return (rtx) 1;
2455
2456 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2457 {
2458 if (fmt[i] == 'e')
2459 {
2460 tem = find_use_as_address (XEXP (x, i), reg, plusconst);
2461 if (value == 0)
2462 value = tem;
2463 else if (tem != 0)
2464 return (rtx) 1;
2465 }
2466 if (fmt[i] == 'E')
2467 {
2468 register int j;
2469 for (j = XVECLEN (x, i) - 1; j >= 0; j--)
2470 {
2471 tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst);
2472 if (value == 0)
2473 value = tem;
2474 else if (tem != 0)
2475 return (rtx) 1;
2476 }
2477 }
2478 }
2479
2480 return value;
2481 }
2482 \f
2483 /* Write information about registers and basic blocks into FILE.
2484 This is part of making a debugging dump. */
2485
2486 void
2487 dump_flow_info (file)
2488 FILE *file;
2489 {
2490 register int i;
2491 static char *reg_class_names[] = REG_CLASS_NAMES;
2492
2493 fprintf (file, "%d registers.\n", max_regno);
2494
2495 for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
2496 if (reg_n_refs[i])
2497 {
2498 enum reg_class class;
2499 fprintf (file, "\nRegister %d used %d times across %d insns",
2500 i, reg_n_refs[i], reg_live_length[i]);
2501 if (reg_basic_block[i] >= 0)
2502 fprintf (file, " in block %d", reg_basic_block[i]);
2503 if (reg_n_deaths[i] != 1)
2504 fprintf (file, "; dies in %d places", reg_n_deaths[i]);
2505 if (reg_n_calls_crossed[i] == 1)
2506 fprintf (file, "; crosses 1 call");
2507 else if (reg_n_calls_crossed[i])
2508 fprintf (file, "; crosses %d calls", reg_n_calls_crossed[i]);
2509 if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
2510 fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
2511 class = reg_preferred_class (i);
2512 if (class != GENERAL_REGS)
2513 {
2514 if (reg_preferred_or_nothing (i))
2515 fprintf (file, "; %s or none", reg_class_names[(int) class]);
2516 else
2517 fprintf (file, "; pref %s", reg_class_names[(int) class]);
2518 }
2519 if (REGNO_POINTER_FLAG (i))
2520 fprintf (file, "; pointer");
2521 fprintf (file, ".\n");
2522 }
2523 fprintf (file, "\n%d basic blocks.\n", n_basic_blocks);
2524 for (i = 0; i < n_basic_blocks; i++)
2525 {
2526 register rtx head, jump;
2527 register int regno;
2528 fprintf (file, "\nBasic block %d: first insn %d, last %d.\n",
2529 i,
2530 INSN_UID (basic_block_head[i]),
2531 INSN_UID (basic_block_end[i]));
2532 /* The control flow graph's storage is freed
2533 now when flow_analysis returns.
2534 Don't try to print it if it is gone. */
2535 if (basic_block_drops_in)
2536 {
2537 fprintf (file, "Reached from blocks: ");
2538 head = basic_block_head[i];
2539 if (GET_CODE (head) == CODE_LABEL)
2540 for (jump = LABEL_REFS (head);
2541 jump != head;
2542 jump = LABEL_NEXTREF (jump))
2543 {
2544 register int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
2545 fprintf (file, " %d", from_block);
2546 }
2547 if (basic_block_drops_in[i])
2548 fprintf (file, " previous");
2549 }
2550 fprintf (file, "\nRegisters live at start:");
2551 for (regno = 0; regno < max_regno; regno++)
2552 {
2553 register int offset = regno / REGSET_ELT_BITS;
2554 register int bit = 1 << (regno % REGSET_ELT_BITS);
2555 if (basic_block_live_at_start[i][offset] & bit)
2556 fprintf (file, " %d", regno);
2557 }
2558 fprintf (file, "\n");
2559 }
2560 fprintf (file, "\n");
2561 }
This page took 0.186604 seconds and 5 git commands to generate.