1 /* Save and restore call-clobbered registers which are live across a call.
2 Copyright (C) 1989-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
22 #include "coretypes.h"
26 #include "insn-config.h"
28 #include "hard-reg-set.h"
37 #include "dominance.h"
39 #include "basic-block.h"
43 #include "statistics.h"
44 #include "double-int.h"
46 #include "fixed-value.h"
59 #include "diagnostic-core.h"
61 #include "addresses.h"
66 #define MOVE_MAX_WORDS (MOVE_MAX / UNITS_PER_WORD)
68 #define regno_save_mode \
69 (this_target_reload->x_regno_save_mode)
70 #define cached_reg_save_code \
71 (this_target_reload->x_cached_reg_save_code)
72 #define cached_reg_restore_code \
73 (this_target_reload->x_cached_reg_restore_code)
75 /* For each hard register, a place on the stack where it can be saved,
79 regno_save_mem
[FIRST_PSEUDO_REGISTER
][MAX_MOVE_MAX
/ MIN_UNITS_PER_WORD
+ 1];
81 /* The number of elements in the subsequent array. */
82 static int save_slots_num
;
84 /* Allocated slots so far. */
85 static rtx save_slots
[FIRST_PSEUDO_REGISTER
];
87 /* Set of hard regs currently residing in save area (during insn scan). */
89 static HARD_REG_SET hard_regs_saved
;
91 /* Number of registers currently in hard_regs_saved. */
93 static int n_regs_saved
;
95 /* Computed by mark_referenced_regs, all regs referenced in a given
97 static HARD_REG_SET referenced_regs
;
100 typedef void refmarker_fn (rtx
*loc
, machine_mode mode
, int hardregno
,
103 static int reg_save_code (int, machine_mode
);
104 static int reg_restore_code (int, machine_mode
);
106 struct saved_hard_reg
;
107 static void initiate_saved_hard_regs (void);
108 static void new_saved_hard_reg (int, int);
109 static void finish_saved_hard_regs (void);
110 static int saved_hard_reg_compare_func (const void *, const void *);
112 static void mark_set_regs (rtx
, const_rtx
, void *);
113 static void mark_referenced_regs (rtx
*, refmarker_fn
*mark
, void *mark_arg
);
114 static refmarker_fn mark_reg_as_referenced
;
115 static refmarker_fn replace_reg_with_saved_mem
;
116 static int insert_save (struct insn_chain
*, int, int, HARD_REG_SET
*,
118 static int insert_restore (struct insn_chain
*, int, int, int,
120 static struct insn_chain
*insert_one_insn (struct insn_chain
*, int, int,
122 static void add_stored_regs (rtx
, const_rtx
, void *);
126 static GTY(()) rtx savepat
;
127 static GTY(()) rtx restpat
;
128 static GTY(()) rtx test_reg
;
129 static GTY(()) rtx test_mem
;
130 static GTY(()) rtx_insn
*saveinsn
;
131 static GTY(()) rtx_insn
*restinsn
;
133 /* Return the INSN_CODE used to save register REG in mode MODE. */
135 reg_save_code (int reg
, machine_mode mode
)
138 if (cached_reg_save_code
[reg
][mode
])
139 return cached_reg_save_code
[reg
][mode
];
140 if (!HARD_REGNO_MODE_OK (reg
, mode
))
142 /* Depending on how HARD_REGNO_MODE_OK is defined, range propagation
143 might deduce here that reg >= FIRST_PSEUDO_REGISTER. So the assert
144 below silences a warning. */
145 gcc_assert (reg
< FIRST_PSEUDO_REGISTER
);
146 cached_reg_save_code
[reg
][mode
] = -1;
147 cached_reg_restore_code
[reg
][mode
] = -1;
151 /* Update the register number and modes of the register
152 and memory operand. */
153 set_mode_and_regno (test_reg
, mode
, reg
);
154 PUT_MODE (test_mem
, mode
);
156 /* Force re-recognition of the modified insns. */
157 INSN_CODE (saveinsn
) = -1;
158 INSN_CODE (restinsn
) = -1;
160 cached_reg_save_code
[reg
][mode
] = recog_memoized (saveinsn
);
161 cached_reg_restore_code
[reg
][mode
] = recog_memoized (restinsn
);
163 /* Now extract both insns and see if we can meet their
164 constraints. We don't know here whether the save and restore will
165 be in size- or speed-tuned code, so just use the set of enabled
167 ok
= (cached_reg_save_code
[reg
][mode
] != -1
168 && cached_reg_restore_code
[reg
][mode
] != -1);
171 extract_insn (saveinsn
);
172 ok
= constrain_operands (1, get_enabled_alternatives (saveinsn
));
173 extract_insn (restinsn
);
174 ok
&= constrain_operands (1, get_enabled_alternatives (restinsn
));
179 cached_reg_save_code
[reg
][mode
] = -1;
180 cached_reg_restore_code
[reg
][mode
] = -1;
182 gcc_assert (cached_reg_save_code
[reg
][mode
]);
183 return cached_reg_save_code
[reg
][mode
];
186 /* Return the INSN_CODE used to restore register REG in mode MODE. */
188 reg_restore_code (int reg
, machine_mode mode
)
190 if (cached_reg_restore_code
[reg
][mode
])
191 return cached_reg_restore_code
[reg
][mode
];
192 /* Populate our cache. */
193 reg_save_code (reg
, mode
);
194 return cached_reg_restore_code
[reg
][mode
];
197 /* Initialize for caller-save.
199 Look at all the hard registers that are used by a call and for which
200 reginfo.c has not already excluded from being used across a call.
202 Ensure that we can find a mode to save the register and that there is a
203 simple insn to save and restore the register. This latter check avoids
204 problems that would occur if we tried to save the MQ register of some
205 machines directly into memory. */
208 init_caller_save (void)
215 if (caller_save_initialized_p
)
218 caller_save_initialized_p
= true;
220 CLEAR_HARD_REG_SET (no_caller_save_reg_set
);
221 /* First find all the registers that we need to deal with and all
222 the modes that they can have. If we can't find a mode to use,
223 we can't have the register live over calls. */
225 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
227 if (call_used_regs
[i
]
228 && !TEST_HARD_REG_BIT (call_fixed_reg_set
, i
))
230 for (j
= 1; j
<= MOVE_MAX_WORDS
; j
++)
232 regno_save_mode
[i
][j
] = HARD_REGNO_CALLER_SAVE_MODE (i
, j
,
234 if (regno_save_mode
[i
][j
] == VOIDmode
&& j
== 1)
236 SET_HARD_REG_BIT (call_fixed_reg_set
, i
);
241 regno_save_mode
[i
][1] = VOIDmode
;
244 /* The following code tries to approximate the conditions under which
245 we can easily save and restore a register without scratch registers or
246 other complexities. It will usually work, except under conditions where
247 the validity of an insn operand is dependent on the address offset.
248 No such cases are currently known.
250 We first find a typical offset from some BASE_REG_CLASS register.
251 This address is chosen by finding the first register in the class
252 and by finding the smallest power of two that is a valid offset from
253 that register in every mode we will use to save registers. */
255 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
256 if (TEST_HARD_REG_BIT
258 [(int) base_reg_class (regno_save_mode
[i
][1], ADDR_SPACE_GENERIC
,
259 PLUS
, CONST_INT
)], i
))
262 gcc_assert (i
< FIRST_PSEUDO_REGISTER
);
264 addr_reg
= gen_rtx_REG (Pmode
, i
);
266 for (offset
= 1 << (HOST_BITS_PER_INT
/ 2); offset
; offset
>>= 1)
268 address
= gen_rtx_PLUS (Pmode
, addr_reg
, gen_int_mode (offset
, Pmode
));
270 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
271 if (regno_save_mode
[i
][1] != VOIDmode
272 && ! strict_memory_address_p (regno_save_mode
[i
][1], address
))
275 if (i
== FIRST_PSEUDO_REGISTER
)
279 /* If we didn't find a valid address, we must use register indirect. */
283 /* Next we try to form an insn to save and restore the register. We
284 see if such an insn is recognized and meets its constraints.
286 To avoid lots of unnecessary RTL allocation, we construct all the RTL
287 once, then modify the memory and register operands in-place. */
289 test_reg
= gen_rtx_REG (word_mode
, FIRST_PSEUDO_REGISTER
);
290 test_mem
= gen_rtx_MEM (word_mode
, address
);
291 savepat
= gen_rtx_SET (test_mem
, test_reg
);
292 restpat
= gen_rtx_SET (test_reg
, test_mem
);
294 saveinsn
= gen_rtx_INSN (VOIDmode
, 0, 0, 0, savepat
, 0, -1, 0);
295 restinsn
= gen_rtx_INSN (VOIDmode
, 0, 0, 0, restpat
, 0, -1, 0);
297 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
298 for (j
= 1; j
<= MOVE_MAX_WORDS
; j
++)
299 if (reg_save_code (i
,regno_save_mode
[i
][j
]) == -1)
301 regno_save_mode
[i
][j
] = VOIDmode
;
304 SET_HARD_REG_BIT (call_fixed_reg_set
, i
);
305 if (call_used_regs
[i
])
306 SET_HARD_REG_BIT (no_caller_save_reg_set
, i
);
313 /* Initialize save areas by showing that we haven't allocated any yet. */
316 init_save_areas (void)
320 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
321 for (j
= 1; j
<= MOVE_MAX_WORDS
; j
++)
322 regno_save_mem
[i
][j
] = 0;
327 /* The structure represents a hard register which should be saved
328 through the call. It is used when the integrated register
329 allocator (IRA) is used and sharing save slots is on. */
330 struct saved_hard_reg
332 /* Order number starting with 0. */
334 /* The hard regno. */
336 /* Execution frequency of all calls through which given hard
337 register should be saved. */
339 /* Stack slot reserved to save the hard register through calls. */
341 /* True if it is first hard register in the chain of hard registers
342 sharing the same stack slot. */
344 /* Order number of the next hard register structure with the same
345 slot in the chain. -1 represents end of the chain. */
349 /* Map: hard register number to the corresponding structure. */
350 static struct saved_hard_reg
*hard_reg_map
[FIRST_PSEUDO_REGISTER
];
352 /* The number of all structures representing hard registers should be
353 saved, in order words, the number of used elements in the following
355 static int saved_regs_num
;
357 /* Pointers to all the structures. Index is the order number of the
358 corresponding structure. */
359 static struct saved_hard_reg
*all_saved_regs
[FIRST_PSEUDO_REGISTER
];
361 /* First called function for work with saved hard registers. */
363 initiate_saved_hard_regs (void)
368 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
369 hard_reg_map
[i
] = NULL
;
372 /* Allocate and return new saved hard register with given REGNO and
375 new_saved_hard_reg (int regno
, int call_freq
)
377 struct saved_hard_reg
*saved_reg
;
380 = (struct saved_hard_reg
*) xmalloc (sizeof (struct saved_hard_reg
));
381 hard_reg_map
[regno
] = all_saved_regs
[saved_regs_num
] = saved_reg
;
382 saved_reg
->num
= saved_regs_num
++;
383 saved_reg
->hard_regno
= regno
;
384 saved_reg
->call_freq
= call_freq
;
385 saved_reg
->first_p
= FALSE
;
386 saved_reg
->next
= -1;
389 /* Free memory allocated for the saved hard registers. */
391 finish_saved_hard_regs (void)
395 for (i
= 0; i
< saved_regs_num
; i
++)
396 free (all_saved_regs
[i
]);
399 /* The function is used to sort the saved hard register structures
400 according their frequency. */
402 saved_hard_reg_compare_func (const void *v1p
, const void *v2p
)
404 const struct saved_hard_reg
*p1
= *(struct saved_hard_reg
* const *) v1p
;
405 const struct saved_hard_reg
*p2
= *(struct saved_hard_reg
* const *) v2p
;
407 if (flag_omit_frame_pointer
)
409 if (p1
->call_freq
- p2
->call_freq
!= 0)
410 return p1
->call_freq
- p2
->call_freq
;
412 else if (p2
->call_freq
- p1
->call_freq
!= 0)
413 return p2
->call_freq
- p1
->call_freq
;
415 return p1
->num
- p2
->num
;
418 /* Allocate save areas for any hard registers that might need saving.
419 We take a conservative approach here and look for call-clobbered hard
420 registers that are assigned to pseudos that cross calls. This may
421 overestimate slightly (especially if some of these registers are later
422 used as spill registers), but it should not be significant.
424 For IRA we use priority coloring to decrease stack slots needed for
425 saving hard registers through calls. We build conflicts for them
430 In the fallback case we should iterate backwards across all possible
431 modes for the save, choosing the largest available one instead of
432 falling back to the smallest mode immediately. (eg TF -> DF -> SF).
434 We do not try to use "move multiple" instructions that exist
435 on some machines (such as the 68k moveml). It could be a win to try
436 and use them when possible. The hard part is doing it in a way that is
437 machine independent since they might be saving non-consecutive
438 registers. (imagine caller-saving d0,d1,a0,a1 on the 68k) */
441 setup_save_areas (void)
444 HARD_REG_SET hard_regs_used
;
445 struct saved_hard_reg
*saved_reg
;
447 struct insn_chain
*chain
, *next
;
449 HARD_REG_SET hard_regs_to_save
, used_regs
, this_insn_sets
;
450 reg_set_iterator rsi
;
452 CLEAR_HARD_REG_SET (hard_regs_used
);
454 /* Find every CALL_INSN and record which hard regs are live across the
455 call into HARD_REG_MAP and HARD_REGS_USED. */
456 initiate_saved_hard_regs ();
457 /* Create hard reg saved regs. */
458 for (chain
= reload_insn_chain
; chain
!= 0; chain
= next
)
465 || find_reg_note (insn
, REG_NORETURN
, NULL
))
467 freq
= REG_FREQ_FROM_BB (BLOCK_FOR_INSN (insn
));
468 REG_SET_TO_HARD_REG_SET (hard_regs_to_save
,
469 &chain
->live_throughout
);
470 get_call_reg_set_usage (insn
, &used_regs
, call_used_reg_set
);
472 /* Record all registers set in this call insn. These don't
473 need to be saved. N.B. the call insn might set a subreg
474 of a multi-hard-reg pseudo; then the pseudo is considered
475 live during the call, but the subreg that is set
477 CLEAR_HARD_REG_SET (this_insn_sets
);
478 note_stores (PATTERN (insn
), mark_set_regs
, &this_insn_sets
);
479 /* Sibcalls are considered to set the return value. */
480 if (SIBLING_CALL_P (insn
) && crtl
->return_rtx
)
481 mark_set_regs (crtl
->return_rtx
, NULL_RTX
, &this_insn_sets
);
483 AND_COMPL_HARD_REG_SET (used_regs
, call_fixed_reg_set
);
484 AND_COMPL_HARD_REG_SET (used_regs
, this_insn_sets
);
485 AND_HARD_REG_SET (hard_regs_to_save
, used_regs
);
486 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
487 if (TEST_HARD_REG_BIT (hard_regs_to_save
, regno
))
489 if (hard_reg_map
[regno
] != NULL
)
490 hard_reg_map
[regno
]->call_freq
+= freq
;
492 new_saved_hard_reg (regno
, freq
);
493 SET_HARD_REG_BIT (hard_regs_used
, regno
);
495 cheap
= find_reg_note (insn
, REG_RETURNED
, NULL
);
497 cheap
= XEXP (cheap
, 0);
498 /* Look through all live pseudos, mark their hard registers. */
499 EXECUTE_IF_SET_IN_REG_SET
500 (&chain
->live_throughout
, FIRST_PSEUDO_REGISTER
, regno
, rsi
)
502 int r
= reg_renumber
[regno
];
505 if (r
< 0 || regno_reg_rtx
[regno
] == cheap
)
508 bound
= r
+ hard_regno_nregs
[r
][PSEUDO_REGNO_MODE (regno
)];
509 for (; r
< bound
; r
++)
510 if (TEST_HARD_REG_BIT (used_regs
, r
))
512 if (hard_reg_map
[r
] != NULL
)
513 hard_reg_map
[r
]->call_freq
+= freq
;
515 new_saved_hard_reg (r
, freq
);
516 SET_HARD_REG_BIT (hard_regs_to_save
, r
);
517 SET_HARD_REG_BIT (hard_regs_used
, r
);
522 /* If requested, figure out which hard regs can share save slots. */
523 if (optimize
&& flag_ira_share_save_slots
)
526 char *saved_reg_conflicts
;
528 struct saved_hard_reg
*saved_reg2
, *saved_reg3
;
529 int call_saved_regs_num
;
530 struct saved_hard_reg
*call_saved_regs
[FIRST_PSEUDO_REGISTER
];
532 int prev_save_slots_num
;
533 rtx prev_save_slots
[FIRST_PSEUDO_REGISTER
];
535 /* Find saved hard register conflicts. */
536 saved_reg_conflicts
= (char *) xmalloc (saved_regs_num
* saved_regs_num
);
537 memset (saved_reg_conflicts
, 0, saved_regs_num
* saved_regs_num
);
538 for (chain
= reload_insn_chain
; chain
!= 0; chain
= next
)
541 call_saved_regs_num
= 0;
545 || find_reg_note (insn
, REG_NORETURN
, NULL
))
548 cheap
= find_reg_note (insn
, REG_RETURNED
, NULL
);
550 cheap
= XEXP (cheap
, 0);
552 REG_SET_TO_HARD_REG_SET (hard_regs_to_save
,
553 &chain
->live_throughout
);
554 get_call_reg_set_usage (insn
, &used_regs
, call_used_reg_set
);
556 /* Record all registers set in this call insn. These don't
557 need to be saved. N.B. the call insn might set a subreg
558 of a multi-hard-reg pseudo; then the pseudo is considered
559 live during the call, but the subreg that is set
561 CLEAR_HARD_REG_SET (this_insn_sets
);
562 note_stores (PATTERN (insn
), mark_set_regs
, &this_insn_sets
);
563 /* Sibcalls are considered to set the return value,
564 compare df-scan.c:df_get_call_refs. */
565 if (SIBLING_CALL_P (insn
) && crtl
->return_rtx
)
566 mark_set_regs (crtl
->return_rtx
, NULL_RTX
, &this_insn_sets
);
568 AND_COMPL_HARD_REG_SET (used_regs
, call_fixed_reg_set
);
569 AND_COMPL_HARD_REG_SET (used_regs
, this_insn_sets
);
570 AND_HARD_REG_SET (hard_regs_to_save
, used_regs
);
571 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
572 if (TEST_HARD_REG_BIT (hard_regs_to_save
, regno
))
574 gcc_assert (hard_reg_map
[regno
] != NULL
);
575 call_saved_regs
[call_saved_regs_num
++] = hard_reg_map
[regno
];
577 /* Look through all live pseudos, mark their hard registers. */
578 EXECUTE_IF_SET_IN_REG_SET
579 (&chain
->live_throughout
, FIRST_PSEUDO_REGISTER
, regno
, rsi
)
581 int r
= reg_renumber
[regno
];
584 if (r
< 0 || regno_reg_rtx
[regno
] == cheap
)
587 bound
= r
+ hard_regno_nregs
[r
][PSEUDO_REGNO_MODE (regno
)];
588 for (; r
< bound
; r
++)
589 if (TEST_HARD_REG_BIT (used_regs
, r
))
590 call_saved_regs
[call_saved_regs_num
++] = hard_reg_map
[r
];
592 for (i
= 0; i
< call_saved_regs_num
; i
++)
594 saved_reg
= call_saved_regs
[i
];
595 for (j
= 0; j
< call_saved_regs_num
; j
++)
598 saved_reg2
= call_saved_regs
[j
];
599 saved_reg_conflicts
[saved_reg
->num
* saved_regs_num
601 = saved_reg_conflicts
[saved_reg2
->num
* saved_regs_num
607 /* Sort saved hard regs. */
608 qsort (all_saved_regs
, saved_regs_num
, sizeof (struct saved_hard_reg
*),
609 saved_hard_reg_compare_func
);
610 /* Initiate slots available from the previous reload
612 prev_save_slots_num
= save_slots_num
;
613 memcpy (prev_save_slots
, save_slots
, save_slots_num
* sizeof (rtx
));
615 /* Allocate stack slots for the saved hard registers. */
616 for (i
= 0; i
< saved_regs_num
; i
++)
618 saved_reg
= all_saved_regs
[i
];
619 regno
= saved_reg
->hard_regno
;
620 for (j
= 0; j
< i
; j
++)
622 saved_reg2
= all_saved_regs
[j
];
623 if (! saved_reg2
->first_p
)
625 slot
= saved_reg2
->slot
;
626 for (k
= j
; k
>= 0; k
= next_k
)
628 saved_reg3
= all_saved_regs
[k
];
629 next_k
= saved_reg3
->next
;
630 if (saved_reg_conflicts
[saved_reg
->num
* saved_regs_num
635 && (GET_MODE_SIZE (regno_save_mode
[regno
][1])
636 <= GET_MODE_SIZE (regno_save_mode
637 [saved_reg2
->hard_regno
][1])))
641 (slot
, regno_save_mode
[saved_reg
->hard_regno
][1], 0);
642 regno_save_mem
[regno
][1] = saved_reg
->slot
;
643 saved_reg
->next
= saved_reg2
->next
;
644 saved_reg2
->next
= i
;
645 if (dump_file
!= NULL
)
646 fprintf (dump_file
, "%d uses slot of %d\n",
647 regno
, saved_reg2
->hard_regno
);
653 saved_reg
->first_p
= TRUE
;
654 for (best_slot_num
= -1, j
= 0; j
< prev_save_slots_num
; j
++)
656 slot
= prev_save_slots
[j
];
657 if (slot
== NULL_RTX
)
659 if (GET_MODE_SIZE (regno_save_mode
[regno
][1])
660 <= GET_MODE_SIZE (GET_MODE (slot
))
661 && best_slot_num
< 0)
663 if (GET_MODE (slot
) == regno_save_mode
[regno
][1])
666 if (best_slot_num
>= 0)
668 saved_reg
->slot
= prev_save_slots
[best_slot_num
];
672 regno_save_mode
[saved_reg
->hard_regno
][1], 0);
673 if (dump_file
!= NULL
)
675 "%d uses a slot from prev iteration\n", regno
);
676 prev_save_slots
[best_slot_num
] = NULL_RTX
;
677 if (best_slot_num
+ 1 == prev_save_slots_num
)
678 prev_save_slots_num
--;
683 = assign_stack_local_1
684 (regno_save_mode
[regno
][1],
685 GET_MODE_SIZE (regno_save_mode
[regno
][1]), 0,
687 if (dump_file
!= NULL
)
688 fprintf (dump_file
, "%d uses a new slot\n", regno
);
690 regno_save_mem
[regno
][1] = saved_reg
->slot
;
691 save_slots
[save_slots_num
++] = saved_reg
->slot
;
694 free (saved_reg_conflicts
);
695 finish_saved_hard_regs ();
699 /* We are not sharing slots.
701 Run through all the call-used hard-registers and allocate
702 space for each in the caller-save area. Try to allocate space
703 in a manner which allows multi-register saves/restores to be done. */
705 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
706 for (j
= MOVE_MAX_WORDS
; j
> 0; j
--)
710 /* If no mode exists for this size, try another. Also break out
711 if we have already saved this hard register. */
712 if (regno_save_mode
[i
][j
] == VOIDmode
|| regno_save_mem
[i
][1] != 0)
715 /* See if any register in this group has been saved. */
716 for (k
= 0; k
< j
; k
++)
717 if (regno_save_mem
[i
+ k
][1])
725 for (k
= 0; k
< j
; k
++)
726 if (! TEST_HARD_REG_BIT (hard_regs_used
, i
+ k
))
734 /* We have found an acceptable mode to store in. Since
735 hard register is always saved in the widest mode
736 available, the mode may be wider than necessary, it is
737 OK to reduce the alignment of spill space. We will
738 verify that it is equal to or greater than required
739 when we restore and save the hard register in
740 insert_restore and insert_save. */
742 = assign_stack_local_1 (regno_save_mode
[i
][j
],
743 GET_MODE_SIZE (regno_save_mode
[i
][j
]),
744 0, ASLK_REDUCE_ALIGN
);
746 /* Setup single word save area just in case... */
747 for (k
= 0; k
< j
; k
++)
748 /* This should not depend on WORDS_BIG_ENDIAN.
749 The order of words in regs is the same as in memory. */
750 regno_save_mem
[i
+ k
][1]
751 = adjust_address_nv (regno_save_mem
[i
][j
],
752 regno_save_mode
[i
+ k
][1],
757 /* Now loop again and set the alias set of any save areas we made to
758 the alias set used to represent frame objects. */
759 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
760 for (j
= MOVE_MAX_WORDS
; j
> 0; j
--)
761 if (regno_save_mem
[i
][j
] != 0)
762 set_mem_alias_set (regno_save_mem
[i
][j
], get_frame_alias_set ());
767 /* Find the places where hard regs are live across calls and save them. */
770 save_call_clobbered_regs (void)
772 struct insn_chain
*chain
, *next
, *last
= NULL
;
773 machine_mode save_mode
[FIRST_PSEUDO_REGISTER
];
775 /* Computed in mark_set_regs, holds all registers set by the current
777 HARD_REG_SET this_insn_sets
;
779 CLEAR_HARD_REG_SET (hard_regs_saved
);
782 for (chain
= reload_insn_chain
; chain
!= 0; chain
= next
)
784 rtx_insn
*insn
= chain
->insn
;
785 enum rtx_code code
= GET_CODE (insn
);
789 gcc_assert (!chain
->is_caller_save_insn
);
791 if (NONDEBUG_INSN_P (insn
))
793 /* If some registers have been saved, see if INSN references
794 any of them. We must restore them before the insn if so. */
799 HARD_REG_SET this_insn_sets
;
801 if (code
== JUMP_INSN
)
802 /* Restore all registers if this is a JUMP_INSN. */
803 COPY_HARD_REG_SET (referenced_regs
, hard_regs_saved
);
806 CLEAR_HARD_REG_SET (referenced_regs
);
807 mark_referenced_regs (&PATTERN (insn
),
808 mark_reg_as_referenced
, NULL
);
809 AND_HARD_REG_SET (referenced_regs
, hard_regs_saved
);
812 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
813 if (TEST_HARD_REG_BIT (referenced_regs
, regno
))
814 regno
+= insert_restore (chain
, 1, regno
, MOVE_MAX_WORDS
,
816 /* If a saved register is set after the call, this means we no
817 longer should restore it. This can happen when parts of a
818 multi-word pseudo do not conflict with other pseudos, so
819 IRA may allocate the same hard register for both. One may
820 be live across the call, while the other is set
822 CLEAR_HARD_REG_SET (this_insn_sets
);
823 note_stores (PATTERN (insn
), mark_set_regs
, &this_insn_sets
);
824 AND_COMPL_HARD_REG_SET (hard_regs_saved
, this_insn_sets
);
827 if (code
== CALL_INSN
828 && ! SIBLING_CALL_P (insn
)
829 && ! find_reg_note (insn
, REG_NORETURN
, NULL
))
832 HARD_REG_SET hard_regs_to_save
;
833 HARD_REG_SET call_def_reg_set
;
834 reg_set_iterator rsi
;
837 cheap
= find_reg_note (insn
, REG_RETURNED
, NULL
);
839 cheap
= XEXP (cheap
, 0);
841 /* Use the register life information in CHAIN to compute which
842 regs are live during the call. */
843 REG_SET_TO_HARD_REG_SET (hard_regs_to_save
,
844 &chain
->live_throughout
);
845 /* Save hard registers always in the widest mode available. */
846 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
847 if (TEST_HARD_REG_BIT (hard_regs_to_save
, regno
))
848 save_mode
[regno
] = regno_save_mode
[regno
][1];
850 save_mode
[regno
] = VOIDmode
;
852 /* Look through all live pseudos, mark their hard registers
853 and choose proper mode for saving. */
854 EXECUTE_IF_SET_IN_REG_SET
855 (&chain
->live_throughout
, FIRST_PSEUDO_REGISTER
, regno
, rsi
)
857 int r
= reg_renumber
[regno
];
861 if (r
< 0 || regno_reg_rtx
[regno
] == cheap
)
863 nregs
= hard_regno_nregs
[r
][PSEUDO_REGNO_MODE (regno
)];
864 mode
= HARD_REGNO_CALLER_SAVE_MODE
865 (r
, nregs
, PSEUDO_REGNO_MODE (regno
));
866 if (GET_MODE_BITSIZE (mode
)
867 > GET_MODE_BITSIZE (save_mode
[r
]))
870 SET_HARD_REG_BIT (hard_regs_to_save
, r
+ nregs
);
873 /* Record all registers set in this call insn. These don't need
874 to be saved. N.B. the call insn might set a subreg of a
875 multi-hard-reg pseudo; then the pseudo is considered live
876 during the call, but the subreg that is set isn't. */
877 CLEAR_HARD_REG_SET (this_insn_sets
);
878 note_stores (PATTERN (insn
), mark_set_regs
, &this_insn_sets
);
880 /* Compute which hard regs must be saved before this call. */
881 AND_COMPL_HARD_REG_SET (hard_regs_to_save
, call_fixed_reg_set
);
882 AND_COMPL_HARD_REG_SET (hard_regs_to_save
, this_insn_sets
);
883 AND_COMPL_HARD_REG_SET (hard_regs_to_save
, hard_regs_saved
);
884 get_call_reg_set_usage (insn
, &call_def_reg_set
,
886 AND_HARD_REG_SET (hard_regs_to_save
, call_def_reg_set
);
888 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
889 if (TEST_HARD_REG_BIT (hard_regs_to_save
, regno
))
890 regno
+= insert_save (chain
, 1, regno
, &hard_regs_to_save
, save_mode
);
892 /* Must recompute n_regs_saved. */
894 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
895 if (TEST_HARD_REG_BIT (hard_regs_saved
, regno
))
899 && HARD_REGISTER_P (cheap
)
900 && TEST_HARD_REG_BIT (call_used_reg_set
, REGNO (cheap
)))
903 rtx pat
= PATTERN (insn
);
904 if (GET_CODE (pat
) == PARALLEL
)
905 pat
= XVECEXP (pat
, 0, 0);
906 dest
= SET_DEST (pat
);
907 /* For multiple return values dest is PARALLEL.
908 Currently we handle only single return value case. */
911 newpat
= gen_rtx_SET (cheap
, copy_rtx (dest
));
912 chain
= insert_one_insn (chain
, 0, -1, newpat
);
918 else if (DEBUG_INSN_P (insn
) && n_regs_saved
)
919 mark_referenced_regs (&PATTERN (insn
),
920 replace_reg_with_saved_mem
,
923 if (chain
->next
== 0 || chain
->next
->block
!= chain
->block
)
926 /* At the end of the basic block, we must restore any registers that
927 remain saved. If the last insn in the block is a JUMP_INSN, put
928 the restore before the insn, otherwise, put it after the insn. */
931 && DEBUG_INSN_P (insn
)
933 && last
->block
== chain
->block
)
935 rtx_insn
*ins
, *prev
;
936 basic_block bb
= BLOCK_FOR_INSN (insn
);
938 /* When adding hard reg restores after a DEBUG_INSN, move
939 all notes between last real insn and this DEBUG_INSN after
940 the DEBUG_INSN, otherwise we could get code
941 -g/-g0 differences. */
942 for (ins
= PREV_INSN (insn
); ins
!= last
->insn
; ins
= prev
)
944 prev
= PREV_INSN (ins
);
947 SET_NEXT_INSN (prev
) = NEXT_INSN (ins
);
948 SET_PREV_INSN (NEXT_INSN (ins
)) = prev
;
949 SET_PREV_INSN (ins
) = insn
;
950 SET_NEXT_INSN (ins
) = NEXT_INSN (insn
);
951 SET_NEXT_INSN (insn
) = ins
;
953 SET_PREV_INSN (NEXT_INSN (ins
)) = ins
;
954 if (BB_END (bb
) == insn
)
958 gcc_assert (DEBUG_INSN_P (ins
));
964 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
965 if (TEST_HARD_REG_BIT (hard_regs_saved
, regno
))
966 regno
+= insert_restore (chain
, JUMP_P (insn
),
967 regno
, MOVE_MAX_WORDS
, save_mode
);
972 /* Here from note_stores, or directly from save_call_clobbered_regs, when
973 an insn stores a value in a register.
974 Set the proper bit or bits in this_insn_sets. All pseudos that have
975 been assigned hard regs have had their register number changed already,
976 so we can ignore pseudos. */
978 mark_set_regs (rtx reg
, const_rtx setter ATTRIBUTE_UNUSED
, void *data
)
980 int regno
, endregno
, i
;
981 HARD_REG_SET
*this_insn_sets
= (HARD_REG_SET
*) data
;
983 if (GET_CODE (reg
) == SUBREG
)
985 rtx inner
= SUBREG_REG (reg
);
986 if (!REG_P (inner
) || REGNO (inner
) >= FIRST_PSEUDO_REGISTER
)
988 regno
= subreg_regno (reg
);
989 endregno
= regno
+ subreg_nregs (reg
);
992 && REGNO (reg
) < FIRST_PSEUDO_REGISTER
)
995 endregno
= END_REGNO (reg
);
1000 for (i
= regno
; i
< endregno
; i
++)
1001 SET_HARD_REG_BIT (*this_insn_sets
, i
);
1004 /* Here from note_stores when an insn stores a value in a register.
1005 Set the proper bit or bits in the passed regset. All pseudos that have
1006 been assigned hard regs have had their register number changed already,
1007 so we can ignore pseudos. */
1009 add_stored_regs (rtx reg
, const_rtx setter
, void *data
)
1011 int regno
, endregno
, i
;
1012 machine_mode mode
= GET_MODE (reg
);
1015 if (GET_CODE (setter
) == CLOBBER
)
1018 if (GET_CODE (reg
) == SUBREG
1019 && REG_P (SUBREG_REG (reg
))
1020 && REGNO (SUBREG_REG (reg
)) < FIRST_PSEUDO_REGISTER
)
1022 offset
= subreg_regno_offset (REGNO (SUBREG_REG (reg
)),
1023 GET_MODE (SUBREG_REG (reg
)),
1026 regno
= REGNO (SUBREG_REG (reg
)) + offset
;
1027 endregno
= regno
+ subreg_nregs (reg
);
1031 if (!REG_P (reg
) || REGNO (reg
) >= FIRST_PSEUDO_REGISTER
)
1034 regno
= REGNO (reg
) + offset
;
1035 endregno
= end_hard_regno (mode
, regno
);
1038 for (i
= regno
; i
< endregno
; i
++)
1039 SET_REGNO_REG_SET ((regset
) data
, i
);
1042 /* Walk X and record all referenced registers in REFERENCED_REGS. */
1044 mark_referenced_regs (rtx
*loc
, refmarker_fn
*mark
, void *arg
)
1046 enum rtx_code code
= GET_CODE (*loc
);
1051 mark_referenced_regs (&SET_SRC (*loc
), mark
, arg
);
1052 if (code
== SET
|| code
== CLOBBER
)
1054 loc
= &SET_DEST (*loc
);
1055 code
= GET_CODE (*loc
);
1056 if ((code
== REG
&& REGNO (*loc
) < FIRST_PSEUDO_REGISTER
)
1057 || code
== PC
|| code
== CC0
1058 || (code
== SUBREG
&& REG_P (SUBREG_REG (*loc
))
1059 && REGNO (SUBREG_REG (*loc
)) < FIRST_PSEUDO_REGISTER
1060 /* If we're setting only part of a multi-word register,
1061 we shall mark it as referenced, because the words
1062 that are not being set should be restored. */
1063 && ((GET_MODE_SIZE (GET_MODE (*loc
))
1064 >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (*loc
))))
1065 || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (*loc
)))
1066 <= UNITS_PER_WORD
))))
1069 if (code
== MEM
|| code
== SUBREG
)
1071 loc
= &XEXP (*loc
, 0);
1072 code
= GET_CODE (*loc
);
1077 int regno
= REGNO (*loc
);
1078 int hardregno
= (regno
< FIRST_PSEUDO_REGISTER
? regno
1079 : reg_renumber
[regno
]);
1082 mark (loc
, GET_MODE (*loc
), hardregno
, arg
);
1084 /* ??? Will we ever end up with an equiv expression in a debug
1085 insn, that would have required restoring a reg, or will
1086 reload take care of it for us? */
1088 /* If this is a pseudo that did not get a hard register, scan its
1089 memory location, since it might involve the use of another
1090 register, which might be saved. */
1091 else if (reg_equiv_mem (regno
) != 0)
1092 mark_referenced_regs (&XEXP (reg_equiv_mem (regno
), 0), mark
, arg
);
1093 else if (reg_equiv_address (regno
) != 0)
1094 mark_referenced_regs (®_equiv_address (regno
), mark
, arg
);
1098 fmt
= GET_RTX_FORMAT (code
);
1099 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
1102 mark_referenced_regs (&XEXP (*loc
, i
), mark
, arg
);
1103 else if (fmt
[i
] == 'E')
1104 for (j
= XVECLEN (*loc
, i
) - 1; j
>= 0; j
--)
1105 mark_referenced_regs (&XVECEXP (*loc
, i
, j
), mark
, arg
);
1109 /* Parameter function for mark_referenced_regs() that adds registers
1110 present in the insn and in equivalent mems and addresses to
1114 mark_reg_as_referenced (rtx
*loc ATTRIBUTE_UNUSED
,
1117 void *arg ATTRIBUTE_UNUSED
)
1119 add_to_hard_reg_set (&referenced_regs
, mode
, hardregno
);
1122 /* Parameter function for mark_referenced_regs() that replaces
1123 registers referenced in a debug_insn that would have been restored,
1124 should it be a non-debug_insn, with their save locations. */
1127 replace_reg_with_saved_mem (rtx
*loc
,
1132 unsigned int i
, nregs
= hard_regno_nregs
[regno
][mode
];
1134 machine_mode
*save_mode
= (machine_mode
*)arg
;
1136 for (i
= 0; i
< nregs
; i
++)
1137 if (TEST_HARD_REG_BIT (hard_regs_saved
, regno
+ i
))
1140 /* If none of the registers in the range would need restoring, we're
1146 if (!TEST_HARD_REG_BIT (hard_regs_saved
, regno
+ i
))
1150 && regno_save_mem
[regno
][nregs
])
1152 mem
= copy_rtx (regno_save_mem
[regno
][nregs
]);
1154 if (nregs
== (unsigned int) hard_regno_nregs
[regno
][save_mode
[regno
]])
1155 mem
= adjust_address_nv (mem
, save_mode
[regno
], 0);
1157 if (GET_MODE (mem
) != mode
)
1159 /* This is gen_lowpart_if_possible(), but without validating
1160 the newly-formed address. */
1163 if (WORDS_BIG_ENDIAN
)
1164 offset
= (MAX (GET_MODE_SIZE (GET_MODE (mem
)), UNITS_PER_WORD
)
1165 - MAX (GET_MODE_SIZE (mode
), UNITS_PER_WORD
));
1166 if (BYTES_BIG_ENDIAN
)
1167 /* Adjust the address so that the address-after-the-data is
1169 offset
-= (MIN (UNITS_PER_WORD
, GET_MODE_SIZE (mode
))
1170 - MIN (UNITS_PER_WORD
, GET_MODE_SIZE (GET_MODE (mem
))));
1172 mem
= adjust_address_nv (mem
, mode
, offset
);
1177 mem
= gen_rtx_CONCATN (mode
, rtvec_alloc (nregs
));
1178 for (i
= 0; i
< nregs
; i
++)
1179 if (TEST_HARD_REG_BIT (hard_regs_saved
, regno
+ i
))
1181 gcc_assert (regno_save_mem
[regno
+ i
][1]);
1182 XVECEXP (mem
, 0, i
) = copy_rtx (regno_save_mem
[regno
+ i
][1]);
1186 machine_mode smode
= save_mode
[regno
];
1187 gcc_assert (smode
!= VOIDmode
);
1188 if (hard_regno_nregs
[regno
][smode
] > 1)
1189 smode
= mode_for_size (GET_MODE_SIZE (mode
) / nregs
,
1190 GET_MODE_CLASS (mode
), 0);
1191 XVECEXP (mem
, 0, i
) = gen_rtx_REG (smode
, regno
+ i
);
1195 gcc_assert (GET_MODE (mem
) == mode
);
1200 /* Insert a sequence of insns to restore. Place these insns in front of
1201 CHAIN if BEFORE_P is nonzero, behind the insn otherwise. MAXRESTORE is
1202 the maximum number of registers which should be restored during this call.
1203 It should never be less than 1 since we only work with entire registers.
1205 Note that we have verified in init_caller_save that we can do this
1206 with a simple SET, so use it. Set INSN_CODE to what we save there
1207 since the address might not be valid so the insn might not be recognized.
1208 These insns will be reloaded and have register elimination done by
1209 find_reload, so we need not worry about that here.
1211 Return the extra number of registers saved. */
1214 insert_restore (struct insn_chain
*chain
, int before_p
, int regno
,
1215 int maxrestore
, machine_mode
*save_mode
)
1220 unsigned int numregs
= 0;
1221 struct insn_chain
*new_chain
;
1224 /* A common failure mode if register status is not correct in the
1225 RTL is for this routine to be called with a REGNO we didn't
1226 expect to save. That will cause us to write an insn with a (nil)
1227 SET_DEST or SET_SRC. Instead of doing so and causing a crash
1228 later, check for this common case here instead. This will remove
1229 one step in debugging such problems. */
1230 gcc_assert (regno_save_mem
[regno
][1]);
1232 /* Get the pattern to emit and update our status.
1234 See if we can restore `maxrestore' registers at once. Work
1235 backwards to the single register case. */
1236 for (i
= maxrestore
; i
> 0; i
--)
1241 if (regno_save_mem
[regno
][i
] == 0)
1244 for (j
= 0; j
< i
; j
++)
1245 if (! TEST_HARD_REG_BIT (hard_regs_saved
, regno
+ j
))
1250 /* Must do this one restore at a time. */
1258 mem
= regno_save_mem
[regno
][numregs
];
1259 if (save_mode
[regno
] != VOIDmode
1260 && save_mode
[regno
] != GET_MODE (mem
)
1261 && numregs
== (unsigned int) hard_regno_nregs
[regno
][save_mode
[regno
]]
1262 /* Check that insn to restore REGNO in save_mode[regno] is
1264 && reg_save_code (regno
, save_mode
[regno
]) >= 0)
1265 mem
= adjust_address_nv (mem
, save_mode
[regno
], 0);
1267 mem
= copy_rtx (mem
);
1269 /* Verify that the alignment of spill space is equal to or greater
1271 gcc_assert (MIN (MAX_SUPPORTED_STACK_ALIGNMENT
,
1272 GET_MODE_ALIGNMENT (GET_MODE (mem
))) <= MEM_ALIGN (mem
));
1274 pat
= gen_rtx_SET (gen_rtx_REG (GET_MODE (mem
), regno
), mem
);
1275 code
= reg_restore_code (regno
, GET_MODE (mem
));
1276 new_chain
= insert_one_insn (chain
, before_p
, code
, pat
);
1278 /* Clear status for all registers we restored. */
1279 for (k
= 0; k
< i
; k
++)
1281 CLEAR_HARD_REG_BIT (hard_regs_saved
, regno
+ k
);
1282 SET_REGNO_REG_SET (&new_chain
->dead_or_set
, regno
+ k
);
1286 /* Tell our callers how many extra registers we saved/restored. */
1290 /* Like insert_restore above, but save registers instead. */
1293 insert_save (struct insn_chain
*chain
, int before_p
, int regno
,
1294 HARD_REG_SET (*to_save
), machine_mode
*save_mode
)
1300 unsigned int numregs
= 0;
1301 struct insn_chain
*new_chain
;
1304 /* A common failure mode if register status is not correct in the
1305 RTL is for this routine to be called with a REGNO we didn't
1306 expect to save. That will cause us to write an insn with a (nil)
1307 SET_DEST or SET_SRC. Instead of doing so and causing a crash
1308 later, check for this common case here. This will remove one
1309 step in debugging such problems. */
1310 gcc_assert (regno_save_mem
[regno
][1]);
1312 /* Get the pattern to emit and update our status.
1314 See if we can save several registers with a single instruction.
1315 Work backwards to the single register case. */
1316 for (i
= MOVE_MAX_WORDS
; i
> 0; i
--)
1320 if (regno_save_mem
[regno
][i
] == 0)
1323 for (j
= 0; j
< i
; j
++)
1324 if (! TEST_HARD_REG_BIT (*to_save
, regno
+ j
))
1329 /* Must do this one save at a time. */
1337 mem
= regno_save_mem
[regno
][numregs
];
1338 if (save_mode
[regno
] != VOIDmode
1339 && save_mode
[regno
] != GET_MODE (mem
)
1340 && numregs
== (unsigned int) hard_regno_nregs
[regno
][save_mode
[regno
]]
1341 /* Check that insn to save REGNO in save_mode[regno] is
1343 && reg_save_code (regno
, save_mode
[regno
]) >= 0)
1344 mem
= adjust_address_nv (mem
, save_mode
[regno
], 0);
1346 mem
= copy_rtx (mem
);
1348 /* Verify that the alignment of spill space is equal to or greater
1350 gcc_assert (MIN (MAX_SUPPORTED_STACK_ALIGNMENT
,
1351 GET_MODE_ALIGNMENT (GET_MODE (mem
))) <= MEM_ALIGN (mem
));
1353 pat
= gen_rtx_SET (mem
, gen_rtx_REG (GET_MODE (mem
), regno
));
1354 code
= reg_save_code (regno
, GET_MODE (mem
));
1355 new_chain
= insert_one_insn (chain
, before_p
, code
, pat
);
1357 /* Set hard_regs_saved and dead_or_set for all the registers we saved. */
1358 for (k
= 0; k
< numregs
; k
++)
1360 SET_HARD_REG_BIT (hard_regs_saved
, regno
+ k
);
1361 SET_REGNO_REG_SET (&new_chain
->dead_or_set
, regno
+ k
);
1365 /* Tell our callers how many extra registers we saved/restored. */
1369 /* A note_uses callback used by insert_one_insn. Add the hard-register
1370 equivalent of each REG to regset DATA. */
1373 add_used_regs (rtx
*loc
, void *data
)
1375 subrtx_iterator::array_type array
;
1376 FOR_EACH_SUBRTX (iter
, array
, *loc
, NONCONST
)
1378 const_rtx x
= *iter
;
1381 unsigned int regno
= REGNO (x
);
1382 if (HARD_REGISTER_NUM_P (regno
))
1383 bitmap_set_range ((regset
) data
, regno
,
1384 hard_regno_nregs
[regno
][GET_MODE (x
)]);
1386 gcc_checking_assert (reg_renumber
[regno
] < 0);
1391 /* Emit a new caller-save insn and set the code. */
1392 static struct insn_chain
*
1393 insert_one_insn (struct insn_chain
*chain
, int before_p
, int code
, rtx pat
)
1395 rtx_insn
*insn
= chain
->insn
;
1396 struct insn_chain
*new_chain
;
1398 /* If INSN references CC0, put our insns in front of the insn that sets
1399 CC0. This is always safe, since the only way we could be passed an
1400 insn that references CC0 is for a restore, and doing a restore earlier
1401 isn't a problem. We do, however, assume here that CALL_INSNs don't
1402 reference CC0. Guard against non-INSN's like CODE_LABEL. */
1404 if (HAVE_cc0
&& (NONJUMP_INSN_P (insn
) || JUMP_P (insn
))
1406 && reg_referenced_p (cc0_rtx
, PATTERN (insn
)))
1407 chain
= chain
->prev
, insn
= chain
->insn
;
1409 new_chain
= new_insn_chain ();
1414 new_chain
->prev
= chain
->prev
;
1415 if (new_chain
->prev
!= 0)
1416 new_chain
->prev
->next
= new_chain
;
1418 reload_insn_chain
= new_chain
;
1420 chain
->prev
= new_chain
;
1421 new_chain
->next
= chain
;
1422 new_chain
->insn
= emit_insn_before (pat
, insn
);
1423 /* ??? It would be nice if we could exclude the already / still saved
1424 registers from the live sets. */
1425 COPY_REG_SET (&new_chain
->live_throughout
, &chain
->live_throughout
);
1426 note_uses (&PATTERN (chain
->insn
), add_used_regs
,
1427 &new_chain
->live_throughout
);
1428 /* If CHAIN->INSN is a call, then the registers which contain
1429 the arguments to the function are live in the new insn. */
1430 if (CALL_P (chain
->insn
))
1431 for (link
= CALL_INSN_FUNCTION_USAGE (chain
->insn
);
1433 link
= XEXP (link
, 1))
1434 note_uses (&XEXP (link
, 0), add_used_regs
,
1435 &new_chain
->live_throughout
);
1437 CLEAR_REG_SET (&new_chain
->dead_or_set
);
1438 if (chain
->insn
== BB_HEAD (BASIC_BLOCK_FOR_FN (cfun
, chain
->block
)))
1439 BB_HEAD (BASIC_BLOCK_FOR_FN (cfun
, chain
->block
)) = new_chain
->insn
;
1443 new_chain
->next
= chain
->next
;
1444 if (new_chain
->next
!= 0)
1445 new_chain
->next
->prev
= new_chain
;
1446 chain
->next
= new_chain
;
1447 new_chain
->prev
= chain
;
1448 new_chain
->insn
= emit_insn_after (pat
, insn
);
1449 /* ??? It would be nice if we could exclude the already / still saved
1450 registers from the live sets, and observe REG_UNUSED notes. */
1451 COPY_REG_SET (&new_chain
->live_throughout
, &chain
->live_throughout
);
1452 /* Registers that are set in CHAIN->INSN live in the new insn.
1453 (Unless there is a REG_UNUSED note for them, but we don't
1454 look for them here.) */
1455 note_stores (PATTERN (chain
->insn
), add_stored_regs
,
1456 &new_chain
->live_throughout
);
1457 CLEAR_REG_SET (&new_chain
->dead_or_set
);
1458 if (chain
->insn
== BB_END (BASIC_BLOCK_FOR_FN (cfun
, chain
->block
)))
1459 BB_END (BASIC_BLOCK_FOR_FN (cfun
, chain
->block
)) = new_chain
->insn
;
1461 new_chain
->block
= chain
->block
;
1462 new_chain
->is_caller_save_insn
= 1;
1464 INSN_CODE (new_chain
->insn
) = code
;
1467 #include "gt-caller-save.h"