diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2011-05-09 14:11:25 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2011-05-09 14:11:25 +0200 |
commit | eb1485a68b1413b3db7c2cb67efb378658c4ff37 (patch) | |
tree | d5aea3efc3350bea77719c98422be119161392a7 /gcc | |
parent | c46d001a91568c9fd19ee74c73d34f87ebd4aef5 (diff) | |
download | gcc-eb1485a68b1413b3db7c2cb67efb378658c4ff37.tar.gz |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 30 | ||||
-rw-r--r-- | gcc/ira-conflicts.c | 13 | ||||
-rw-r--r-- | gcc/ira-lives.c | 26 |
3 files changed, 45 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de400532ab0..db6700416d9 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 6937114c8a7..be002839fa2 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 8eb9c03190e..d308bb39de2 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) { |