sh.c (calc_live_regs): Don't use initial_value optimization for PR_MEDIA_REG.
authorJ"orn Rennecke <joern.rennecke@superh.com>
Thu, 13 Jun 2002 21:31:58 +0000 (21:31 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 13 Jun 2002 21:31:58 +0000 (22:31 +0100)
* config/sh/sh.c (calc_live_regs): Don't use initial_value
optimization for PR_MEDIA_REG.

From-SVN: r54600

gcc/ChangeLog
gcc/config/sh/sh.c

index d5270c8fbf7668186068e3dc18ccae0894066dec..05b3a051ed3cb93f2ed8232f88b5522e3c582c2c 100644 (file)
@@ -1,3 +1,8 @@
+Thu Jun 13 22:29:40 2002  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * config/sh/sh.c (calc_live_regs): Don't use initial_value
+       optimization for PR_MEDIA_REG.
+
 2002-06-13  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * cpphash.h (_cpp_lex_identifier_trad): Remove.
index edd4c4998cb0ded3c1b5dec5c0a3f52ea10097c6..a9c2e8250a4c81211746a71499eaf0756052683c 100644 (file)
@@ -4362,7 +4362,6 @@ calc_live_regs (count_ptr, live_regs_mask)
   int reg;
   int count;
   int interrupt_handler;
-  rtx pr_initial;
   int pr_live;
 
   if ((lookup_attribute
@@ -4385,12 +4384,18 @@ calc_live_regs (count_ptr, live_regs_mask)
          target_flags &= ~FPU_SINGLE_BIT;
          break;
        }
-  pr_initial = has_hard_reg_initial_val (Pmode,
-                                        TARGET_SHMEDIA
-                                        ? PR_MEDIA_REG : PR_REG);
-  pr_live = (pr_initial
-            ? REGNO (pr_initial) != (TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG)
-            : regs_ever_live[TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG]);
+  /* PR_MEDIA_REG is a general purpose register, thus global_alloc already
+     knows how to use it.  That means the pseudo originally allocated for
+     the initial value can become the PR_MEDIA_REG hard register, as seen for
+     execute/20010122-1.c:test9.  */
+  if (TARGET_SHMEDIA)
+    pr_live = regs_ever_live[PR_MEDIA_REG];
+  else
+    {
+      rtx pr_initial = has_hard_reg_initial_val (Pmode, PR_REG);
+      pr_live = (pr_initial
+                ? REGNO (pr_initial) != (PR_REG) : regs_ever_live[PR_REG]);
+    }
   /* Force PR to be live if the prologue has to call the SHmedia
      argument decoder or register saver.  */
   if (TARGET_SHCOMPACT