re PR rtl-optimization/48927 (Issues with "enable" attribute and IRA register prefere...
authorUros Bizjak <uros@gcc.gnu.org>
Mon, 9 May 2011 12:11:25 +0000 (14:11 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 9 May 2011 12:11:25 +0000 (14:11 +0200)
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

gcc/ChangeLog
gcc/ira-conflicts.c
gcc/ira-lives.c

index de400532ab0efeb9b78190a3f9248a1c564d03ae..db6700416d946175109ccdb071c9b0cc43eb6b54 100644 (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.
 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.
 
        * 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.
 
 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>
 
index 6937114c8a7a571a09bff71db4558485ccefdc70..be002839fa267074e44441baf0e0611922fc4e0d 100644 (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 == ',')
        {
index 8eb9c03190e4e533604e444c883a23c33033d4d0..d308bb39de2a255f9c31b639bef8b72ba973e879 100644 (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)
                {