[ARC] Allow r30 to be used by the reg-alloc.
authorClaudiu Zissulescu <claziss@synopsys.com>
Thu, 1 Jun 2017 09:42:06 +0000 (11:42 +0200)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Thu, 1 Jun 2017 09:42:06 +0000 (11:42 +0200)
gcc/
2018-06-01  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_conditional_register_usage): Allow r30 to
be used by the reg-alloc.

From-SVN: r248778

gcc/ChangeLog
gcc/config/arc/arc.c
gcc/config/arc/arc.h

index 909c1dd8e93967e3f42c6e5046e15e2ba649c692..743f4689d79bd5dfda4f84e644a54a3c7b09fdf8 100644 (file)
@@ -1,3 +1,8 @@
+2017-06-01  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       * config/arc/arc.c (arc_conditional_register_usage): Allow r30 to
+       be used by the reg-alloc.
+
 2017-06-01  Claudiu Zissulescu  <claziss@synopsys.com>
 
        * config/arc/arc.md (mulsi3): Avoid use of hard registers before
index 42730d55d8049584473cd6fb690e1fe6be757f1a..a45e12bc7d3921101105a188172760a39d4e4083 100644 (file)
@@ -1548,7 +1548,14 @@ arc_conditional_register_usage (void)
       /* For ARCv2 the core register set is changed.  */
       strcpy (rname29, "ilink");
       strcpy (rname30, "r30");
-      fixed_regs[30] = call_used_regs[30] = 1;
+      call_used_regs[30] = 1;
+      fixed_regs[30] = 0;
+
+      arc_regno_reg_class[30] = WRITABLE_CORE_REGS;
+      SET_HARD_REG_BIT (reg_class_contents[WRITABLE_CORE_REGS], 30);
+      SET_HARD_REG_BIT (reg_class_contents[CHEAP_CORE_REGS], 30);
+      SET_HARD_REG_BIT (reg_class_contents[GENERAL_REGS], 30);
+      SET_HARD_REG_BIT (reg_class_contents[MPY_WRITABLE_CORE_REGS], 30);
    }
 
   if (TARGET_MUL64_SET)
index 52f121f71d83f5f8ee4490346a2d8d86c14e6a55..5627eb488cff96ff0bce1fd72d0b9a79b26a7aa3 100644 (file)
@@ -641,7 +641,8 @@ extern enum reg_class arc_regno_reg_class[];
   ((REGNO) < 29 || ((REGNO) == ARG_POINTER_REGNUM) || ((REGNO) == 63)  \
    || ((unsigned) reg_renumber[REGNO] < 29)                            \
    || ((unsigned) (REGNO) == (unsigned) arc_tp_regno)                  \
-   || (fixed_regs[REGNO] == 0 && IN_RANGE (REGNO, 32, 59)))
+   || (fixed_regs[REGNO] == 0 && IN_RANGE (REGNO, 32, 59))             \
+   || ((REGNO) == 30 && fixed_regs[REGNO] == 0))
 
 #define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO)