Commit fef511b5 by Sandra Loosemore Committed by Sandra Loosemore

re PR middle-end/33211 (FAIL: gcc.target/spu/fixed-range.c scan-assembler lqd.*21)

2007-08-30  Sandra Loosemore  <sandra@codesourcery.com>

	PR middle-end/33211

	gcc/
	* regclass.c (initial_fixed_regs): Revert previous change and make
	it const again.
	(initial_call_used_regs): Likewise.
	(initial_call_really_used_regs): Delete, reverting previous addition.
	(initial_reg_names): Likewise.
	(init_reg_sets): Revert previous change.
	(saved_fixed_regs): New.
	(saved_call_used_regs): New.
	(saved_call_really_used_regs): New.
	(saved_reg_names): New.
	(save_register_info): New.
	(restore_register_info): New.
	(init_reg_sets_1): Replace reset of register info with call to
	restore_register_info.
	* rtl.h (save_register_info): Declare.
	* toplev.c (backend_init): Call save_register_info.

From-SVN: r127951
parent 828fa499
2007-08-30 Sandra Loosemore <sandra@codesourcery.com>
PR middle-end/33211
* regclass.c (initial_fixed_regs): Revert previous change and make
it const again.
(initial_call_used_regs): Likewise.
(initial_call_really_used_regs): Delete, reverting previous addition.
(initial_reg_names): Likewise.
(init_reg_sets): Revert previous change.
(saved_fixed_regs): New.
(saved_call_used_regs): New.
(saved_call_really_used_regs): New.
(saved_reg_names): New.
(save_register_info): New.
(restore_register_info): New.
(init_reg_sets_1): Replace reset of register info with call to
restore_register_info.
* rtl.h (save_register_info): Declare.
* toplev.c (backend_init): Call save_register_info.
2007-08-30 Laurynas Biveinis <laurynas.biveinis@gmail.com> 2007-08-30 Laurynas Biveinis <laurynas.biveinis@gmail.com>
* tree-ssa-propagate.c (set_rhs): Remove the copied annotation * tree-ssa-propagate.c (set_rhs): Remove the copied annotation
......
...@@ -81,7 +81,7 @@ HARD_REG_SET fixed_reg_set; ...@@ -81,7 +81,7 @@ HARD_REG_SET fixed_reg_set;
/* Data for initializing the above. */ /* Data for initializing the above. */
static char initial_fixed_regs[] = FIXED_REGISTERS; static const char initial_fixed_regs[] = FIXED_REGISTERS;
/* Indexed by hard register number, contains 1 for registers /* Indexed by hard register number, contains 1 for registers
that are fixed use or are clobbered by function calls. that are fixed use or are clobbered by function calls.
...@@ -100,7 +100,7 @@ HARD_REG_SET losing_caller_save_reg_set; ...@@ -100,7 +100,7 @@ HARD_REG_SET losing_caller_save_reg_set;
/* Data for initializing the above. */ /* Data for initializing the above. */
static char initial_call_used_regs[] = CALL_USED_REGISTERS; static const char initial_call_used_regs[] = CALL_USED_REGISTERS;
/* This is much like call_used_regs, except it doesn't have to /* This is much like call_used_regs, except it doesn't have to
be a superset of FIXED_REGISTERS. This vector indicates be a superset of FIXED_REGISTERS. This vector indicates
...@@ -108,8 +108,7 @@ static char initial_call_used_regs[] = CALL_USED_REGISTERS; ...@@ -108,8 +108,7 @@ static char initial_call_used_regs[] = CALL_USED_REGISTERS;
regs_invalidated_by_call. */ regs_invalidated_by_call. */
#ifdef CALL_REALLY_USED_REGISTERS #ifdef CALL_REALLY_USED_REGISTERS
static char initial_call_really_used_regs[] = CALL_REALLY_USED_REGISTERS; char call_really_used_regs[] = CALL_REALLY_USED_REGISTERS;
char call_really_used_regs[FIRST_PSEUDO_REGISTER];
#endif #endif
#ifdef CALL_REALLY_USED_REGISTERS #ifdef CALL_REALLY_USED_REGISTERS
...@@ -193,11 +192,7 @@ enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES]; ...@@ -193,11 +192,7 @@ enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
/* Array containing all of the register names. */ /* Array containing all of the register names. */
const char * reg_names[FIRST_PSEUDO_REGISTER]; const char * reg_names[] = REGISTER_NAMES;
/* Data for initializing the above. */
const char * initial_reg_names[] = REGISTER_NAMES;
/* Array containing all of the register class names. */ /* Array containing all of the register class names. */
...@@ -306,12 +301,14 @@ init_reg_sets (void) ...@@ -306,12 +301,14 @@ init_reg_sets (void)
SET_HARD_REG_BIT (reg_class_contents[i], j); SET_HARD_REG_BIT (reg_class_contents[i], j);
} }
memset (global_regs, 0, sizeof global_regs); /* Sanity check: make sure the target macros FIXED_REGISTERS and
CALL_USED_REGISTERS had the right number of initializers. */
gcc_assert (sizeof fixed_regs == sizeof initial_fixed_regs);
gcc_assert (sizeof call_used_regs == sizeof initial_call_used_regs);
/* Processing of command-line options like -ffixed needs to know the memcpy (fixed_regs, initial_fixed_regs, sizeof fixed_regs);
initial set of register names, so initialize that now. */ memcpy (call_used_regs, initial_call_used_regs, sizeof call_used_regs);
gcc_assert (sizeof reg_names == sizeof initial_reg_names); memset (global_regs, 0, sizeof global_regs);
memcpy (reg_names, initial_reg_names, sizeof reg_names);
} }
/* Initialize may_move_cost and friends for mode M. */ /* Initialize may_move_cost and friends for mode M. */
...@@ -403,34 +400,68 @@ init_move_cost (enum machine_mode m) ...@@ -403,34 +400,68 @@ init_move_cost (enum machine_mode m)
} }
} }
/* After switches have been processed, which perhaps alter /* We need to save copies of some of the register information which
`fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs. */ can be munged by command-line switches so we can restore it during
subsequent back-end reinitialization. */
static void static char saved_fixed_regs[FIRST_PSEUDO_REGISTER];
init_reg_sets_1 (void) static char saved_call_used_regs[FIRST_PSEUDO_REGISTER];
{ #ifdef CALL_REALLY_USED_REGISTERS
unsigned int i, j; static char saved_call_really_used_regs[FIRST_PSEUDO_REGISTER];
unsigned int /* enum machine_mode */ m; #endif
static const char *saved_reg_names[FIRST_PSEUDO_REGISTER];
/* Save the register information. */
void
save_register_info (void)
{
/* Sanity check: make sure the target macros FIXED_REGISTERS and /* Sanity check: make sure the target macros FIXED_REGISTERS and
CALL_USED_REGISTERS had the right number of initializers. */ CALL_USED_REGISTERS had the right number of initializers. */
gcc_assert (sizeof fixed_regs == sizeof initial_fixed_regs); gcc_assert (sizeof fixed_regs == sizeof saved_fixed_regs);
gcc_assert (sizeof call_used_regs == sizeof initial_call_used_regs); gcc_assert (sizeof call_used_regs == sizeof saved_call_used_regs);
memcpy (saved_fixed_regs, fixed_regs, sizeof fixed_regs);
memcpy (fixed_regs, initial_fixed_regs, sizeof fixed_regs); memcpy (saved_call_used_regs, call_used_regs, sizeof call_used_regs);
memcpy (call_used_regs, initial_call_used_regs, sizeof call_used_regs);
/* Likewise for call_really_used_regs. */ /* Likewise for call_really_used_regs. */
#ifdef CALL_REALLY_USED_REGISTERS #ifdef CALL_REALLY_USED_REGISTERS
gcc_assert (sizeof call_really_used_regs gcc_assert (sizeof call_really_used_regs
== sizeof initial_call_really_used_regs); == sizeof saved_call_really_used_regs);
memcpy (call_really_used_regs, initial_call_really_used_regs, memcpy (saved_call_really_used_regs, call_really_used_regs,
sizeof call_really_used_regs); sizeof call_really_used_regs);
#endif #endif
/* And similarly for reg_names. */ /* And similarly for reg_names. */
gcc_assert (sizeof reg_names == sizeof initial_reg_names); gcc_assert (sizeof reg_names == sizeof saved_reg_names);
memcpy (reg_names, initial_reg_names, sizeof reg_names); memcpy (saved_reg_names, reg_names, sizeof reg_names);
}
/* Restore the register information. */
static void
restore_register_info (void)
{
memcpy (fixed_regs, saved_fixed_regs, sizeof fixed_regs);
memcpy (call_used_regs, saved_call_used_regs, sizeof call_used_regs);
#ifdef CALL_REALLY_USED_REGISTERS
memcpy (call_really_used_regs, saved_call_really_used_regs,
sizeof call_really_used_regs);
#endif
memcpy (reg_names, saved_reg_names, sizeof reg_names);
}
/* After switches have been processed, which perhaps alter
`fixed_regs' and `call_used_regs', convert them to HARD_REG_SETs. */
static void
init_reg_sets_1 (void)
{
unsigned int i, j;
unsigned int /* enum machine_mode */ m;
restore_register_info ();
#ifdef REG_ALLOC_ORDER #ifdef REG_ALLOC_ORDER
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
...@@ -846,11 +877,11 @@ fix_register (const char *name, int fixed, int call_used) ...@@ -846,11 +877,11 @@ fix_register (const char *name, int fixed, int call_used)
} }
else else
{ {
initial_fixed_regs[i] = fixed; fixed_regs[i] = fixed;
initial_call_used_regs[i] = call_used; call_used_regs[i] = call_used;
#ifdef CALL_REALLY_USED_REGISTERS #ifdef CALL_REALLY_USED_REGISTERS
if (fixed == 0) if (fixed == 0)
initial_call_really_used_regs[i] = call_used; call_really_used_regs[i] = call_used;
#endif #endif
} }
} }
......
...@@ -2190,6 +2190,7 @@ extern void globalize_reg (int); ...@@ -2190,6 +2190,7 @@ extern void globalize_reg (int);
extern void init_reg_modes_target (void); extern void init_reg_modes_target (void);
extern void init_regs (void); extern void init_regs (void);
extern void init_fake_stack_mems (void); extern void init_fake_stack_mems (void);
extern void save_register_info (void);
extern void init_reg_sets (void); extern void init_reg_sets (void);
extern void regclass (rtx, int); extern void regclass (rtx, int);
extern void reg_scan (rtx, unsigned int); extern void reg_scan (rtx, unsigned int);
......
...@@ -2064,6 +2064,7 @@ backend_init (void) ...@@ -2064,6 +2064,7 @@ backend_init (void)
init_rtlanal (); init_rtlanal ();
init_inline_once (); init_inline_once ();
init_varasm_once (); init_varasm_once ();
save_register_info ();
/* Initialize the target-specific back end pieces. */ /* Initialize the target-specific back end pieces. */
backend_init_target (); backend_init_target ();
......
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