re PR rtl-optimization/48927 (Issues with "enable" attribute and IRA register preferences)

PR rtl-optimization/48927
	* ira-conflicts.c (commutative_constraint_p): Use
	recog_data.alternative_enabled_p to disable alternatives where
	"enabled" attribute is false.
	(get_dup_num): Ditto.
	* ira-lives.c (single_reg_class): Ditto.
	(ira_implicitly_set_insn_hard_regs): Ditto.

From-SVN: r173568
This commit is contained in:
Uros Bizjak 2011-05-09 14:11:25 +02:00
parent c46d001a91
commit eb1485a68b
3 changed files with 45 additions and 24 deletions

View File

@ -1,3 +1,13 @@
2011-05-09 Uros Bizjak <ubizjak@gmail.com>
PR rtl-optimization/48927
* ira-conflicts.c (commutative_constraint_p): Use
recog_data.alternative_enabled_p to disable alternatives where
"enabled" attribute is false.
(get_dup_num): Ditto.
* ira-lives.c (single_reg_class): Ditto.
(ira_implicitly_set_insn_hard_regs): Ditto.
2011-05-09 Eric Botcazou <ebotcazou@adacore.com>
* var-tracking.c (find_mem_expr_in_1pdv): Fix thinko.
@ -12,8 +22,7 @@
* config/mips/genopt.sh, config/mips/mips-cpus.def: New files.
* config/mips/mips-tables.opt: New file (generated).
* config.gcc (mips*-*-*): Add mips/mips-tables.opt to
extra_options.
* config.gcc (mips*-*-*): Add mips/mips-tables.opt to extra_options.
* config/mips/mips-opts.h (MIPS_ARCH_OPTION_FROM_ABI,
MIPS_ARCH_OPTION_NATIVE): Define.
* config/mips/mips.c (mips_cpu_info_table): Move contents to
@ -24,8 +33,7 @@
(mips_handle_option): Don't assert that global structures are in
use. Don't handle OPT_march_, OPT_mtune_ and OPT_mips here.
(mips_option_override): Use new variables and functions to set
state of these options. Use strcmp to check for individual CPU
names.
state of these options. Use strcmp to check for individual CPU names.
* config/mips/mips.h (MIPS_CPU_STRING_DEFAULT): Remove default
definition.
* config/mips/mips.opt (march=): Use ToLower and Enum.
@ -59,9 +67,11 @@
2011-05-08 Jan Hubicka <jh@suse.cz>
* cgraph.c (cgraph_clone_node): Add call_duplication_hook parameter.
(cgraph_create_virtual_clone): Call hooks once virtual clone is finished.
(cgraph_create_virtual_clone): Call hooks once virtual clone
is finished.
* cgraph.h (cgraph_clone_node): Update prototype.
* ipa-cp.c (ipcp_estimate_growth): Use estimate_ipcp_clone_size_and_time.
* ipa-cp.c (ipcp_estimate_growth): Use
estimate_ipcp_clone_size_and_time.
* ipa-inline-transform.c (clone_inlined_nodes): Update.
* lto-cgraph.c (input_node): Update.
* ipa-inline.c (recursive_inlining): Update.
@ -127,7 +137,7 @@
* i386.h (ix86_tune_indices): Add
X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL.
(TARGET_SOFTWARE_PREFETCHING_BENEFICIAL): New macor.
(TARGET_SOFTWARE_PREFETCHING_BENEFICIAL): New macro.
* i386.c (initial_ix86_tune_features): Add
X86_SOFTARE_PREFETCHING_BENEFICIAL.
(software_prefetching_beneficial_p): Remove predicate.
@ -227,9 +237,9 @@
2011-05-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
PR target/47930
* config/arm/arm.opt (marm): Document it.
(mthumb): Reject negative variant.
PR target/47930
* config/arm/arm.opt (marm): Document it.
(mthumb): Reject negative variant.
2011-05-06 Uros Bizjak <ubizjak@gmail.com>

View File

@ -213,19 +213,22 @@ allocnos_conflict_for_copy_p (ira_allocno_t a1, ira_allocno_t a2)
static bool
commutative_constraint_p (const char *str)
{
int curr_alt, c;
bool ignore_p;
int c;
for (ignore_p = false;;)
for (ignore_p = false, curr_alt = 0;;)
{
c = *str;
if (c == '\0')
break;
str += CONSTRAINT_LEN (c, str);
if (c == '#')
if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
ignore_p = true;
else if (c == ',')
ignore_p = false;
{
curr_alt++;
ignore_p = false;
}
else if (! ignore_p)
{
/* Usually `%' is the first constraint character but the
@ -270,7 +273,7 @@ get_dup_num (int op_num, bool use_commut_op_p)
c = *str;
if (c == '\0')
break;
if (c == '#')
if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
ignore_p = true;
else if (c == ',')
{

View File

@ -726,18 +726,21 @@ mark_hard_reg_early_clobbers (rtx insn, bool live_p)
static enum reg_class
single_reg_class (const char *constraints, rtx op, rtx equiv_const)
{
int ignore_p;
int curr_alt, c;
bool ignore_p;
enum reg_class cl, next_cl;
int c;
cl = NO_REGS;
for (ignore_p = false;
for (ignore_p = false, curr_alt = 0;
(c = *constraints);
constraints += CONSTRAINT_LEN (c, constraints))
if (c == '#')
if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
ignore_p = true;
else if (c == ',')
ignore_p = false;
{
curr_alt++;
ignore_p = false;
}
else if (! ignore_p)
switch (c)
{
@ -873,7 +876,7 @@ single_reg_operand_class (int op_num)
void
ira_implicitly_set_insn_hard_regs (HARD_REG_SET *set)
{
int i, c, regno = 0;
int i, curr_alt, c, regno = 0;
bool ignore_p;
enum reg_class cl;
rtx op;
@ -895,11 +898,16 @@ ira_implicitly_set_insn_hard_regs (HARD_REG_SET *set)
mode = (GET_CODE (op) == SCRATCH
? GET_MODE (op) : PSEUDO_REGNO_MODE (regno));
cl = NO_REGS;
for (ignore_p = false; (c = *p); p += CONSTRAINT_LEN (c, p))
if (c == '#')
for (ignore_p = false, curr_alt = 0;
(c = *p);
p += CONSTRAINT_LEN (c, p))
if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
ignore_p = true;
else if (c == ',')
ignore_p = false;
{
curr_alt++;
ignore_p = false;
}
else if (! ignore_p)
switch (c)
{