aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2011-05-09 14:11:25 +0200
committerUros Bizjak <uros@gcc.gnu.org>2011-05-09 14:11:25 +0200
commiteb1485a68b1413b3db7c2cb67efb378658c4ff37 (patch)
treed5aea3efc3350bea77719c98422be119161392a7
parentc46d001a91568c9fd19ee74c73d34f87ebd4aef5 (diff)
downloadgcc-eb1485a68b1413b3db7c2cb67efb378658c4ff37.zip
gcc-eb1485a68b1413b3db7c2cb67efb378658c4ff37.tar.gz
gcc-eb1485a68b1413b3db7c2cb67efb378658c4ff37.tar.bz2
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
-rw-r--r--gcc/ChangeLog30
-rw-r--r--gcc/ira-conflicts.c13
-rw-r--r--gcc/ira-lives.c26
3 files changed, 45 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index de40053..db67004 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
diff --git a/gcc/ira-conflicts.c b/gcc/ira-conflicts.c
index 6937114..be00283 100644
--- a/gcc/ira-conflicts.c
+++ b/gcc/ira-conflicts.c
@@ -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 == ',')
{
diff --git a/gcc/ira-lives.c b/gcc/ira-lives.c
index 8eb9c03..d308bb3 100644
--- a/gcc/ira-lives.c
+++ b/gcc/ira-lives.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)
{