1 /* Save and restore call-clobbered registers which are live across a call.
2 Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
5 This file is part of GNU CC.
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)
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.
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. */
25 #include "insn-config.h"
28 #include "hard-reg-set.h"
30 #include "basic-block.h"
38 #define MAX_MOVE_MAX MOVE_MAX
41 #ifndef MIN_UNITS_PER_WORD
42 #define MIN_UNITS_PER_WORD UNITS_PER_WORD
45 #define MOVE_MAX_WORDS (MOVE_MAX / UNITS_PER_WORD)
47 /* Modes for each hard register that we can save. The smallest mode is wide
48 enough to save the entire contents of the register. When saving the
49 register because it is live we first try to save in multi-register modes.
50 If that is not possible the save is done one register at a time. */
52 static enum machine_mode
53 regno_save_mode
[FIRST_PSEUDO_REGISTER
][MAX_MOVE_MAX
/ MIN_UNITS_PER_WORD
+ 1];
55 /* For each hard register, a place on the stack where it can be saved,
59 regno_save_mem
[FIRST_PSEUDO_REGISTER
][MAX_MOVE_MAX
/ MIN_UNITS_PER_WORD
+ 1];
61 /* We will only make a register eligible for caller-save if it can be
62 saved in its widest mode with a simple SET insn as long as the memory
63 address is valid. We record the INSN_CODE is those insns here since
64 when we emit them, the addresses might not be valid, so they might not
68 reg_save_code
[FIRST_PSEUDO_REGISTER
][MAX_MOVE_MAX
/ MIN_UNITS_PER_WORD
+ 1];
70 reg_restore_code
[FIRST_PSEUDO_REGISTER
][MAX_MOVE_MAX
/ MIN_UNITS_PER_WORD
+ 1];
72 /* Set of hard regs currently residing in save area (during insn scan). */
74 static HARD_REG_SET hard_regs_saved
;
76 /* Number of registers currently in hard_regs_saved. */
78 static int n_regs_saved
;
80 /* Computed by mark_referenced_regs, all regs referenced in a given
82 static HARD_REG_SET referenced_regs
;
84 /* Computed in mark_set_regs, holds all registers set by the current
86 static HARD_REG_SET this_insn_sets
;
89 static void mark_set_regs
PARAMS ((rtx
, rtx
, void *));
90 static void mark_referenced_regs
PARAMS ((rtx
));
91 static int insert_save
PARAMS ((struct insn_chain
*, int, int,
93 static int insert_restore
PARAMS ((struct insn_chain
*, int, int,
95 static struct insn_chain
*insert_one_insn
PARAMS ((struct insn_chain
*, int,
96 enum insn_code
, rtx
));
97 static void add_stored_regs
PARAMS ((rtx
, rtx
, void *));
99 /* Initialize for caller-save.
101 Look at all the hard registers that are used by a call and for which
102 regclass.c has not already excluded from being used across a call.
104 Ensure that we can find a mode to save the register and that there is a
105 simple insn to save and restore the register. This latter check avoids
106 problems that would occur if we tried to save the MQ register of some
107 machines directly into memory. */
117 /* First find all the registers that we need to deal with and all
118 the modes that they can have. If we can't find a mode to use,
119 we can't have the register live over calls. */
121 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
123 if (call_used_regs
[i
] && ! call_fixed_regs
[i
])
125 for (j
= 1; j
<= MOVE_MAX_WORDS
; j
++)
127 regno_save_mode
[i
][j
] = HARD_REGNO_CALLER_SAVE_MODE (i
, j
);
128 if (regno_save_mode
[i
][j
] == VOIDmode
&& j
== 1)
130 call_fixed_regs
[i
] = 1;
131 SET_HARD_REG_BIT (call_fixed_reg_set
, i
);
136 regno_save_mode
[i
][1] = VOIDmode
;
139 /* The following code tries to approximate the conditions under which
140 we can easily save and restore a register without scratch registers or
141 other complexities. It will usually work, except under conditions where
142 the validity of an insn operand is dependent on the address offset.
143 No such cases are currently known.
145 We first find a typical offset from some BASE_REG_CLASS register.
146 This address is chosen by finding the first register in the class
147 and by finding the smallest power of two that is a valid offset from
148 that register in every mode we will use to save registers. */
150 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
151 if (TEST_HARD_REG_BIT (reg_class_contents
[(int) BASE_REG_CLASS
], i
))
154 if (i
== FIRST_PSEUDO_REGISTER
)
157 addr_reg
= gen_rtx_REG (Pmode
, i
);
159 for (offset
= 1 << (HOST_BITS_PER_INT
/ 2); offset
; offset
>>= 1)
161 address
= gen_rtx_PLUS (Pmode
, addr_reg
, GEN_INT (offset
));
163 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
164 if (regno_save_mode
[i
][1] != VOIDmode
165 && ! strict_memory_address_p (regno_save_mode
[i
][1], address
))
168 if (i
== FIRST_PSEUDO_REGISTER
)
172 /* If we didn't find a valid address, we must use register indirect. */
176 /* Next we try to form an insn to save and restore the register. We
177 see if such an insn is recognized and meets its constraints. */
181 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
182 for (j
= 1; j
<= MOVE_MAX_WORDS
; j
++)
183 if (regno_save_mode
[i
][j
] != VOIDmode
)
185 rtx mem
= gen_rtx_MEM (regno_save_mode
[i
][j
], address
);
186 rtx reg
= gen_rtx_REG (regno_save_mode
[i
][j
], i
);
187 rtx savepat
= gen_rtx_SET (VOIDmode
, mem
, reg
);
188 rtx restpat
= gen_rtx_SET (VOIDmode
, reg
, mem
);
189 rtx saveinsn
= emit_insn (savepat
);
190 rtx restinsn
= emit_insn (restpat
);
193 reg_save_code
[i
][j
] = recog_memoized (saveinsn
);
194 reg_restore_code
[i
][j
] = recog_memoized (restinsn
);
196 /* Now extract both insns and see if we can meet their
198 ok
= (reg_save_code
[i
][j
] != (enum insn_code
)-1
199 && reg_restore_code
[i
][j
] != (enum insn_code
)-1);
202 extract_insn (saveinsn
);
203 ok
= constrain_operands (1);
204 extract_insn (restinsn
);
205 ok
&= constrain_operands (1);
210 regno_save_mode
[i
][j
] = VOIDmode
;
213 call_fixed_regs
[i
] = 1;
214 SET_HARD_REG_BIT (call_fixed_reg_set
, i
);
222 /* Initialize save areas by showing that we haven't allocated any yet. */
229 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
230 for (j
= 1; j
<= MOVE_MAX_WORDS
; j
++)
231 regno_save_mem
[i
][j
] = 0;
234 /* Allocate save areas for any hard registers that might need saving.
235 We take a conservative approach here and look for call-clobbered hard
236 registers that are assigned to pseudos that cross calls. This may
237 overestimate slightly (especially if some of these registers are later
238 used as spill registers), but it should not be significant.
242 In the fallback case we should iterate backwards across all possible
243 modes for the save, choosing the largest available one instead of
244 falling back to the smallest mode immediately. (eg TF -> DF -> SF).
246 We do not try to use "move multiple" instructions that exist
247 on some machines (such as the 68k moveml). It could be a win to try
248 and use them when possible. The hard part is doing it in a way that is
249 machine independent since they might be saving non-consecutive
250 registers. (imagine caller-saving d0,d1,a0,a1 on the 68k) */
257 HARD_REG_SET hard_regs_used
;
259 /* Allocate space in the save area for the largest multi-register
260 pseudos first, then work backwards to single register
263 /* Find and record all call-used hard-registers in this function. */
264 CLEAR_HARD_REG_SET (hard_regs_used
);
265 for (i
= FIRST_PSEUDO_REGISTER
; i
< max_regno
; i
++)
266 if (reg_renumber
[i
] >= 0 && REG_N_CALLS_CROSSED (i
) > 0)
268 unsigned int regno
= reg_renumber
[i
];
269 unsigned int endregno
270 = regno
+ HARD_REGNO_NREGS (regno
, GET_MODE (regno_reg_rtx
[i
]));
272 for (r
= regno
; r
< endregno
; r
++)
273 if (call_used_regs
[r
])
274 SET_HARD_REG_BIT (hard_regs_used
, r
);
277 /* Now run through all the call-used hard-registers and allocate
278 space for them in the caller-save area. Try to allocate space
279 in a manner which allows multi-register saves/restores to be done. */
281 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
282 for (j
= MOVE_MAX_WORDS
; j
> 0; j
--)
286 /* If no mode exists for this size, try another. Also break out
287 if we have already saved this hard register. */
288 if (regno_save_mode
[i
][j
] == VOIDmode
|| regno_save_mem
[i
][1] != 0)
291 /* See if any register in this group has been saved. */
292 for (k
= 0; k
< j
; k
++)
293 if (regno_save_mem
[i
+ k
][1])
301 for (k
= 0; k
< j
; k
++)
302 if (! TEST_HARD_REG_BIT (hard_regs_used
, i
+ k
))
310 /* We have found an acceptable mode to store in. */
312 = assign_stack_local (regno_save_mode
[i
][j
],
313 GET_MODE_SIZE (regno_save_mode
[i
][j
]), 0);
315 /* Setup single word save area just in case... */
316 for (k
= 0; k
< j
; k
++)
318 /* This should not depend on WORDS_BIG_ENDIAN.
319 The order of words in regs is the same as in memory. */
320 rtx temp
= gen_rtx_MEM (regno_save_mode
[i
+ k
][1],
321 XEXP (regno_save_mem
[i
][j
], 0));
323 regno_save_mem
[i
+ k
][1]
324 = adj_offsettable_operand (temp
, k
* UNITS_PER_WORD
);
328 /* Now loop again and set the alias set of any save areas we made to
329 the alias set used to represent frame objects. */
330 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
331 for (j
= MOVE_MAX_WORDS
; j
> 0; j
--)
332 if (regno_save_mem
[i
][j
] != 0)
333 MEM_ALIAS_SET (regno_save_mem
[i
][j
]) = get_frame_alias_set ();
336 /* Find the places where hard regs are live across calls and save them. */
339 save_call_clobbered_regs ()
341 struct insn_chain
*chain
, *next
;
343 CLEAR_HARD_REG_SET (hard_regs_saved
);
346 for (chain
= reload_insn_chain
; chain
!= 0; chain
= next
)
348 rtx insn
= chain
->insn
;
349 enum rtx_code code
= GET_CODE (insn
);
353 if (chain
->is_caller_save_insn
)
356 if (GET_RTX_CLASS (code
) == 'i')
358 /* If some registers have been saved, see if INSN references
359 any of them. We must restore them before the insn if so. */
365 if (code
== JUMP_INSN
)
366 /* Restore all registers if this is a JUMP_INSN. */
367 COPY_HARD_REG_SET (referenced_regs
, hard_regs_saved
);
370 CLEAR_HARD_REG_SET (referenced_regs
);
371 mark_referenced_regs (PATTERN (insn
));
372 AND_HARD_REG_SET (referenced_regs
, hard_regs_saved
);
375 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
376 if (TEST_HARD_REG_BIT (referenced_regs
, regno
))
377 regno
+= insert_restore (chain
, 1, regno
, MOVE_MAX_WORDS
);
380 if (code
== CALL_INSN
)
383 HARD_REG_SET hard_regs_to_save
;
385 /* Use the register life information in CHAIN to compute which
386 regs are live during the call. */
387 REG_SET_TO_HARD_REG_SET (hard_regs_to_save
,
388 &chain
->live_throughout
);
389 compute_use_by_pseudos (&hard_regs_to_save
,
390 &chain
->live_throughout
);
392 /* Record all registers set in this call insn. These don't need
393 to be saved. N.B. the call insn might set a subreg of a
394 multi-hard-reg pseudo; then the pseudo is considered live
395 during the call, but the subreg that is set isn't. */
396 CLEAR_HARD_REG_SET (this_insn_sets
);
397 note_stores (PATTERN (insn
), mark_set_regs
, NULL
);
399 /* Compute which hard regs must be saved before this call. */
400 AND_COMPL_HARD_REG_SET (hard_regs_to_save
, call_fixed_reg_set
);
401 AND_COMPL_HARD_REG_SET (hard_regs_to_save
, this_insn_sets
);
402 AND_COMPL_HARD_REG_SET (hard_regs_to_save
, hard_regs_saved
);
403 AND_HARD_REG_SET (hard_regs_to_save
, call_used_reg_set
);
405 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
406 if (TEST_HARD_REG_BIT (hard_regs_to_save
, regno
))
407 regno
+= insert_save (chain
, 1, regno
, &hard_regs_to_save
);
409 /* Must recompute n_regs_saved. */
411 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
412 if (TEST_HARD_REG_BIT (hard_regs_saved
, regno
))
417 if (chain
->next
== 0 || chain
->next
->block
> chain
->block
)
420 /* At the end of the basic block, we must restore any registers that
421 remain saved. If the last insn in the block is a JUMP_INSN, put
422 the restore before the insn, otherwise, put it after the insn. */
425 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
426 if (TEST_HARD_REG_BIT (hard_regs_saved
, regno
))
427 regno
+= insert_restore (chain
, GET_CODE (insn
) == JUMP_INSN
,
428 regno
, MOVE_MAX_WORDS
);
433 /* Here from note_stores when an insn stores a value in a register.
434 Set the proper bit or bits in this_insn_sets. All pseudos that have
435 been assigned hard regs have had their register number changed already,
436 so we can ignore pseudos. */
438 mark_set_regs (reg
, setter
, data
)
440 rtx setter ATTRIBUTE_UNUSED
;
441 void *data ATTRIBUTE_UNUSED
;
443 register int regno
, endregno
, i
;
444 enum machine_mode mode
= GET_MODE (reg
);
447 if (GET_CODE (reg
) == SUBREG
)
449 word
= SUBREG_WORD (reg
);
450 reg
= SUBREG_REG (reg
);
453 if (GET_CODE (reg
) != REG
|| REGNO (reg
) >= FIRST_PSEUDO_REGISTER
)
456 regno
= REGNO (reg
) + word
;
457 endregno
= regno
+ HARD_REGNO_NREGS (regno
, mode
);
459 for (i
= regno
; i
< endregno
; i
++)
460 SET_HARD_REG_BIT (this_insn_sets
, i
);
463 /* Here from note_stores when an insn stores a value in a register.
464 Set the proper bit or bits in the passed regset. All pseudos that have
465 been assigned hard regs have had their register number changed already,
466 so we can ignore pseudos. */
468 add_stored_regs (reg
, setter
, data
)
473 register int regno
, endregno
, i
;
474 enum machine_mode mode
= GET_MODE (reg
);
477 if (GET_CODE (setter
) == CLOBBER
)
480 while (GET_CODE (reg
) == SUBREG
)
482 word
+= SUBREG_WORD (reg
);
483 reg
= SUBREG_REG (reg
);
486 if (GET_CODE (reg
) != REG
|| REGNO (reg
) >= FIRST_PSEUDO_REGISTER
)
489 regno
= REGNO (reg
) + word
;
490 endregno
= regno
+ HARD_REGNO_NREGS (regno
, mode
);
492 for (i
= regno
; i
< endregno
; i
++)
493 SET_REGNO_REG_SET ((regset
) data
, i
);
496 /* Walk X and record all referenced registers in REFERENCED_REGS. */
498 mark_referenced_regs (x
)
501 enum rtx_code code
= GET_CODE (x
);
506 mark_referenced_regs (SET_SRC (x
));
507 if (code
== SET
|| code
== CLOBBER
)
511 if (code
== REG
|| code
== PC
|| code
== CC0
512 || (code
== SUBREG
&& GET_CODE (SUBREG_REG (x
)) == REG
513 /* If we're setting only part of a multi-word register,
514 we shall mark it as referenced, because the words
515 that are not being set should be restored. */
516 && ((GET_MODE_SIZE (GET_MODE (x
))
517 >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x
))))
518 || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x
)))
519 <= UNITS_PER_WORD
))))
522 if (code
== MEM
|| code
== SUBREG
)
530 int regno
= REGNO (x
);
531 int hardregno
= (regno
< FIRST_PSEUDO_REGISTER
? regno
532 : reg_renumber
[regno
]);
536 int nregs
= HARD_REGNO_NREGS (hardregno
, GET_MODE (x
));
538 SET_HARD_REG_BIT (referenced_regs
, hardregno
+ nregs
);
540 /* If this is a pseudo that did not get a hard register, scan its
541 memory location, since it might involve the use of another
542 register, which might be saved. */
543 else if (reg_equiv_mem
[regno
] != 0)
544 mark_referenced_regs (XEXP (reg_equiv_mem
[regno
], 0));
545 else if (reg_equiv_address
[regno
] != 0)
546 mark_referenced_regs (reg_equiv_address
[regno
]);
550 fmt
= GET_RTX_FORMAT (code
);
551 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
554 mark_referenced_regs (XEXP (x
, i
));
555 else if (fmt
[i
] == 'E')
556 for (j
= XVECLEN (x
, i
) - 1; j
>= 0; j
--)
557 mark_referenced_regs (XVECEXP (x
, i
, j
));
561 /* Insert a sequence of insns to restore. Place these insns in front of
562 CHAIN if BEFORE_P is nonzero, behind the insn otherwise. MAXRESTORE is
563 the maximum number of registers which should be restored during this call.
564 It should never be less than 1 since we only work with entire registers.
566 Note that we have verified in init_caller_save that we can do this
567 with a simple SET, so use it. Set INSN_CODE to what we save there
568 since the address might not be valid so the insn might not be recognized.
569 These insns will be reloaded and have register elimination done by
570 find_reload, so we need not worry about that here.
572 Return the extra number of registers saved. */
575 insert_restore (chain
, before_p
, regno
, maxrestore
)
576 struct insn_chain
*chain
;
583 enum insn_code code
= CODE_FOR_nothing
;
585 struct insn_chain
*new;
587 /* A common failure mode if register status is not correct in the RTL
588 is for this routine to be called with a REGNO we didn't expect to
589 save. That will cause us to write an insn with a (nil) SET_DEST
590 or SET_SRC. Instead of doing so and causing a crash later, check
591 for this common case and abort here instead. This will remove one
592 step in debugging such problems. */
594 if (regno_save_mem
[regno
][1] == 0)
597 /* Get the pattern to emit and update our status.
599 See if we can restore `maxrestore' registers at once. Work
600 backwards to the single register case. */
601 for (i
= maxrestore
; i
> 0; i
--)
606 if (regno_save_mem
[regno
][i
] == 0)
609 for (j
= 0; j
< i
; j
++)
610 if (! TEST_HARD_REG_BIT (hard_regs_saved
, regno
+ j
))
615 /* Must do this one restore at a time */
623 pat
= gen_rtx_SET (VOIDmode
,
624 gen_rtx_REG (GET_MODE (regno_save_mem
[regno
][numregs
]),
626 regno_save_mem
[regno
][numregs
]);
627 code
= reg_restore_code
[regno
][numregs
];
628 new = insert_one_insn (chain
, before_p
, code
, pat
);
630 /* Clear status for all registers we restored. */
631 for (k
= 0; k
< i
; k
++)
633 CLEAR_HARD_REG_BIT (hard_regs_saved
, regno
+ k
);
634 SET_REGNO_REG_SET (&new->dead_or_set
, regno
+ k
);
640 /* Tell our callers how many extra registers we saved/restored */
644 /* Like insert_restore above, but save registers instead. */
646 insert_save (chain
, before_p
, regno
, to_save
)
647 struct insn_chain
*chain
;
650 HARD_REG_SET
*to_save
;
654 enum insn_code code
= CODE_FOR_nothing
;
656 struct insn_chain
*new;
658 /* A common failure mode if register status is not correct in the RTL
659 is for this routine to be called with a REGNO we didn't expect to
660 save. That will cause us to write an insn with a (nil) SET_DEST
661 or SET_SRC. Instead of doing so and causing a crash later, check
662 for this common case and abort here instead. This will remove one
663 step in debugging such problems. */
665 if (regno_save_mem
[regno
][1] == 0)
668 /* Get the pattern to emit and update our status.
670 See if we can save several registers with a single instruction.
671 Work backwards to the single register case. */
672 for (i
= MOVE_MAX_WORDS
; i
> 0; i
--)
676 if (regno_save_mem
[regno
][i
] == 0)
679 for (j
= 0; j
< i
; j
++)
680 if (! TEST_HARD_REG_BIT (*to_save
, regno
+ j
))
685 /* Must do this one save at a time */
693 pat
= gen_rtx_SET (VOIDmode
, regno_save_mem
[regno
][numregs
],
694 gen_rtx_REG (GET_MODE (regno_save_mem
[regno
][numregs
]),
696 code
= reg_save_code
[regno
][numregs
];
697 new = insert_one_insn (chain
, before_p
, code
, pat
);
699 /* Set hard_regs_saved and dead_or_set for all the registers we saved. */
700 for (k
= 0; k
< numregs
; k
++)
702 SET_HARD_REG_BIT (hard_regs_saved
, regno
+ k
);
703 SET_REGNO_REG_SET (&new->dead_or_set
, regno
+ k
);
707 /* Tell our callers how many extra registers we saved/restored */
711 /* Emit a new caller-save insn and set the code. */
712 static struct insn_chain
*
713 insert_one_insn (chain
, before_p
, code
, pat
)
714 struct insn_chain
*chain
;
719 rtx insn
= chain
->insn
;
720 struct insn_chain
*new;
723 /* If INSN references CC0, put our insns in front of the insn that sets
724 CC0. This is always safe, since the only way we could be passed an
725 insn that references CC0 is for a restore, and doing a restore earlier
726 isn't a problem. We do, however, assume here that CALL_INSNs don't
727 reference CC0. Guard against non-INSN's like CODE_LABEL. */
729 if ((GET_CODE (insn
) == INSN
|| GET_CODE (insn
) == JUMP_INSN
)
731 && reg_referenced_p (cc0_rtx
, PATTERN (insn
)))
732 chain
= chain
->prev
, insn
= chain
->insn
;
735 new = new_insn_chain ();
740 new->prev
= chain
->prev
;
742 new->prev
->next
= new;
744 reload_insn_chain
= new;
748 new->insn
= emit_insn_before (pat
, insn
);
749 /* ??? It would be nice if we could exclude the already / still saved
750 registers from the live sets. */
751 COPY_REG_SET (&new->live_throughout
, &chain
->live_throughout
);
752 /* Registers that die in CHAIN->INSN still live in the new insn. */
753 for (link
= REG_NOTES (chain
->insn
); link
; link
= XEXP (link
, 1))
755 if (REG_NOTE_KIND (link
) == REG_DEAD
)
757 rtx reg
= XEXP (link
, 0);
760 if (GET_CODE (reg
) != REG
)
764 if (regno
>= FIRST_PSEUDO_REGISTER
)
765 regno
= reg_renumber
[regno
];
768 for (i
= HARD_REGNO_NREGS (regno
, GET_MODE (reg
)) - 1;
770 SET_REGNO_REG_SET (&new->live_throughout
, regno
+ i
);
773 CLEAR_REG_SET (&new->dead_or_set
);
774 if (chain
->insn
== BLOCK_HEAD (chain
->block
))
775 BLOCK_HEAD (chain
->block
) = new->insn
;
779 new->next
= chain
->next
;
781 new->next
->prev
= new;
784 new->insn
= emit_insn_after (pat
, insn
);
785 /* ??? It would be nice if we could exclude the already / still saved
786 registers from the live sets, and observe REG_UNUSED notes. */
787 COPY_REG_SET (&new->live_throughout
, &chain
->live_throughout
);
788 /* Registers that are set in CHAIN->INSN live in the new insn.
789 (Unless there is a REG_UNUSED note for them, but we don't
790 look for them here.) */
791 note_stores (PATTERN (chain
->insn
), add_stored_regs
,
792 &new->live_throughout
);
793 CLEAR_REG_SET (&new->dead_or_set
);
794 if (chain
->insn
== BLOCK_END (chain
->block
))
795 BLOCK_END (chain
->block
) = new->insn
;
797 new->block
= chain
->block
;
798 new->is_caller_save_insn
= 1;
800 INSN_CODE (new->insn
) = code
;