Commit eb1485a6 by Uros Bizjak

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
parent c46d001a
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>
......
......@@ -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 == ',')
{
......
......@@ -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)
{
......
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