Commit 590cf94d by Kaveh R. Ghazi Committed by Kaveh Ghazi

Warning fixes:

        * reload1.c (ELIMINABLE_REGS, NUM_ELIMINABLE_REGS): Introduce an
        intermediate structure which has exactly the members provided by
        ELIMINABLE_REGS.  Define NUM_ELIMINABLE_REGS in terms of the
        static intermediate structure.
        (init_elim_table): Xmalloc() `reg_eliminate', and initialize it
        from the intermediate structure.  Do the same analogous fix in
        the case where ELIMINABLE_REGS is not defined.

From-SVN: r23521
parent 1eb1d2a3
Wed Nov 4 17:25:10 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* reload1.c (ELIMINABLE_REGS, NUM_ELIMINABLE_REGS): Introduce an
intermediate structure which has exactly the members provided by
ELIMINABLE_REGS. Define NUM_ELIMINABLE_REGS in terms of the
static intermediate structure.
(init_elim_table): Xmalloc() `reg_eliminate', and initialize it
from the intermediate structure. Do the same analogous fix in
the case where ELIMINABLE_REGS is not defined.
Tue Nov 3 20:50:03 1998 Jeffrey A Law (law@cygnus.com) Tue Nov 3 20:50:03 1998 Jeffrey A Law (law@cygnus.com)
* pa.h (SELECT_SECTION): Fix thinko. * pa.h (SELECT_SECTION): Fix thinko.
......
...@@ -290,7 +290,7 @@ static struct insn_chain *insns_need_reload; ...@@ -290,7 +290,7 @@ static struct insn_chain *insns_need_reload;
in favor of another. If there is more than one way of eliminating a in favor of another. If there is more than one way of eliminating a
particular register, the most preferred should be specified first. */ particular register, the most preferred should be specified first. */
static struct elim_table struct elim_table
{ {
int from; /* Register number to be eliminated. */ int from; /* Register number to be eliminated. */
int to; /* Register number used as replacement. */ int to; /* Register number used as replacement. */
...@@ -307,7 +307,17 @@ static struct elim_table ...@@ -307,7 +307,17 @@ static struct elim_table
register corresponding to a pseudo register corresponding to a pseudo
assigned to the reg to be eliminated. */ assigned to the reg to be eliminated. */
rtx to_rtx; /* REG rtx for the replacement. */ rtx to_rtx; /* REG rtx for the replacement. */
} reg_eliminate[] = };
static struct elim_table * reg_eliminate = 0;
/* This is an intermediate structure to initialize the table. It has
exactly the members provided by ELIMINABLE_REGS. */
static struct elim_table_1
{
int from;
int to;
} reg_eliminate_1[] =
/* If a set of eliminable registers was specified, define the table from it. /* If a set of eliminable registers was specified, define the table from it.
Otherwise, default to the normal case of the frame pointer being Otherwise, default to the normal case of the frame pointer being
...@@ -319,7 +329,7 @@ static struct elim_table ...@@ -319,7 +329,7 @@ static struct elim_table
{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}; {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}};
#endif #endif
#define NUM_ELIMINABLE_REGS (sizeof reg_eliminate / sizeof reg_eliminate[0]) #define NUM_ELIMINABLE_REGS (sizeof reg_eliminate_1/sizeof reg_eliminate_1[0])
/* Record the number of pending eliminations that have an offset not equal /* Record the number of pending eliminations that have an offset not equal
to their initial offset. If non-zero, we use a new copy of each to their initial offset. If non-zero, we use a new copy of each
...@@ -3611,7 +3621,18 @@ static void ...@@ -3611,7 +3621,18 @@ static void
init_elim_table () init_elim_table ()
{ {
struct elim_table *ep; struct elim_table *ep;
#ifdef ELIMINABLE_REGS
struct elim_table_1 *ep1;
#endif
if (!reg_eliminate)
{
reg_eliminate = (struct elim_table *)
xmalloc(sizeof(struct elim_table) * NUM_ELIMINABLE_REGS);
bzero ((PTR) reg_eliminate,
sizeof(struct elim_table) * NUM_ELIMINABLE_REGS);
}
/* Does this function require a frame pointer? */ /* Does this function require a frame pointer? */
frame_pointer_needed = (! flag_omit_frame_pointer frame_pointer_needed = (! flag_omit_frame_pointer
...@@ -3629,13 +3650,18 @@ init_elim_table () ...@@ -3629,13 +3650,18 @@ init_elim_table ()
num_eliminable = 0; num_eliminable = 0;
#ifdef ELIMINABLE_REGS #ifdef ELIMINABLE_REGS
for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++) for (ep = reg_eliminate, ep1 = reg_eliminate_1;
ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++, ep1++)
{ {
ep->from = ep1->from;
ep->to = ep1->to;
ep->can_eliminate = ep->can_eliminate_previous ep->can_eliminate = ep->can_eliminate_previous
= (CAN_ELIMINATE (ep->from, ep->to) = (CAN_ELIMINATE (ep->from, ep->to)
&& ! (ep->to == STACK_POINTER_REGNUM && frame_pointer_needed)); && ! (ep->to == STACK_POINTER_REGNUM && frame_pointer_needed));
} }
#else #else
reg_eliminate[0].from = reg_eliminate_1[0].from;
reg_eliminate[0].to = reg_eliminate_1[0].to;
reg_eliminate[0].can_eliminate = reg_eliminate[0].can_eliminate_previous reg_eliminate[0].can_eliminate = reg_eliminate[0].can_eliminate_previous
= ! frame_pointer_needed; = ! frame_pointer_needed;
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment