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:
parent
d90dc4fc7f
commit
ef4375b218
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
25
gcc/final.c
25
gcc/final.c
@ -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 */
|
|
||||||
};
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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. */
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user