H.J. Lu <hongjiu.lu@intel.com>
* global.c (compute_regsets): Set frame_pointer_needed here.
* reload1.c (init_elim_table): Don't set frame_pointer_needed
here.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@137275
138bc75d-0d04-0410-961f-
82ee72b054a4
+2008-06-30 Joey Ye <joey.ye@intel.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ * global.c (compute_regsets): Set frame_pointer_needed here.
+
+ * reload1.c (init_elim_table): Don't set frame_pointer_needed
+ here.
+
2008-06-30 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
* doc/install.texi (specific): Expand Windows build notes.
This will normally be called with ELIM_SET as the file static
variable eliminable_regset, and NO_GLOBAL_SET as the file static
- variable NO_GLOBAL_ALLOC_REGS. */
+ variable NO_GLOBAL_ALLOC_REGS.
+
+ It also initializes global flag frame_pointer_needed. */
static void
compute_regsets (HARD_REG_SET *elim_set,
static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
size_t i;
#endif
+
+ /* FIXME: If EXIT_IGNORE_STACK is set, we will not save and restore
+ sp for alloca. So we can't eliminate the frame pointer in that
+ case. At some point, we should improve this by emitting the
+ sp-adjusting insns for this case. */
int need_fp
= (! flag_omit_frame_pointer
|| (cfun->calls_alloca && EXIT_IGNORE_STACK)
+ || crtl->accesses_prior_frames
|| FRAME_POINTER_REQUIRED);
+ frame_pointer_needed = need_fp;
+
max_regno = max_reg_num ();
compact_blocks ();
return false;
}
-/* Initialize the table of registers to eliminate. */
+/* Initialize the table of registers to eliminate.
+ Pre-condition: global flag frame_pointer_needed has been set before
+ calling this function. */
static void
init_elim_table (void)
if (!reg_eliminate)
reg_eliminate = XCNEWVEC (struct elim_table, NUM_ELIMINABLE_REGS);
- /* Does this function require a frame pointer? */
-
- frame_pointer_needed = (! flag_omit_frame_pointer
- /* ?? If EXIT_IGNORE_STACK is set, we will not save
- and restore sp for alloca. So we can't eliminate
- the frame pointer in that case. At some point,
- we should improve this by emitting the
- sp-adjusting insns for this case. */
- || (cfun->calls_alloca
- && EXIT_IGNORE_STACK)
- || crtl->accesses_prior_frames
- || FRAME_POINTER_REQUIRED);
-
num_eliminable = 0;
#ifdef ELIMINABLE_REGS