toplev.c (no_new_pseudos): Deleted.

2007-07-11  Kenneth Zadeck <zadeck@naturalbridge.com>

	* toplev.c (no_new_pseudos): Deleted.
	* rtl.h (no_new_pseudos): Deleted.
	* tree-pass.h (pass_no_new_pseudos): Deleted. 
	* passes.c (pass_no_new_pseudos): Deleted.
	* final.c (rest_of_clean_state): Removed no_new_pseudos.
	(rest_of_no_new_pseudos, pass_no_new_pseudos): Deleted.
	* struct-equiv.c (rtx_equiv_p): Replaced no_new_pseudos with 
	reload_completed.
	* cfgcleanup.c (try_crossjump_to_edge): Ditto. 
	* rtlhooks.c (gen_lowpart_general): Ditto.
	* optabs.c (prepare_operand): Ditto.
	* mode-switching.c (rest_of_handle_mode_switching): Deleted set of
	no_new_pseudos.
	* modulo-sched.c (rest_of_handle_sms): Ditto.
	* see.c (rest_of_handle_see): Ditto.
	* ifcvt.c (if_convert): Ditto.
	(gate_handle_if_after_combine): Replaced no_new_pseudos with 
	reload_completed.
	* init-regs.c (gate_initialize_regs): Deleted set of
	no_new_pseudos.
	* lower-subreg.c (decompose_multiword_subregs): Ditto. 
	* bb-reorder.c (rest_of_handle_partition_blocks): Ditto.
	* doc/md.texi: Changed no_new_pseudos to can_create_pseudo_p.

From-SVN: r126561
This commit is contained in:
Kenneth Zadeck 2007-07-11 22:57:51 +00:00 committed by Kenneth Zadeck
parent d90dc4fc7f
commit ef4375b218
18 changed files with 32 additions and 64 deletions

View File

@ -1,3 +1,29 @@
2007-07-11 Kenneth Zadeck <zadeck@naturalbridge.com>
* toplev.c (no_new_pseudos): Deleted.
* rtl.h (no_new_pseudos): Deleted.
* tree-pass.h (pass_no_new_pseudos): Deleted.
* passes.c (pass_no_new_pseudos): Deleted.
* final.c (rest_of_clean_state): Removed no_new_pseudos.
(rest_of_no_new_pseudos, pass_no_new_pseudos): Deleted.
* struct-equiv.c (rtx_equiv_p): Replaced no_new_pseudos with
reload_completed.
* cfgcleanup.c (try_crossjump_to_edge): Ditto.
* rtlhooks.c (gen_lowpart_general): Ditto.
* optabs.c (prepare_operand): Ditto.
* mode-switching.c (rest_of_handle_mode_switching): Deleted set of
no_new_pseudos.
* modulo-sched.c (rest_of_handle_sms): Ditto.
* see.c (rest_of_handle_see): Ditto.
* ifcvt.c (if_convert): Ditto.
(gate_handle_if_after_combine): Replaced no_new_pseudos with
reload_completed.
* init-regs.c (gate_initialize_regs): Deleted set of
no_new_pseudos.
* lower-subreg.c (decompose_multiword_subregs): Ditto.
* bb-reorder.c (rest_of_handle_partition_blocks): Ditto.
* doc/md.texi: Changed no_new_pseudos to can_create_pseudo_p.
2007-07-11 Uros Bizjak <ubizjak@gmail.com> 2007-07-11 Uros Bizjak <ubizjak@gmail.com>
PR target/32661 PR target/32661

View File

@ -2256,9 +2256,7 @@ gate_handle_partition_blocks (void)
static unsigned int static unsigned int
rest_of_handle_partition_blocks (void) rest_of_handle_partition_blocks (void)
{ {
no_new_pseudos = 0;
partition_hot_cold_basic_blocks (); partition_hot_cold_basic_blocks ();
no_new_pseudos = 1;
return 0; return 0;
} }

View File

@ -1587,7 +1587,7 @@ try_crossjump_to_edge (int mode, edge e1, edge e2)
partition boundaries). See the comments at the top of partition boundaries). See the comments at the top of
bb-reorder.c:partition_hot_cold_basic_blocks for complete details. */ bb-reorder.c:partition_hot_cold_basic_blocks for complete details. */
if (flag_reorder_blocks_and_partition && no_new_pseudos) if (flag_reorder_blocks_and_partition && reload_completed)
return false; return false;
/* Search backward through forwarder blocks. We don't need to worry /* Search backward through forwarder blocks. We don't need to worry

View File

@ -3435,8 +3435,8 @@ it can be allocated using @code{gen_reg_rtx} prior to life analysis.
If there are cases which need scratch registers during or after reload, If there are cases which need scratch registers during or after reload,
you must provide an appropriate secondary_reload target hook. you must provide an appropriate secondary_reload target hook.
@findex no_new_pseudos @findex can_create_pseudo_p
The global variable @code{no_new_pseudos} can be used to determine if it The macro @code{can_create_pseudo_p} can be used to determine if it
is unsafe to create new pseudo registers. If this variable is nonzero, then is unsafe to create new pseudo registers. If this variable is nonzero, then
it is unsafe to call @code{gen_reg_rtx} to allocate a new pseudo. it is unsafe to call @code{gen_reg_rtx} to allocate a new pseudo.

View File

@ -4091,7 +4091,6 @@ rest_of_clean_state (void)
reload_completed = 0; reload_completed = 0;
epilogue_completed = 0; epilogue_completed = 0;
no_new_pseudos = 0;
#ifdef STACK_REGS #ifdef STACK_REGS
regstack_completed = 0; regstack_completed = 0;
#endif #endif
@ -4147,27 +4146,3 @@ struct tree_opt_pass pass_clean_state =
0 /* letter */ 0 /* letter */
}; };
/* Set no_new_pseudos. */
static unsigned int
rest_of_no_new_pseudos (void)
{
no_new_pseudos = 1;
return 0;
}
struct tree_opt_pass pass_no_new_pseudos =
{
NULL, /* name */
NULL, /* gate */
rest_of_no_new_pseudos, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
0, /* todo_flags_finish */
'p' /* letter */
};

View File

@ -3968,10 +3968,6 @@ if_convert (bool recompute_dominance)
num_updated_if_blocks = 0; num_updated_if_blocks = 0;
num_true_changes = 0; num_true_changes = 0;
/* Some transformations in this pass can create new pseudos,
if the pass runs before reload. Make sure we can do so. */
gcc_assert (! no_new_pseudos || reload_completed);
loop_optimizer_init (AVOID_CFG_MODIFICATIONS); loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
mark_loop_exit_edges (); mark_loop_exit_edges ();
loop_optimizer_finalize (); loop_optimizer_finalize ();
@ -4105,9 +4101,7 @@ gate_handle_if_after_combine (void)
static unsigned int static unsigned int
rest_of_handle_if_after_combine (void) rest_of_handle_if_after_combine (void)
{ {
no_new_pseudos = 0;
if_convert (true); if_convert (true);
no_new_pseudos = 1;
return 0; return 0;
} }

View File

@ -132,9 +132,7 @@ gate_initialize_regs (void)
static unsigned int static unsigned int
rest_of_handle_initialize_regs (void) rest_of_handle_initialize_regs (void)
{ {
no_new_pseudos = 0;
initialize_uninitialized_regs (); initialize_uninitialized_regs ();
no_new_pseudos = 1;
return 0; return 0;
} }

View File

@ -1070,7 +1070,6 @@ decompose_multiword_subregs (void)
bitmap_and_compl_into (decomposable_context, non_decomposable_context); bitmap_and_compl_into (decomposable_context, non_decomposable_context);
if (!bitmap_empty_p (decomposable_context)) if (!bitmap_empty_p (decomposable_context))
{ {
int hold_no_new_pseudos = no_new_pseudos;
sbitmap sub_blocks; sbitmap sub_blocks;
unsigned int i; unsigned int i;
sbitmap_iterator sbi; sbitmap_iterator sbi;
@ -1079,7 +1078,6 @@ decompose_multiword_subregs (void)
propagate_pseudo_copies (); propagate_pseudo_copies ();
no_new_pseudos = 0;
sub_blocks = sbitmap_alloc (last_basic_block); sub_blocks = sbitmap_alloc (last_basic_block);
sbitmap_zero (sub_blocks); sbitmap_zero (sub_blocks);
@ -1185,8 +1183,6 @@ decompose_multiword_subregs (void)
} }
} }
no_new_pseudos = hold_no_new_pseudos;
/* If we had insns to split that caused control flow insns in the middle /* If we had insns to split that caused control flow insns in the middle
of a basic block, split those blocks now. Note that we only handle of a basic block, split those blocks now. Note that we only handle
the case where splitting a load has caused multiple possibly trapping the case where splitting a load has caused multiple possibly trapping

View File

@ -740,9 +740,7 @@ static unsigned int
rest_of_handle_mode_switching (void) rest_of_handle_mode_switching (void)
{ {
#ifdef OPTIMIZE_MODE_SWITCHING #ifdef OPTIMIZE_MODE_SWITCHING
no_new_pseudos = 0;
optimize_mode_switching (); optimize_mode_switching ();
no_new_pseudos = 1;
#endif /* OPTIMIZE_MODE_SWITCHING */ #endif /* OPTIMIZE_MODE_SWITCHING */
return 0; return 0;
} }

View File

@ -2472,15 +2472,12 @@ rest_of_handle_sms (void)
#ifdef INSN_SCHEDULING #ifdef INSN_SCHEDULING
basic_block bb; basic_block bb;
/* We want to be able to create new pseudos. */
no_new_pseudos = 0;
/* Collect loop information to be used in SMS. */ /* Collect loop information to be used in SMS. */
cfg_layout_initialize (0); cfg_layout_initialize (0);
sms_schedule (); sms_schedule ();
/* Update the life information, because we add pseudos. */ /* Update the life information, because we add pseudos. */
max_regno = max_reg_num (); max_regno = max_reg_num ();
no_new_pseudos = 1;
/* Finalize layout changes. */ /* Finalize layout changes. */
FOR_EACH_BB (bb) FOR_EACH_BB (bb)

View File

@ -3953,7 +3953,7 @@ prepare_operand (int icode, rtx x, int opnum, enum machine_mode mode,
if (!insn_data[icode].operand[opnum].predicate if (!insn_data[icode].operand[opnum].predicate
(x, insn_data[icode].operand[opnum].mode)) (x, insn_data[icode].operand[opnum].mode))
{ {
if (no_new_pseudos) if (reload_completed)
return NULL_RTX; return NULL_RTX;
x = copy_to_mode_reg (insn_data[icode].operand[opnum].mode, x); x = copy_to_mode_reg (insn_data[icode].operand[opnum].mode, x);
} }

View File

@ -727,7 +727,6 @@ init_optimization_passes (void)
NEXT_PASS (pass_regclass_init); NEXT_PASS (pass_regclass_init);
NEXT_PASS (pass_inc_dec); NEXT_PASS (pass_inc_dec);
NEXT_PASS (pass_initialize_regs); NEXT_PASS (pass_initialize_regs);
NEXT_PASS (pass_no_new_pseudos);
NEXT_PASS (pass_outof_cfg_layout_mode); NEXT_PASS (pass_outof_cfg_layout_mode);
NEXT_PASS (pass_ud_rtl_dce); NEXT_PASS (pass_ud_rtl_dce);
NEXT_PASS (pass_combine); NEXT_PASS (pass_combine);

View File

@ -1977,10 +1977,6 @@ extern int regstack_completed;
the same indirect address eventually. */ the same indirect address eventually. */
extern int cse_not_expected; extern int cse_not_expected;
/* Set to nonzero before life analysis to indicate that it is unsafe to
generate any new pseudo registers. */
extern int no_new_pseudos;
/* Translates rtx code to tree code, for those codes needed by /* Translates rtx code to tree code, for those codes needed by
REAL_ARITHMETIC. The function returns an int because the caller may not REAL_ARITHMETIC. The function returns an int because the caller may not
know what `enum tree_code' means. */ know what `enum tree_code' means. */

View File

@ -66,7 +66,7 @@ gen_lowpart_general (enum machine_mode mode, rtx x)
&& SCALAR_INT_MODE_P (GET_MODE (x)) && SCALAR_INT_MODE_P (GET_MODE (x))
&& TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode),
GET_MODE_BITSIZE (GET_MODE (x))) GET_MODE_BITSIZE (GET_MODE (x)))
&& ! no_new_pseudos) && !reload_completed)
return gen_lowpart_general (mode, force_reg (GET_MODE (x), x)); return gen_lowpart_general (mode, force_reg (GET_MODE (x), x));
if (WORDS_BIG_ENDIAN) if (WORDS_BIG_ENDIAN)

View File

@ -3814,12 +3814,7 @@ gate_handle_see (void)
static unsigned int static unsigned int
rest_of_handle_see (void) rest_of_handle_see (void)
{ {
int no_new_pseudos_bcp = no_new_pseudos;
no_new_pseudos = 0;
see_main (); see_main ();
no_new_pseudos = no_new_pseudos_bcp;
run_fast_dce (); run_fast_dce ();
return 0; return 0;
} }

View File

@ -431,7 +431,7 @@ rtx_equiv_p (rtx *xp, rtx y, int rvalue, struct equiv_info *info)
return false; return false;
else if (x_common_live) else if (x_common_live)
{ {
if (! rvalue || info->input_cost < 0 || no_new_pseudos) if (! rvalue || info->input_cost < 0 || reload_completed)
return false; return false;
/* If info->live_update is not set, we are processing notes. /* If info->live_update is not set, we are processing notes.
We then allow a match with x_input / y_input found in a We then allow a match with x_input / y_input found in a

View File

@ -149,9 +149,6 @@ location_t input_location;
struct line_maps line_table; struct line_maps line_table;
/* Nonzero if it is unsafe to create any new pseudo registers. */
int no_new_pseudos;
/* Stack of currently pending input files. */ /* Stack of currently pending input files. */
struct file_stack *input_file_stack; struct file_stack *input_file_stack;

View File

@ -384,7 +384,6 @@ extern struct tree_opt_pass pass_regclass_init;
extern struct tree_opt_pass pass_subregs_of_mode_init; extern struct tree_opt_pass pass_subregs_of_mode_init;
extern struct tree_opt_pass pass_subregs_of_mode_finish; extern struct tree_opt_pass pass_subregs_of_mode_finish;
extern struct tree_opt_pass pass_inc_dec; extern struct tree_opt_pass pass_inc_dec;
extern struct tree_opt_pass pass_no_new_pseudos;
extern struct tree_opt_pass pass_stack_ptr_mod; extern struct tree_opt_pass pass_stack_ptr_mod;
extern struct tree_opt_pass pass_initialize_regs; extern struct tree_opt_pass pass_initialize_regs;
extern struct tree_opt_pass pass_combine; extern struct tree_opt_pass pass_combine;