]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.c (rs6000_preferred_reload_class): Disallow reload of PLUS rtx's outside of...
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Mon, 3 Mar 2014 20:16:52 +0000 (20:16 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Mon, 3 Mar 2014 20:16:52 +0000 (20:16 +0000)
2014-03-03  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* config/rs6000/rs6000.c (rs6000_preferred_reload_class): Disallow
reload of PLUS rtx's outside of GENERAL_REGS or BASE_REGS; relax
constraint on constants to permit them being loaded into
GENERAL_REGS or BASE_REGS.

From-SVN: r208287

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index c40503c47cead3530afbe26815e2b3ebd692d4b5..db741fd4dd2c1629b84add55485c331bc595b0af 100644 (file)
@@ -1,3 +1,10 @@
+2014-03-03  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000.c (rs6000_preferred_reload_class): Disallow
+       reload of PLUS rtx's outside of GENERAL_REGS or BASE_REGS; relax
+       constraint on constants to permit them being loaded into
+       GENERAL_REGS or BASE_REGS.
+
 2014-03-03  Nick Clifton  <nickc@redhat.com>
 
        * config/rl78/rl78-real.md (cbranchsi4_real_signed): Add
index 55e209a3bc5910144a7e0430a0becc5f18b93b13..d9e4fc54860e25e602640db875f31cf26c98a011 100644 (file)
@@ -16751,8 +16751,14 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
       && easy_vector_constant (x, mode))
     return ALTIVEC_REGS;
 
-  if (CONSTANT_P (x) && reg_classes_intersect_p (rclass, FLOAT_REGS))
-    return NO_REGS;
+  if ((CONSTANT_P (x) || GET_CODE (x) == PLUS))
+    {
+      if (reg_class_subset_p (GENERAL_REGS, rclass))
+       return GENERAL_REGS;
+      if (reg_class_subset_p (BASE_REGS, rclass))
+       return BASE_REGS;
+      return NO_REGS;
+    }
 
   if (GET_MODE_CLASS (mode) == MODE_INT && rclass == NON_SPECIAL_REGS)
     return GENERAL_REGS;