arm.h (arm_class_likely_spilled_p): Check against LO_REGS only for Thumb-1.
authorAndrew Stubbs <ams@codesourcery.com>
Wed, 6 Apr 2011 09:52:52 +0000 (09:52 +0000)
committerAndrew Stubbs <ams@gcc.gnu.org>
Wed, 6 Apr 2011 09:52:52 +0000 (09:52 +0000)
2011-03-06  Andrew Stubbs  <ams@codesourcery.com>
    Julian Brown  <julian@codesourcery.com>
    Mark Shinwell  <shinwell@codesourcery.com>

gcc/
* config/arm/arm.h (arm_class_likely_spilled_p): Check against
LO_REGS only for Thumb-1.
(MODE_BASE_REG_CLASS): Restrict base registers to those which can
be used in short instructions when optimising for size on Thumb-2.

Co-Authored-By: Julian Brown <julian@codesourcery.com>
Co-Authored-By: Mark Shinwell <shinwell@codesourcery.com>
From-SVN: r172032

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/arm.h

index a8f86616a65a7650804dfa609aa0f501a1074102..a747d602a5069519c4866bd1164148d4ac1562b0 100644 (file)
@@ -1,3 +1,12 @@
+2011-03-06  Andrew Stubbs  <ams@codesourcery.com>
+           Julian Brown  <julian@codesourcery.com>
+           Mark Shinwell  <shinwell@codesourcery.com>
+
+       * config/arm/arm.h (arm_class_likely_spilled_p): Check against
+       LO_REGS only for Thumb-1.
+       (MODE_BASE_REG_CLASS): Restrict base registers to those which can
+       be used in short instructions when optimising for size on Thumb-2.
+
 2011-04-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gimple-low.c (lower_gimple_return): When not optimizing, force labels
index 4fee4dafa0274a6ab170005a2d3d4fcec31b52d0..533ad910c8f29b7b336db6b6d86aec4e16892c78 100644 (file)
@@ -22333,14 +22333,16 @@ arm_preferred_simd_mode (enum machine_mode mode)
 
 /* Implement TARGET_CLASS_LIKELY_SPILLED_P.
  
-   We need to define this for LO_REGS on thumb.  Otherwise we can end up
-   using r0-r4 for function arguments, r7 for the stack frame and don't
-   have enough left over to do doubleword arithmetic.  */
-
+   We need to define this for LO_REGS on Thumb-1.  Otherwise we can end up
+   using r0-r4 for function arguments, r7 for the stack frame and don't have
+   enough left over to do doubleword arithmetic.  For Thumb-2 all the
+   potentially problematic instructions accept high registers so this is not
+   necessary.  Care needs to be taken to avoid adding new Thumb-2 patterns
+   that require many low registers.  */
 static bool
 arm_class_likely_spilled_p (reg_class_t rclass)
 {
-  if ((TARGET_THUMB && rclass == LO_REGS)
+  if ((TARGET_THUMB1 && rclass == LO_REGS)
       || rclass  == CC_REG)
     return true;
 
index f302de2158f68bd3b9857be2688ea5e4d606c3c4..580f2ded1fb675f195f5e47cf9e8c44af45e8ac8 100644 (file)
@@ -1165,7 +1165,7 @@ enum reg_class
    when addressing quantities in QI or HI mode; if we don't know the
    mode, then we must be conservative.  */
 #define MODE_BASE_REG_CLASS(MODE)                                      \
-    (TARGET_32BIT ? CORE_REGS :                                        \
+    (TARGET_ARM || (TARGET_THUMB2 && !optimize_size) ? CORE_REGS :      \
      (((MODE) == SImode) ? BASE_REGS : LO_REGS))
 
 /* For Thumb we can not support SP+reg addressing, so we return LO_REGS