diff mbox

[lra] add most common case to choose reg class for split pseudo

Message ID 4F3D65A1.6000203@redhat.com
State New
Headers show

Commit Message

Vladimir Makarov Feb. 16, 2012, 8:22 p.m. UTC
I found there are too many rejecting pseudo splits because I excluded 
most common case of choosing register class for split pseudo.

The following patch fixes this.

Committed as rev. 184315.

2012-02-16  Vladimir Makarov <vmakarov@redhat.com>

     * lra-constraints.c (choose_split_class): Check allocno_class too.
     (split_pseudo): Print more debug info about split rejecting
     because of reg class.
diff mbox

Patch

Index: lra-constraints.c
===================================================================
--- lra-constraints.c	(revision 184215)
+++ lra-constraints.c	(working copy)
@@ -3810,6 +3810,9 @@  choose_split_class (enum reg_class alloc
   enum reg_class cl, best_cl = NO_REGS;
   enum reg_class hard_reg_class = REGNO_REG_CLASS (hard_regno);
   
+  if (! SECONDARY_MEMORY_NEEDED (allocno_class, allocno_class, mode)
+      && TEST_HARD_REG_BIT (reg_class_contents[allocno_class], hard_regno))
+    return allocno_class;
   for (i = 0;
        (cl = reg_class_subclasses[allocno_class][i]) != LIM_REG_CLASSES;
        i++)
@@ -3881,8 +3884,13 @@  split_pseudo (bool before_p, int origina
 	  if (lra_dump_file != NULL)
 	    {
 	      fprintf (lra_dump_file,
-		       "    Rejecting split of %d: no good reg class\n",
-		       original_regno);
+		       "    Rejecting split of %d(%s): "
+		       "no good reg class for %d(%s)\n",
+		       original_regno,
+		       reg_class_names[lra_get_allocno_class (original_regno)],
+		       reg_renumber[original_regno],
+		       reg_class_names[REGNO_REG_CLASS
+				       (reg_renumber[original_regno])]);
 	      fprintf (lra_dump_file,
 		       "    ))))))))))))))))))))))))))))))))))))))))))))))))\n");
 	    }